Wednesday, December 17, 2008

Why darcs is better than bzr

I am all in favour of distributed revision control. Recently I tried bazaar (bzr) because it has superior windows support compared to any of the other candidates (git, darcs, mercurial etc.), and unfortunately I have to occasionally develop on windows. I was very disappointed by its 'send' functionality however. Here is my workflow that is broken:

How I want it to work:

  1. bzr init myrepo
  2. email repo to another disconnected network (email is the only comms available), where someone else works on the code as well
  3. bzr commit change1 change2 change3
  4. bzr send change1 change2 change3 -o bundle
  5. email bundle

Instead, I have to keep another copy of every repository that is the 'synced' version. I have about 20 repos which means I now need 40 directories, what a PITA. Remind me how this is better than subversion again? I'm starting to forget. So this is what I have to do:

  1. bzr init myrepo
  2. email repo to another disconnected network (email is the only comms available), where someone else works on the code as well
  3. cp myrepo myrepo_synced
  4. cd myrepo; bzr commit change1 change2 change3
  5. bzr send change1 change2 change3 -o bundle myrepo_synced
  6. email bundle

Keeping another repo just to keep track of synced state is exactly the sort of annoyance that distributed revision control is supposed to fix. Darcs solves this problem in a sensible manner, each bundle contains metadata for patch dependencies (revisions) that must be present for the patch to be applied successfully. Having to re-send the entire repository (as suggested in a mailing list thread - 'send' against null repo) for small changes is ridiculous.

No comments: