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

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
57 Err(err) => return Err(err),57 Err(err) => return Err(err),
58 }58 }
59 }59 }
60 todo!("check remotes HEAD")60 self.find_inner("remotes", &relative_path.join("HEAD"), Transform::EnforceRefsPrefix)
61 }61 }
62 62
63 fn find_inner(63 fn find_inner(
@@ -78,7 +78,12 @@ mod find { · 14 unmodified lines
78 }78 }
79 .join(inbetween)79 .join(inbetween)
80 .join(relative_path);80 .join(relative_path);
81
81 let ref_path = self.base.join(&relative_path);82 let ref_path = self.base.join(&relative_path);
83 if ref_path.is_dir() {
84 return Ok(None);
85 }
86
82 let mut contents = Vec::new();87 let mut contents = Vec::new();
83 match std::fs::File::open(ref_path) {88 match std::fs::File::open(ref_path) {
84 Err(err) if err.kind() == io::ErrorKind::NotFound => return Ok(None),89 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
6 6
7git checkout -q -b main7git checkout -q -b main
8git commit -q --allow-empty -m c18git commit -q --allow-empty -m c1
9git branch dt1
10git branch d1
9 11
10mkdir -p .git/refs/remotes/origin12mkdir -p .git/refs/remotes/origin
13
11cp .git/refs/heads/main .git/refs/remotes/origin/14cp .git/refs/heads/main .git/refs/remotes/origin/
15cp .git/refs/heads/main .git/refs/d1
16
17echo "ref: refs/remotes/origin/main" > .git/refs/remotes/origin/HEAD
12 18
13git tag t119git tag t1
20git tag dt1
git-ref/tests/loose/mod.rs+5−0
@@ -12,6 +12,11 @@ mod store { · 11 unmodified lines
12 fn success() -> crate::Result {12 fn success() -> crate::Result {
13 let store = store()?;13 let store = store()?;
14 for (partial_name, expected_path, expected_ref_kind) in &[14 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),
15 ("origin/main", "refs/remotes/origin/main", git_ref::Kind::Peeled),20 ("origin/main", "refs/remotes/origin/main", git_ref::Kind::Peeled),
16 ("HEAD", "HEAD", git_ref::Kind::Symbolic),21 ("HEAD", "HEAD", git_ref::Kind::Symbolic),
17 ("t1", "refs/tags/t1", git_ref::Kind::Peeled),22 ("t1", "refs/tags/t1", git_ref::Kind::Peeled),