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

Re: git-apply{,mbox,patch} should default to --unidiff-zero

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 6, 2007, 05:41 UTC
Message-ID
<7vd4z6gkbk.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<alpine.LFD.0.98.0707052108070.9434@woody.linux-foundation.org>
Linus Torvalds <torvalds@linux-foundation.org> writes:
> Well, we could make the rule be that we require --unidiff-zero only if 
> there really is _no_ old data to verify in a hunk. No deleted lines, and 
> no context around it.

There are two things --unidiff-zero affects, because git-apply needs to disable otherwise reasonable sanity checks it does for safety:

 - When we see a patch that has only one hunk, and its change
   consists of only deletion, we can verify and complain if the
   header does not say it delete the file.  Not so if the patch
   was created without "diff -u0".  The same applies for "only
   addition" vs.  "creation of the file".
 - When there is no leading context in the hunk, it usually has
   to match only at the beginning of the file (same for
   "following context" vs "at the end of the file"), and we do
   perform this sanity check.  However, "diff -u0" patch needs
   to bypass it, as not having any context is the norm.

Because "diff -u0" is unusual, these sanity checks are disabled only when the user explicitly says --unidiff-zero when applying.

> Adrian has a point in that if there are lines to be deleted, that in 
> itself is context, and then the strict behaviour of "git-apply" is 
> arguably unnecessaily strict.

Not really. That is true, unless you have two identical instances of the group of lines being deleted, in which case you cannot safely tell which instance is to be removed.

Show 10 quoted lines
> That said, I do absolutely _hate_ how GNU patch will basically apply 
> random line noise without complaints. So git-apply is designed to be much 
> stricter on _so_ many levels. The thing that I personally always really 
> detested about GNU patch was how it would apply part of a patch, then fail 
> half-way, and leave the partial patch applied!
>
> git-apply is about a million times better than standard "patch", exactly 
> because it tries to make sure that what it does makes sense, and you 
> actually need to use explicit flags to make it do things that may be hard 
> to undo or slightly questionable.
No question about it.
Previous: Linus TorvaldsNext: Adrian Bunk
Message 8 of 10 in “git-apply{,mbox,patch} should default to --unidiff-zero”
  1. Adrian BunkJul 5, 2007
  2. Johannes SchindelinJul 6, 2007
  3. Adrian BunkJul 6, 2007
  4. Johannes SchindelinJul 6, 2007
  5. Adrian BunkJul 6, 2007
  6. Johannes SchindelinJul 6, 2007
  7. Linus TorvaldsJul 6, 2007
  8. Junio C HamanoJul 6, 2007
  9. Adrian BunkJul 6, 2007
  10. Johannes SchindelinJul 6, 2007

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.