From: Christian Couder <chriscool@tuxfamily.org>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Jeff King <peff@peff.net>
Subject: [PATCH v3 06/10] replace: refactor checking ref validity
Date: Sat, 17 May 2014 14:16:35 +0200 [thread overview]
Message-ID: <20140517121640.27582.62187.chriscool@tuxfamily.org> (raw)
In-Reply-To: <20140517120649.27582.58609.chriscool@tuxfamily.org>
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>
---
builtin/replace.c | 31 ++++++++++++++++++++-----------
1 file 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)
--
1.9.rc0.17.g651113e
next prev parent reply other threads:[~2014-05-17 15:58 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-17 12:16 [PATCH v3 00/10] replace: add option to edit a Git object Christian Couder
2014-05-17 12:16 ` [PATCH v3 01/10] replace: refactor command-mode determination Christian Couder
2014-05-17 12:16 ` [PATCH v3 02/10] replace: use OPT_CMDMODE to handle modes Christian Couder
2014-05-17 12:16 ` [PATCH v3 03/10] replace: factor object resolution out of replace_object Christian Couder
2014-05-17 12:16 ` [PATCH v3 04/10] replace: add --edit option Christian Couder
2014-05-17 12:16 ` [PATCH v3 05/10] replace: make sure --edit results in a different object Christian Couder
2014-05-17 12:16 ` Christian Couder [this message]
2014-05-17 12:16 ` [PATCH v3 07/10] replace: die early if replace ref already exists Christian Couder
2014-05-17 12:16 ` [PATCH v3 08/10] replace: add tests for --edit Christian Couder
2014-05-17 12:16 ` [PATCH v3 09/10] replace: add --edit to usage string Christian Couder
2014-05-17 12:16 ` [PATCH v3 10/10] Documentation: replace: describe new --edit option Christian Couder
2014-05-19 20:39 ` [PATCH v3 00/10] replace: add option to edit a Git object Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140517121640.27582.62187.chriscool@tuxfamily.org \
--to=chriscool@tuxfamily.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).