summaryrefslogtreecommitdiff
path: root/builtin/replace.c
diff options
context:
space:
mode:
authorChristian Couder <chriscool@tuxfamily.org>2014-05-17 12:16:35 (GMT)
committerJunio C Hamano <gitster@pobox.com>2014-05-19 20:39:53 (GMT)
commitb6e38840921ac4a0fe07e10e632f66736745da10 (patch)
tree0027a1009be48eb596edac022cf7f213e47a2577 /builtin/replace.c
parentf22166b5fee7dc3deaf44dda31d1b5d7ac1fdfd8 (diff)
downloadgit-b6e38840921ac4a0fe07e10e632f66736745da10.zip
git-b6e38840921ac4a0fe07e10e632f66736745da10.tar.gz
git-b6e38840921ac4a0fe07e10e632f66736745da10.tar.bz2
replace: refactor checking ref validity
This will be useful in a following commit when we will want to check if the ref already exists before we let the user edit an object. 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.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/builtin/replace.c b/builtin/replace.c
index 0751804..3d6edaf 100644
--- a/builtin/replace.c
+++ b/builtin/replace.c
@@ -124,6 +124,25 @@ static int delete_replace_ref(const char *name, const char *ref,
return 0;
}
+static void check_ref_valid(unsigned char object[20],
+ unsigned char prev[20],
+ char *ref,
+ int ref_size,
+ int force)
+{
+ if (snprintf(ref, ref_size,
+ "refs/replace/%s",
+ sha1_to_hex(object)) > ref_size - 1)
+ die("replace ref name too long: %.*s...", 50, ref);
+ if (check_refname_format(ref, 0))
+ die("'%s' is not a valid ref name.", ref);
+
+ if (read_ref(ref, prev))
+ hashclr(prev);
+ else if (!force)
+ die("replace ref '%s' already exists", ref);
+}
+
static int replace_object_sha1(const char *object_ref,
unsigned char object[20],
const char *replace_ref,
@@ -135,13 +154,6 @@ static int replace_object_sha1(const char *object_ref,
char ref[PATH_MAX];
struct ref_lock *lock;
- if (snprintf(ref, sizeof(ref),
- "refs/replace/%s",
- sha1_to_hex(object)) > sizeof(ref) - 1)
- die("replace ref name too long: %.*s...", 50, ref);
- if (check_refname_format(ref, 0))
- die("'%s' is not a valid ref name.", ref);
-
obj_type = sha1_object_info(object, NULL);
repl_type = sha1_object_info(repl, NULL);
if (!force && obj_type != repl_type)
@@ -151,10 +163,7 @@ static int replace_object_sha1(const char *object_ref,
object_ref, typename(obj_type),
replace_ref, typename(repl_type));
- if (read_ref(ref, prev))
- hashclr(prev);
- else if (!force)
- die("replace ref '%s' already exists", ref);
+ check_ref_valid(object, prev, ref, sizeof(ref), force);
lock = lock_any_ref_for_update(ref, prev, 0, NULL);
if (!lock)