pathspec: create parse_element_magic helper
[gitweb.git] / pathspec.c
index f6356bde16fcd3d85dfbb906b042c7b40a4487a6..00fcae4e1e9aeac6df2e9002126848589538e75b 100644 (file)
@@ -245,6 +245,19 @@ static const char *parse_short_magic(unsigned *magic, const char *elem)
        return pos;
 }
 
+static const char *parse_element_magic(unsigned *magic, int *prefix_len,
+                                      const char *elem)
+{
+       if (elem[0] != ':' || get_literal_global())
+               return elem; /* nothing to do */
+       else if (elem[1] == '(')
+               /* longhand */
+               return parse_long_magic(magic, prefix_len, elem);
+       else
+               /* shorthand */
+               return parse_short_magic(magic, elem);
+}
+
 /*
  * Take an element of a pathspec and check for magic signatures.
  * Append the result to the prefix. Return the magic bitmap.
@@ -267,26 +280,16 @@ static unsigned prefix_pathspec(struct pathspec_item *item, unsigned flags,
        char *match;
        int i, pathspec_prefix = -1;
 
-       if (elt[0] != ':' || get_literal_global() ||
-           (flags & PATHSPEC_LITERAL_PATH)) {
-               ; /* nothing to do */
-       } else if (elt[1] == '(') {
-               /* longhand */
-               copyfrom = parse_long_magic(&element_magic,
-                                           &pathspec_prefix,
-                                           elt);
-       } else {
-               /* shorthand */
-               copyfrom = parse_short_magic(&element_magic, elt);
-       }
-
-       magic |= element_magic;
-
        /* PATHSPEC_LITERAL_PATH ignores magic */
-       if (flags & PATHSPEC_LITERAL_PATH)
+       if (flags & PATHSPEC_LITERAL_PATH) {
                magic = PATHSPEC_LITERAL;
-       else
+       } else {
+               copyfrom = parse_element_magic(&element_magic,
+                                              &pathspec_prefix,
+                                              elt);
+               magic |= element_magic;
                magic |= get_global_magic(element_magic);
+       }
 
        if (pathspec_prefix >= 0 &&
            (prefixlen || (prefix && *prefix)))