History

[git-ref] handle all find_one cases as per docs

Sebastian Thiel committed 5 years ago

Commit 3c0acc61 parent b3c4e923 files · +18 −1Browse files

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

Unified · Split

3 files
  1. git-ref/src/store/loose/backend.rs +6 −1
  2. git-ref/tests/fixtures/make_ref_repository.sh +7 −0
  3. git-ref/tests/loose/mod.rs +5 −0
git-ref/src/store/loose/backend.rs+6−1
@@ -57,7 +57,7 @@ mod find { · 56 unmodified lines
5757 Err(err) => return Err(err),
5858 }
5959 }
60− todo!("check remotes HEAD")
60+ self.find_inner("remotes", &relative_path.join("HEAD"), Transform::EnforceRefsPrefix)
6161 }
6262
6363 fn find_inner(
@@ -78,7 +78,12 @@ mod find { · 14 unmodified lines
7878 }
7979 .join(inbetween)
8080 .join(relative_path);
81+
8182 let ref_path = self.base.join(&relative_path);
83+ if ref_path.is_dir() {
84+ return Ok(None);
85+ }
86+
8287 let mut contents = Vec::new();
8388 match std::fs::File::open(ref_path) {
8489 Err(err) if err.kind() == io::ErrorKind::NotFound => return Ok(None),
git-ref/tests/fixtures/make_ref_repository.sh+7−0
@@ -6,8 +6,15 @@ git config commit.gpgsign false · 5 unmodified lines
66
77 git checkout -q -b main
88 git commit -q --allow-empty -m c1
9+git branch dt1
10+git branch d1
911
1012 mkdir -p .git/refs/remotes/origin
13+
1114 cp .git/refs/heads/main .git/refs/remotes/origin/
15+cp .git/refs/heads/main .git/refs/d1
16+
17+echo "ref: refs/remotes/origin/main" > .git/refs/remotes/origin/HEAD
1218
1319 git tag t1
20+git tag dt1
git-ref/tests/loose/mod.rs+5−0
@@ -12,6 +12,11 @@ mod store { · 11 unmodified lines
1212 fn success() -> crate::Result {
1313 let store = store()?;
1414 for (partial_name, expected_path, expected_ref_kind) in &[
15+ ("dt1", "refs/tags/dt1", git_ref::Kind::Peeled), // tags before heads
16+ ("heads/dt1", "refs/heads/dt1", git_ref::Kind::Peeled),
17+ ("d1", "refs/d1", git_ref::Kind::Peeled), // direct refs before heads
18+ ("heads/d1", "refs/heads/d1", git_ref::Kind::Peeled),
19+ ("origin", "refs/remotes/origin/HEAD", git_ref::Kind::Symbolic),
1520 ("origin/main", "refs/remotes/origin/main", git_ref::Kind::Peeled),
1621 ("HEAD", "HEAD", git_ref::Kind::Symbolic),
1722 ("t1", "refs/tags/t1", git_ref::Kind::Peeled),