When object is replaced with itself git shows unhelpful messages like(git log):
"fatal: replace depth too high for object <SHA1>"
Prevents user from replacing object with itself(with test for checking
this case).
---
builtin/replace.c | 8 +++-----
t/t6050-replace.sh | 8 ++++++++
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/builtin/replace.c b/builtin/replace.c
index 294b61b..628377a 100644
--- a/builtin/replace.c
+++ b/builtin/replace.c
@@ -157,6 +157,9 @@ static int replace_object_sha1(const char *object_ref,
char ref[PATH_MAX];
struct ref_lock *lock;
+ if (!hashcmp(object, repl))
+ return error("new object is the same as the old one: '%s'",
sha1_to_hex(object));
+
obj_type = sha1_object_info(object, NULL);
repl_type = sha1_object_info(repl, NULL);
if (!force && obj_type != repl_type)
@@ -295,9 +298,6 @@ static int edit_and_replace(const char *object_ref, int
force, int raw)
free(tmpfile);
- if (!hashcmp(old, new))
- return error("new object is the same as the old one: '%s'",
sha1_to_hex(old));
-
return replace_object_sha1(object_ref, old, "replacement", new, force);
}
@@ -406,8 +406,6 @@ static int create_graft(int argc, const char **argv, int
force)
strbuf_release(&buf);
- if (!hashcmp(old, new))
- return error("new commit is the same as the old one: '%s'",
sha1_to_hex(old));
return replace_object_sha1(old_ref, old, "replacement", new, force);
}
diff --git a/t/t6050-replace.sh b/t/t6050-replace.sh
index 4d5a25e..98ac9dd 100755
--- a/t/t6050-replace.sh
+++ b/t/t6050-replace.sh
@@ -440,4 +440,12 @@ test_expect_success GPG '--graft on a commit with a
mergetag' '
git replace -d $HASH10
'
+test_expect_success 'replacing object with itself must fail' '
+ test_must_fail git replace $HASH1 $HASH1 &&
+ HASH8=$(git rev-parse --verify HEAD) &&
+ test_must_fail git replace HEAD $HASH8 &&
+ test_must_fail git replace --graft HEAD HEAD^ &&
+ test_must_fail env GIT_EDITOR=true git replace --edit HEAD
+'
+
test_done
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html