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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux