Hi, On Thu, 8 Jan 2009, Sam Vilain wrote: > On Tue, 2009-01-06 at 20:40 +0100, Johannes Schindelin wrote: > > Although I would like to see it in once it is fleshed out -- even if it > > does not meet our usefulness standard -- because people said Git is > > inferior for not providing a patience diff. If we have --patience, we can > > say "but we have it, it's just not useful, check for yourself". > > Whatever happens, the current deterministic diff algorithm needs to stay > for generating patch-id's... those really can't be allowed to change. Oh, there is no discussion about replacing the diff algorithm we have right now. Even if we never output patch-ids anywhere, so we always recalculate them, and therefore would be free to replace the diff algorithm with something else. The thing why I do not want patience diff to replace the existing code is: - patience diff is slower, - patience diff is often not worth it (produces the same, maybe even worse output), and - patience diff needs the existing code as a fallback anyway. Where it could possibly help to change existing behavior is with merging. So maybe somebody has some time to play with, and can apply this patch: -- snip -- diff --git a/ll-merge.c b/ll-merge.c index fa2ca52..f731026 100644 --- a/ll-merge.c +++ b/ll-merge.c @@ -79,6 +79,8 @@ static int ll_xdl_merge(const struct ll_merge_driver *drv_unused, memset(&xpp, 0, sizeof(xpp)); if (git_xmerge_style >= 0) style = git_xmerge_style; + if (getenv("GIT_PATIENCE_MERGE")) + xpp.flags |= XDF_PATIENCE_DIFF; return xdl_merge(orig, src1, name1, src2, name2, -- snap -- After compiling and installing, something like this should be fun to watch: $ git rev-list --all --parents | \ grep " .* " | \ while read commit parent1 parent2 otherparents do test -z "$otherparents" || continue git checkout $parent1 && git merge $parent2 && git diff > without-patience.txt && git reset --hard $parent1 && GIT_PATIENCE_MERGE=1 git merge $parent2 && git diff > with-patience.txt && if ! cmp without-patience.txt with-patience.txt then echo '===============================' echo "differences found in merge $commit" echo "without patience: $(wc -l < without-patience.txt)" echo "with patience: $(wc -l < with-patience.txt)" echo '-------------------------------' echo 'without patience:' cat without-patience.txt echo '-------------------------------' echo 'with patience:' cat with-patience.txt fi || exit done | tee patience-merge.out Ciao, Dscho -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html