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
121}121}
122 122
123#[test]123#[test]
124fn overlay_iter() {124fn overlay_iter() -> crate::Result {
125 use git_ref::mutable::Target::*;125 use git_ref::mutable::Target::*;
126 126
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")?;
128 let ref_names = store128 let ref_names = store
129 .iter(&store.packed().unwrap().expect("packed-refs"))129 .iter(&store.packed()?.expect("packed-refs"))?
130 .unwrap()
131 .map(|r| {130 .map(|r| {
132 r.map(|r| {131 r.map(|r| {
133 (132 (
@@ -137,8 +136,7 @@ fn overlay_iter() { · 3 unmodified lines
137 )136 )
138 })137 })
139 })138 })
140 .collect::<Result<Vec<_>, _>>()139 .collect::<Result<Vec<_>, _>>()?;
141 .unwrap();
142 let c1 = hex_to_id("134385f6d781b7e97062102c6a483440bfda2a03");140 let c1 = hex_to_id("134385f6d781b7e97062102c6a483440bfda2a03");
143 let c2 = hex_to_id("9902e3c3e8f0c569b4ab295ddf473e6de763e1e7");141 let c2 = hex_to_id("9902e3c3e8f0c569b4ab295ddf473e6de763e1e7");
144 assert_eq!(142 assert_eq!(
@@ -148,7 +146,7 @@ fn overlay_iter() { · 3 unmodified lines
148 ("refs/heads/newer-as-loose".into(), Peeled(c2), false),146 ("refs/heads/newer-as-loose".into(), Peeled(c2), false),
149 (147 (
150 "refs/remotes/origin/HEAD".into(),148 "refs/remotes/origin/HEAD".into(),
151 Symbolic("refs/remotes/origin/main".try_into().unwrap()),149 Symbolic("refs/remotes/origin/main".try_into()?),
152 false150 false
153 ),151 ),
154 ("refs/remotes/origin/main".into(), Peeled(c1), true),152 ("refs/remotes/origin/main".into(), Peeled(c1), true),
@@ -159,4 +157,51 @@ fn overlay_iter() { · 4 unmodified lines
159 )157 )
160 ]158 ]
161 );159 );
160 Ok(())
161}
162
163#[test]
164fn 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]
179fn 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 );
162}207}