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

Re: [RFC PATCH v5 2/4] add -p: select modified lines correctly

From
PWPhillip Wood <phillip.wood@talktalk.net>
Date
Jul 27, 2018, 10:19 UTC
Message-ID
<2e78e077-1801-9c92-6b53-badf588fe262@talktalk.net>
In-Reply-To
<xmqqmuudpzfl.fsf@gitster-ct.c.googlers.com>
Hi Junio, thanks for the comments
On 26/07/18 20:30, Junio C Hamano wrote:
Show 35 quoted lines
> Phillip Wood <phillip.wood@talktalk.net> writes:
> 
> An interesting problem you are solving ;-)
> 
>> For example given the hunk
>>       1 -* a longer description of the
>>       2 -  first item
>>       3 -* second
>>       4 -* third
>>       5 +* first
>>       6 +  second item
>>       7 +* the third item
>>
>> If the user selects 1,2,4–5,7 then we should generate
>> 	-* a longer description of the
>> 	-  first item
>> 	+* first
>> 	 * second
>> 	-* third
>> 	+* the third item
> 
> I understood this example as "3 that is removal and 6 that is
> addition are excluded---we consider that these two lines (one in the
> pre-image and the other in the post-image) are _matching" As we> are excluding a deletion, it becomes the common context line, and
> any removal or addition that appear before that must stay to happen
> before the common context line (i.e. removal of 1 and 2, and
> addition of 5, both precede common context line "second") and any
> removal or addition that appear after that must stay after the
> common context (i.e. removal of "third" and addition of "the third
> item" come after "second").
> 
> But then it is not clear to me what you mean by "group" below.  What
> groups does the above example have?  Ones before the retained
> "second" (i.e. removal 1, 2, 4 and addition 5) form one group and
> ones after it (i.e. removal 4 and addition 7) form another group?

The code actually looks at the lines that are selected rather than omitted. So in the example above it groups them as [1,2] (because they are contiguous), [4],[5] (these are split because one is an insertion and one a deletion) and [7]. It then sees that there are two groups of deletions ([1,2],[4]) and two groups of insertions ([5],[7]) and so pairs up the deletions in [12] with the insertion in [5] and likewise with [4] and [7]. Lines 3 and 6 are never explicitly paired, although they basically behave as if they were. One the insertions are all paired up it walks over the list and creates a new hunk where the paired insertions come immediately after their corresponding deletions, unselected deletions are converted to context lines and unselected additions are dropped.

Show 6 quoted lines
> 
>> Reported-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> 
> Is this fixing any bug?  I usually see "Reported-by" only for a
> bugfix patch but this seems to be adding a new feature (and lack of
> feature is usually not a bug).

I guess I meant that the previous series was effectively buggy as it would give the wrong result for modified lines. I wanted to acknowledge that Ævar spent some time testing it and pointed that out.

Best Wishes
Phillip
Previous: Junio C HamanoNext: Junio C Hamano
Message 44 of 53 in “add -p: select individual hunk lines”
  1. 0/3 add -p: select individual hunk linesPhillip Wood, Feb 19, 2018
  2. 1/3 add -p: select individual hunk linesPhillip Wood, Feb 19, 2018
  3. 2/3 add -p: allow line selection to be invertedPhillip Wood, Feb 19, 2018
  4. 3/3 add -p: optimize line selection for short hunksPhillip Wood, Feb 19, 2018
  5. Gustavo LeiteFeb 19, 2018
  6. 0/3 add -p: select individual hunk linesPhillip Wood, Mar 6, 2018
  7. 2/3 add -p: allow line selection to be invertedPhillip Wood, Mar 6, 2018
  8. Junio C HamanoMar 6, 2018
  9. Phillip WoodMar 8, 2018
  10. Junio C HamanoMar 8, 2018
  11. Phillip WoodMar 13, 2018
  12. Junio C HamanoMar 13, 2018
  13. Phillip WoodMar 14, 2018
  14. Igor DjordjevicMar 6, 2018
  15. 1/3 add -p: select individual hunk linesPhillip Wood, Mar 6, 2018
  16. Igor DjordjevicMar 6, 2018
  17. Igor DjordjevicMar 6, 2018
  18. 3/3 add -p: optimize line selection for short hunksPhillip Wood, Mar 6, 2018
  19. Igor DjordjevicMar 6, 2018
  20. Igor DjordjevicMar 6, 2018
  21. Junio C HamanoMar 6, 2018
  22. Igor DjordjevicMar 6, 2018
  23. 0/3 add -p: select individual hunk linesPhillip Wood, Mar 16, 2018
  24. 1/3 add -p: select individual hunk linesPhillip Wood, Mar 16, 2018
  25. 2/3 add -p: allow line selection to be invertedPhillip Wood, Mar 16, 2018
  26. 3/3 add -p: optimize line selection for short hunksPhillip Wood, Mar 16, 2018
  27. Junio C HamanoMar 29, 2018
  28. Phillip WoodMar 30, 2018
  29. Ævar Arnfjörð BjarmasonMar 31, 2018
  30. Phillip WoodApr 2, 2018
  31. Ævar Arnfjörð BjarmasonApr 2, 2018
  32. 0/4 add -p: select individual hunk linesPhillip Wood, Jul 26, 2018
  33. 1/4 add -p: select individual hunk linesPhillip Wood, Jul 26, 2018
  34. 4/4 add -p: optimize line selection for short hunksPhillip Wood, Jul 26, 2018
  35. 3/4 add -p: allow line selection to be invertedPhillip Wood, Jul 26, 2018
  36. 2/4 add -p: select modified lines correctlyPhillip Wood, Jul 26, 2018
  37. 0/4 add -p: select individual hunk linesPhillip Wood, Jul 26, 2018
  38. 1/4 add -p: select individual hunk linesPhillip Wood, Jul 26, 2018
  39. Junio C HamanoJul 26, 2018
  40. Phillip WoodJul 27, 2018
  41. Junio C HamanoJul 27, 2018
  42. 2/4 add -p: select modified lines correctlyPhillip Wood, Jul 26, 2018
  43. Junio C HamanoJul 26, 2018
  44. Phillip WoodJul 27, 2018
  45. Junio C HamanoJul 27, 2018
  46. 3/4 add -p: allow line selection to be invertedPhillip Wood, Jul 26, 2018
  47. 4/4 add -p: optimize line selection for short hunksPhillip Wood, Jul 26, 2018
  48. Ævar Arnfjörð BjarmasonJul 27, 2018
  49. Phillip WoodJul 28, 2018
  50. Ævar Arnfjörð BjarmasonJul 28, 2018
  51. Phillip WoodAug 3, 2018
  52. Junio C HamanoAug 3, 2018
  53. Ævar Arnfjörð BjarmasonAug 3, 2018

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.