зеркало из https://github.com/microsoft/git.git
Change bad_ref_char() to return a boolean value
Previously most bad characters were indicated by returning 1, but "*" was special-cased to return 2 instead of 1. One caller examined the return value to see whether the special case occurred. But it is easier (to document and understand) for bad_ref_char() simply to return a boolean value, treating "*" like any other bad character. Special-case the handling of "*" (which only occurs in very specific circumstances) at the caller. The resulting calling code thereby also becomes more transparent. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
e4ed6105ec
Коммит
9224b73be0
15
refs.c
15
refs.c
|
@ -860,22 +860,21 @@ int for_each_rawref(each_ref_fn fn, void *cb_data)
|
|||
* - it contains a "\" (backslash)
|
||||
*/
|
||||
|
||||
/* Return true iff ch is not allowed in reference names. */
|
||||
static inline int bad_ref_char(int ch)
|
||||
{
|
||||
if (((unsigned) ch) <= ' ' || ch == 0x7f ||
|
||||
ch == '~' || ch == '^' || ch == ':' || ch == '\\')
|
||||
return 1;
|
||||
/* 2.13 Pattern Matching Notation */
|
||||
if (ch == '?' || ch == '[') /* Unsupported */
|
||||
if (ch == '*' || ch == '?' || ch == '[') /* Unsupported */
|
||||
return 1;
|
||||
if (ch == '*') /* Supported at the end */
|
||||
return 2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int check_ref_format(const char *ref)
|
||||
{
|
||||
int ch, level, bad_type, last;
|
||||
int ch, level, last;
|
||||
int ret = CHECK_REF_FORMAT_OK;
|
||||
const char *cp = ref;
|
||||
|
||||
|
@ -890,9 +889,8 @@ int check_ref_format(const char *ref)
|
|||
/* we are at the beginning of the path component */
|
||||
if (ch == '.')
|
||||
return CHECK_REF_FORMAT_ERROR;
|
||||
bad_type = bad_ref_char(ch);
|
||||
if (bad_type) {
|
||||
if (bad_type == 2 && (!*cp || *cp == '/') &&
|
||||
if (bad_ref_char(ch)) {
|
||||
if (ch == '*' && (!*cp || *cp == '/') &&
|
||||
ret == CHECK_REF_FORMAT_OK)
|
||||
ret = CHECK_REF_FORMAT_WILDCARD;
|
||||
else
|
||||
|
@ -902,8 +900,7 @@ int check_ref_format(const char *ref)
|
|||
last = ch;
|
||||
/* scan the rest of the path component */
|
||||
while ((ch = *cp++) != 0) {
|
||||
bad_type = bad_ref_char(ch);
|
||||
if (bad_type)
|
||||
if (bad_ref_char(ch))
|
||||
return CHECK_REF_FORMAT_ERROR;
|
||||
if (ch == '/')
|
||||
break;
|
||||
|
|
Загрузка…
Ссылка в новой задаче