Merge branch 'kn/ref-cache-seek-fix' into jch

Fix handling of an empty subdirectory of .git/refs/ in the
ref-files backend.

* kn/ref-cache-seek-fix:
  refs/ref-cache: fix SEGFAULT when seeking in empty directories
seen
Junio C Hamano 2025-10-06 10:25:21 -07:00
commit 4ee4cd8747
2 changed files with 66 additions and 1 deletions

View File

@ -539,7 +539,7 @@ static int cache_ref_iterator_seek(struct ref_iterator *ref_iterator,
*/
break;
}
} while (slash);
} while (slash && dir->nr);
}

return 0;

View File

@ -754,4 +754,69 @@ test_expect_success 'start after used with custom sort order' '
test_cmp expect actual
'

test_expect_success 'start after with packed refs' '
test_when_finished "rm -rf repo" &&
git init repo &&
(
cd repo &&
test_commit default &&

git update-ref --stdin <<-\EOF &&
create refs/heads/branch @
create refs/heads/side @
create refs/odd/spot @
create refs/tags/one @
create refs/tags/two @
commit
EOF

cat >expect <<-\EOF &&
refs/tags/default
refs/tags/one
refs/tags/two
EOF

git pack-refs --all &&
git for-each-ref --format="%(refname)" --start-after=refs/odd/spot >actual &&
test_cmp expect actual
)
'

test_expect_success 'start after with packed refs and some loose refs' '
test_when_finished "rm -rf repo" &&
git init repo &&
(
cd repo &&
test_commit default &&

git update-ref --stdin <<-\EOF &&
create refs/heads/branch @
create refs/heads/side @
create refs/odd/spot @
create refs/tags/one @
create refs/tags/two @
commit
EOF

git pack-refs --all &&

git update-ref --stdin <<-\EOF &&
create refs/heads/foo @
create refs/odd/tee @
commit
EOF

cat >expect <<-\EOF &&
refs/odd/tee
refs/tags/default
refs/tags/one
refs/tags/two
EOF


git for-each-ref --format="%(refname)" --start-after=refs/odd/spot >actual &&
test_cmp expect actual
)
'

test_done