88 lines · 3.4 KB · Rust
RawDownload
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(())    }}