]> git.ipfire.org Git - thirdparty/git.git/commit - git-filter-branch.sh
write_index: optionally allow broken null sha1s
authorJeff King <peff@peff.net>
Tue, 27 Aug 2013 20:41:12 +0000 (16:41 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 29 Aug 2013 03:54:43 +0000 (20:54 -0700)
commit83bd7437ca6acbee0db431fc8ec7cf823d9459ec
tree9bfcce9d17fbc39bf05419b449e45ff9d3613b91
parenta3bc3d070cacf07dbe11b4bfec57554c8bbf1957
write_index: optionally allow broken null sha1s

Commit 4337b58 (do not write null sha1s to on-disk index,
2012-07-28) added a safety check preventing git from writing
null sha1s into the index. The intent was to catch errors in
other parts of the code that might let such an entry slip
into the index (or worse, a tree).

Some existing repositories may have invalid trees that
contain null sha1s already, though.  Until 4337b58, a common
way to clean this up would be to use git-filter-branch's
index-filter to repair such broken entries.  That now fails
when filter-branch tries to write out the index.

Introduce a GIT_ALLOW_NULL_SHA1 environment variable to
relax this check and make it easier to recover from such a
history.

It is tempting to not involve filter-branch in this commit
at all, and instead require the user to manually invoke

GIT_ALLOW_NULL_SHA1=1 git filter-branch ...

to perform an index-filter on a history with trees with null
sha1s.  That would be slightly safer, but requires some
specialized knowledge from the user.  So let's set the
GIT_ALLOW_NULL_SHA1 variable automatically when checking out
the to-be-filtered trees.  Advice on using filter-branch to
remove such entries already exists on places like
stackoverflow, and this patch makes it Just Work again on
recent versions of git.

Further commands that touch the index will still notice and
fail, unless they actually remove the broken entries.  A
filter-branch whose filters do not touch the index at all
will not error out (since we complain of the null sha1 only
on writing, not when making a tree out of the index), but
this is acceptable, as we still print a loud warning, so the
problem is unlikely to go unnoticed.

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-filter-branch.sh
read-cache.c
t/t7009-filter-branch-null-sha1.sh [new file with mode: 0755]