Unified · Split
| @@ -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), |
| @@ -6,8 +6,15 @@ git config commit.gpgsign false · 5 unmodified lines | |||
| 6 | 6 | ||
| 7 | git checkout -q -b main | 7 | git checkout -q -b main |
| 8 | git commit -q --allow-empty -m c1 | 8 | git commit -q --allow-empty -m c1 |
| 9 | git branch dt1 | ||
| 10 | git branch d1 | ||
| 9 | 11 | ||
| 10 | mkdir -p .git/refs/remotes/origin | 12 | mkdir -p .git/refs/remotes/origin |
| 13 | |||
| 11 | cp .git/refs/heads/main .git/refs/remotes/origin/ | 14 | 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 | ||
| 12 | 18 | ||
| 13 | git tag t1 | 19 | git tag t1 |
| 20 | git tag dt1 | ||
| @@ -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), |