On Fri, Mar 29, 2013 at 08:05:40AM -0400, Jeff King wrote:
On Fri, Mar 29, 2013 at 03:45:35PM +0700, Nguyen Thai Ngoc Duy wrote:
quoted
On Fri, Mar 29, 2013 at 4:48 AM, Jeff King [off-list ref] wrote:
quoted
- return fnmatch_icase(pattern, name, FNM_PATHNAME) == 0;
+ return fnmatch_icase_mem(pattern, patternlen,
+ name, namelen,
+ FNM_PATHNAME) == 0;
}
I think you (or Junio) should rebase this on maint. Since c41244e
(included in maint), this call is turned to wildmatch(WM_PATHNAME) and
WM_PATHNAME is _not_ the same as FNM_PATHNAME for patterns like
"foo/**/bar". A diff between next and pu shows me that WM_PATHNAME is
incorrectly converted to FNM_PATHNAME. I hope that is the cause of all
breakages Junio found out on pu.
I don't think we want to rebase; the regression is in the v1.8.1 series,
and I suspected that Junio was planning to ship a v1.8.1.6 with the fix.
The wildmatch code comes in v1.8.2.
So we would want to do any adjustment to the fix when we merge up to
maint.
OK. Then Junio, you may need to resolve the conflict with something
like this. Originally match_basename uses fnmatch, not wildmatch. But
using wildmatch there too should be fine, now that both
match_{base,path}name share fnmatch_icase_mem().
-- 8< --diff --git a/dir.c b/dir.c
index 73a08af..84744df 100644
--- a/dir.c
+++ b/dir.c
@@ -81,7 +81,9 @@ static int fnmatch_icase_mem(const char *pattern, int patternlen,
use_str = str_buf.buf;
}
- match_status = fnmatch_icase(use_pat, use_str, flags);
+ if (ignore_case)
+ flags |= WM_CASEFOLD;
+ match_status = wildmatch(use_pat, use_str, flags, NULL);
strbuf_release(&pat_buf);
strbuf_release(&str_buf);
@@ -564,7 +566,7 @@ int match_pathname(const char *pathname, int pathlen,
return fnmatch_icase_mem(pattern, patternlen,
name, namelen,
- FNM_PATHNAME) == 0;
+ WM_PATHNAME) == 0;
}
/*
-- 8< --