<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
<META NAME="GENERATOR" CONTENT="GtkHTML/3.18.1">
</HEAD>
<BODY>
Hello, I have some nice puzzle for you folks. There is a project called <A HREF="specto.sf.net">Specto</A>, which, across its lifetime, used 3 different version control systems. Those are CVS, Subversion and Bazaar. And each time, we did not keep the history.
<OL TYPE=1>
<LI TYPE=1 VALUE=1>cvs: <A HREF="https://code.launchpad.net/~vcs-imports/specto/cvs-main">https://code.launchpad.net/~vcs-imports/specto/cvs-main</A>
<LI TYPE=1 VALUE=2>svn: <A HREF="http://specto.googlecode.com/svn/trunk/">http://specto.googlecode.com/svn/trunk/</A>
<LI TYPE=1 VALUE=3>bzr: <A HREF="https://code.launchpad.net/~woutc/specto/specto-woutc">https://code.launchpad.net/~woutc/specto/specto-woutc</A>
</OL>
Those are the various repositories that have been used for developing Specto, from the oldest to the newest. In theory, the code should be compatible, it's just that we did not migrate the history metadata between them.<BR>
<BR>
Current situation summary:
<UL>
<LI>the ability to upgrade to the rich-root-pack repository format was recently fixed in bzr.dev (https://bugs.launchpad.net/bzr/+bug/177874), I tried and it indeed works
<LI>I was told that rich-root-pack would eventually become the default format
<LI>it is impossible to merge r-r-p into pack-0.92 because pack-0.92 is inferior
<LI>therefore for specto-main (The <I>One Branch to Rule the All and in Darkness Bind Them</I>, the one which will retain cvs, svn and bzr history) we need to use r-r-p if I am not mistaken
</UL>
What I did so far
<UL>
<LI TYPE=1 VALUE=1>branch specto-cvs: <B>bzr branch http://bazaar.launchpad.net/~vcs-imports/specto/cvs-main "specto-main"</B>
<LI TYPE=1 VALUE=2>upgrade it to rich root pack: <B>cd specto-main && bzr upgrade --rich-root-pack</B>
<LI TYPE=1 VALUE=3>merge specto-svn using bzr-svn (if you want the job already done, just try merging from this temporary branch: <B>bzr merge -r0..85 <A HREF="http://bazaar.launchpad.net/~kiddo/specto/specto-svn">http://bazaar.launchpad.net/~kiddo/specto/specto-svn</A></B> )
<LI TYPE=1 VALUE=4>eventually (this is where I am stuck/worried), <B>bzr merge -r0..66 http://bazaar.launchpad.net/~woutc/specto/specto-woutc</B>
</UL>
<BR>
Between each disparate branch (cvs-svn-woutc), I needed to to something like bzr merge -r0..85, because they have a discontinuous history after all.<BR>
<BR>
And here comes the problem/fun part: merging specto-svn into specto-main (the cvs version at that point) created 4 conflicts (which I resolved by removing all the .moved files, they seemed pretty much harmless, I wondered why it even spurred conflicts), then, merging specto-woutc into specto-main (which is now specto-cvs+svn) gives 7 conflicts. HOWEVER, the thing that scares me is this:<BR>
<BR>
<TT>jeff@khloe:~/trunks/awesome-new-specto/specto-main$ bzr merge ../specto-woutc/ -r0..66</TT><BR>
<TT>+N data/ </TT><BR>
<TT>+N data/doc/</TT><BR>
<TT>+N data/doc/AUTHORS</TT><BR>
<TT>+N data/doc/COPYING</TT><BR>
<TT>+N data/doc/ChangeLog</TT><BR>
<TT>+N data/doc/HACKING</TT><BR>
<TT>+N data/doc/INSTALL</TT><BR>
<TT>+N data/doc/VERSION</TT><BR>
<TT>+N data/glade/</TT><BR>
<TT>+N data/glade/add_watch.glade</TT><BR>
<TT>+N data/glade/edit_watch.glade</TT><BR>
<TT>+N data/glade/import_export.glade</TT><BR>
<TT>+N data/glade/log_dialog.glade</TT><BR>
<TT>+N data/glade/notifier.glade</TT><BR>
<TT>+N data/glade/preferences.glade</TT><BR>
<TT>+N data/icons/</TT><BR>
<TT>+N data/icons/hicolor/</TT><BR>
<TT>+N data/icons/hicolor/scalable/</TT><BR>
<TT>+N data/icons/hicolor/scalable/specto.svg</TT><BR>
<TT>+N data/icons/specto_about.png</TT><BR>
<TT>+N data/icons/specto_tray_1.png</TT><BR>
<TT>+N data/icons/specto_tray_1.svg</TT><BR>
<TT>+N data/icons/specto_tray_2.png</TT><BR>
<TT>+N data/icons/specto_tray_2.svg</TT><BR>
<TT>+N data/icons/specto_window_icon.png</TT><BR>
<TT>+N data/icons/specto_window_icon.svg</TT><BR>
<TT>+N launch.sh</TT><BR>
<TT>+N po/</TT><BR>
<TT>+N po/cs/</TT><BR>
<TT>+N po/cs/specto.mo</TT><BR>
<TT>+N po/cs/specto.po</TT><BR>
<TT>+N po/de/</TT><BR>
<TT>+N po/de/specto.mo</TT><BR>
<TT>+N po/de/specto.po</TT><BR>
<TT>+N po/es/</TT><BR>
<TT>+N po/es/specto.mo</TT><BR>
<TT>+N po/es/specto.po</TT><BR>
<TT>+N po/fr/</TT><BR>
<TT>+N po/fr/specto.mo</TT><BR>
<TT>+N po/fr/specto.po</TT><BR>
<TT>+N po/generate_template.py</TT><BR>
<TT>+N po/it/</TT><BR>
<TT>+N po/it/specto.mo</TT><BR>
<TT>+N po/it/specto.po</TT><BR>
<TT>+N po/pt_BR/</TT><BR>
<TT>+N po/pt_BR/specto.mo</TT><BR>
<TT>+N po/pt_BR/specto.po</TT><BR>
<TT>+N po/pygettext.py</TT><BR>
<TT>+N po/ro/</TT><BR>
<TT>+N po/ro/specto.mo</TT><BR>
<TT>+N po/ro/specto.po</TT><BR>
<TT>+N po/specto.pot</TT><BR>
<TT>+N po/sv/</TT><BR>
<TT>+N po/sv/specto.mo</TT><BR>
<TT>+N po/sv/specto.po</TT><BR>
<TT>+N po/tarball_rosetta.sh</TT><BR>
<TT>+N po/tr/</TT><BR>
<TT>+N po/tr/specto.mo</TT><BR>
<TT>+N po/tr/specto.po</TT><BR>
<TT>+N setup.py</TT><BR>
<TT>+N spectlib/</TT><BR>
<TT>+N spectlib/__init__.py</TT><BR>
<TT>+N spectlib/about.py</TT><BR>
<TT>+N spectlib/add_watch.py</TT><BR>
<TT>+N spectlib/balloons.py</TT><BR>
<TT>+N spectlib/config.py</TT><BR>
<TT>+N spectlib/console.py</TT><BR>
<TT>+N spectlib/edit_watch.py</TT><BR>
<TT>+N spectlib/export_watch.py</TT><BR>
<TT>+N spectlib/gtkconfig.py</TT><BR>
<TT>+N spectlib/i18n.py</TT><BR>
<TT>+N spectlib/i18n_safedict.py</TT><BR>
<TT>+N spectlib/import_watch.py</TT><BR>
<TT>+N spectlib/logger.py</TT><BR>
<TT>+N spectlib/main.py</TT><BR>
<TT>+N spectlib/notifier.py</TT><BR>
<TT>+N spectlib/plugins/</TT><BR>
<TT>+N spectlib/plugins/__init__.py</TT><BR>
<TT>+N spectlib/plugins/watch_mail_gmail.py</TT><BR>
<TT>+N spectlib/plugins/watch_mail_imap.py</TT><BR>
<TT>+N spectlib/plugins/watch_mail_pop3.py</TT><BR>
<TT>+N spectlib/plugins/watch_system_folder.py</TT><BR>
<TT>+N spectlib/plugins/watch_system_port.py</TT><BR>
<TT>+N spectlib/plugins/watch_system_process.py</TT><BR>
<TT>+N spectlib/plugins/watch_web_greader.py</TT><BR>
<TT>+N spectlib/plugins/watch_web_static.py</TT><BR>
<TT>+N spectlib/preferences.py</TT><BR>
<TT>+N spectlib/test/</TT><BR>
<TT>+N spectlib/test/__init__.py</TT><BR>
<TT>+N spectlib/test/test_networkmanager.py</TT><BR>
<TT>+N spectlib/tools/</TT><BR>
<TT>+N spectlib/tools/__init__.py</TT><BR>
<TT>+N spectlib/tools/iniparser.py</TT><BR>
<TT>+N spectlib/tools/networkmanager.py</TT><BR>
<TT>+N spectlib/tools/specto_gconf.py</TT><BR>
<TT>+N spectlib/trayicon.py</TT><BR>
<TT>+N spectlib/util.py</TT><BR>
<TT>+N spectlib/watch.py</TT><BR>
<TT>+N specto</TT><BR>
<TT>+N specto.desktop</TT><BR>
<TT>R data/ => data.moved/</TT><BR>
<TT>R launch.sh => launch.sh.moved</TT><BR>
<TT>R po/ => po.moved/</TT><BR>
<TT>R setup.py => setup.py.moved</TT><BR>
<TT>R spectlib/ => spectlib.moved/</TT><BR>
<TT>R specto => specto.moved</TT><BR>
<TT>R specto.desktop => specto.desktop.moved</TT><BR>
<TT>Conflict adding file data. Moved existing file to data.moved.</TT><BR>
<TT>Conflict adding file launch.sh. Moved existing file to launch.sh.moved.</TT><BR>
<TT>Conflict adding file po. Moved existing file to po.moved.</TT><BR>
<TT>Conflict adding file setup.py. Moved existing file to setup.py.moved.</TT><BR>
<TT>Conflict adding file spectlib. Moved existing file to spectlib.moved.</TT><BR>
<TT>Conflict adding file specto.desktop. Moved existing file to specto.desktop.moved.</TT><BR>
<TT>Conflict adding file specto. Moved existing file to specto.moved.</TT><BR>
<TT>7 conflicts encountered. </TT><BR>
<BR>
Those files certainly are not new, as you can see them in the svn version. I have some feeling that it is not smart enough to figure out that some files just moved around. stuff like "+N spectlib/trayicon.py" and "<TT>+N data/icons/hicolor/scalable/specto.svg</TT>" troubles me. Were those not already into specto svn? why is it saying it's a new file? omgponies?<BR>
<BR>
Also attached, a diff of spectlib and spectlib.moved (it's quite heavy).<BR>
<BR>
How do you know bzr did it right (which it certainly didn't in this case)? why does it say +N when that file should have been marked moved/modified/whatever? It is highly suspicious. Any help would be much appreciated as I'm pretty much a bzr (and VCS) newbie and increasingly confused here. So yeah, how do I go about stitching those branches together properly without doing something stupid? Am I even doing it in the right direction?<BR>
<BR>
Thanks!
</BODY>
</HTML>