packed-ref cache: forbid dot-components in refnames

Since v1.7.9-rc1~10^2 (write_head_info(): handle "extra refs" locally, 2012-01-06), this trick to keep track of ".have" refs that are only valid on the wire and not on the filesystem is not needed any more. Simplify by removing support for the REFNAME_DOT_COMPONENT flag. This means we'll be slightly stricter with invalid refs found in a packed-refs file or during clone. read_loose_refs() already checks for and skips refnames with .components so it is not affected. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Reviewed-by: Ronnie Sahlberg <sahlberg@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jonathan Nieder committed Sep 26, 2014 at 12:22 UTC f3cc52d840418c1a38bb4ae9a09a479e77d95e77
2 files changed +4 -16
refs.c
+3 -11
@@ -70,16 +70,8 @@ static int check_refname_component(const char *refname, int flags)
70 out:
71 if (cp == refname)
72 return 0; /* Component has zero length. */
73 - if (refname[0] == '.') {
74 - if (!(flags & REFNAME_DOT_COMPONENT))
75 - return -1; /* Component starts with '.'. */
76 - /*
77 - * Even if leading dots are allowed, don't allow "."
78 - * as a component (".." is prevented by a rule above).
79 - */
80 - if (refname[1] == '\0')
81 - return -1; /* Component equals ".". */
82 - }
73 + if (refname[0] == '.')
74 + return -1; /* Component starts with '.'. */
75 if (cp - refname >= LOCK_SUFFIX_LEN &&
76 !memcmp(cp - LOCK_SUFFIX_LEN, LOCK_SUFFIX, LOCK_SUFFIX_LEN))
77 return -1; /* Refname ends with ".lock". */
@@ -290,7 +282,7 @@ static struct ref_entry *create_ref_entry(const char *refname,
282 struct ref_entry *ref;
283
284 if (check_name &&
293 - check_refname_format(refname, REFNAME_ALLOW_ONELEVEL|REFNAME_DOT_COMPONENT))
285 + check_refname_format(refname, REFNAME_ALLOW_ONELEVEL))
286 die("Reference has invalid format: '%s'", refname);
287 len = strlen(refname) + 1;
288 ref = xmalloc(sizeof(struct ref_entry) + len);
refs.h
+1 -5
@@ -229,7 +229,6 @@ extern int for_each_reflog(each_ref_fn, void *);
229
230 #define REFNAME_ALLOW_ONELEVEL 1
231 #define REFNAME_REFSPEC_PATTERN 2
232 -#define REFNAME_DOT_COMPONENT 4
232
233 /*
234 * Return 0 iff refname has the correct format for a refname according
@@ -237,10 +236,7 @@ extern int for_each_reflog(each_ref_fn, void *);
236 * If REFNAME_ALLOW_ONELEVEL is set in flags, then accept one-level
237 * reference names. If REFNAME_REFSPEC_PATTERN is set in flags, then
238 * allow a "*" wildcard character in place of one of the name
240 - * components. No leading or repeated slashes are accepted. If
241 - * REFNAME_DOT_COMPONENT is set in flags, then allow refname
242 - * components to start with "." (but not a whole component equal to
243 - * "." or "..").
239 + * components. No leading or repeated slashes are accepted.
240 */
241 extern int check_refname_format(const char *refname, int flags);
242