Hi Jeff.
Thanks a lot for your response.
Jeff King wrote:
So if I understand correctly, you are only using these for the negative
side of the traversal?
Yes.
Jeff King wrote:
rev-list should ignore missing objects in such a
case even without --ignore-missing, and I think it may simply be a bug
if pack-objects is not.
Do you have a simple reproduction recipe?
Here's a small bash script to illustrate the core issue:
----
add_file()
{
echo "$1" > "$1"
git add "$1"
git commit -m "$1"
}
git init .
git config core.logAllRefUpdates false
add_file "test-1"
add_file "test-2"
git checkout -b feature
add_file "test-3"
add_file "test-4"
git checkout master
add_file "test-5"
add_file "test-6"
feature_tip=$(git rev-list -1 feature)
echo -e "\nDeleting branch 'feature' ($feature_tip)..."
git branch -D feature
git gc --prune=now
echo -e "\nCalling git-pack-objects with (now deleted) ^$feature_tip..."
git pack-objects --all --revs --stdout --thin --delta-base-offset --all-progress-implied
<<< ^$feature_tip > pack
echo -e "\nCalling git-rev-list with (now deleted) ^$feature_tip..."
git rev-list --all ^$feature_tip
echo -e "\nCalling git-rev-list --ignore-missing with (now deleted)
^$feature_tip..."
git rev-list --all --ignore-missing ^$feature_tip
----
Both, git-pack-objects and git-rev-list (without --ignore-missing) fail with
fatal: bad object <feature_tip>
on git version 2.14.1.windows.1.