mod existing { use git_testtools::hex_to_id; use crate::file::store_at; #[test] fn with_packed_refs() -> crate::Result { let store = store_at("make_packed_ref_repository_for_overlay.sh")?; let c1 = hex_to_id("134385f6d781b7e97062102c6a483440bfda2a03"); let packed = store.packed()?; let r = store.find_existing("main", packed.as_ref())?; assert_eq!(r.target().borrow().as_id().expect("peeled"), c1); assert_eq!(r.name().as_bstr(), "refs/heads/main"); Ok(()) }} mod loose { use crate::file::store; mod existing { use std::path::Path; use crate::file::store; #[test] fn success_and_failure() -> crate::Result { let store = store()?; for (partial_name, expected_path) in &[("main", Some("refs/heads/main")), ("does-not-exist", None)] { let reference = store.loose_find_existing(*partial_name); match expected_path { Some(expected_path) => assert_eq!(reference?.name.as_bstr(), expected_path), None => match reference { Ok(_) => panic!("Expected error"), Err(git_ref::file::find::existing::Error::NotFound(name)) => { assert_eq!(name, Path::new(*partial_name)); } Err(err) => panic!("Unexpected err: {:?}", err), }, } } Ok(()) } } #[test] fn success() -> crate::Result { let store = store()?; for (partial_name, expected_path, expected_ref_kind) in &[ ("dt1", "refs/tags/dt1", git_ref::Kind::Peeled), // tags before heads ("heads/dt1", "refs/heads/dt1", git_ref::Kind::Peeled), ("d1", "refs/d1", git_ref::Kind::Peeled), // direct refs before heads ("heads/d1", "refs/heads/d1", git_ref::Kind::Peeled), ("HEAD", "HEAD", git_ref::Kind::Symbolic), // it finds shortest paths first ("origin", "refs/remotes/origin/HEAD", git_ref::Kind::Symbolic), ("origin/HEAD", "refs/remotes/origin/HEAD", git_ref::Kind::Symbolic), ("origin/main", "refs/remotes/origin/main", git_ref::Kind::Peeled), ("t1", "refs/tags/t1", git_ref::Kind::Peeled), ("main", "refs/heads/main", git_ref::Kind::Peeled), ("heads/main", "refs/heads/main", git_ref::Kind::Peeled), ("refs/heads/main", "refs/heads/main", git_ref::Kind::Peeled), ] { let reference = store.loose_find(*partial_name)?.expect("exists"); assert_eq!(reference.name.as_bstr(), expected_path); assert_eq!(reference.target.borrow().kind(), *expected_ref_kind); } Ok(()) } #[test] fn failure() -> crate::Result { let store = store()?; for (partial_name, reason, is_err) in &[ ("foobar", "does not exist", false), ("broken", "does not parse", true), ("../escaping", "an invalid ref name", true), ] { let reference = store.loose_find(*partial_name); if *is_err { assert!(reference.is_err(), "{}", reason); } else { let reference = reference?; assert!(reference.is_none(), "{}", reason); } } Ok(()) }}
mod existing {
use git_testtools::hex_to_id;
use crate::file::store_at;
#[test]
fn with_packed_refs() -> crate::Result {
let store = store_at("make_packed_ref_repository_for_overlay.sh")?;
let c1 = hex_to_id("134385f6d781b7e97062102c6a483440bfda2a03");
let packed = store.packed()?;
let r = store.find_existing("main", packed.as_ref())?;
assert_eq!(r.target().borrow().as_id().expect("peeled"), c1);
assert_eq!(r.name().as_bstr(), "refs/heads/main");
Ok(())
}
}
mod loose {
use crate::file::store;
mod existing {
use std::path::Path;
use crate::file::store;
#[test]
fn success_and_failure() -> crate::Result {
let store = store()?;
for (partial_name, expected_path) in &[("main", Some("refs/heads/main")), ("does-not-exist", None)] {
let reference = store.loose_find_existing(*partial_name);
match expected_path {
Some(expected_path) => assert_eq!(reference?.name.as_bstr(), expected_path),
None => match reference {
Ok(_) => panic!("Expected error"),
Err(git_ref::file::find::existing::Error::NotFound(name)) => {
assert_eq!(name, Path::new(*partial_name));
}
Err(err) => panic!("Unexpected err: {:?}", err),
},
}
}
Ok(())
}
}
#[test]
fn success() -> crate::Result {
let store = store()?;
for (partial_name, expected_path, expected_ref_kind) in &[
("dt1", "refs/tags/dt1", git_ref::Kind::Peeled), // tags before heads
("heads/dt1", "refs/heads/dt1", git_ref::Kind::Peeled),
("d1", "refs/d1", git_ref::Kind::Peeled), // direct refs before heads
("heads/d1", "refs/heads/d1", git_ref::Kind::Peeled),
("HEAD", "HEAD", git_ref::Kind::Symbolic), // it finds shortest paths first
("origin", "refs/remotes/origin/HEAD", git_ref::Kind::Symbolic),
("origin/HEAD", "refs/remotes/origin/HEAD", git_ref::Kind::Symbolic),
("origin/main", "refs/remotes/origin/main", git_ref::Kind::Peeled),
("t1", "refs/tags/t1", git_ref::Kind::Peeled),
("main", "refs/heads/main", git_ref::Kind::Peeled),
("heads/main", "refs/heads/main", git_ref::Kind::Peeled),
("refs/heads/main", "refs/heads/main", git_ref::Kind::Peeled),
] {
let reference = store.loose_find(*partial_name)?.expect("exists");
assert_eq!(reference.name.as_bstr(), expected_path);
assert_eq!(reference.target.borrow().kind(), *expected_ref_kind);
}
Ok(())
}
#[test]
fn failure() -> crate::Result {
let store = store()?;
for (partial_name, reason, is_err) in &[
("foobar", "does not exist", false),
("broken", "does not parse", true),
("../escaping", "an invalid ref name", true),
] {
let reference = store.loose_find(*partial_name);
if *is_err {
assert!(reference.is_err(), "{}", reason);
} else {
let reference = reference?;
assert!(reference.is_none(), "{}", reason);
}
}
Ok(())
}
}