Browse Source

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>
maint
Christian Couder 11 years ago committed by Junio C Hamano
parent
commit
769a4fa463
  1. 2
      builtin/replace.c
  2. 2
      t/t6050-replace.sh

2
builtin/replace.c

@ -174,6 +174,8 @@ int cmd_replace(int argc, const char **argv, const char *prefix) @@ -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)

2
t/t6050-replace.sh

@ -306,7 +306,7 @@ test_expect_success 'test --format medium' ' @@ -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)" &&

Loading…
Cancel
Save