summaryrefslogtreecommitdiff
path: root/builtin/replace.c
diff options
context:
space:
mode:
authorChristian Couder <chriscool@tuxfamily.org>2014-05-17 14:16:34 +0200
committerJunio C Hamano <gitster@pobox.com>2014-05-19 13:39:53 -0700
commitf22166b5fee7dc3deaf44dda31d1b5d7ac1fdfd8 (patch)
tree713b6c5f4517245c4547adb7646b900e0f0f89a3 /builtin/replace.c
parentb892bb45eacb484be281a992bef66ea723210717 (diff)
downloadgit-f22166b5fee7dc3deaf44dda31d1b5d7ac1fdfd8.tar.gz
replace: make sure --edit results in a different object
It's a bad idea to create a replace ref for an object that points to the original object itself. That's why we have to check if the result from editing the original object is a different object and error out if it isn't. Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/replace.c')
-rw-r--r--builtin/replace.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/builtin/replace.c b/builtin/replace.c
index 3da1bae0a6..0751804039 100644
--- a/builtin/replace.c
+++ b/builtin/replace.c
@@ -275,6 +275,9 @@ static int edit_and_replace(const char *object_ref, int force)
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);
}