From: Michael Haggerty Date: Fri, 01 May 2015 12:25:42 GMT Subject: [PATCH 02/18] is_refname_available(): explain the reason for an early exit Message-ID: <1430483158-14349-3-git-send-email-mhagger@alum.mit.edu> In-Reply-To: <1430483158-14349-1-git-send-email-mhagger@alum.mit.edu> The reason why we can exit early if we find a reference in skip whose name is a prefix of refname is a bit subtle, so explain it in a comment. Signed-off-by: Michael Haggerty --- refs.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/refs.c b/refs.c index 2bdd93c..ab438a5 100644 --- a/refs.c +++ b/refs.c @@ -907,8 +907,20 @@ static int is_refname_available(const char *refname, pos = search_ref_dir(dir, refname, slash - refname); if (pos >= 0) { struct ref_entry *entry = dir->entries[pos]; - if (entry_matches(entry, skip)) + if (entry_matches(entry, skip)) { + /* + * The fact that entry is a ref whose + * name is a prefix of refname means + * that there cannot be any other ref + * whose name starts with that prefix + * (because it would have been a D/F + * conflict with entry). So, since we + * don't care about entry (because it + * is in skip), we can stop looking + * now and return true. + */ return 1; + } report_refname_conflict(entry, refname); return 0; } -- 2.1.4