-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'jk/write-broken-index-with-nul-sha1'
Earlier we started rejecting an attempt to add 0{40} object name to the index and to tree objects, but it sometimes is necessary to allow so to be able to use tools like filter-branch to correct such broken tree objects. * jk/write-broken-index-with-nul-sha1: write_index: optionally allow broken null sha1s
- Loading branch information
Showing
3 changed files
with
63 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
#!/bin/sh | ||
|
||
test_description='filter-branch removal of trees with null sha1' | ||
. ./test-lib.sh | ||
|
||
test_expect_success 'setup: base commits' ' | ||
test_commit one && | ||
test_commit two && | ||
test_commit three | ||
' | ||
|
||
test_expect_success 'setup: a commit with a bogus null sha1 in the tree' ' | ||
{ | ||
git ls-tree HEAD && | ||
printf "160000 commit $_z40\\tbroken\\n" | ||
} >broken-tree | ||
echo "add broken entry" >msg && | ||
tree=$(git mktree <broken-tree) && | ||
test_tick && | ||
commit=$(git commit-tree $tree -p HEAD <msg) && | ||
git update-ref HEAD "$commit" | ||
' | ||
|
||
# we have to make one more commit on top removing the broken | ||
# entry, since otherwise our index does not match HEAD (and filter-branch will | ||
# complain). We could make the index match HEAD, but doing so would involve | ||
# writing a null sha1 into the index. | ||
test_expect_success 'setup: bring HEAD and index in sync' ' | ||
test_tick && | ||
git commit -a -m "back to normal" | ||
' | ||
|
||
test_expect_success 'filter commands are still checked' ' | ||
test_must_fail git filter-branch \ | ||
--force --prune-empty \ | ||
--index-filter "git rm --cached --ignore-unmatch three.t" | ||
' | ||
|
||
test_expect_success 'removing the broken entry works' ' | ||
echo three >expect && | ||
git filter-branch \ | ||
--force --prune-empty \ | ||
--index-filter "git rm --cached --ignore-unmatch broken" && | ||
git log -1 --format=%s >actual && | ||
test_cmp expect actual | ||
' | ||
|
||
test_done |