On jeu, jan 01, 2009 at 04:38:09 +0000, Johannes Schindelin wrote: > > Nothing fancy, really, just a straight-forward implementation of the > heavily under-documented and under-analyzed paience diff algorithm. Btw, what is the status of this series ? I see it neither in pu nor in next. And I would gladly see it included in git. On jeu, jan 01, 2009 at 07:45:21 +0000, Linus Torvalds wrote: > > > On Thu, 1 Jan 2009, Johannes Schindelin wrote: > > > > Nothing fancy, really, just a straight-forward implementation of the > > heavily under-documented and under-analyzed paience diff algorithm. > > Exactly because the patience diff is so under-documented, could you > perhaps give a few examples of how it differs in the result, and why it's > so wonderful? Yes, yes, I can google, and no, no, nothing useful shows up > except for *totally* content-free fanboisms. > > So could we have some actual real data on it? For example, look at the following (shamelessly stolen from the real life example http://glandium.org/blog/?p=120). With orig.mk reading: ] include $(DEPTH)/config/autoconf.mk ] ] include $(topsrcdir)/config/rules.mk ] ] libs:: ] $(INSTALL) $(srcdir)/nsKillAll.js $(DIST)/bin/components ] ] clean:: ] rm -f $(DIST)/bin/components/nsKillAll.js With patched.mk reading: ] include $(DEPTH)/config/autoconf.mk ] ] EXTRA_COMPONENTS = nsKillAll.js ] ] include $(topsrcdir)/config/rules.mk ] ] clean:: ] rm -f $(DIST)/bin/components/nsKillAll.js You get: Normal git diff | patience diff ---------------------------------------------------+------------------------------------------ include $(DEPTH)/config/autoconf.mk | include $(DEPTH)/config/autoconf.mk | -include $(topsrcdir)/config/rules.mk | +EXTRA_COMPONENTS = nsKillAll.js +EXTRA_COMPONENTS = nsKillAll.js | + | include $(topsrcdir)/config/rules.mk -libs:: | - $(INSTALL) $(srcdir)/... | -libs:: +include $(topsrcdir)/config/rules.mk | - $(INSTALL) $(srcdir)/... | - clean:: | clean:: rm -f $(DIST)/bin/components/nsKillAll.js | rm -f $(DIST)/bin/components/nsKillAll.js I've checked in many projects I have under git, the differences between git log -p and git log -p --patience. The patience algorithm is really really more readable with it involves code moves with changes in the moved sections. If the section you move across is smaller than the moved ones, the patience algorithm will show the moved code as removed where it was and added where it now is, changes included. The current diff will rather move the smaller invariend section you move across and present mangled diffs involving the function prototypes making it less than readable. Of course, moving code _and_ modifying it at the same time is rather bad style. BUt (1) it happens and the fact it's bad style is a bad argument to not show a decent diff of it (2) if you construct diffs of a range of commits it happens a lot. -- ·O· Pierre Habouzit ··O madcoder@xxxxxxxxxx OOO http://www.madism.org
Attachment:
pgpm6UYJPMEPm.pgp
Description: PGP signature