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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Clemens Buchacher <drizzd@xxxxxx> 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.

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux