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

Re: Fwd: possible Improving diff algoritm

From
Kevin <ikke@ikke.info>
Date
Dec 12, 2012, 19:30 UTC
Message-ID
<CAO54GHANKuv_+S-FJzrTfeFyiXcKDbm5hLGdADQ7GVMh7jEMxw@mail.gmail.com>
In-Reply-To
<7vvcc73yzh.fsf@alter.siamese.dyndns.org>

Yeah, I didn't mention it, but I didn't think it was doing this wrong in a systematic way. I only wondered if there was some kind of heuristic that could improve the cases where it goes wrong, without affecting the cases where it would do it right.

I know this is not an easy problem, lest it would already been fixed.
On Wed, Dec 12, 2012 at 7:29 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 63 quoted lines
> Kevin <ikke@ikke.info> writes:
>
>> Regularly I notice that the diffs that are provided (through diff, or
>> add -p) tend to disconnect changes that belong to each other and
>> report lines being changed that are not changed.
>>
>> An example for this is:
>>
>>      /**
>> +     * Default parent
>> +     *
>> +     * @var int
>> +     * @access protected
>> +     * @index
>> +     */
>> +    protected $defaultParent;
>> +
>> +    /**
>>
>> I understand this is a valid view of what is changed, but not a very
>> logical view from the point of the user.
>>
>> I wondered if there is a way to improve this, or would that have other
>> consequences.
>
> I think your example shows a case where the end of the pre-context
> matches the end of the added text in the hunk, and it appears it may
> produce a better result if you shift the hunk up.  But I think that
> works only half the time.  Imagine:
>
>    @@ -K,L +M,N @@
>     }
>
>    +void new_function(void)
>    +{
>    +  printf("hello, world.\n");
>    +}
>    +
>     void existing_one(void)
>     {
>       printf("goodbye, world.\n");
>
> Here the end of the pre-context matches the end of the added lines,
> but it will produce worse result if you blindly apply the "shift the
> hunk up" trick:
>
>      ... what was before the } we saw in the precontext ...
>    +}
>    +
>    +void new_function(void)
>    +{
>    +  printf("hello, world.\n");
>     }
>
>     void existing_one(void)
>
> So I think with s/Regularly/About half the time/, your observation
> above is correct.
>
> I think the reason you perceived this as "Regularly" is that you do
> not notice nor appreciate it when things go right (half the time),
> but you tend to notice and remember only when a wrong side happened
> to have been picked (the other half).
Previous: Brian J. MurrellNext: Junio C Hamano
Message 4 of 18 in “Fwd: possible Improving diff algoritm”
  1. KevinDec 12, 2012
  2. Junio C HamanoDec 12, 2012
  3. Brian J. MurrellDec 12, 2012
  4. KevinDec 12, 2012
  5. Junio C HamanoDec 12, 2012
  6. Morten WelinderDec 12, 2012
  7. Junio C HamanoDec 12, 2012
  8. Andrew ArdillDec 12, 2012
  9. Javier DomingoDec 12, 2012
  10. Junio C HamanoDec 12, 2012
  11. Javier DomingoDec 12, 2012
  12. Michael HaggertyDec 13, 2012
  13. Morten WelinderDec 13, 2012
  14. Geert BoschDec 13, 2012
  15. Junio C HamanoDec 13, 2012
  16. Javier DomingoDec 14, 2012
  17. Bernhard R. LinkDec 14, 2012
  18. Javier DomingoDec 15, 2012

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.