upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2024-08-28 14:20:34 +0100
committerDanConwayDev <DanConwayDev@protonmail.com>2024-08-28 16:42:53 +0100
commita5216602749bff55c2773acce098c91942cd3920 (patch)
treef1961c73d0586cab4de8fd54aafd9ba8171f3adb
parent2045aa5d928306f2a03cc924eac9c453c399b9b8 (diff)
chore: bump rust-nostr to v0.34.0
bump all rust-nostr packages I'm not sure I'm completely happy with allowing mutable_key_type but it is just run inside tests it appears that Event didn't have the Copy trait in v0.33.0 so I'm not sure why this warning suddenly appeared the timeout of client.get_events_of needed to be doubled which could indicate that an ineffiency has been introduced in v0.34.0 the primary motivation for upgrading now was to get this fix: nostr:nevent1qqsffl2ld678pjj77rh9k2g4edljmxdu6ew4lvgnglxv7jhu3ru8vvcpp4mhxue69uhkummn9ekx7mqzyzsq3hh327t0h2dq6matqn5064cgj2zanl2stkj6s0lg4t2h5dty6rm2ucm as I suspect it is also effecting other repositories eg nostr-profile-manager
-rw-r--r--Cargo.lock98
-rw-r--r--Cargo.toml10
-rw-r--r--src/client.rs4
-rw-r--r--src/git_remote_helper.rs3
-rw-r--r--src/sub_commands/list.rs7
-rw-r--r--src/sub_commands/send.rs18
-rw-r--r--test_utils/Cargo.toml8
-rw-r--r--test_utils/src/lib.rs6
-rw-r--r--tests/git_remote_helper.rs26
-rw-r--r--tests/send.rs106
10 files changed, 156 insertions, 130 deletions
diff --git a/Cargo.lock b/Cargo.lock
index ad6fbdd..971cf6f 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -330,31 +330,22 @@ dependencies = [
330 330
331[[package]] 331[[package]]
332name = "async-wsocket" 332name = "async-wsocket"
333version = "0.5.1" 333version = "0.7.1"
334source = "registry+https://github.com/rust-lang/crates.io-index" 334source = "registry+https://github.com/rust-lang/crates.io-index"
335checksum = "79c6465dab65a363da7353383af13a22fb05ce173d9b460c38322590e9245400" 335checksum = "1eee6fcc818b89848df37050215603de0e2e072734e4730c03060feb2d0abebb"
336dependencies = [ 336dependencies = [
337 "async-utility", 337 "async-utility",
338 "futures",
338 "futures-util", 339 "futures-util",
340 "js-sys",
339 "thiserror", 341 "thiserror",
340 "tokio", 342 "tokio",
341 "tokio-rustls 0.26.0", 343 "tokio-rustls 0.26.0",
342 "tokio-socks", 344 "tokio-socks",
343 "tokio-tungstenite 0.23.0", 345 "tokio-tungstenite 0.23.0",
344 "url", 346 "url",
345 "wasm-ws", 347 "wasm-bindgen",
346 "webpki-roots", 348 "web-sys",
347]
348
349[[package]]
350name = "async_io_stream"
351version = "0.3.3"
352source = "registry+https://github.com/rust-lang/crates.io-index"
353checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c"
354dependencies = [
355 "futures",
356 "pharos",
357 "rustc_version",
358] 349]
359 350
360[[package]] 351[[package]]
@@ -1843,9 +1834,9 @@ checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
1843 1834
1844[[package]] 1835[[package]]
1845name = "nostr" 1836name = "nostr"
1846version = "0.33.0" 1837version = "0.34.0"
1847source = "registry+https://github.com/rust-lang/crates.io-index" 1838source = "registry+https://github.com/rust-lang/crates.io-index"
1848checksum = "f08db214560a34bf7c4c1fea09a8461b9412bae58ba06e99ce3177d89fa1e0a6" 1839checksum = "5897e4142fcc33c4f1d58ad17f665e87dcba70de7e370c0bda1aa0fb73212c2a"
1849dependencies = [ 1840dependencies = [
1850 "aes 0.8.4", 1841 "aes 0.8.4",
1851 "base64 0.21.7", 1842 "base64 0.21.7",
@@ -1873,9 +1864,9 @@ dependencies = [
1873 1864
1874[[package]] 1865[[package]]
1875name = "nostr-database" 1866name = "nostr-database"
1876version = "0.33.1" 1867version = "0.34.0"
1877source = "registry+https://github.com/rust-lang/crates.io-index" 1868source = "registry+https://github.com/rust-lang/crates.io-index"
1878checksum = "50eebf5020d70891e3c229128de5fc73af632b651d02742383b314d3d0c7e953" 1869checksum = "1926ef55392f3eea1bbe4a1358b64bbf12dd6eb554f40f483941a102c6263fc6"
1879dependencies = [ 1870dependencies = [
1880 "async-trait", 1871 "async-trait",
1881 "flatbuffers", 1872 "flatbuffers",
@@ -1888,9 +1879,9 @@ dependencies = [
1888 1879
1889[[package]] 1880[[package]]
1890name = "nostr-relay-pool" 1881name = "nostr-relay-pool"
1891version = "0.33.0" 1882version = "0.34.0"
1892source = "registry+https://github.com/rust-lang/crates.io-index" 1883source = "registry+https://github.com/rust-lang/crates.io-index"
1893checksum = "afa5502a3df456790ca16d90cc688a677117d57ab56b079dcfa091390ac9f202" 1884checksum = "c6480cf60564957a2a64bd050d047ee0717e08dced7a389e22ef4e9fc104edd2"
1894dependencies = [ 1885dependencies = [
1895 "async-utility", 1886 "async-utility",
1896 "async-wsocket", 1887 "async-wsocket",
@@ -1899,14 +1890,15 @@ dependencies = [
1899 "nostr-database", 1890 "nostr-database",
1900 "thiserror", 1891 "thiserror",
1901 "tokio", 1892 "tokio",
1893 "tokio-stream",
1902 "tracing", 1894 "tracing",
1903] 1895]
1904 1896
1905[[package]] 1897[[package]]
1906name = "nostr-sdk" 1898name = "nostr-sdk"
1907version = "0.33.0" 1899version = "0.34.0"
1908source = "registry+https://github.com/rust-lang/crates.io-index" 1900source = "registry+https://github.com/rust-lang/crates.io-index"
1909checksum = "b427dceefbbb49a9dd98abb8c4e40d25fdd467e99821aaad88615252bdb915bd" 1901checksum = "ca0c0c5f8ddbdfc064ea71883191ec53de6ed52b5dca10ab07f0810b99e91acc"
1910dependencies = [ 1902dependencies = [
1911 "async-utility", 1903 "async-utility",
1912 "atomic-destructor", 1904 "atomic-destructor",
@@ -1924,9 +1916,9 @@ dependencies = [
1924 1916
1925[[package]] 1917[[package]]
1926name = "nostr-signer" 1918name = "nostr-signer"
1927version = "0.33.0" 1919version = "0.34.0"
1928source = "registry+https://github.com/rust-lang/crates.io-index" 1920source = "registry+https://github.com/rust-lang/crates.io-index"
1929checksum = "665268b316f41cd8fa791be54b6c7935c5a239461708c380a699d6677be9af38" 1921checksum = "5c30294a7be7d9d5ac777954812f5c7b4ae2a1e583a62e33537f87d98ab23729"
1930dependencies = [ 1922dependencies = [
1931 "async-utility", 1923 "async-utility",
1932 "nostr", 1924 "nostr",
@@ -1938,9 +1930,9 @@ dependencies = [
1938 1930
1939[[package]] 1931[[package]]
1940name = "nostr-sqlite" 1932name = "nostr-sqlite"
1941version = "0.33.0" 1933version = "0.34.0"
1942source = "registry+https://github.com/rust-lang/crates.io-index" 1934source = "registry+https://github.com/rust-lang/crates.io-index"
1943checksum = "31f643ba919864f3a9bb004244c0d5c958646b07fe760823fdc33aae1c8fc0fc" 1935checksum = "0b634d2a908feccd7b6b2e8d2cea47bc4061b350b7a120cd6c6f2520e4e1fc1a"
1944dependencies = [ 1936dependencies = [
1945 "async-trait", 1937 "async-trait",
1946 "nostr", 1938 "nostr",
@@ -1953,9 +1945,9 @@ dependencies = [
1953 1945
1954[[package]] 1946[[package]]
1955name = "nostr-zapper" 1947name = "nostr-zapper"
1956version = "0.33.0" 1948version = "0.34.0"
1957source = "registry+https://github.com/rust-lang/crates.io-index" 1949source = "registry+https://github.com/rust-lang/crates.io-index"
1958checksum = "69922e74f8eab1f9d287008c0c06acdec87277a2d8f44bd9d38e003422aea0ab" 1950checksum = "dcf3ba30e807145e9cb924faf8fb0719e460f613088e99c753b67c2a9929c5b7"
1959dependencies = [ 1951dependencies = [
1960 "async-trait", 1952 "async-trait",
1961 "nostr", 1953 "nostr",
@@ -2055,9 +2047,9 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
2055 2047
2056[[package]] 2048[[package]]
2057name = "nwc" 2049name = "nwc"
2058version = "0.33.0" 2050version = "0.34.1"
2059source = "registry+https://github.com/rust-lang/crates.io-index" 2051source = "registry+https://github.com/rust-lang/crates.io-index"
2060checksum = "bb2e04b3edb5e9572e95b62842430625f1718e8a4a3596a30aeb04e6734764ea" 2052checksum = "9a16ac06bc273fcd4ead47c0c5a58b6cc7db2247fc7a64dd9bc11cf18e3efeb4"
2061dependencies = [ 2053dependencies = [
2062 "async-utility", 2054 "async-utility",
2063 "nostr", 2055 "nostr",
@@ -2188,16 +2180,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
2188checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 2180checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
2189 2181
2190[[package]] 2182[[package]]
2191name = "pharos"
2192version = "0.5.3"
2193source = "registry+https://github.com/rust-lang/crates.io-index"
2194checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414"
2195dependencies = [
2196 "futures",
2197 "rustc_version",
2198]
2199
2200[[package]]
2201name = "pin-project" 2183name = "pin-project"
2202version = "1.1.5" 2184version = "1.1.5"
2203source = "registry+https://github.com/rust-lang/crates.io-index" 2185source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2805,12 +2787,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
2805checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" 2787checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca"
2806 2788
2807[[package]] 2789[[package]]
2808name = "send_wrapper"
2809version = "0.6.0"
2810source = "registry+https://github.com/rust-lang/crates.io-index"
2811checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73"
2812
2813[[package]]
2814name = "serde" 2790name = "serde"
2815version = "1.0.197" 2791version = "1.0.197"
2816source = "registry+https://github.com/rust-lang/crates.io-index" 2792source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3201,6 +3177,17 @@ dependencies = [
3201] 3177]
3202 3178
3203[[package]] 3179[[package]]
3180name = "tokio-stream"
3181version = "0.1.15"
3182source = "registry+https://github.com/rust-lang/crates.io-index"
3183checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af"
3184dependencies = [
3185 "futures-core",
3186 "pin-project-lite",
3187 "tokio",
3188]
3189
3190[[package]]
3204name = "tokio-tungstenite" 3191name = "tokio-tungstenite"
3205version = "0.20.1" 3192version = "0.20.1"
3206source = "registry+https://github.com/rust-lang/crates.io-index" 3193source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3575,23 +3562,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
3575checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" 3562checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
3576 3563
3577[[package]] 3564[[package]]
3578name = "wasm-ws"
3579version = "0.2.1"
3580source = "registry+https://github.com/rust-lang/crates.io-index"
3581checksum = "688c5806d1b06b4f3d90d015e23364dc5d3af412ee64abba6dde8fdc01637e33"
3582dependencies = [
3583 "async_io_stream",
3584 "futures",
3585 "js-sys",
3586 "pharos",
3587 "send_wrapper",
3588 "thiserror",
3589 "wasm-bindgen",
3590 "wasm-bindgen-futures",
3591 "web-sys",
3592]
3593
3594[[package]]
3595name = "web-sys" 3565name = "web-sys"
3596version = "0.3.69" 3566version = "0.3.69"
3597source = "registry+https://github.com/rust-lang/crates.io-index" 3567source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index 55494b0..15b7cec 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -24,11 +24,11 @@ futures = "0.3.28"
24git2 = "0.18.1" 24git2 = "0.18.1"
25indicatif = "0.17.7" 25indicatif = "0.17.7"
26keyring = "2.0.5" 26keyring = "2.0.5"
27nostr = "0.33.0" 27nostr = "0.34.0"
28nostr-database = "0.33.1" 28nostr-database = "0.34.0"
29nostr-sdk = "0.33.0" 29nostr-sdk = "0.34.0"
30nostr-signer = "0.33.0" 30nostr-signer = "0.34.0"
31nostr-sqlite = "0.33.0" 31nostr-sqlite = "0.34.0"
32passwords = "3.1.13" 32passwords = "3.1.13"
33scrypt = "0.11.0" 33scrypt = "0.11.0"
34serde = { version = "1.0.181", features = ["derive"] } 34serde = { version = "1.0.181", features = ["derive"] }
diff --git a/src/client.rs b/src/client.rs
index db41f99..abde217 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -1182,12 +1182,12 @@ async fn process_fetched_events(
1182 } else if [Kind::RelayList, Kind::Metadata].contains(&event.kind()) { 1182 } else if [Kind::RelayList, Kind::Metadata].contains(&event.kind()) {
1183 if request 1183 if request
1184 .missing_contributor_profiles 1184 .missing_contributor_profiles
1185 .contains(event.author_ref()) 1185 .contains(&event.author())
1186 { 1186 {
1187 report.contributor_profiles.insert(event.author()); 1187 report.contributor_profiles.insert(event.author());
1188 } else if let Some((_, (metadata_timestamp, relay_list_timestamp))) = request 1188 } else if let Some((_, (metadata_timestamp, relay_list_timestamp))) = request
1189 .profiles_to_fetch_from_user_relays 1189 .profiles_to_fetch_from_user_relays
1190 .get_key_value(event.author_ref()) 1190 .get_key_value(&event.author())
1191 { 1191 {
1192 if (Kind::Metadata.eq(&event.kind()) 1192 if (Kind::Metadata.eq(&event.kind())
1193 && event.created_at().gt(metadata_timestamp)) 1193 && event.created_at().gt(metadata_timestamp))
diff --git a/src/git_remote_helper.rs b/src/git_remote_helper.rs
index 2244383..4d34850 100644
--- a/src/git_remote_helper.rs
+++ b/src/git_remote_helper.rs
@@ -366,7 +366,8 @@ async fn get_open_proposals(
366 .iter() 366 .iter()
367 .filter(|e| { 367 .filter(|e| {
368 status_kinds().contains(&e.kind()) 368 status_kinds().contains(&e.kind())
369 && e.iter_tags() 369 && e.tags()
370 .iter()
370 .any(|t| t.as_vec()[1].eq(&proposal.id.to_string())) 371 .any(|t| t.as_vec()[1].eq(&proposal.id.to_string()))
371 }) 372 })
372 .collect::<Vec<&nostr::Event>>() 373 .collect::<Vec<&nostr::Event>>()
diff --git a/src/sub_commands/list.rs b/src/sub_commands/list.rs
index 73ef107..ac1f4ab 100644
--- a/src/sub_commands/list.rs
+++ b/src/sub_commands/list.rs
@@ -78,7 +78,8 @@ pub async fn launch() -> Result<()> {
78 .iter() 78 .iter()
79 .filter(|e| { 79 .filter(|e| {
80 status_kinds().contains(&e.kind()) 80 status_kinds().contains(&e.kind())
81 && e.iter_tags() 81 && e.tags()
82 .iter()
82 .any(|t| t.as_vec()[1].eq(&proposal.id.to_string())) 83 .any(|t| t.as_vec()[1].eq(&proposal.id.to_string()))
83 }) 84 })
84 .collect::<Vec<&nostr::Event>>() 85 .collect::<Vec<&nostr::Event>>()
@@ -873,7 +874,7 @@ pub async fn get_all_proposal_patch_events_from_cache(
873 .iter() 874 .iter()
874 .copied() 875 .copied()
875 .collect(); 876 .collect();
876 commit_events.retain(|e| permissioned_users.contains(e.author_ref())); 877 commit_events.retain(|e| permissioned_users.contains(&e.author()));
877 878
878 let revision_roots: HashSet<nostr::EventId> = commit_events 879 let revision_roots: HashSet<nostr::EventId> = commit_events
879 .iter() 880 .iter()
@@ -899,7 +900,7 @@ pub async fn get_all_proposal_patch_events_from_cache(
899 900
900 Ok(commit_events 901 Ok(commit_events
901 .iter() 902 .iter()
902 .filter(|e| !event_is_cover_letter(e) && permissioned_users.contains(e.author_ref())) 903 .filter(|e| !event_is_cover_letter(e) && permissioned_users.contains(&e.author()))
903 .cloned() 904 .cloned()
904 .collect()) 905 .collect())
905} 906}
diff --git a/src/sub_commands/send.rs b/src/sub_commands/send.rs
index 8369b10..3c4df9d 100644
--- a/src/sub_commands/send.rs
+++ b/src/sub_commands/send.rs
@@ -806,8 +806,11 @@ pub fn event_is_cover_letter(event: &nostr::Event) -> bool {
806 // [PATCH v1 0/n ] or 806 // [PATCH v1 0/n ] or
807 // [PATCH subsystem v2 0/n ] 807 // [PATCH subsystem v2 0/n ]
808 event.kind.eq(&Kind::GitPatch) 808 event.kind.eq(&Kind::GitPatch)
809 && event.iter_tags().any(|t| t.as_vec()[1].eq("root")) 809 && event.tags().iter().any(|t| t.as_vec()[1].eq("root"))
810 && event.iter_tags().any(|t| t.as_vec()[1].eq("cover-letter")) 810 && event
811 .tags()
812 .iter()
813 .any(|t| t.as_vec()[1].eq("cover-letter"))
811} 814}
812 815
813pub fn commit_msg_from_patch(patch: &nostr::Event) -> Result<String> { 816pub fn commit_msg_from_patch(patch: &nostr::Event) -> Result<String> {
@@ -876,17 +879,22 @@ pub fn event_to_cover_letter(event: &nostr::Event) -> Result<CoverLetter> {
876} 879}
877 880
878pub fn event_is_patch_set_root(event: &nostr::Event) -> bool { 881pub fn event_is_patch_set_root(event: &nostr::Event) -> bool {
879 event.kind.eq(&Kind::GitPatch) && event.iter_tags().any(|t| t.as_vec()[1].eq("root")) 882 event.kind.eq(&Kind::GitPatch) && event.tags().iter().any(|t| t.as_vec()[1].eq("root"))
880} 883}
881 884
882pub fn event_is_revision_root(event: &nostr::Event) -> bool { 885pub fn event_is_revision_root(event: &nostr::Event) -> bool {
883 event.kind.eq(&Kind::GitPatch) && event.iter_tags().any(|t| t.as_vec()[1].eq("revision-root")) 886 event.kind.eq(&Kind::GitPatch)
887 && event
888 .tags()
889 .iter()
890 .any(|t| t.as_vec()[1].eq("revision-root"))
884} 891}
885 892
886pub fn patch_supports_commit_ids(event: &nostr::Event) -> bool { 893pub fn patch_supports_commit_ids(event: &nostr::Event) -> bool {
887 event.kind.eq(&Kind::GitPatch) 894 event.kind.eq(&Kind::GitPatch)
888 && event 895 && event
889 .iter_tags() 896 .tags()
897 .iter()
890 .any(|t| t.as_vec()[0].eq("commit-pgp-sig")) 898 .any(|t| t.as_vec()[0].eq("commit-pgp-sig"))
891} 899}
892 900
diff --git a/test_utils/Cargo.toml b/test_utils/Cargo.toml
index c92fa56..ff07b45 100644
--- a/test_utils/Cargo.toml
+++ b/test_utils/Cargo.toml
@@ -10,10 +10,10 @@ dialoguer = "0.10.4"
10directories = "5.0.1" 10directories = "5.0.1"
11futures = "0.3.28" 11futures = "0.3.28"
12git2 = "0.18.1" 12git2 = "0.18.1"
13nostr = "0.33.0" 13nostr = "0.34.0"
14nostr-database = "0.33.1" 14nostr-database = "0.34.0"
15nostr-sdk = "0.33.0" 15nostr-sdk = "0.34.0"
16nostr-sqlite = "0.33.0" 16nostr-sqlite = "0.34.0"
17once_cell = "1.18.0" 17once_cell = "1.18.0"
18rand = "0.8" 18rand = "0.8"
19rexpect = { git = "https://github.com/rust-cli/rexpect.git", rev = "9eb61dd" } 19rexpect = { git = "https://github.com/rust-cli/rexpect.git", rev = "9eb61dd" }
diff --git a/test_utils/src/lib.rs b/test_utils/src/lib.rs
index 56e9b17..12cadeb 100644
--- a/test_utils/src/lib.rs
+++ b/test_utils/src/lib.rs
@@ -1091,9 +1091,9 @@ pub fn get_proposal_branch_name_from_events(
1091 branch_name_in_event: &str, 1091 branch_name_in_event: &str,
1092) -> Result<String> { 1092) -> Result<String> {
1093 for event in events { 1093 for event in events {
1094 if event.iter_tags().any(|t| { 1094 if event.tags().iter().any(|t| {
1095 !t.as_vec()[1].eq("revision-root") 1095 !t.as_vec()[1].eq("revision-root")
1096 && event.iter_tags().any(|t| { 1096 && event.tags().iter().any(|t| {
1097 t.as_vec()[0].eq("branch-name") && t.as_vec()[1].eq(branch_name_in_event) 1097 t.as_vec()[0].eq("branch-name") && t.as_vec()[1].eq(branch_name_in_event)
1098 }) 1098 })
1099 }) { 1099 }) {
@@ -1370,7 +1370,7 @@ fn get_first_proposal_event_id() -> Result<nostr::EventId> {
1370 vec!["root"], 1370 vec!["root"],
1371 ), 1371 ),
1372 ], 1372 ],
1373 Some(Duration::from_millis(500)), 1373 nostr_sdk::EventSource::relays(Some(Duration::from_millis(1000))),
1374 ))?; 1374 ))?;
1375 Handle::current().block_on(client.disconnect())?; 1375 Handle::current().block_on(client.disconnect())?;
1376 1376
diff --git a/tests/git_remote_helper.rs b/tests/git_remote_helper.rs
index a44b141..07f9ec8 100644
--- a/tests/git_remote_helper.rs
+++ b/tests/git_remote_helper.rs
@@ -1730,6 +1730,7 @@ mod push {
1730 r51.events = events.clone(); 1730 r51.events = events.clone();
1731 r55.events = events.clone(); 1731 r55.events = events.clone();
1732 1732
1733 #[allow(clippy::mutable_key_type)]
1733 let before = r55.events.iter().cloned().collect::<HashSet<Event>>(); 1734 let before = r55.events.iter().cloned().collect::<HashSet<Event>>();
1734 1735
1735 let cli_tester_handle = std::thread::spawn(move || -> Result<(String, Oid)> { 1736 let cli_tester_handle = std::thread::spawn(move || -> Result<(String, Oid)> {
@@ -1798,7 +1799,8 @@ mod push {
1798 .events 1799 .events
1799 .iter() 1800 .iter()
1800 .find(|e| { 1801 .find(|e| {
1801 e.iter_tags() 1802 e.tags()
1803 .iter()
1802 .find(|t| t.as_vec()[0].eq("branch-name")) 1804 .find(|t| t.as_vec()[0].eq("branch-name"))
1803 .is_some_and(|t| t.as_vec()[1].eq(FEATURE_BRANCH_NAME_1)) 1805 .is_some_and(|t| t.as_vec()[1].eq(FEATURE_BRANCH_NAME_1))
1804 }) 1806 })
@@ -1824,7 +1826,8 @@ mod push {
1824 .events 1826 .events
1825 .iter() 1827 .iter()
1826 .filter(|e| { 1828 .filter(|e| {
1827 e.iter_tags() 1829 e.tags()
1830 .iter()
1828 .any(|t| t.as_vec()[1].eq(&proposal.id().to_string())) 1831 .any(|t| t.as_vec()[1].eq(&proposal.id().to_string()))
1829 && e.kind().eq(&Kind::GitPatch) 1832 && e.kind().eq(&Kind::GitPatch)
1830 }) 1833 })
@@ -1877,6 +1880,7 @@ mod push {
1877 r51.events = events.clone(); 1880 r51.events = events.clone();
1878 r55.events = events.clone(); 1881 r55.events = events.clone();
1879 1882
1883 #[allow(clippy::mutable_key_type)]
1880 let before = r55.events.iter().cloned().collect::<HashSet<Event>>(); 1884 let before = r55.events.iter().cloned().collect::<HashSet<Event>>();
1881 1885
1882 let cli_tester_handle = std::thread::spawn(move || -> Result<(String, String)> { 1886 let cli_tester_handle = std::thread::spawn(move || -> Result<(String, String)> {
@@ -1950,7 +1954,8 @@ mod push {
1950 .events 1954 .events
1951 .iter() 1955 .iter()
1952 .find(|e| { 1956 .find(|e| {
1953 e.iter_tags() 1957 e.tags()
1958 .iter()
1954 .find(|t| t.as_vec()[0].eq("branch-name")) 1959 .find(|t| t.as_vec()[0].eq("branch-name"))
1955 .is_some_and(|t| t.as_vec()[1].eq(FEATURE_BRANCH_NAME_1)) 1960 .is_some_and(|t| t.as_vec()[1].eq(FEATURE_BRANCH_NAME_1))
1956 }) 1961 })
@@ -1982,7 +1987,8 @@ mod push {
1982 .events 1987 .events
1983 .iter() 1988 .iter()
1984 .find(|e| { 1989 .find(|e| {
1985 e.iter_tags() 1990 e.tags()
1991 .iter()
1986 .any(|t| t.as_vec()[1].eq(&proposal.id().to_string())) 1992 .any(|t| t.as_vec()[1].eq(&proposal.id().to_string()))
1987 && e.content.contains("[PATCH 2/2]") 1993 && e.content.contains("[PATCH 2/2]")
1988 }) 1994 })
@@ -2019,6 +2025,7 @@ mod push {
2019 r51.events = events.clone(); 2025 r51.events = events.clone();
2020 r55.events = events.clone(); 2026 r55.events = events.clone();
2021 2027
2028 #[allow(clippy::mutable_key_type)]
2022 let before = r55.events.iter().cloned().collect::<HashSet<Event>>(); 2029 let before = r55.events.iter().cloned().collect::<HashSet<Event>>();
2023 2030
2024 let cli_tester_handle = std::thread::spawn(move || -> Result<(String, String)> { 2031 let cli_tester_handle = std::thread::spawn(move || -> Result<(String, String)> {
@@ -2086,7 +2093,8 @@ mod push {
2086 .events 2093 .events
2087 .iter() 2094 .iter()
2088 .find(|e| { 2095 .find(|e| {
2089 e.iter_tags() 2096 e.tags()
2097 .iter()
2090 .find(|t| t.as_vec()[0].eq("branch-name")) 2098 .find(|t| t.as_vec()[0].eq("branch-name"))
2091 .is_some_and(|t| t.as_vec()[1].eq(FEATURE_BRANCH_NAME_1)) 2099 .is_some_and(|t| t.as_vec()[1].eq(FEATURE_BRANCH_NAME_1))
2092 }) 2100 })
@@ -2094,7 +2102,7 @@ mod push {
2094 2102
2095 let revision_root_patch = new_events 2103 let revision_root_patch = new_events
2096 .iter() 2104 .iter()
2097 .find(|e| e.iter_tags().any(|t| t.as_vec()[1].eq("revision-root"))) 2105 .find(|e| e.tags().iter().any(|t| t.as_vec()[1].eq("revision-root")))
2098 .unwrap(); 2106 .unwrap();
2099 2107
2100 assert_eq!( 2108 assert_eq!(
@@ -2172,6 +2180,7 @@ mod push {
2172 r51.events = events.clone(); 2180 r51.events = events.clone();
2173 r55.events = events.clone(); 2181 r55.events = events.clone();
2174 2182
2183 #[allow(clippy::mutable_key_type)]
2175 let before = r55.events.iter().cloned().collect::<HashSet<Event>>(); 2184 let before = r55.events.iter().cloned().collect::<HashSet<Event>>();
2176 let branch_name = "pr/my-new-proposal"; 2185 let branch_name = "pr/my-new-proposal";
2177 2186
@@ -2231,7 +2240,7 @@ mod push {
2231 2240
2232 let proposal = new_events 2241 let proposal = new_events
2233 .iter() 2242 .iter()
2234 .find(|e| e.iter_tags().any(|t| t.as_vec()[1].eq("root"))) 2243 .find(|e| e.tags().iter().any(|t| t.as_vec()[1].eq("root")))
2235 .unwrap(); 2244 .unwrap();
2236 2245
2237 assert!( 2246 assert!(
@@ -2246,7 +2255,8 @@ mod push {
2246 2255
2247 assert_eq!( 2256 assert_eq!(
2248 proposal 2257 proposal
2249 .iter_tags() 2258 .tags()
2259 .iter()
2250 .find(|t| t.as_vec()[0].eq("branch-name")) 2260 .find(|t| t.as_vec()[0].eq("branch-name"))
2251 .unwrap() 2261 .unwrap()
2252 .as_vec()[1], 2262 .as_vec()[1],
diff --git a/tests/send.rs b/tests/send.rs
index 57987e3..ef09425 100644
--- a/tests/send.rs
+++ b/tests/send.rs
@@ -85,11 +85,19 @@ mod when_commits_behind_ask_to_proceed {
85} 85}
86 86
87fn is_cover_letter(event: &nostr::Event) -> bool { 87fn is_cover_letter(event: &nostr::Event) -> bool {
88 event.kind.eq(&Kind::GitPatch) && event.iter_tags().any(|t| t.as_vec()[1].eq("cover-letter")) 88 event.kind.eq(&Kind::GitPatch)
89 && event
90 .tags()
91 .iter()
92 .any(|t| t.as_vec()[1].eq("cover-letter"))
89} 93}
90 94
91fn is_patch(event: &nostr::Event) -> bool { 95fn is_patch(event: &nostr::Event) -> bool {
92 event.kind.eq(&Kind::GitPatch) && !event.iter_tags().any(|t| t.as_vec()[1].eq("cover-letter")) 96 event.kind.eq(&Kind::GitPatch)
97 && !event
98 .tags()
99 .iter()
100 .any(|t| t.as_vec()[1].eq("cover-letter"))
93} 101}
94 102
95fn prep_git_repo() -> Result<GitTestRepo> { 103fn prep_git_repo() -> Result<GitTestRepo> {
@@ -366,7 +374,8 @@ mod when_cover_letter_details_specified_with_range_of_head_2_sends_cover_letter_
366 374
367 assert_eq!( 375 assert_eq!(
368 cover_letter_event 376 cover_letter_event
369 .iter_tags() 377 .tags()
378 .iter()
370 .find(|t| t.as_vec()[0].eq("r")) 379 .find(|t| t.as_vec()[0].eq("r"))
371 .unwrap() 380 .unwrap()
372 .as_vec()[1], 381 .as_vec()[1],
@@ -383,18 +392,28 @@ mod when_cover_letter_details_specified_with_range_of_head_2_sends_cover_letter_
383 for relay in [&r53, &r55, &r56] { 392 for relay in [&r53, &r55, &r56] {
384 let cover_letter_event: &nostr::Event = 393 let cover_letter_event: &nostr::Event =
385 relay.events.iter().find(|e| is_cover_letter(e)).unwrap(); 394 relay.events.iter().find(|e| is_cover_letter(e)).unwrap();
386 assert!(cover_letter_event.iter_tags().any(|t| t.as_vec()[0].eq("a") 395 assert!(
387 && t.as_vec()[1].eq(&format!( 396 cover_letter_event
388 "{}:{TEST_KEY_1_PUBKEY_HEX}:{}", 397 .tags()
389 Kind::GitRepoAnnouncement, 398 .iter()
390 generate_repo_ref_event().identifier().unwrap() 399 .any(|t| t.as_vec()[0].eq("a")
391 )))); 400 && t.as_vec()[1].eq(&format!(
392 assert!(cover_letter_event.iter_tags().any(|t| t.as_vec()[0].eq("a") 401 "{}:{TEST_KEY_1_PUBKEY_HEX}:{}",
393 && t.as_vec()[1].eq(&format!( 402 Kind::GitRepoAnnouncement,
394 "{}:{TEST_KEY_2_PUBKEY_HEX}:{}", 403 generate_repo_ref_event().identifier().unwrap()
395 Kind::GitRepoAnnouncement, 404 )))
396 generate_repo_ref_event().identifier().unwrap() 405 );
397 )))); 406 assert!(
407 cover_letter_event
408 .tags()
409 .iter()
410 .any(|t| t.as_vec()[0].eq("a")
411 && t.as_vec()[1].eq(&format!(
412 "{}:{TEST_KEY_2_PUBKEY_HEX}:{}",
413 Kind::GitRepoAnnouncement,
414 generate_repo_ref_event().identifier().unwrap()
415 )))
416 );
398 } 417 }
399 Ok(()) 418 Ok(())
400 } 419 }
@@ -404,7 +423,8 @@ mod when_cover_letter_details_specified_with_range_of_head_2_sends_cover_letter_
404 async fn p_tags_for_maintainers() -> Result<()> { 423 async fn p_tags_for_maintainers() -> Result<()> {
405 let event = generate_repo_ref_event(); 424 let event = generate_repo_ref_event();
406 let maintainers = &event 425 let maintainers = &event
407 .iter_tags() 426 .tags()
427 .iter()
408 .find(|t| t.as_vec()[0].eq(&"maintainers")) 428 .find(|t| t.as_vec()[0].eq(&"maintainers"))
409 .unwrap() 429 .unwrap()
410 .as_vec()[1..]; 430 .as_vec()[1..];
@@ -415,7 +435,8 @@ mod when_cover_letter_details_specified_with_range_of_head_2_sends_cover_letter_
415 relay.events.iter().find(|e| is_cover_letter(e)).unwrap(); 435 relay.events.iter().find(|e| is_cover_letter(e)).unwrap();
416 assert!( 436 assert!(
417 cover_letter_event 437 cover_letter_event
418 .iter_tags() 438 .tags()
439 .iter()
419 .any(|t| { t.as_vec()[0].eq("p") && t.as_vec()[1].eq(m) }) 440 .any(|t| { t.as_vec()[0].eq("p") && t.as_vec()[1].eq(m) })
420 ); 441 );
421 } 442 }
@@ -432,7 +453,8 @@ mod when_cover_letter_details_specified_with_range_of_head_2_sends_cover_letter_
432 relay.events.iter().find(|e| is_cover_letter(e)).unwrap(); 453 relay.events.iter().find(|e| is_cover_letter(e)).unwrap();
433 assert!( 454 assert!(
434 cover_letter_event 455 cover_letter_event
435 .iter_tags() 456 .tags()
457 .iter()
436 .any(|t| { t.as_vec()[0].eq("t") && t.as_vec()[1].eq(&"cover-letter") }) 458 .any(|t| { t.as_vec()[0].eq("t") && t.as_vec()[1].eq(&"cover-letter") })
437 ); 459 );
438 } 460 }
@@ -448,7 +470,8 @@ mod when_cover_letter_details_specified_with_range_of_head_2_sends_cover_letter_
448 relay.events.iter().find(|e| is_cover_letter(e)).unwrap(); 470 relay.events.iter().find(|e| is_cover_letter(e)).unwrap();
449 assert!( 471 assert!(
450 cover_letter_event 472 cover_letter_event
451 .iter_tags() 473 .tags()
474 .iter()
452 .any(|t| { t.as_vec()[0].eq("t") && t.as_vec()[1].eq(&"root") }) 475 .any(|t| { t.as_vec()[0].eq("t") && t.as_vec()[1].eq(&"root") })
453 ); 476 );
454 } 477 }
@@ -466,7 +489,8 @@ mod when_cover_letter_details_specified_with_range_of_head_2_sends_cover_letter_
466 // branch-name tag 489 // branch-name tag
467 assert_eq!( 490 assert_eq!(
468 cover_letter_event 491 cover_letter_event
469 .iter_tags() 492 .tags()
493 .iter()
470 .find(|t| t.as_vec()[0].eq("branch-name")) 494 .find(|t| t.as_vec()[0].eq("branch-name"))
471 .unwrap() 495 .unwrap()
472 .as_vec()[1], 496 .as_vec()[1],
@@ -487,7 +511,8 @@ mod when_cover_letter_details_specified_with_range_of_head_2_sends_cover_letter_
487 // branch-name tag 511 // branch-name tag
488 assert_eq!( 512 assert_eq!(
489 cover_letter_event 513 cover_letter_event
490 .iter_tags() 514 .tags()
515 .iter()
491 .find(|t| t.as_vec()[0].eq("alt")) 516 .find(|t| t.as_vec()[0].eq("alt"))
492 .unwrap() 517 .unwrap()
493 .as_vec()[1], 518 .as_vec()[1],
@@ -557,7 +582,8 @@ mod when_cover_letter_details_specified_with_range_of_head_2_sends_cover_letter_
557 async fn p_tags_for_maintainers() -> Result<()> { 582 async fn p_tags_for_maintainers() -> Result<()> {
558 let event = generate_repo_ref_event(); 583 let event = generate_repo_ref_event();
559 let maintainers = &event 584 let maintainers = &event
560 .iter_tags() 585 .tags()
586 .iter()
561 .find(|t| t.as_vec()[0].eq(&"maintainers")) 587 .find(|t| t.as_vec()[0].eq(&"maintainers"))
562 .unwrap() 588 .unwrap()
563 .as_vec()[1..]; 589 .as_vec()[1..];
@@ -565,7 +591,8 @@ mod when_cover_letter_details_specified_with_range_of_head_2_sends_cover_letter_
565 assert!( 591 assert!(
566 prep() 592 prep()
567 .await? 593 .await?
568 .iter_tags() 594 .tags()
595 .iter()
569 .any(|t| { t.as_vec()[0].eq("p") && t.as_vec()[1].eq(m) }) 596 .any(|t| { t.as_vec()[0].eq("p") && t.as_vec()[1].eq(m) })
570 ); 597 );
571 } 598 }
@@ -697,7 +724,8 @@ mod when_cover_letter_details_specified_with_range_of_head_2_sends_cover_letter_
697 .collect::<Vec<&nostr::Event>>(); 724 .collect::<Vec<&nostr::Event>>();
698 assert_eq!( 725 assert_eq!(
699 patch_events[1] 726 patch_events[1]
700 .iter_tags() 727 .tags()
728 .iter()
701 .find(|t| t.as_vec()[0].eq("e") 729 .find(|t| t.as_vec()[0].eq("e")
702 && t.as_vec().len().eq(&4) 730 && t.as_vec().len().eq(&4)
703 && t.as_vec()[3].eq("reply")) 731 && t.as_vec()[3].eq("reply"))
@@ -1086,13 +1114,15 @@ mod when_no_cover_letter_flag_set_with_range_of_head_2_sends_2_patches_without_c
1086 // first patch tagged as root 1114 // first patch tagged as root
1087 assert!( 1115 assert!(
1088 patch_events[0] 1116 patch_events[0]
1089 .iter_tags() 1117 .tags()
1118 .iter()
1090 .any(|t| t.as_vec()[0].eq("t") && t.as_vec()[1].eq("root")) 1119 .any(|t| t.as_vec()[0].eq("t") && t.as_vec()[1].eq("root"))
1091 ); 1120 );
1092 // second patch not tagged as root 1121 // second patch not tagged as root
1093 assert!( 1122 assert!(
1094 !patch_events[1] 1123 !patch_events[1]
1095 .iter_tags() 1124 .tags()
1125 .iter()
1096 .any(|t| t.as_vec()[0].eq("t") && t.as_vec()[1].eq("root")) 1126 .any(|t| t.as_vec()[0].eq("t") && t.as_vec()[1].eq("root"))
1097 ); 1127 );
1098 } 1128 }
@@ -1113,7 +1143,8 @@ mod when_no_cover_letter_flag_set_with_range_of_head_2_sends_2_patches_without_c
1113 // branch-name tag 1143 // branch-name tag
1114 assert_eq!( 1144 assert_eq!(
1115 patch_events[0] 1145 patch_events[0]
1116 .iter_tags() 1146 .tags()
1147 .iter()
1117 .find(|t| t.as_vec()[0].eq("branch-name")) 1148 .find(|t| t.as_vec()[0].eq("branch-name"))
1118 .unwrap() 1149 .unwrap()
1119 .as_vec()[1], 1150 .as_vec()[1],
@@ -1136,7 +1167,8 @@ mod when_no_cover_letter_flag_set_with_range_of_head_2_sends_2_patches_without_c
1136 1167
1137 assert_eq!( 1168 assert_eq!(
1138 patch_events[1] 1169 patch_events[1]
1139 .iter_tags() 1170 .tags()
1171 .iter()
1140 .find(|t| t.as_vec()[0].eq("e") 1172 .find(|t| t.as_vec()[0].eq("e")
1141 && t.as_vec().len().eq(&4) 1173 && t.as_vec().len().eq(&4)
1142 && t.as_vec()[3].eq("root")) 1174 && t.as_vec()[3].eq("root"))
@@ -1540,7 +1572,8 @@ mod root_proposal_specified_using_in_reply_to_with_range_of_head_2_and_cover_let
1540 relay.events.iter().find(|e| is_cover_letter(e)).unwrap(); 1572 relay.events.iter().find(|e| is_cover_letter(e)).unwrap();
1541 assert!( 1573 assert!(
1542 cover_letter_event 1574 cover_letter_event
1543 .iter_tags() 1575 .tags()
1576 .iter()
1544 .any(|t| { t.as_vec()[0].eq("t") && t.as_vec()[1].eq(&"root") }) 1577 .any(|t| { t.as_vec()[0].eq("t") && t.as_vec()[1].eq(&"root") })
1545 ); 1578 );
1546 } 1579 }
@@ -1556,7 +1589,8 @@ mod root_proposal_specified_using_in_reply_to_with_range_of_head_2_and_cover_let
1556 relay.events.iter().find(|e| is_cover_letter(e)).unwrap(); 1589 relay.events.iter().find(|e| is_cover_letter(e)).unwrap();
1557 assert!( 1590 assert!(
1558 cover_letter_event 1591 cover_letter_event
1559 .iter_tags() 1592 .tags()
1593 .iter()
1560 .any(|t| { t.as_vec()[0].eq("t") && t.as_vec()[1].eq(&"revision-root") }) 1594 .any(|t| { t.as_vec()[0].eq("t") && t.as_vec()[1].eq(&"revision-root") })
1561 ); 1595 );
1562 } 1596 }
@@ -1572,7 +1606,8 @@ mod root_proposal_specified_using_in_reply_to_with_range_of_head_2_and_cover_let
1572 relay.events.iter().find(|e| is_cover_letter(e)).unwrap(); 1606 relay.events.iter().find(|e| is_cover_letter(e)).unwrap();
1573 assert_eq!( 1607 assert_eq!(
1574 cover_letter_event 1608 cover_letter_event
1575 .iter_tags() 1609 .tags()
1610 .iter()
1576 .find(|t| { 1611 .find(|t| {
1577 t.as_vec()[0].eq("e") 1612 t.as_vec()[0].eq("e")
1578 && t.as_vec().len().eq(&4) 1613 && t.as_vec().len().eq(&4)
@@ -1719,7 +1754,7 @@ mod in_reply_to_mentions_issue {
1719 for relay in [&r53, &r55, &r56] { 1754 for relay in [&r53, &r55, &r56] {
1720 let cover_letter_event: &nostr::Event = 1755 let cover_letter_event: &nostr::Event =
1721 relay.events.iter().find(|e| is_cover_letter(e)).unwrap(); 1756 relay.events.iter().find(|e| is_cover_letter(e)).unwrap();
1722 assert!(cover_letter_event.iter_tags().any(|t| { 1757 assert!(cover_letter_event.tags().iter().any(|t| {
1723 t.as_vec()[0].eq("e") 1758 t.as_vec()[0].eq("e")
1724 && t.as_vec()[1].eq(&get_pretend_issue_event().id.to_hex()) 1759 && t.as_vec()[1].eq(&get_pretend_issue_event().id.to_hex())
1725 && t.as_vec()[3].eq(&"mention") 1760 && t.as_vec()[3].eq(&"mention")
@@ -1737,7 +1772,8 @@ mod in_reply_to_mentions_issue {
1737 relay.events.iter().find(|e| is_cover_letter(e)).unwrap(); 1772 relay.events.iter().find(|e| is_cover_letter(e)).unwrap();
1738 assert!( 1773 assert!(
1739 !cover_letter_event 1774 !cover_letter_event
1740 .iter_tags() 1775 .tags()
1776 .iter()
1741 .any(|t| { t.as_vec()[0].eq("t") && t.as_vec()[1].eq(&"revision-root") }) 1777 .any(|t| { t.as_vec()[0].eq("t") && t.as_vec()[1].eq(&"revision-root") })
1742 ); 1778 );
1743 } 1779 }
@@ -1841,7 +1877,7 @@ mod in_reply_to_mentions_npub_and_nprofile_which_get_mentioned_in_proposal_root
1841 for relay in [&r53, &r55, &r56] { 1877 for relay in [&r53, &r55, &r56] {
1842 let cover_letter_event: &nostr::Event = 1878 let cover_letter_event: &nostr::Event =
1843 relay.events.iter().find(|e| is_cover_letter(e)).unwrap(); 1879 relay.events.iter().find(|e| is_cover_letter(e)).unwrap();
1844 assert!(cover_letter_event.iter_tags().any(|t| { 1880 assert!(cover_letter_event.tags().iter().any(|t| {
1845 t.as_vec()[0].eq("p") 1881 t.as_vec()[0].eq("p")
1846 && t.as_vec()[1].eq(&nostr::Keys::parse( 1882 && t.as_vec()[1].eq(&nostr::Keys::parse(
1847 "nsec1q3c5xnsm5m4wgsrhwnz04p0d5mevkryyggqgdpa9jwulpq9gldhswgtxvq", 1883 "nsec1q3c5xnsm5m4wgsrhwnz04p0d5mevkryyggqgdpa9jwulpq9gldhswgtxvq",
@@ -1850,7 +1886,7 @@ mod in_reply_to_mentions_npub_and_nprofile_which_get_mentioned_in_proposal_root
1850 .public_key() 1886 .public_key()
1851 .to_hex()) 1887 .to_hex())
1852 })); 1888 }));
1853 assert!(cover_letter_event.iter_tags().any(|t| { 1889 assert!(cover_letter_event.tags().iter().any(|t| {
1854 t.as_vec()[0].eq("p") 1890 t.as_vec()[0].eq("p")
1855 && t.as_vec()[1].eq(&nostr::Keys::parse( 1891 && t.as_vec()[1].eq(&nostr::Keys::parse(
1856 "nsec1nx5ulvcndhcuu8k6q8fenw50l6y75sec7pj8vr0r68l6a44w3lqspvj02k", 1892 "nsec1nx5ulvcndhcuu8k6q8fenw50l6y75sec7pj8vr0r68l6a44w3lqspvj02k",