OSDN Git Service

replace: die early if replace ref already exists
authorChristian Couder <chriscool@tuxfamily.org>
Sat, 17 May 2014 12:16:36 +0000 (14:16 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 19 May 2014 20:39:53 +0000 (13:39 -0700)
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>
builtin/replace.c

index 3d6edaf..4ee3d92 100644 (file)
@@ -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");