[Bioperl-l] Re: [Bioperl-pipeline] Requirements for pipeline installation (fwd)

Elia Stupka elia@fugu-sg.org
Sat, 24 Aug 2002 01:09:51 +0800 (SGT)


Just sent this to somebody who was wondering about "branches" and "main
trunk" and "tags", thought somebody else might be interested on the list
if they are confused with the terms we use :)

Elia

---------- Forwarded message ----------
Date: Sat, 24 Aug 2002 01:06:40 +0800 (SGT)
From: Elia Stupka <elia@fugu-sg.org>
Subject: Re: [Bioperl-pipeline] Requirements for pipeline installation

> Ok I guess I am confused about what 'main trunk' is.

In code development, at the initial stage of a project, everybody is
working together on the same code. When the code reaches some kind of
stability, a "tag" is put in, to mark that on that date all code was
working well, all tests were passing, and that if people want the latest
stable code, they should use that.

Now here is the tricky part. Sometimes after you put a tag in, people
start relying on that tagged code a lot (let's call it version 0.5 for
example). So while development of new functionality happens on the "main
trunk" of the code, you might want to "branch" the code that you tagged
with tag 0.5. In other words, if you imagine development like a tree, you
might want to make minor bug fixes and modifications to the 0.5 code, thus
making a little branch on the tree.

In a perfect world you would only have tags, and development completely on
the main trunk. In a sane normal world, you have small branches, where
only small but important code changes such as bug fixes are committed to
the stable code that was initially tagged, than branched.

If a change is committed to a branch it always has to be committed to the
main trunk as well. In a crazy bad world, branches grow insanely long,
becoming very different from the original tagged code. In a completely
screwed up world branches become not only long but also different from the
main trunk. That can lead to real disaster and is usually only resolved by
going in deep and back-porting all changes from the branch to the code, or
declaring that branch dead.

In pictures it's easier to see why it's called main trunk:

        start
          |
          |
          |
          |tag
          |\
          | \branch
          |
          |
          V
         main

I hope it was somewhat clear ;)

Elia

********************************
* http://www.fugu-sg.org/~elia *
* tel:    +65 6874 1467        *
* mobile: +65 9030 7613        *
* fax:    +65 6779 1117        *
********************************