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

Re: [PATCH] Teach git-gui to split hunks

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Jul 26, 2007, 14:34 UTC
Message-ID
<Pine.LNX.4.64.0707261527040.14781@racer.site>
In-Reply-To
<20070726070744.GD18114@spearce.org>
Hi,
On Thu, 26 Jul 2007, Shawn O. Pearce wrote:
Show 5 quoted lines
> [talk about the --unidiff-zero stuff]
> 
> Yea, there's context there.  Junio and I talked about this patch on #git 
> a few minutes ago.  I really appreciate that Dscho wrote it, especially 
> given that he hasn't really been into Tcl hacking for Git much before.

Heh. I did my share of Tcl hacking. In one (closed source) project, I was in constant awe why the devs chose Tcl as a scripting language, but Qt as windowing library (back when it was pretty expensive for a startup to use Qt).

> But I'd really like to save/create context, like `git add -i` does, so 
> that we don't have to use --unidiff-zero here.
See below.
> It won't matter if git-apply rejected overlapping context in this case.  
> git-gui will only ever feed one hunk at a time to git-apply. And if 
> things get really f'd in the diff buffer the user can easily regenerate 
> it (right click, Refresh).

But you're right, the other hunk headers should be updated. I'll have a look at it this weekend.

Show 5 quoted lines
> Right now git-gui's apply doesn't correctly update the other hunk 
> headers when you apply a hunk.  I've seen git-apply fail on some hunks 
> just for this reason.  Refreshing the diff (so git recomputes the 
> headers) works around the issue.  So I'm a little worried about using 
> --unidiff-zero here.

Okay, but just using more context means that you also have to _update_ the context of another hunk. Imagine this:

--- a/x
+++ a/x
 one line
-a removed one
+an added one
 another line

Now you split between the "-" and "+" line.  If you stage the first hunk, 
not only do you have to update the hunk header of the second hunk (now the 
only one shown), which you already hinted should be done; you _also_ have 
to update the context in the second hunk, since it changed.

This is just tricky enough that I am tempted to have a go at it.  Not 
today, though, since I have other work to do, and the issues are easier to 
work around for the moment than to work around the lack of "Split Hunk" 
for me.

BTW did you think about any kind of integrity checking, i.e. see if the 
files involved still have the same hashes as when the diff was generated?  
It _is_ possible to use git-gui _and_ the command line...

Ciao,
Dscho
Previous: Shawn O. PearceNext: Johannes Sixt
Message 4 of 6 in “Teach git-gui to split hunks”
  1. Teach git-gui to split hunksJohannes Schindelin, Jul 26, 2007
  2. David KastrupJul 26, 2007
  3. Shawn O. PearceJul 26, 2007
  4. Johannes SchindelinJul 26, 2007
  5. Johannes SixtJul 26, 2007
  6. Johannes SchindelinJul 26, 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.