From: Ronnie Sahlberg <sahlberg@google.com>
To: git@vger.kernel.org
Cc: Ronnie Sahlberg <sahlberg@google.com>
Subject: [PATCH v2 01/23] refs.c: create a public function for is_refname_available
Date: Wed, 13 Aug 2014 13:14:45 -0700 [thread overview]
Message-ID: <1407960907-18189-2-git-send-email-sahlberg@google.com> (raw)
In-Reply-To: <1407960907-18189-1-git-send-email-sahlberg@google.com>
Export a generic is_refname_available() function. We will need this
as a public shared function later when we add additional refs backends
since we want to keep using the same rules for ref naming across
all backends.
Signed-off-by: Ronnie Sahlberg <sahlberg@google.com>
---
refs.c | 29 ++++++++++++++++++-----------
refs.h | 6 ++++++
2 files changed, 24 insertions(+), 11 deletions(-)
diff --git a/refs.c b/refs.c
index 7e13c0f..4a22513 100644
--- a/refs.c
+++ b/refs.c
@@ -830,9 +830,9 @@ static int name_conflict_fn(struct ref_entry *entry, void *cb_data)
* operation). skip contains a list of refs we want to skip checking for
* conflicts with.
*/
-static int is_refname_available(const char *refname,
- struct ref_dir *dir,
- const char **skip, int skipnum)
+static int is_refname_available_dir(const char *refname,
+ struct ref_dir *dir,
+ const char **skip, int skipnum)
{
struct name_conflict_cb data;
data.refname = refname;
@@ -1238,6 +1238,18 @@ static struct ref_dir *get_loose_refs(struct ref_cache *refs)
return get_ref_dir(refs->loose);
}
+int is_refname_available(const char *refname, const char **skip, int skipnum)
+{
+ if (!is_refname_available_dir(refname, get_packed_refs(&ref_cache),
+ skip, skipnum))
+ return 0;
+
+ if (!is_refname_available_dir(refname, get_loose_refs(&ref_cache),
+ skip, skipnum))
+ return 0;
+ return 1;
+}
+
/* We allow "recursive" symbolic refs. Only within reason, though */
#define MAXDEPTH 5
#define MAXREFLEN (1024)
@@ -2168,8 +2180,8 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,
* name is a proper prefix of our refname.
*/
if (missing &&
- !is_refname_available(refname, get_packed_refs(&ref_cache),
- skip, skipnum)) {
+ !is_refname_available_dir(refname, get_packed_refs(&ref_cache),
+ skip, skipnum)) {
last_errno = ENOTDIR;
goto error_return;
}
@@ -2676,12 +2688,7 @@ int rename_ref(const char *oldrefname, const char *newrefname, const char *logms
return 1;
}
- if (!is_refname_available(newrefname, get_packed_refs(&ref_cache),
- &oldrefname, 1))
- return 1;
-
- if (!is_refname_available(newrefname, get_loose_refs(&ref_cache),
- &oldrefname, 1))
+ if (!is_refname_available(newrefname, &oldrefname, 1))
return 1;
log = reflog_exists(oldrefname);
diff --git a/refs.h b/refs.h
index f44b5c8..d526da0 100644
--- a/refs.h
+++ b/refs.h
@@ -131,6 +131,12 @@ extern int ref_exists(const char *);
extern int is_branch(const char *refname);
/*
+ * Check that a particular refname is available for creation. skip contains
+ * a list of refnames to exclude from the refname collision tests.
+ */
+int is_refname_available(const char *refname, const char **skip, int skipnum);
+
+/*
* If refname is a non-symbolic reference that refers to a tag object,
* and the tag can be (recursively) dereferenced to a non-tag object,
* store the SHA1 of the referred-to object to sha1 and return 0. If
--
2.0.1.556.g3edca4c
next prev parent reply other threads:[~2014-08-13 20:16 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-13 20:14 [PATCH v2 00/23] backend-struct-db Ronnie Sahlberg
2014-08-13 20:14 ` Ronnie Sahlberg [this message]
2014-08-13 20:14 ` [PATCH v2 02/23] refs-common.c: create a file to host all common refs code Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 03/23] refs-common.c: move update_ref to refs-common.c Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 04/23] refs-common.c: move delete_ref to the common code Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 05/23] refs-common.c: move rename_ref " Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 06/23] refs-common.c: move read_ref_at to the refs common file Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 07/23] refs-common.c: move the hidden refs functions to the common code Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 08/23] refs-common.c: move dwim and friend functions to refs common Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 09/23] refs-common.c: move warn_if_dangling_symref* to refs-common Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 10/23] refs-common.c: move read_ref, read_ref_full and ref_exists to common Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 11/23] refs-common.c: move resolve_refdup " Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 12/23] refs-common.c: move check_refname_component to the common code Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 13/23] refs-common.c: move is_branch " Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 14/23] refs-common.c: move names_conflict " Ronnie Sahlberg
2014-08-13 20:14 ` [PATCH v2 15/23] refs-common.c: move prettify_refname " Ronnie Sahlberg
2014-08-13 20:15 ` [PATCH v2 16/23] refs-common.c: move ref iterators " Ronnie Sahlberg
2014-08-13 20:15 ` [PATCH v2 17/23] refs-common.c: move head_ref_namespaced to the common file Ronnie Sahlberg
2014-08-13 20:15 ` [PATCH v2 18/23] refs.c: add a backend method structure with transaction functions Ronnie Sahlberg
2014-08-26 21:25 ` Junio C Hamano
2014-08-26 22:11 ` Ronnie Sahlberg
2014-08-13 20:15 ` [PATCH v2 19/23] refs.c: add reflog backend methods Ronnie Sahlberg
2014-08-13 20:15 ` [PATCH v2 20/23] refs.c: add methods for misc ref operations Ronnie Sahlberg
2014-08-13 20:15 ` [PATCH v2 21/23] refs.c: add methods for head_ref* Ronnie Sahlberg
2014-08-13 20:15 ` [PATCH v2 22/23] refs.c: add methods for the ref iterators Ronnie Sahlberg
2014-08-13 21:18 ` [PATCH v2 00/23] backend-struct-db Junio C Hamano
2014-08-13 21:55 ` Ronnie Sahlberg
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=1407960907-18189-2-git-send-email-sahlberg@google.com \
--to=sahlberg@google.com \
--cc=git@vger.kernel.org \
/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).