Re: [PATCH 1/3 v2] Implement the patience diff algorithm
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Jan 2, 2009, 21:59 UTC
- Message-ID
- <alpine.DEB.1.00.0901022221140.27818@racer>
- In-Reply-To
- <alpine.DEB.1.00.0901022220380.27818@racer>
Hi,
The interdiff between v1 and v2 of PATCH 1/3. As you can see, I also added a cleanup of an intermediate xdlenv.
Ciao, Dscho
xdiff/xpatience.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/xdiff/xpatience.c b/xdiff/xpatience.c index 6687940..d01cbdd 100644 --- a/xdiff/xpatience.c +++ b/xdiff/xpatience.c @@ -309,6 +309,8 @@ static int fall_back_to_classic_diff(struct hashmap *map, memcpy(map->env->xdf1.rchg + line1 - 1, env.xdf1.rchg, count1); memcpy(map->env->xdf2.rchg + line2 - 1, env.xdf2.rchg, count2); + xdl_free_env(&env); + return 0; } @@ -368,6 +370,15 @@ int xdl_do_patience_diff(mmfile_t *file1, mmfile_t *file2, if (xdl_prepare_env(file1, file2, xpp, env) < 0) return -1; + /* + * It is a pity that xdl_cleanup_records() not only marks those + * lines as changes that are only present in one file, but also + * lines that have multiple matches and happen to be in a "run + * of discardable lines" that patience diff happens to split + * differently. + */ + memset(env->xdf1.rchg, 0, env->xdf1.nrec); + memset(env->xdf2.rchg, 0, env->xdf2.nrec); /* environment is cleaned up in xdl_diff() */ return patience_diff(file1, file2, xpp, env, 1, env->xdf1.nrec, 1, env->xdf2.nrec);
-- 1.6.1.rc3.224.g95ac9