diff options
| author | Christian Couder <chriscool@tuxfamily.org> | 2014-05-17 14:16:35 +0200 | 
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2014-05-19 13:39:53 -0700 | 
| commit | b6e38840921ac4a0fe07e10e632f66736745da10 (patch) | |
| tree | 0027a1009be48eb596edac022cf7f213e47a2577 /builtin/replace.c | |
| parent | f22166b5fee7dc3deaf44dda31d1b5d7ac1fdfd8 (diff) | |
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.c | 31 | 
1 files changed, 20 insertions, 11 deletions
| diff --git a/builtin/replace.c b/builtin/replace.c index 0751804039..3d6edaf7c7 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) | 
