[IPython-dev] Bazaar on OS X

Hans Meine hans_meine at gmx.net
Wed Jun 25 08:14:25 EDT 2008


Am Mittwoch, 25. Juni 2008 00:56:50 schrieb Stéfan van der Walt:
> When branches diverge, a merge is necessary.  Some revision control
> systems hide the merges, others (like bzr) don't.  How does mercurial
> handle the issue?

(Background: I have recently switched to Mercurial with many of my projects 
and am constantly using it a lot, incl. many extensions and following the 
mailing list.  My bzr experience is near zero though.)

Mercurial does not handle any line of development special, i.e. you get to see 
the complete, directed, acyclic graph e.g. in "hg log" (or "hg glog", "hg 
view").  AFAICS, bzr decides that one path from this graphs "root" to the tip 
is somehow special (IIRC called the "mainline") and only displays this by 
default (i.e. you see only one changeset when a branch is merged).

For example, here's an excerpt from an actual "hg log" output of mine, in 
which branching and merging occured:

...

changeset:   228:765851775ca5
user:        Hans Meine <hans_meine at gmx.net>
date:        Fri Apr 04 22:19:40 2008 +0200
summary:     Added tag release_0_4 for changeset 4180934dce9d

changeset:   227:4180934dce9d
tag:         release_0_4
parent:      226:fc47fb9bf558
parent:      225:29273fb40578
user:        Hans Meine <hans_meine at gmx.net>
date:        Fri Apr 04 22:04:00 2008 +0200
summary:     merged branch/dist.sh changes from Qt3 version

changeset:   226:fc47fb9bf558
parent:      222:1b6fee2f3be2
user:        Hans Meine <hans_meine at gmx.net>
date:        Fri Apr 04 22:03:13 2008 +0200
summary:     get rid of necessary VigraQt symlink

changeset:   225:29273fb40578
user:        Hans Meine <hans_meine at gmx.net>
date:        Fri Apr 04 21:59:46 2008 +0200
summary:     don't delete vigraqt.testing

changeset:   224:5d6c94f6de48
user:        Hans Meine <meine at informatik.uni-hamburg.de>
date:        Thu Apr 03 14:14:00 2008 +0200
summary:     adapt script to mercurial needs (remove CVS stuff)

changeset:   223:c478238d5ec0
parent:      179:776243786443
user:        Hans Meine <meine at informatik.uni-hamburg.de>
date:        Thu Apr 03 14:13:39 2008 +0200
summary:     Added tag release_0_4 for changeset 776243786443

changeset:   222:1b6fee2f3be2
user:        Hans Meine <hans_meine at gmx.net>
date:        Fri Apr 04 21:54:42 2008 +0200
summary:     remove old autotools-README

...

All changesets are displayed in the same format, no matter on which branch 
they occured.  (If I had used named branches, the above would 
include "branch: somebranch" though.)  The parent: lines indicate
a) branching, e.g. a specified parent that is != the previous revision (in 
which case "hg log" omits the line for brevity) and
b) merging, e.g. more than one parent.

Of course, graphical tools display this more nicely.  There's also "glog" 
("graphical log") which uses ASCII art:

...
|
o  changeset:   228:765851775ca5
|  user:        Hans Meine <hans_meine at gmx.net>
|  date:        Fri Apr 04 22:19:40 2008 +0200
|  summary:     Added tag release_0_4 for changeset 4180934dce9d
|
o    changeset:   227:4180934dce9d
|\   tag:         release_0_4
| |  parent:      226:fc47fb9bf558
| |  parent:      225:29273fb40578
| |  user:        Hans Meine <hans_meine at gmx.net>
| |  date:        Fri Apr 04 22:04:00 2008 +0200
| |  summary:     merged branch/dist.sh changes from Qt3 version
| |
| o  changeset:   226:fc47fb9bf558
| |  parent:      222:1b6fee2f3be2
| |  user:        Hans Meine <hans_meine at gmx.net>
| |  date:        Fri Apr 04 22:03:13 2008 +0200
| |  summary:     get rid of necessary VigraQt symlink
| |
o |  changeset:   225:29273fb40578
| |  user:        Hans Meine <hans_meine at gmx.net>
| |  date:        Fri Apr 04 21:59:46 2008 +0200
| |  summary:     don't delete vigraqt.testing
| |
o |  changeset:   224:5d6c94f6de48
| |  user:        Hans Meine <meine at informatik.uni-hamburg.de>
| |  date:        Thu Apr 03 14:14:00 2008 +0200
| |  summary:     adapt script to mercurial needs (remove CVS stuff)
| |
o |  changeset:   223:c478238d5ec0
| |  parent:      179:776243786443
| |  user:        Hans Meine <meine at informatik.uni-hamburg.de>
| |  date:        Thu Apr 03 14:13:39 2008 +0200
| |  summary:     Added tag release_0_4 for changeset 776243786443
| |
| |  ...
| |
| o  changeset:   181:d90cf77766a5
| |  user:        Hans Meine <meine at informatik.uni-hamburg.de>
| |  date:        Thu Apr 03 15:40:18 2008 +0200
| |  summary:     Qt4 porting:
| |
| o  changeset:   180:f1910ad7c12b
|/   user:        Hans Meine <meine at informatik.uni-hamburg.de>
|    date:        Thu Apr 03 15:36:49 2008 +0200
|    summary:     Qt4 porting: QImage format stuff, add v2qc
|
o  changeset:   179:776243786443
|  user:        Hans Meine <meine at informatik.uni-hamburg.de>
|  date:        Thu Apr 03 14:03:26 2008 +0200
|  summary:     version bump -> 0.4
|
...

(BTW: This looks much better in a terminal than in a mailer who thinks 
that "|" starts a quote...)

In summary, I am extremely happy with mercurial and find it very easy to 
understand and work with.  I believe bzr is not much different, and launchpad 
looks nice, but I see the discussed history folding as the only serious 
reason why I would currently recommend hg over bzr.  OTOH, the situation 
could be much improved if lp would (allow to) display the complete history 
instead of only the "mainline" one AFAICS.

Hope that helped,
 Hans



More information about the IPython-dev mailing list