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

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

From
Wincent Colaiuta <win@wincent.com>
Date
Dec 12, 2007, 23:02 UTC
Message-ID
<0B657FBB-A1D9-4C86-BC80-C33F92D7AF77@wincent.com>
In-Reply-To
<7vk5nj7jkp.fsf@gitster.siamese.dyndns.org>
El 12/12/2007, a las 21:18, Junio C Hamano escribió:
Show 30 quoted lines
> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
>
>> When you select the context menu item "Split Hunk" in the diff area,
>> git-gui will now split the current hunk so that a new hunk starts at
>> the current position.
>>
>> For this to work, apply has to be called with --unidiff-zero, since
>> the new hunks can start or stop with a "-" or "+" line.
>> ...
>
> I still have conceptual problem with this whole thing.  For example,
> what does that MEAN to split this hunk from your patch...
>
>> @@ -296,7 +369,7 @@ proc apply_hunk {x y} {
>> 	if {$current_diff_path eq {} || $current_diff_header eq {}} return
>> 	if {![lock_index apply_hunk]} return
>>
>> -	set apply_cmd {apply --cached --whitespace=nowarn}
>> +	set apply_cmd {apply --cached --whitespace=nowarn --unidiff-zero}
>> 	set mi [lindex $file_states($current_diff_path) 0]
>> 	if {$current_diff_side eq $ui_index} {
>> 		set failed_msg [mc "Failed to unstage selected hunk."]
>
> ... by clicking between the '-' and '+' lines, and apply only one  
> half?
>
> Well, the question was not very well stated.  I know what it means --
> remove that old line, without replacing with the corrected/updated  
> one.
> The real question is how would that be useful?

I don't know if it would be useful, but I think the more important concern here is consistency. ie. it should split hunks the same way "git add -i" does. Both "git gui" and "git add -i" are official parts of Git, so in the interests of coherency they should share the same concept of "what it means to split a hunk".

"git add -i" considers any hunk where a there are multiple groups of deletions and/or insertions separated by context lines to be "splittable" (on the boundaries defined by those intervening context line), and all others to be unsplittable. I think this is a fairly intuitive way to conceptualize splitting, so if it comes down to making "git gui" split like "git add -i", or making "git add -i" split like this patch proposes that "git gui" should do it, then I'd vote for the former.

Cheers, Wincent

Previous: Junio C HamanoNext: Johannes Sixt
Message 18 of 31 in “[ANNOUNCE] ugit: a pyqt-based git gui // was: Re: If you would write git from scratch now, what would you change?”
  1. DavidDec 11, 2007
  2. Marco CostalbaDec 11, 2007
  3. Jason SewallDec 11, 2007
  4. Marco CostalbaDec 11, 2007
  5. DavidDec 11, 2007
  6. Jason SewallDec 11, 2007
  7. Shawn O. PearceDec 12, 2007
  8. Jason SewallDec 12, 2007
  9. Shawn O. PearceDec 12, 2007
  10. Jason SewallDec 12, 2007
  11. Johannes SchindelinDec 12, 2007
  12. Jason SewallDec 12, 2007
  13. Teach git-gui to split hunksJohannes Schindelin, Dec 12, 2007
  14. Junio C HamanoDec 12, 2007
  15. Johannes SchindelinDec 12, 2007
  16. Jean-François VeilletteDec 12, 2007
  17. Junio C HamanoDec 12, 2007
  18. Wincent ColaiutaDec 12, 2007
  19. Johannes SixtDec 13, 2007
  20. Shawn O. PearceDec 13, 2007
  21. Johannes SchindelinDec 13, 2007
  22. Junio C HamanoDec 13, 2007
  23. Johannes SixtDec 13, 2007
  24. Johannes SchindelinDec 13, 2007
  25. Johannes SixtDec 13, 2007
  26. Johannes SchindelinDec 13, 2007
  27. git-gui: Move frequently used commands to the top of the context menu.Johannes Sixt, Dec 13, 2007
  28. Shawn O. PearceDec 14, 2007
  29. Alex RiesenDec 11, 2007
  30. Steffen ProhaskaDec 11, 2007
  31. Jakub NarebskiDec 12, 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.