[haiku-development] Re: Finally deciding on a new source control system for Haiku

  • From: Oliver Tappe <zooey@xxxxxxxxxxxxxxx>
  • To: haiku-development@xxxxxxxxxxxxx
  • Date: Sun, 01 May 2011 23:16:44 +0200

On 2011-04-30 at 20:44:17 [+0200], Ryan Leavengood <leavengood@xxxxxxxxx> wrote:
> Some time ago a "committee" was created to evaluate the options for a
> new source control system for Haiku. I suppose our existing system,
> Subversion, was also considered but I think the general consensus is
> that SVN no longer serves the Haiku project well as a source control
> system.
> 
> As I recall the contenders were Git, Mercurial, and Bazaar. Could we
> finally hear some results from this committee? As I recall at least
> Oliver Tappe and Niels Reedijk were members of this committee.

That's right.

> I and others like me really think we should get a new distributed
> source control system sooner rather than later. While I am a fan of
> Git, all of the above distributed systems would provide easier
> branching for releases, easier patch management for contributors,
> easier development for non-contributors, and also much easier
> development for our GSoC students.
> 
> The longer we stay with Subversion the more pain we will have in doing
> another release and in managing the contributions from GSoC students.
> 
> If I don't hear something from this committee by May 9 I will initiate
> a vote on this list to decide the new system, with as best a list I
> can put together of the advantages and disadvantages of the above
> systems. But obviously the advice and opinions of the committee would
> be appreciated. We have discussed this enough ([1], [2], [3], [4]),
> and I think it is time we make a decision and make it happen. It has
> been almost a year since Oliver started the discussion on this issue.
> 
> One other thing to consider is that moving to one or the other system
> now does not mean we are stuck with that choice forever. Most systems
> can import and export to each other.

But there is a considerable amount of administrative work (on the server and 
locally 
by every developer) required in order to do a server-side switch between 
version 
control systems. So, we surely won't be stuck, but we should try to avoid wrong 
paths, if possible.

Last time I heard of him, Niels was in the process of preparing the committee 
writeup, but that's a while ago. We (Niels and me) weren't really able to agree 
on 
which DVCS to suggest as the preferred one for Haiku. Here's my own view on:

Bazaar simply isn't up to the task, I was unable (and Niels, too, IIRC) to 
import our 
subversion repository into a bazaar repo. The import takes ages, eats a 
horrific 
amount of memory and in the end seems to get confused by the subversion repo's 
trunk 
having moved around.

From the remaining two, both Mercurial and Git are certainly capable of 
importing our 
svn repo and handling it as expected. In terms of qualityt, there's not much 
difference between hg and git - they are good at what they do.

Considering the tools' default workflow, hg has a big performance penalty on 
Haiku, 
as with hg a local branch is *usually* done by cloning (copying) the repository 
locally. When possible, hg simplifies that process by using hard links, but 
these 
aren't supported by BFS (as of now). As a result, doing a branch of Haiku's 
repo 
takes several minutes, whereas with git it's instantaneous.

In general, I believe that git's default way of doing things (what is described 
in 
the available tutorials) matches our workflow better than hg's default. Most 
particularly, git's default is to *not* push any local branches to the server, 
but 
hg's default is to do exactly that (with named branches). However, we do not 
want 
branches of each developer being pushed to our central git repo. Developers can 
publish their branches via some of the public git/hg hosting sites and others 
can 
pull from there, that's one major point of a DVCS.

On top of that, there is hg's dependency on Python, which isn't known to work 
reliably on Haiku, but that point is somewhat weakened by the fact that git 
depends 
on not only Perl but on Python, too. I expect that git uses python only for 
some of 
the more obscure actions, but I don't know for sure. Git's testsuite looks more 
promising on Haiku than Mercurial's though.

Finally, there's an easy way to establish "central" revision numbers with git, 
too. 

That's why from my POV, git is the way to go.

cheers,
        Oliver

Other related posts: