From: Pierre Habouzit <madcoder@debian.org>
To: Davide Libenzi <davidel@xmailserver.org>
Cc: Git ML <git@vger.kernel.org>
Subject: Re: libxdiff and patience diff
Date: Tue, 04 Nov 2008 09:33:03 +0100 [thread overview]
Message-ID: <20081104083303.GC3788@artemis.corp> (raw)
In-Reply-To: <Pine.LNX.4.64.0811031904130.9116@alien.or.mcafeemobile.com>
[-- Attachment #1: Type: text/plain, Size: 2593 bytes --]
On Tue, Nov 04, 2008 at 03:17:37AM +0000, Davide Libenzi wrote:
> On Tue, 4 Nov 2008, Pierre Habouzit wrote:
>
> > Hi Davide,
> >
> > I've been working tonight, trying to make libxdiff support the patience
> > diff algorithm, but I've totally failed, because I _thought_ I
> > understood what xdl_split was doing, but it appears I don't.
> >
> >
> > [ For the readers playing at home, the patience diff algorithm is
> > explained after my sig. ]
> >
> >
> > What I did is to:
> > (1) add a flag to the xenv in xdl_split that says that I want a
> > patience "split".
> > (2) Then in xdl_split, if that bit is set, I compute the longest common
> > subsequence from the patience diff.
> > (3) for each split it computes I call xdl_recs_cmp on that interval.
> >
> >
> > What I thought it would achieve is that I force some boundaries at which
> > libxdiff _must_ resync. Though, it seems that for some reason it doesn't
> > work, probably because the "ha" stuff and the boundaries absolutely
> > don't work the way I thought it did.
> >
> > So where is the place I should do that ? I suspect it should be
> > partly in xprepare.c but I'm a bit stuck right now.
> >
> >
> > Any pointer on how the stuff in xprepare.c and xdiffi.c work would help
> > greatly, it's really not self-evident to me :)
>
> What makes you think it'd self-evident to me? :)
> Seriously, I forgot stuff I wrote the last month, this is way beyond my
> memory limits.
> You definitely need to look at xprepare.c, especially at xdl_trim_ends()
> and xdl_cleanup_records(). Lines are re-arranged in indexes, and this
> might screw up your logic if you're not prepared for it.
> What xdl_split() does, is find the start of an LCS and return the
> coordinate. Then xdl_recs_cmp() does the box reducing (first two "for"
> loops) and different-lines marking (first and second "if").
Well it's what I thought it did indeed, that's why before recursing into
that bit, I tried to extract a full LCS from the patience diff algorithm
and recurse into that for each interval it gives, which _should_ work,
but doesn't at all :/
Okay maybe I should re-read my algorithm slowly and check that I've not
made something silly (like chaining the list in the reverse order or god
knows what), but my debug functions let me believe that I did that fine.
I'll look into it tonight.
--
·O· Pierre Habouzit
··O madcoder@debian.org
OOO http://www.madism.org
[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]
next prev parent reply other threads:[~2008-11-04 8:34 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-04 0:40 libxdiff and patience diff Pierre Habouzit
2008-11-04 3:17 ` Davide Libenzi
2008-11-04 8:33 ` Pierre Habouzit [this message]
2008-11-04 5:39 ` Johannes Schindelin
2008-11-04 8:30 ` Pierre Habouzit
2008-11-04 14:34 ` Johannes Schindelin
2008-11-04 15:23 ` Pierre Habouzit
2008-11-04 15:57 ` Johannes Schindelin
2008-11-04 16:15 ` Pierre Habouzit
2009-01-01 16:38 ` [PATCH 0/3] Teach Git about the patience diff algorithm Johannes Schindelin
2009-01-01 16:38 ` [PATCH 1/3] Implement " Johannes Schindelin
2009-01-01 16:39 ` [PATCH 2/3] Introduce the diff option '--patience' Johannes Schindelin
2009-01-01 16:39 ` [PATCH 3/3] bash completions: Add the --patience option Johannes Schindelin
2009-01-01 19:45 ` [PATCH 0/3] Teach Git about the patience diff algorithm Linus Torvalds
2009-01-01 20:00 ` Linus Torvalds
2009-01-02 18:17 ` Johannes Schindelin
2009-01-02 18:49 ` Linus Torvalds
2009-01-02 19:07 ` Johannes Schindelin
2009-01-02 18:51 ` Jeff King
2009-01-02 21:59 ` [PATCH 1/3 v2] Implement " Johannes Schindelin
2009-01-02 21:59 ` Johannes Schindelin
2009-01-01 20:46 ` [PATCH 0/3] Teach Git about " Adeodato Simó
2009-01-02 1:56 ` Linus Torvalds
2009-01-02 10:55 ` Clemens Buchacher
2009-01-02 10:58 ` Clemens Buchacher
2009-01-02 16:42 ` Linus Torvalds
2009-01-02 18:46 ` Johannes Schindelin
2009-01-02 19:03 ` Linus Torvalds
2009-01-02 19:22 ` Johannes Schindelin
2009-01-02 19:39 ` Jeff King
2009-01-02 19:50 ` Jeff King
2009-01-02 20:52 ` Jeff King
2009-01-02 23:05 ` Linus Torvalds
2009-01-03 16:24 ` Bazaar's patience diff as GIT_EXTERNAL_DIFF Adeodato Simó
2009-01-02 21:59 ` [PATCH 0/3] Teach Git about the patience diff algorithm Johannes Schindelin
2009-01-08 19:55 ` Adeodato Simó
2009-01-08 20:06 ` Adeodato Simó
2009-01-09 6:54 ` Junio C Hamano
2009-01-09 13:07 ` Johannes Schindelin
2009-01-09 15:59 ` Adeodato Simó
2009-01-09 18:09 ` Linus Torvalds
2009-01-09 18:13 ` Linus Torvalds
2009-01-09 20:53 ` Junio C Hamano
2009-01-10 11:36 ` Johannes Schindelin
2009-01-02 11:03 ` Junio C Hamano
2009-01-02 18:50 ` Adeodato Simó
2009-01-06 11:17 ` Pierre Habouzit
2009-01-06 11:39 ` Pierre Habouzit
2009-01-06 19:40 ` Johannes Schindelin
2009-01-07 14:39 ` Pierre Habouzit
2009-01-07 17:01 ` Johannes Schindelin
2009-01-07 17:04 ` [PATCH v3 1/3] Implement " Johannes Schindelin
2009-01-07 18:10 ` Davide Libenzi
2009-01-07 18:32 ` Johannes Schindelin
2009-01-07 20:09 ` Davide Libenzi
2009-01-07 20:19 ` Johannes Schindelin
2009-01-07 18:59 ` Linus Torvalds
2009-01-07 20:00 ` Johannes Schindelin
2009-01-07 20:11 ` Davide Libenzi
2009-01-07 20:15 ` [PATCH 0/3] Teach Git about " Sam Vilain
2009-01-07 20:25 ` Linus Torvalds
2009-01-08 2:31 ` Sam Vilain
2009-01-07 20:38 ` Johannes Schindelin
2009-01-07 20:48 ` Junio C Hamano
2009-01-07 22:00 ` Johannes Schindelin
2009-01-07 22:45 ` Pierre Habouzit
2009-01-07 23:03 ` Johannes Schindelin
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=20081104083303.GC3788@artemis.corp \
--to=madcoder@debian.org \
--cc=davidel@xmailserver.org \
--cc=git@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).