git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Added support for core.ignorecase when excluding gitignore entries

From
Jeff King <peff@peff.net>
Date
Jul 16, 2009, 09:42 UTC
Message-ID
<20090716094210.GC2800@coredump.intra.peff.net>
In-Reply-To
<4A5EB849.1000803@workspacewhiz.com>
On Wed, Jul 15, 2009 at 11:19:05PM -0600, Joshua Jensen wrote:
> This patch allows core.ignorecase=true to work properly with
> gitignore exclusions.

Makes sense, though I can't help but wonder what would happen with a filesystem that did more than just case (like the utf8 normalization that happens on HFS).

Should we actually be converting the filesystem names into a canonical format as they are read? IIRC, Linus posted some patches a few weeks ago about "git path" versus "filesystem path", but I didn't actually look too closely.

That seems like the right way forward to fixing these problems in the long term, but it may make sense to do something like your patch in the meantime.

Show 14 quoted lines
> -                        !strcmp(exclude + 1, pathname + pathlen -
> x->patternlen + 1))
> -                        return to_exclude;
> +                    if (ignore_case) {
> +                        if (x->patternlen - 1 <= pathlen &&
> +                            !strcasecmp(exclude + 1, pathname +
> pathlen - x->patternlen + 1))
> +                            return to_exclude;
> +                    } else {
> +                        if (x->patternlen - 1 <= pathlen &&
> +                            !strcmp(exclude + 1, pathname + pathlen
> - x->patternlen + 1))
> +                            return to_exclude;
> +                    }

If your patch is the right route, it might be nice to collapse the comparison into its own function. You end up cutting and pasting a lot of the related conditionals and returns (like above, where 2 lines become 9), so it might make sense to do something like:

  int filename_cmp(const char *a, const char *b, int ignore_case)
  {
    return ignore_case ? strcasecmp(a, b) : strcmp(a, b);
  }
and then just s/strcmp/filename_cmp/ at the appropriate callsites.
-Peff
Previous: Joshua JensenNext: Joshua Jensen
Message 2 of 5 in “Added support for core.ignorecase when excluding gitignore entries”
  1. Added support for core.ignorecase when excluding gitignore entriesJoshua Jensen, Jul 16, 2009
  2. Jeff KingJul 16, 2009
  3. Joshua JensenJul 16, 2009
  4. Jeff KingJul 20, 2009
  5. Joshua JensenJul 21, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.