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

Re: [PATCH] git gui: show diffs with a minimum of 1 context line

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 30, 2008, 17:19 UTC
Message-ID
<7vtzd2ifot.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<20080830164527.GA25370@localhost>
Clemens Buchacher <drizzd@aon.at> writes:
> git apply does not handle diffs without context correctly.
NAK on this part of the proposed commit log message.

"git-apply" is more anal than other "patch" implementations in that it tries to make sure that a hunk that touches the trailing end actually applies to the trailing end of the file. If a patch is generated with non-zero context, we can detect by presense of trailing context lines that a patch is _not_ about modifying the trailing end, but with a -U0 patch, every hunk will come without trailing context, so you need to disable that safety by asking for --unidiff-zero option.

> ... Configuring git
> gui to show zero context lines therefore breaks staging.

So another option might be to pass --unidiff-zero iff/when it is feeding such a patch to fix this particular "user error" of "git-apply" program.

Having said that,
> In reply to this patch I will send a first attempt at fixing this problem
> instead of avoiding it.

I suspect there are some things "git-apply" should be able to _figure out_ that the user is giving it a -U0 patch and automatically flip unidiff_zero option on. For example, if the _first_ hunk of a patch does not begin with "@@ -0,0 +N,M @@" nor with "@@ -1,L +N,M @@" (i.e. the hunk claims to apply not at the beginning) and the hunk does not have leading context lines, _and_ if that first hunk does not have trailing context lines, then it is clearly a -U0 patch (or it could be a corrupt patch, but let's discount that possibility for now).

Even if the hunk does claim to apply at the beginning, in which case we cannot determine if it is a -U0 patch by looking at the lack of leading context, if it has any context lines, we can tell it is _not_ a -U0 patch. When the first hunk that applies to the beginning lacks any context, we cannot really tell if it is -U0 or not (the other possibility is a total rewrite of the file from the beginning to the end). Even in that case, you could look at the next hunk --- if you have a hunk that applies to the same path after looking at such a "first" hunk without context, then it clearly is a -U0 patch.

Previous: Shawn O. PearceNext: Junio C Hamano
Message 12 of 17 in “git gui: show diffs with a minimum of 1 context line”
  1. git gui: show diffs with a minimum of 1 context lineClemens Buchacher, Aug 30, 2008
  2. git gui: use apply --unidiff-zero when staging hunks without contextClemens Buchacher, Aug 30, 2008
  3. Junio C HamanoAug 30, 2008
  4. git apply: do not match beginning in special unidiff-zero caseClemens Buchacher, Aug 30, 2008
  5. Junio C HamanoAug 30, 2008
  6. git-apply: Loosen "match_beginning" logicJunio C Hamano, Aug 30, 2008
  7. Johannes SixtAug 30, 2008
  8. Clemens BuchacherAug 30, 2008
  9. Junio C HamanoAug 30, 2008
  10. Clemens BuchacherAug 30, 2008
  11. Shawn O. PearceSep 1, 2008
  12. Junio C HamanoAug 30, 2008
  13. Junio C HamanoAug 30, 2008
  14. git gui: show diffs with a minimum of 1 context lineClemens Buchacher, Aug 30, 2008
  15. Shawn O. PearceSep 1, 2008
  16. Clemens BuchacherSep 1, 2008
  17. Shawn O. PearceSep 1, 2008

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.