builtin/replace: unset read_replace_refs

When checking to see if some objects are of the same type
and when displaying the type of objects, git replace uses
the sha1_object_info() function.

Unfortunately this function by default respects replace
refs, so instead of the type of a replaced object, it
gives the type of the replacement object which might
be different.

To fix this bug, and because git replace should work at a
level before replacement takes place, let's unset the
read_replace_refs global variable at the beginning of
cmd_replace().

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Christian Couder 2013-12-11 08:46:12 +01:00 committed by Junio C Hamano
parent bbbb4afc26
commit 769a4fa463
2 changed files with 3 additions and 1 deletions

View file

@ -174,6 +174,8 @@ int cmd_replace(int argc, const char **argv, const char *prefix)
OPT_END()
};
read_replace_refs = 0;
argc = parse_options(argc, argv, prefix, options, git_replace_usage, 0);
if (list && delete)

View file

@ -306,7 +306,7 @@ test_expect_success 'test --format medium' '
test_cmp expected actual
'
test_expect_failure 'test --format full' '
test_expect_success 'test --format full' '
{
echo "$H1 (commit) -> $BLOB (blob)" &&
echo "$BLOB (blob) -> $REPLACED (blob)" &&