On Thu, Dec 20, 2012 at 08:28:57AM +0700, Nguyen Thai Ngoc Duy wrote:

> > So I think this is a nice, simple approach for sites that want it, and
> > noglob magic can come later (and will not be any harder to implement as
> > a result of this patch).
> 
> Any chance to make use of nd/pathspec-wildcard? It changes the same
> code path in match_one. If you base on top of nd/pathspec-wildcard,
> all you have to do is assign nowildcard_len to len (i.e. no wildcard
> part).

I'd rather keep it separate for now. One, just because they really are
independent topics, and two, because I am actually back-porting it for
GitHub (we are fairly conservative about upgrading our backend git
versions, as most of the interesting stuff happens on the client side; I
cherry-pick critical patches with no regard to the release cycle).

And the resolution is pretty trivial, too. It looks like this:

diff --cc dir.c
index 5c0e5f6,03ff36b..81cb439
--- a/dir.c
+++ b/dir.c
@@@ -1456,14 -1433,10 +1460,18 @@@ int init_pathspec(struct pathspec *path
  
                item->match = path;
                item->len = strlen(path);
-               item->nowildcard_len = simple_length(path);
 -              item->use_wildcard = !limit_pathspec_to_literal() &&
 -                                   !no_wildcard(path);
 -              if (item->use_wildcard)
 -                      pathspec->has_wildcard = 1;
 +              item->flags = 0;
-               if (item->nowildcard_len < item->len) {
-                       pathspec->has_wildcard = 1;
-                       if (path[item->nowildcard_len] == '*' &&
-                           no_wildcard(path + item->nowildcard_len + 1))
-                               item->flags |= PATHSPEC_ONESTAR;
++              if (limit_pathspec_to_literal())
++                      item->nowildcard_len = item->len;
++              else {
++                      item->nowildcard_len = simple_length(path);
++                      if (item->nowildcard_len < item->len) {
++                              pathspec->has_wildcard = 1;
++                              if (path[item->nowildcard_len] == '*' &&
++                                  no_wildcard(path + item->nowildcard_len + 
1))
++                                      item->flags |= PATHSPEC_ONESTAR;
++                      }
 +              }
        }
  
        qsort(pathspec->items, pathspec->nr,

Not re-indenting the conditional would make the diff more readable, but
I think the resulting code is simpler to read if all of the wildcard
stuff is inside the "else" block.

-Peff
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to