diff options
-rw-r--r-- | refs.c | 20 |
1 files changed, 13 insertions, 7 deletions
@@ -1057,8 +1057,15 @@ static int remove_empty_directories(const char *file) return result; } +/* + * Return true iff a reference named refname could be created without + * conflicting with the name of an existing reference. If oldrefname + * is non-NULL, ignore potential conflicts with oldrefname (e.g., + * because oldrefname is scheduled for deletion in the same + * operation). + */ static int is_refname_available(const char *refname, const char *oldrefname, - struct ref_array *array, int quiet) + struct ref_array *array) { int i, namlen = strlen(refname); /* e.g. 'foo/bar' */ for (i = 0; i < array->nr; i++ ) { @@ -1070,9 +1077,8 @@ static int is_refname_available(const char *refname, const char *oldrefname, const char *lead = (namlen < len) ? entry->name : refname; if (!strncmp(refname, entry->name, cmplen) && lead[cmplen] == '/') { - if (!quiet) - error("'%s' exists; cannot create '%s'", - entry->name, refname); + error("'%s' exists; cannot create '%s'", + entry->name, refname); return 0; } } @@ -1213,7 +1219,7 @@ 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, NULL, get_packed_refs(NULL), 0)) { + !is_refname_available(refname, NULL, get_packed_refs(NULL))) { last_errno = ENOTDIR; goto error_return; } @@ -1367,10 +1373,10 @@ int rename_ref(const char *oldrefname, const char *newrefname, const char *logms if (!symref) return error("refname %s not found", oldrefname); - if (!is_refname_available(newrefname, oldrefname, get_packed_refs(NULL), 0)) + if (!is_refname_available(newrefname, oldrefname, get_packed_refs(NULL))) return 1; - if (!is_refname_available(newrefname, oldrefname, get_loose_refs(NULL), 0)) + if (!is_refname_available(newrefname, oldrefname, get_loose_refs(NULL))) return 1; if (log && rename(git_path("logs/%s", oldrefname), git_path(TMP_RENAMED_LOG))) |