repack: do not accidentally pack kept objects by default
[gitweb.git] / pathspec.c
index c1e69178979c9c13da9566d24e59731809051a07..ad1a9f5b28c5119275fbcf9a53e62651190de137 100644 (file)
@@ -32,7 +32,7 @@ void add_pathspec_matches_against_index(const struct pathspec *pathspec,
        if (!num_unmatched)
                return;
        for (i = 0; i < active_nr; i++) {
-               struct cache_entry *ce = active_cache[i];
+               const struct cache_entry *ce = active_cache[i];
                match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 0, seen);
        }
 }
@@ -57,7 +57,6 @@ char *find_pathspecs_matching_against_index(const struct pathspec *pathspec)
  *
  * Possible future magic semantics include stuff like:
  *
- *     { PATHSPEC_ICASE, '\0', "icase" },
  *     { PATHSPEC_RECURSIVE, '*', "recursive" },
  *     { PATHSPEC_REGEXP, '\0', "regexp" },
  *
@@ -71,6 +70,7 @@ static struct pathspec_magic {
        { PATHSPEC_FROMTOP, '/', "top" },
        { PATHSPEC_LITERAL,   0, "literal" },
        { PATHSPEC_GLOB,   '\0', "glob" },
+       { PATHSPEC_ICASE,  '\0', "icase" },
 };
 
 /*
@@ -95,6 +95,7 @@ static unsigned prefix_pathspec(struct pathspec_item *item,
        static int literal_global = -1;
        static int glob_global = -1;
        static int noglob_global = -1;
+       static int icase_global = -1;
        unsigned magic = 0, short_magic = 0, global_magic = 0;
        const char *copyfrom = elt, *long_magic_end = NULL;
        char *match;
@@ -116,6 +117,12 @@ static unsigned prefix_pathspec(struct pathspec_item *item,
        if (glob_global && noglob_global)
                die(_("global 'glob' and 'noglob' pathspec settings are incompatible"));
 
+
+       if (icase_global < 0)
+               icase_global = git_env_bool(GIT_ICASE_PATHSPECS_ENVIRONMENT, 0);
+       if (icase_global)
+               global_magic |= PATHSPEC_ICASE;
+
        if ((global_magic & PATHSPEC_LITERAL) &&
            (global_magic & ~PATHSPEC_LITERAL))
                die(_("global 'literal' pathspec setting is incompatible "
@@ -224,7 +231,9 @@ static unsigned prefix_pathspec(struct pathspec_item *item,
                const char *start = elt;
                if (prefixlen && !literal_global) {
                        /* Preserve the actual prefix length of each pattern */
-                       if (long_magic_end) {
+                       if (short_magic)
+                               die("BUG: prefixing on short magic is not supported");
+                       else if (long_magic_end) {
                                strbuf_add(&sb, start, long_magic_end - start);
                                strbuf_addf(&sb, ",prefix:%d", prefixlen);
                                start = long_magic_end;