Browse Source

pathspec: create parse_short_magic function

Factor out the logic responsible for parsing short magic into its own
function.

Signed-off-by: Brandon Williams <bmwill@google.com>
Reviewed-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Brandon Williams 8 years ago committed by Junio C Hamano
parent
commit
b4bebdce83
  1. 54
      pathspec.c

54
pathspec.c

@ -156,6 +156,41 @@ static int get_global_magic(int element_magic) @@ -156,6 +156,41 @@ static int get_global_magic(int element_magic)
return global_magic;
}

/*
* Parse the pathspec element looking for short magic
*
* saves all magic in 'magic'
* returns the position in 'elem' after all magic has been parsed
*/
static const char *parse_short_magic(unsigned *magic, const char *elem)
{
const char *pos;

for (pos = elem + 1; *pos && *pos != ':'; pos++) {
char ch = *pos;
int i;

if (!is_pathspec_magic(ch))
break;

for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++) {
if (pathspec_magic[i].mnemonic == ch) {
*magic |= pathspec_magic[i].bit;
break;
}
}

if (ARRAY_SIZE(pathspec_magic) <= i)
die(_("Unimplemented pathspec magic '%c' in '%s'"),
ch, elem);
}

if (*pos == ':')
pos++;

return pos;
}

/*
* Take an element of a pathspec and check for magic signatures.
* Append the result to the prefix. Return the magic bitmap.
@ -220,24 +255,7 @@ static unsigned prefix_pathspec(struct pathspec_item *item, unsigned flags, @@ -220,24 +255,7 @@ static unsigned prefix_pathspec(struct pathspec_item *item, unsigned flags,
copyfrom++;
} else {
/* shorthand */
for (copyfrom = elt + 1;
*copyfrom && *copyfrom != ':';
copyfrom++) {
char ch = *copyfrom;

if (!is_pathspec_magic(ch))
break;
for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++)
if (pathspec_magic[i].mnemonic == ch) {
element_magic |= pathspec_magic[i].bit;
break;
}
if (ARRAY_SIZE(pathspec_magic) <= i)
die(_("Unimplemented pathspec magic '%c' in '%s'"),
ch, elt);
}
if (*copyfrom == ':')
copyfrom++;
copyfrom = parse_short_magic(&element_magic, elt);
}

magic |= element_magic;

Loading…
Cancel
Save