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

Re: Filenames and prefixes in extended diffs

From
Junio C Hamano <gitster@pobox.com>
Date
Jan 14, 2010, 00:16 UTC
Message-ID
<7vfx69k0bu.fsf@alter.siamese.dyndns.org>
In-Reply-To
<201001131713.05505.agruen@suse.de>
Andreas Gruenbacher <agruen@suse.de> writes:
> Can git be changed to ...
Just to save your time coming up with more ways to *change* git diff...

Even though I wouldn't say _any_ change is too late to bring in, change in the output format from "git diff" family _must_ be usable by "git apply" people have been using for the last 4 years or so.

Suppose your updated version of "git diff" with a certain set of options produces output A, which is different from the output B you would get out of today's "git diff" that is run with the same set of options.

If "git apply" people have been using understands B (i.e. current output) and does something, the format change between A and B must be designed in such a way that the same "git apply" accepts A (i.e. your output) and do the same thing.

Two examples:
 - "git diff -M" (or "git show -M") is _defined_ to show the filenames
   without prefix on "rename from" line, and deployed "git apply" relies
   on this definition to apply the patch to the file the patch was meant
   to apply.  If your modified "git diff -M" changes it to add the prefix,
   and existing "git apply" changes behaviour (either by rejecting your
   output, or applying the patch to a wrong file), then such a change has
   *no chance* of getting in.  It is merely a breakage.
 - If you say "git diff --src-prefix=a/b/c --dst-prefix=x/y", it _might_
   produce something "git apply" won't grok (I haven't checked this,
   though).  You can suggest to change the output from such a case to work
   better.  We didn't work as expected so a change _could_ be a fix.

The output from "git diff --no-index" is an exception to the above rule. It is primarily for people who have unmanaged contents and want to use features of the git diff engine that are not found in other people's diff implementations (e.g. wordwise colored diff), and the header part of its output does not currently follow "git diff" convention to be grokkable by "git apply".

Fixing _that_ is a welcome change, but I suspect that there are corner cases, e.g. "git diff --no-index frotz-1.2.36/ /tmp/frotz/" (i.e. you have a pristine version in frotz-1.2.36 directory, but your modified version is in /tmp/frtoz/) that might make fixing it fundamentally impossible (I haven't looked into it for a long time, so it could be easy, but my gut feeling is it isn't).

Previous: Junio C HamanoNext: Nanako Shiraishi
Message 3 of 20 in “Filenames and prefixes in extended diffs”
  1. Andreas GruenbacherJan 13, 2010
  2. Junio C HamanoJan 13, 2010
  3. Junio C HamanoJan 14, 2010
  4. Nanako ShiraishiJan 15, 2010
  5. Junio C HamanoJan 15, 2010
  6. grep: prepare to run outside of a work treeJunio C Hamano, Jan 15, 2010
  7. grep --no-index: allow use of "git grep" outside a git repositoryJunio C Hamano, Jan 15, 2010
  8. Jeff KingJan 15, 2010
  9. Junio C HamanoJan 16, 2010
  10. Jeff KingJan 16, 2010
  11. Junio C HamanoJan 16, 2010
  12. David AguilarJan 16, 2010
  13. Junio C HamanoJan 16, 2010
  14. Jeff KingJan 18, 2010
  15. Junio C HamanoJan 18, 2010
  16. Junio C HamanoJan 18, 2010
  17. Jeff KingJan 18, 2010
  18. Junio C HamanoJan 18, 2010
  19. Jeff KingJan 18, 2010
  20. Andreas GruenbacherJan 18, 2010

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.