From: Peter Oberndorfer <kumbayo84@arcor.de>
To: "Ondřej Bílka" <neleai@seznam.cz>
Cc: Thomas Koch <thomas@koch.ro>, git@vger.kernel.org
Subject: Re: Searching explanation of different diff algorithms
Date: Wed, 25 Sep 2013 17:30:45 +0200 [thread overview]
Message-ID: <524301A5.2060401@arcor.de> (raw)
In-Reply-To: <20130925085557.GA11402@domone.kolej.mff.cuni.cz>
On 2013-09-25 10:55, Ondřej Bílka wrote:
> On Wed, Sep 25, 2013 at 09:24:15AM +0200, Thomas Koch wrote:
>> Is there any explanation available of the different merrits and drawbacks of
>> the diff algorithms that Git supports?
>>
>> I'm not satisfied with the default diff but have enough processing power for a
>> slower algorithm that might produce diffs that better show the intention of the
>> edit.
>>
> It is not just question of algorithm, even definition how should most
> readable diff look like is problematic, for example when large block is
> rewritten and one line is unchanged then you get diff like
>
> if (x){
> - foo
> + bar
> } else {
> - foo
> + bar
> }
>
> but it is better to create following diff as it does not break flow of code.
>
> if (x) {
> - foo
> -} else {
> - foo
> + bar
> +} else {
> + bar
> }
I already asked the list for such a feature in the past[1].
I might be able to provide a rough/unfinished hack
that does exactly this in a few days after cleaning it up a bit.
It works like this:
If 2 hunks are separated by less than a certain count of lines and
those lines are identified as containing no "interesting information"
like {, }, /*, */, <whitespace> then the 2 hunks are fused together.
The hack is mainly lacking the following things:
* A way to identify boring lines.
(a like a list of boring keywords?, per filetype?)
* Configuration/commandline options to turn it on/off
* Tests
* Cleanup the code
Greetings Peter
[1] http://article.gmane.org/gmane.comp.version-control.git/207239/
prev parent reply other threads:[~2013-09-25 15:30 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-25 7:24 Searching explanation of different diff algorithms Thomas Koch
2013-09-25 8:55 ` Ondřej Bílka
2013-09-25 15:30 ` Peter Oberndorfer [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=524301A5.2060401@arcor.de \
--to=kumbayo84@arcor.de \
--cc=git@vger.kernel.org \
--cc=neleai@seznam.cz \
--cc=thomas@koch.ro \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.