Closed
Description
Current behavior 😯
With the following setup, repo.references()
emits both loose and packed refs.
git init -q
mkdir -p .git/refs/heads/a
echo 4b825dc642cb6eb9a060e54bf8d69288fbee4904 > .git/refs/heads/a-
echo 4b825dc642cb6eb9a060e54bf8d69288fbee4904 > .git/refs/heads/a/b
echo 4b825dc642cb6eb9a060e54bf8d69288fbee4904 > .git/refs/heads/a0
git pack-refs --all
This generates the following packed-refs:
# pack-refs with: peeled fully-peeled sorted
4b825dc642cb6eb9a060e54bf8d69288fbee4904 refs/heads/a-
4b825dc642cb6eb9a060e54bf8d69288fbee4904 refs/heads/a/b
4b825dc642cb6eb9a060e54bf8d69288fbee4904 refs/heads/a0
EOF
Create loose refs:
mkdir -p .git/refs/heads/a
echo 0000000000000000000000000000000000000000 > .git/refs/heads/a-
echo 0000000000000000000000000000000000000000 > .git/refs/heads/a/b
echo 0000000000000000000000000000000000000000 > .git/refs/heads/a0
List all refs:
fn main() {
let path = env::args().nth(1).unwrap();
let repo = gix::open(path).unwrap();
for git_ref in repo.references().unwrap().all().unwrap() {
let git_ref = git_ref.unwrap();
println!("{} {:?}", git_ref.name().as_bstr(), git_ref.target());
}
}
refs/heads/a/b
in packed-refs should be omitted:
refs/heads/a- Object(Sha1(0000000000000000000000000000000000000000))
refs/heads/a/b Object(Sha1(4b825dc642cb6eb9a060e54bf8d69288fbee4904))
refs/heads/a0 Object(Sha1(0000000000000000000000000000000000000000))
refs/heads/a/b Object(Sha1(0000000000000000000000000000000000000000))
I think this is regression caused by the fix for #1850. Maybe we'll need to sort file-system entries in the same way as tree::EntryRef
?
Expected behavior 🤔
No response
Git behavior
No response
Steps to reproduce 🕹
No response