History

[ref] prefix iteration for all references

Sebastian Thiel committed 5 years ago

Commit 228ca001 parent aa6052a3 files · +104 −14Browse files

Showing the changes to git-ref/tests (1 of 3 files). Show all

Unified · Split

git-ref/tests/file/store/iter.rs+52−7
@@ -121,13 +121,12 @@ fn loose_iter_with_prefix() -> crate::Result { · 120 unmodified lines
121121 }
122122
123123 #[test]
124−fn overlay_iter() {
124+fn overlay_iter() -> crate::Result {
125125 use git_ref::mutable::Target::*;
126126
127− let store = store_at("make_packed_ref_repository_for_overlay.sh").unwrap();
127+ let store = store_at("make_packed_ref_repository_for_overlay.sh")?;
128128 let ref_names = store
129− .iter(&store.packed().unwrap().expect("packed-refs"))
130− .unwrap()
129+ .iter(&store.packed()?.expect("packed-refs"))?
131130 .map(|r| {
132131 r.map(|r| {
133132 (
@@ -137,8 +136,7 @@ fn overlay_iter() { · 3 unmodified lines
137136 )
138137 })
139138 })
140− .collect::<Result<Vec<_>, _>>()
141− .unwrap();
139+ .collect::<Result<Vec<_>, _>>()?;
142140 let c1 = hex_to_id("134385f6d781b7e97062102c6a483440bfda2a03");
143141 let c2 = hex_to_id("9902e3c3e8f0c569b4ab295ddf473e6de763e1e7");
144142 assert_eq!(
@@ -148,7 +146,7 @@ fn overlay_iter() { · 3 unmodified lines
148146 ("refs/heads/newer-as-loose".into(), Peeled(c2), false),
149147 (
150148 "refs/remotes/origin/HEAD".into(),
151− Symbolic("refs/remotes/origin/main".try_into().unwrap()),
149+ Symbolic("refs/remotes/origin/main".try_into()?),
152150 false
153151 ),
154152 ("refs/remotes/origin/main".into(), Peeled(c1), true),
@@ -159,4 +157,51 @@ fn overlay_iter() { · 4 unmodified lines
159157 )
160158 ]
161159 );
160+ Ok(())
161+}
162+
163+#[test]
164+fn overlay_iter_with_prefix_wont_allow_absolute_paths() -> crate::Result {
165+ let store = store_with_packed_refs()?;
166+ #[cfg(not(windows))]
167+ let abs_path = "/hello";
168+ #[cfg(windows)]
169+ let abs_path = "c:\\hello";
170+
171+ match store.iter_prefixed(&store.packed()?.expect("pacekd-refs"), abs_path) {
172+ Ok(_) => unreachable!("absolute paths aren't allowed"),
173+ Err(err) => assert_eq!(err.to_string(), "prefix must be a relative path, like 'refs/heads'"),
174+ }
175+ Ok(())
176+}
177+
178+#[test]
179+fn overlay_prefixed_iter() {
180+ use git_ref::mutable::Target::*;
181+
182+ let store = store_at("make_packed_ref_repository_for_overlay.sh").unwrap();
183+ let packed = store.packed().unwrap().expect("packed-refs");
184+ let ref_names = store
185+ .iter_prefixed(&packed, "refs/heads")
186+ .unwrap()
187+ .map(|r| {
188+ r.map(|r| {
189+ (
190+ r.name().expect("valid names only").into_inner(),
191+ r.target(),
192+ r.is_packed(),
193+ )
194+ })
195+ })
196+ .collect::<Result<Vec<_>, _>>()
197+ .unwrap();
198+ let c1 = hex_to_id("134385f6d781b7e97062102c6a483440bfda2a03");
199+ let c2 = hex_to_id("9902e3c3e8f0c569b4ab295ddf473e6de763e1e7");
200+ assert_eq!(
201+ ref_names,
202+ vec![
203+ (b"refs/heads/main".as_bstr().to_owned(), Peeled(c1), true),
204+ ("refs/heads/newer-as-loose".into(), Peeled(c2), false),
205+ ]
206+ );
162207 }