diff --git a/Cargo.lock b/Cargo.lock index 7dfd8c4..c9f8ba1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -280,9 +280,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.10.4" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8bf247779e67a9082a4790b45e71ac7cfd1321331a5c856a74a9faebdab78d0" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] @@ -301,9 +301,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.132" +version = "0.2.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" +checksum = "c0f80d65747a3e43d1596c7c5492d95d5edddaabd45a7fcdb02b95f644164966" [[package]] name = "log" @@ -337,9 +337,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0" +checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" [[package]] name = "os_str_bytes" @@ -445,9 +445,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.43" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" +checksum = "7bd7356a8122b6c4a24a82b278680c73357984ca2fc79a0f9fa6dea7dced7c58" dependencies = [ "unicode-ident", ] @@ -534,18 +534,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.144" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" +checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.144" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" +checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" dependencies = [ "proc-macro2", "quote", @@ -560,7 +560,7 @@ checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" [[package]] name = "stc" -version = "0.2.1" +version = "0.2.2" dependencies = [ "anyhow", "assert_cmd", @@ -576,9 +576,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.100" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52205623b1b0f064a4e71182c3b18ae902267282930c6d5462c91b859668426e" +checksum = "e90cde112c4b9690b8cbe810cba9ddd8bc1d7472e2cae317b69e9438c1cba7d2" dependencies = [ "proc-macro2", "quote", @@ -613,18 +613,18 @@ checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16" [[package]] name = "thiserror" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c53f98874615aea268107765aa1ed8f6116782501d18e53d08b471733bea6c85" +checksum = "0a99cb8c4b9a8ef0e7907cd3b617cc8dc04d571c4e73c8ae403d80ac160bb122" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8b463991b4eab2d801e724172285ec4195c650e8ec79b149e6c2a8e6dd3f783" +checksum = "3a891860d3c8d66fec8e73ddb3765f90082374dbaaa833407b904a94f1a7eb43" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 942357e..4d0dbbe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "stc" description = "[WIP] Easy stacking of dev branches in git repositories." -version = "0.2.1" +version = "0.2.2" authors = ["Folke Behrens "] edition = "2021" repository = "https://github.com/cloneable/stc/" diff --git a/src/git.rs b/src/git.rs index ad8e6f9..6181c64 100644 --- a/src/git.rs +++ b/src/git.rs @@ -66,7 +66,8 @@ pub trait Git { let head = refs .values() .find(|r| r.head) - .map(|r| r.name.branchname().owning_clone()); + .and_then(|r| r.name.branchname()) + .map(|bn| bn.owning_clone()); Ok(Repository { refs, head }) } @@ -217,8 +218,8 @@ impl<'a> Repository<'a> { self.refs .iter() .filter(|(name, _)| name.0.starts_with(STC_REF_PREFIX)) - .map(|(name, _)| name.branchname()) - .collect::>() + .map(|(name, _)| name.branchname().unwrap()) + .collect::>() .into_iter() .collect() } @@ -273,9 +274,16 @@ impl<'a> RefName<'a> { &self.0 } - pub fn branchname(&'a self) -> BranchName<'a> { - let (_, branchname) = self.0.rsplit_once('/').unwrap(); - BranchName::new(branchname) + pub fn branchname(&'a self) -> Option> { + if let Some(suffix) = self.0.strip_prefix(STC_REF_PREFIX) { + if let Some((_, branchname)) = suffix.split_once('/') { + return Some(BranchName::new(branchname)); + } + } + if let Some(branchname) = self.0.strip_prefix(BRANCH_REF_PREFIX) { + return Some(BranchName::new(branchname)); + } + None } } diff --git a/tests/integration_test.rs b/tests/integration_test.rs index 17f5a7b..399ffc4 100644 --- a/tests/integration_test.rs +++ b/tests/integration_test.rs @@ -130,16 +130,16 @@ fn test_stc_start() { .assert(predicate::path::missing()); let main_ref = read_file(repo.tempdir.child("clone/.git/refs/heads/main").path()); - stc.arg("start").arg("test-branch").assert().success(); + stc.arg("start").arg("feat/test-branch").assert().success(); repo.tempdir - .child("clone/.git/refs/stc/start/test-branch") + .child("clone/.git/refs/stc/start/feat/test-branch") .assert(main_ref); repo.tempdir - .child("clone/.git/refs/stc/base/test-branch") + .child("clone/.git/refs/stc/base/feat/test-branch") .assert("ref: refs/heads/main\n"); repo.tempdir - .child("clone/.git/refs/stc/remote/test-branch") + .child("clone/.git/refs/stc/remote/feat/test-branch") .assert(predicate::path::missing()); } @@ -149,7 +149,7 @@ fn test_stc_push() { { let mut stc = new_stc_cmd(&repo.clone_dir); - stc.arg("start").arg("test-branch").assert().success(); + stc.arg("start").arg("feat/test-branch").assert().success(); } write_file(&repo.clone_dir, "test-branch.txt", "test-branch #1\n"); @@ -158,12 +158,12 @@ fn test_stc_push() { let branch_ref = read_file( repo.tempdir - .child("clone/.git/refs/heads/test-branch") + .child("clone/.git/refs/heads/feat/test-branch") .path(), ); repo.tempdir - .child("clone/.git/refs/stc/remote/test-branch") + .child("clone/.git/refs/stc/remote/feat/test-branch") .assert(predicate::path::missing()); { @@ -172,7 +172,7 @@ fn test_stc_push() { } repo.tempdir - .child("clone/.git/refs/stc/remote/test-branch") + .child("clone/.git/refs/stc/remote/feat/test-branch") .assert(&branch_ref); { @@ -182,6 +182,6 @@ fn test_stc_push() { } repo.tempdir - .child("clone/.git/refs/stc/remote/test-branch") + .child("clone/.git/refs/stc/remote/feat/test-branch") .assert(&branch_ref); }