upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/lib/git
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/git')
-rw-r--r--src/lib/git/identify_ahead_behind.rs8
-rw-r--r--src/lib/git/mod.rs87
-rw-r--r--src/lib/git/nostr_url.rs136
3 files changed, 104 insertions, 127 deletions
diff --git a/src/lib/git/identify_ahead_behind.rs b/src/lib/git/identify_ahead_behind.rs
index d736522..baea687 100644
--- a/src/lib/git/identify_ahead_behind.rs
+++ b/src/lib/git/identify_ahead_behind.rs
@@ -184,10 +184,10 @@ mod tests {
184 identify_ahead_behind(&git_repo, &Some("feature".to_string()), &None)?; 184 identify_ahead_behind(&git_repo, &Some("feature".to_string()), &None)?;
185 185
186 assert_eq!(from_branch, "feature"); 186 assert_eq!(from_branch, "feature");
187 assert_eq!( 187 assert_eq!(ahead, vec![
188 ahead, 188 oid_to_sha1(&feature_oid),
189 vec![oid_to_sha1(&feature_oid), oid_to_sha1(&dev_oid_first)] 189 oid_to_sha1(&dev_oid_first)
190 ); 190 ]);
191 assert_eq!(to_branch, "main"); 191 assert_eq!(to_branch, "main");
192 assert_eq!(behind, vec![]); 192 assert_eq!(behind, vec![]);
193 193
diff --git a/src/lib/git/mod.rs b/src/lib/git/mod.rs
index 7a7ad5d..2b78f38 100644
--- a/src/lib/git/mod.rs
+++ b/src/lib/git/mod.rs
@@ -3,12 +3,12 @@ use std::{
3 path::{Path, PathBuf}, 3 path::{Path, PathBuf},
4}; 4};
5 5
6use anyhow::{bail, Context, Result}; 6use anyhow::{Context, Result, bail};
7use git2::{DiffOptions, Oid, Revwalk}; 7use git2::{DiffOptions, Oid, Revwalk};
8pub use identify_ahead_behind::identify_ahead_behind; 8pub use identify_ahead_behind::identify_ahead_behind;
9use nostr_sdk::{ 9use nostr_sdk::{
10 hashes::{sha1::Hash as Sha1Hash, Hash},
11 Tags, 10 Tags,
11 hashes::{Hash, sha1::Hash as Sha1Hash},
12}; 12};
13 13
14use crate::git_events::{get_commit_id_from_patch, tag_value}; 14use crate::git_events::{get_commit_id_from_patch, tag_value};
@@ -1493,10 +1493,10 @@ mod tests {
1493 &oid_to_sha1(&feature_oid), 1493 &oid_to_sha1(&feature_oid),
1494 )?; 1494 )?;
1495 assert_eq!(ahead, vec![]); 1495 assert_eq!(ahead, vec![]);
1496 assert_eq!( 1496 assert_eq!(behind, vec![
1497 behind, 1497 oid_to_sha1(&behind_2_oid),
1498 vec![oid_to_sha1(&behind_2_oid), oid_to_sha1(&behind_1_oid),], 1498 oid_to_sha1(&behind_1_oid),
1499 ); 1499 ],);
1500 Ok(()) 1500 Ok(())
1501 } 1501 }
1502 1502
@@ -1518,10 +1518,10 @@ mod tests {
1518 &oid_to_sha1(&main_oid), 1518 &oid_to_sha1(&main_oid),
1519 &oid_to_sha1(&ahead_2_oid), 1519 &oid_to_sha1(&ahead_2_oid),
1520 )?; 1520 )?;
1521 assert_eq!( 1521 assert_eq!(ahead, vec![
1522 ahead, 1522 oid_to_sha1(&ahead_2_oid),
1523 vec![oid_to_sha1(&ahead_2_oid), oid_to_sha1(&ahead_1_oid),], 1523 oid_to_sha1(&ahead_1_oid),
1524 ); 1524 ],);
1525 assert_eq!(behind, vec![]); 1525 assert_eq!(behind, vec![]);
1526 Ok(()) 1526 Ok(())
1527 } 1527 }
@@ -1550,14 +1550,14 @@ mod tests {
1550 &oid_to_sha1(&behind_2_oid), 1550 &oid_to_sha1(&behind_2_oid),
1551 &oid_to_sha1(&ahead_2_oid), 1551 &oid_to_sha1(&ahead_2_oid),
1552 )?; 1552 )?;
1553 assert_eq!( 1553 assert_eq!(ahead, vec![
1554 ahead, 1554 oid_to_sha1(&ahead_2_oid),
1555 vec![oid_to_sha1(&ahead_2_oid), oid_to_sha1(&ahead_1_oid)], 1555 oid_to_sha1(&ahead_1_oid)
1556 ); 1556 ],);
1557 assert_eq!( 1557 assert_eq!(behind, vec![
1558 behind, 1558 oid_to_sha1(&behind_2_oid),
1559 vec![oid_to_sha1(&behind_2_oid), oid_to_sha1(&behind_1_oid)], 1559 oid_to_sha1(&behind_1_oid)
1560 ); 1560 ],);
1561 Ok(()) 1561 Ok(())
1562 } 1562 }
1563 } 1563 }
@@ -2212,10 +2212,9 @@ mod tests {
2212 test_repo.populate_with_test_branch()?; 2212 test_repo.populate_with_test_branch()?;
2213 test_repo.checkout("main")?; 2213 test_repo.checkout("main")?;
2214 2214
2215 assert_eq!( 2215 assert_eq!(git_repo.parse_starting_commits("HEAD~1")?, vec![
2216 git_repo.parse_starting_commits("HEAD~1")?, 2216 str_to_sha1("431b84edc0d2fa118d63faa3c2db9c73d630a5ae")?
2217 vec![str_to_sha1("431b84edc0d2fa118d63faa3c2db9c73d630a5ae")?], 2217 ],);
2218 );
2219 Ok(()) 2218 Ok(())
2220 } 2219 }
2221 2220
@@ -2225,10 +2224,9 @@ mod tests {
2225 let git_repo = Repo::from_path(&test_repo.dir)?; 2224 let git_repo = Repo::from_path(&test_repo.dir)?;
2226 test_repo.populate_with_test_branch()?; 2225 test_repo.populate_with_test_branch()?;
2227 2226
2228 assert_eq!( 2227 assert_eq!(git_repo.parse_starting_commits("HEAD~1")?, vec![
2229 git_repo.parse_starting_commits("HEAD~1")?, 2228 str_to_sha1("82ff2bcc9aa94d1bd8faee723d4c8cc190d6061c")?
2230 vec![str_to_sha1("82ff2bcc9aa94d1bd8faee723d4c8cc190d6061c")?], 2229 ],);
2231 );
2232 Ok(()) 2230 Ok(())
2233 } 2231 }
2234 } 2232 }
@@ -2242,13 +2240,10 @@ mod tests {
2242 test_repo.populate_with_test_branch()?; 2240 test_repo.populate_with_test_branch()?;
2243 test_repo.checkout("main")?; 2241 test_repo.checkout("main")?;
2244 2242
2245 assert_eq!( 2243 assert_eq!(git_repo.parse_starting_commits("HEAD~2")?, vec![
2246 git_repo.parse_starting_commits("HEAD~2")?, 2244 str_to_sha1("431b84edc0d2fa118d63faa3c2db9c73d630a5ae")?,
2247 vec![ 2245 str_to_sha1("af474d8d271490e5c635aad337abdc050034b16a")?,
2248 str_to_sha1("431b84edc0d2fa118d63faa3c2db9c73d630a5ae")?, 2246 ],);
2249 str_to_sha1("af474d8d271490e5c635aad337abdc050034b16a")?,
2250 ],
2251 );
2252 Ok(()) 2247 Ok(())
2253 } 2248 }
2254 } 2249 }
@@ -2261,14 +2256,11 @@ mod tests {
2261 let git_repo = Repo::from_path(&test_repo.dir)?; 2256 let git_repo = Repo::from_path(&test_repo.dir)?;
2262 test_repo.populate_with_test_branch()?; 2257 test_repo.populate_with_test_branch()?;
2263 2258
2264 assert_eq!( 2259 assert_eq!(git_repo.parse_starting_commits("HEAD~3")?, vec![
2265 git_repo.parse_starting_commits("HEAD~3")?, 2260 str_to_sha1("82ff2bcc9aa94d1bd8faee723d4c8cc190d6061c")?,
2266 vec![ 2261 str_to_sha1("a23e6b05aaeb7d1471b4a838b51f337d5644eeb0")?,
2267 str_to_sha1("82ff2bcc9aa94d1bd8faee723d4c8cc190d6061c")?, 2262 str_to_sha1("7ab82116068982671a8111f27dc10599172334b2")?,
2268 str_to_sha1("a23e6b05aaeb7d1471b4a838b51f337d5644eeb0")?, 2263 ],);
2269 str_to_sha1("7ab82116068982671a8111f27dc10599172334b2")?,
2270 ],
2271 );
2272 Ok(()) 2264 Ok(())
2273 } 2265 }
2274 } 2266 }
@@ -2282,14 +2274,11 @@ mod tests {
2282 test_repo.populate_with_test_branch()?; 2274 test_repo.populate_with_test_branch()?;
2283 test_repo.checkout("main")?; 2275 test_repo.checkout("main")?;
2284 2276
2285 assert_eq!( 2277 assert_eq!(git_repo.parse_starting_commits("af474d8..a23e6b0")?, vec![
2286 git_repo.parse_starting_commits("af474d8..a23e6b0")?, 2278 str_to_sha1("a23e6b05aaeb7d1471b4a838b51f337d5644eeb0")?,
2287 vec![ 2279 str_to_sha1("7ab82116068982671a8111f27dc10599172334b2")?,
2288 str_to_sha1("a23e6b05aaeb7d1471b4a838b51f337d5644eeb0")?, 2280 str_to_sha1("431b84edc0d2fa118d63faa3c2db9c73d630a5ae")?,
2289 str_to_sha1("7ab82116068982671a8111f27dc10599172334b2")?, 2281 ],);
2290 str_to_sha1("431b84edc0d2fa118d63faa3c2db9c73d630a5ae")?,
2291 ],
2292 );
2293 Ok(()) 2282 Ok(())
2294 } 2283 }
2295 } 2284 }
diff --git a/src/lib/git/nostr_url.rs b/src/lib/git/nostr_url.rs
index 4fbc786..6b38a93 100644
--- a/src/lib/git/nostr_url.rs
+++ b/src/lib/git/nostr_url.rs
@@ -1,11 +1,11 @@
1use core::fmt; 1use core::fmt;
2use std::{collections::HashMap, str::FromStr}; 2use std::{collections::HashMap, str::FromStr};
3 3
4use anyhow::{anyhow, bail, Context, Error, Result}; 4use anyhow::{Context, Error, Result, anyhow, bail};
5use nostr::nips::{nip01::Coordinate, nip05}; 5use nostr::nips::{nip01::Coordinate, nip05};
6use nostr_sdk::{PublicKey, RelayUrl, ToBech32, Url}; 6use nostr_sdk::{PublicKey, RelayUrl, ToBech32, Url};
7 7
8use super::{get_git_config_item, save_git_config_item, Repo}; 8use super::{Repo, get_git_config_item, save_git_config_item};
9 9
10#[derive(Debug, PartialEq, Default, Clone)] 10#[derive(Debug, PartialEq, Default, Clone)]
11pub enum ServerProtocol { 11pub enum ServerProtocol {
@@ -961,24 +961,21 @@ mod tests {
961 #[test] 961 #[test]
962 fn standard() -> Result<()> { 962 fn standard() -> Result<()> {
963 assert_eq!( 963 assert_eq!(
964 format!( 964 format!("{}", NostrUrlDecoded {
965 "{}", 965 original_string: String::new(),
966 NostrUrlDecoded { 966 coordinate: Coordinate {
967 original_string: String::new(), 967 identifier: "ngit".to_string(),
968 coordinate: Coordinate { 968 public_key: PublicKey::parse(
969 identifier: "ngit".to_string(), 969 "npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr",
970 public_key: PublicKey::parse( 970 )
971 "npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr", 971 .unwrap(),
972 ) 972 kind: nostr_sdk::Kind::GitRepoAnnouncement,
973 .unwrap(), 973 relays: vec![RelayUrl::parse("wss://nos.lol").unwrap()],
974 kind: nostr_sdk::Kind::GitRepoAnnouncement, 974 },
975 relays: vec![RelayUrl::parse("wss://nos.lol").unwrap()], 975 protocol: None,
976 }, 976 user: None,
977 protocol: None, 977 nip05: None,
978 user: None, 978 }),
979 nip05: None,
980 }
981 ),
982 "nostr://npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/nos.lol/ngit", 979 "nostr://npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/nos.lol/ngit",
983 ); 980 );
984 Ok(()) 981 Ok(())
@@ -987,24 +984,21 @@ mod tests {
987 #[test] 984 #[test]
988 fn no_relay() -> Result<()> { 985 fn no_relay() -> Result<()> {
989 assert_eq!( 986 assert_eq!(
990 format!( 987 format!("{}", NostrUrlDecoded {
991 "{}", 988 original_string: String::new(),
992 NostrUrlDecoded { 989 coordinate: Coordinate {
993 original_string: String::new(), 990 identifier: "ngit".to_string(),
994 coordinate: Coordinate { 991 public_key: PublicKey::parse(
995 identifier: "ngit".to_string(), 992 "npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr",
996 public_key: PublicKey::parse( 993 )
997 "npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr", 994 .unwrap(),
998 ) 995 kind: nostr_sdk::Kind::GitRepoAnnouncement,
999 .unwrap(), 996 relays: vec![],
1000 kind: nostr_sdk::Kind::GitRepoAnnouncement, 997 },
1001 relays: vec![], 998 protocol: None,
1002 }, 999 user: None,
1003 protocol: None, 1000 nip05: None,
1004 user: None, 1001 }),
1005 nip05: None,
1006 }
1007 ),
1008 "nostr://npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/ngit", 1002 "nostr://npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/ngit",
1009 ); 1003 );
1010 Ok(()) 1004 Ok(())
@@ -1013,24 +1007,21 @@ mod tests {
1013 #[test] 1007 #[test]
1014 fn with_protocol() -> Result<()> { 1008 fn with_protocol() -> Result<()> {
1015 assert_eq!( 1009 assert_eq!(
1016 format!( 1010 format!("{}", NostrUrlDecoded {
1017 "{}", 1011 original_string: String::new(),
1018 NostrUrlDecoded { 1012 coordinate: Coordinate {
1019 original_string: String::new(), 1013 identifier: "ngit".to_string(),
1020 coordinate: Coordinate { 1014 public_key: PublicKey::parse(
1021 identifier: "ngit".to_string(), 1015 "npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr",
1022 public_key: PublicKey::parse( 1016 )
1023 "npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr", 1017 .unwrap(),
1024 ) 1018 kind: nostr_sdk::Kind::GitRepoAnnouncement,
1025 .unwrap(), 1019 relays: vec![RelayUrl::parse("wss://nos.lol").unwrap()],
1026 kind: nostr_sdk::Kind::GitRepoAnnouncement, 1020 },
1027 relays: vec![RelayUrl::parse("wss://nos.lol").unwrap()], 1021 protocol: Some(ServerProtocol::Ssh),
1028 }, 1022 user: None,
1029 protocol: Some(ServerProtocol::Ssh), 1023 nip05: None,
1030 user: None, 1024 }),
1031 nip05: None,
1032 }
1033 ),
1034 "nostr://ssh/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/nos.lol/ngit", 1025 "nostr://ssh/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/nos.lol/ngit",
1035 ); 1026 );
1036 Ok(()) 1027 Ok(())
@@ -1039,24 +1030,21 @@ mod tests {
1039 #[test] 1030 #[test]
1040 fn with_protocol_and_user() -> Result<()> { 1031 fn with_protocol_and_user() -> Result<()> {
1041 assert_eq!( 1032 assert_eq!(
1042 format!( 1033 format!("{}", NostrUrlDecoded {
1043 "{}", 1034 original_string: String::new(),
1044 NostrUrlDecoded { 1035 coordinate: Coordinate {
1045 original_string: String::new(), 1036 identifier: "ngit".to_string(),
1046 coordinate: Coordinate { 1037 public_key: PublicKey::parse(
1047 identifier: "ngit".to_string(), 1038 "npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr",
1048 public_key: PublicKey::parse( 1039 )
1049 "npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr", 1040 .unwrap(),
1050 ) 1041 kind: nostr_sdk::Kind::GitRepoAnnouncement,
1051 .unwrap(), 1042 relays: vec![RelayUrl::parse("wss://nos.lol").unwrap()],
1052 kind: nostr_sdk::Kind::GitRepoAnnouncement, 1043 },
1053 relays: vec![RelayUrl::parse("wss://nos.lol").unwrap()], 1044 protocol: Some(ServerProtocol::Ssh),
1054 }, 1045 user: Some("bla".to_string()),
1055 protocol: Some(ServerProtocol::Ssh), 1046 nip05: None,
1056 user: Some("bla".to_string()), 1047 }),
1057 nip05: None,
1058 }
1059 ),
1060 "nostr://bla@ssh/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/nos.lol/ngit", 1048 "nostr://bla@ssh/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/nos.lol/ngit",
1061 ); 1049 );
1062 Ok(()) 1050 Ok(())