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

[BUG] git-diff-* --color oddness

From
Jeff King <peff@peff.net>
Date
Jan 4, 2008, 08:14 UTC
Message-ID
<20080104081429.GA30635@coredump.intra.peff.net>

I encountered some weirdness today with git-diff-{files,tree,index} and --color. They parse the --color command line option, but do _not_ call git_config(git_diff_ui_config), so if the user has colors specified in the config, they are not used.

Ordinarily, I would say "nobody should use --color with diff-files". But we do, in git-add--interactive (see Wincent's 4af756f3). So we can probably fix that with a "git_diff_minimal_ui_config" which does just the colors, and use that from the plumbing diff scripts (or just move the color stuff into git_default_config).

But it gets worse. Try this:
  # make a custom color
  git config color.diff.meta yellow
  # now show a plumbing diff
  git diff-tree --color -p 257f3020^ 257f3020

The first two lines of meta-info will be in the stock colors, but everything after will be in the custom colors. So we are actually reading the diff_ui options _during_ the diff. The culprit is funcname_pattern, which calls read_config_if_needed.

It's my understanding that diff_ui_config is about porcelain diff options, so it is a bit worrisome that in the middle of a plumbing diff process, we load porcelain config. Fortunately, most of them aren't looked at except in diff_setup, which has already run. Colors actually affect globals which are used during the diff, and so are noticed.

So I think the best course is probably:
  1. before v1.5.4, we need to fix the color handling in "git-diff -i",
     either by declaring git-diff-files --color illegal and finding
     another way to do 4af756f3, or by moving the diff color
     functionality into the default config.
  2. Probably post-v1.5.4, some thought should be given to
     how the diff ui config is demand-loaded by
     diff.c:read_config_if_needed. I don't _think_ it is a problem for
     now except for the colors, because most parts just get used in
     diff_setup. But it seems a bit flaky.
-Peff
Next: Junio C Hamano
Message 1 of 12 in “[BUG] git-diff-* --color oddness”
  1. Jeff KingJan 4, 2008
  2. Junio C HamanoJan 4, 2008
  3. Jeff KingJan 4, 2008
  4. Junio C HamanoJan 4, 2008
  5. Jeff KingJan 4, 2008
  6. Junio C HamanoJan 4, 2008
  7. Jeff KingJan 4, 2008
  8. Junio C HamanoJan 4, 2008
  9. Jeff KingJan 4, 2008
  10. Jeff KingJan 4, 2008
  11. Junio C HamanoJan 4, 2008
  12. Jeff KingJan 4, 2008

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.