summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Couder <chriscool@tuxfamily.org>2014-05-17 14:16:36 +0200
committerJunio C Hamano <gitster@pobox.com>2014-05-19 13:39:53 -0700
commit24790835738dc098fa6becedc44aac0341b7d5af (patch)
tree85980c644b0fd861e33954a607e5ad103d3486f5
parentb6e38840921ac4a0fe07e10e632f66736745da10 (diff)
downloadgit-24790835738dc098fa6becedc44aac0341b7d5af.tar.gz
replace: die early if replace ref already exists
If a replace ref already exists for an object, it is much better for the user if we error out before we let the user edit the object, rather than after. Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/replace.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/builtin/replace.c b/builtin/replace.c
index 3d6edaf7c7..4ee3d929fa 100644
--- a/builtin/replace.c
+++ b/builtin/replace.c
@@ -268,7 +268,8 @@ static int edit_and_replace(const char *object_ref, int force)
{
char *tmpfile = git_pathdup("REPLACE_EDITOBJ");
enum object_type type;
- unsigned char old[20], new[20];
+ unsigned char old[20], new[20], prev[20];
+ char ref[PATH_MAX];
if (get_sha1(object_ref, old) < 0)
die("Not a valid object name: '%s'", object_ref);
@@ -277,6 +278,8 @@ static int edit_and_replace(const char *object_ref, int force)
if (type < 0)
die("unable to get object type for %s", sha1_to_hex(old));
+ check_ref_valid(old, prev, ref, sizeof(ref), force);
+
export_object(old, tmpfile);
if (launch_editor(tmpfile, NULL, NULL) < 0)
die("editing object file failed");