Thread (8 messages) flat view 8 messages, 6 authors, 2016-06-15

Re: [Alt. PATCH] format-patch: do not use diff UI config

From: Jeff King <hidden>
Date: 2016-06-15 22:49:31

On Thu, Sep 09, 2010 at 10:36:54AM +0200, Thomas Rast wrote:
format-patch read and used the diff UI config, such as diff.renames,
diff.noprefix and diff.mnemnoicprefix.  These have a history of
breaking rebase and patch application in general; cf. 840b3ca (rebase:
protect against diff.renames configuration, 2008-11-10).

Instead of continually putting more options inside git-rebase to avoid
these issues, this patch takes the stance that output from
format-patch is intended primarily for git-am and only as a side
effect also for human consumption.  Hence, ignore the diff UI config
entirely when coming from format-patch.

Note that all existing calls to git_log_config except for the one in
git_format_config use a NULL callback.
This was my first thought upon reading Oded's patch, too. We would want
to cut out anything that will cause format-patch to create a patch that
could not be applied. So from your list:
This is a bolder approach that just outright ignores the backwards
compatibility complaints Junio had in 840b3ca.  Among the variables
parsed in git_diff_ui_config, namely

  color.diff (and its legacy alias diff.color)
  diff.renames
  diff.autorefreshindex
  diff.mnemonicprefix
  diff.noprefix
  diff.external
  diff.wordregex
  diff.ignoresubmodules

arguably only diff.renames (and perhaps diff.ignoresubmodules, I don't
use them) should affect format-patch.  Everything else undermines the
guarantee (by having a consistent format) that format-patch|am works.
I would agree that diff.renames should probably be the only thing we
want to allow (because it is not about making a broken diff, but because
the receiver may or may not support it, and we already know that
git-rebase will handle it).

diff.external is debatable. If your external diff is producing real,
applicable diffs, then it is fine to use it. I have to wonder why you
would use an external diff, then. I guess because it's faster, or maybe
has an algorithm that produces equivalent but easier-to-read results
(e.g., patience before we had --patience)?
So now I'm not so sure about diff.renames.  Perhaps it needs to be
retained, but that requires a special case since we cannot move it to
git_diff_basic_config() (which affects diff-* plumbing too).
I think it is reasonable to just move an explicit "diff.renames" check
into format_patch, and then set the diff_options appropriately. It
requires special case code because it _is_ a special case.

-Peff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help