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

Re: [PATCH 8/9 v13] difftool: teach difftool to handle directory diffs

From
Tim Henigan <tim.henigan@gmail.com>
Date
Apr 18, 2012, 18:28 UTC
Message-ID
<CAFouetgWpyUC9SPo_QwpESrbfib7ct111WesKPP14HQ+SqpFaQ@mail.gmail.com>
In-Reply-To
<7vsjg1knwr.fsf@alter.siamese.dyndns.org>
On Wed, Apr 18, 2012 at 12:25 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 11 quoted lines
> Tim Henigan <tim.henigan@gmail.com> writes:
>
>> So now we must decide how to handle deal with this use case.  It seems
>> there are two options:
>>
>> 1) Append '--no-renames' to the end of the 'git diff --raw' argument
>> list.  This will override any '-C' or '-M' settings.  This is a simple
>> solution, but it loses some information about copies and renames.
>
> Or not use Porcelain "git diff", but use the plumbing "git diff-index" or
> "git diff-files" so that you won't get bitten by such end user settings.

Looking back on it now, I agree that it would have been better to use the plumbing commands from the beginning. Changing from the porcelain to the plumbing commands will require new logic to parse the diff options to figure out which of 'diff-index', 'diff-files' or 'diff-tree' should be called. We may also want to add support for some specific standard diff options (like '-R').

For now, would you object to an updated patch that simply detects and ignores options that change the output of 'git diff --raw'? Or do you think that we need to switch to the plumbing commands before the directory diff feature can be called stable?

I was planning to look for the following:
    --find-renames (and -M)
    --find-copies (and -C)
    --cc (and -c)

If any of the above are detected, 'difftool' would print a warning that the option is not supported and then prune it from the arguments passed to 'git diff --raw'.

> In either case, this "feature", by feeding two entire trees to an external
> program, makes it the responsibility of that external program to match up
> files in these two trees, so we shouldn't be doing rename detection
> ourselves at all.

I agree that we should not try to do it in the 'difftool' command. Unfortunately, it appears that none of the external tools can detect renames or copies.

Previous: Junio C HamanoNext: Junio C Hamano
Message 9 of 14 in “difftool: teach difftool to handle directory diffs”
  1. 8/9 difftool: teach difftool to handle directory diffsTim Henigan, Apr 13, 2012
  2. David AguilarApr 15, 2012
  3. David AguilarApr 16, 2012
  4. David AguilarApr 16, 2012
  5. Tim HeniganApr 17, 2012
  6. David AguilarApr 18, 2012
  7. Tim HeniganApr 18, 2012
  8. Junio C HamanoApr 18, 2012
  9. Tim HeniganApr 18, 2012
  10. Junio C HamanoApr 18, 2012
  11. Tim HeniganApr 19, 2012
  12. Junio C HamanoApr 19, 2012
  13. David AguilarApr 20, 2012
  14. Tim HeniganApr 20, 2012

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.