Table of Contents

  1. Options for replacing CVS for Horde Development
    1. Decision
    2. Introduction to distributed version control systems
    3. Description
    4. Requirements
      1. Must-haves
      2. Nice-to-haves
    5. The Contenders
      1. Bazaar
        1. Advantages
        2. Disadvantages
        3. Well-known users
      2. Git
        1. Setup
        2. Submodules
        3. Disk space
        4. Advantages
        5. Disadvantages
        6. Well-known users
      3. Mercurial
        1. Advantages
        2. Disadvantages
        3. Well-known users
      4. Subversion
        1. Well-known users
        2. Previous discussion re: migrating Horde to SVN: http://bugs.horde.org/ticket/5284
    6. People
    7. Resource Utilization Comparison
      1. Ingo
      2. Beatnik
    8. Resources
      1. Bazaar Links
      2. Git Links
      3. Mercurial Links

Options for replacing CVS for Horde Development

Decision

We have decided to keep the current history and structure in CVS, and create a new Git repository. Code will be committed to the Git repository as it is cleaned up for PHP 5 and Horde 4.

Introduction to distributed version control systems

Description

This project is to determine what the next generation of the Horde will use to store and organize source code.
Some initial work has been done with Git and SVN conversions of the current CVS repository.

Requirements

Must-haves

Nice-to-haves

Today checking out a Horde app within an existing Horde checkout works fine. This includes making single-commit changes across applications.
Naturally no matter what we choose Chora support will either be added or will improve. However if it is already supported by Chora all the better.

The Contenders

In alphabetical order...


Bazaar

Bazaar from Canonical (i.e. the ubuntu company)

Advantages

Disadvantages

Well-known users


Git

http://git.or.cz/
http://www.opensolaris.org/os/community/tools/scm/git-report-final.txt
http://www.gitcasts.com/git-talk

Setup

#!/usr/bin/env sh

cd /var/www/git/horde/
export CVSROOT=":pserver:cvsread@anoncvs.horde.org:/repository"

FILES="agora
ansel
chora
<SNIP>
whups
wicked"

for FILE in $FILES
do
    echo $FILE": "
    git-cvsimport -C$FILE $FILE
done

Submodules

I added a git submodule for every horde module inside the horde/horde
repository. Now you can do:

git clone git://git.koch.ro/git/horde/horde
cd horde
git submodule init

foreach modules as MODULE // Only those you want to use
  git submodule update $MODULE      // checks out the module

Now there are some more things[1] to think about when actually developing, but
that's one way it could be done.

Disk space

ls -C -w60
agora      goops      jonah      nag            swoosh
ansel      groupware  juno       nic            trean
chora      hermes     klutz      occam          turba
CVSROOT    horde      kronolith  passwd         ulaform
dimp       hordedoc   luxor      pearweb        update.sh
forwards   hordeweb   merk       presentations  vacation
framework  imp        midas      sam            vilma
genie      incubator  mimp       scry           volos
gitgc.sh   ingo       mnemo      sesha          whups
gollem     jeta       mottle     skeleton       wicked

/var/www/git/horde$ du -hs
928M

Advantages

Disadvantages

Well-known users


Mercurial

Alternative distributed versioning control system.

Advantages

Disadvantages

Well-known users


Subversion

Well-known users

Previous discussion re: migrating Horde to SVN: http://bugs.horde.org/ticket/5284


People

While all Horde developers are interested in this project's final recommendation the following people have done work toward making a decision on the next SCM to be used for Horde:

Resource Utilization Comparison

Ingo

SCM Full (Server) Repository Size Branch Checkout
CVS 51MB 7MB
SVN 31MB 16MB
git* 18MB 18MB

Beatnik

SCM Full (Server) Repository Size Branch Checkout
CVS 736KB 700KB
SVN 1.7MB
Mercurial 724KB

Resources

Bazaar Links

Git Links

Mercurial Links


Back to the Project List