****** ABOUT THE BRANCHES ******

There are several main branches in the JHDL CVS Repository, described below:

HEAD

The very most up-to-date working JHDL stuff that there is. This may contain code that is largely untested, and the commit rules here are rather lax, but please try to only commit code that at least compiles. This is not a branch, per ce, but is the actual head of the CVS repository. This is what you get by default when you do a checkout, and can be explicit requested with the -A flag.

stable-branch

Only stable code, bug-fixes, fully-tested and *approved* new features, and other stuff that, in general, stuff that would make your mom proud. This branch is the key to having JHDL releases that actually *work*, and thus the rules about what to commit here will be enforced very strictly.

****** GETTING THE BRANCHES ******

When you want to work on a different branch, your guiding principle should be: "DON'T CROSS THE STREAMS." In other words, don't ever try to 'cvs update' a directory to a different branch, including the HEAD. Instead, check out a new copy of the tree with the appropriate tag. Really, using the various branches existing in the JHDL CVS repository is pretty easy, if you follow the instructions and guidelines below.

We recommend the using following directory structure for working on multiple branches:

jhdl/
    stable/
        byucc/ ...  (retrieved with cvs co -r stable-branch)
        build/ ...  (created by ant)
    head/
        byucc/ ...  (retrieved with cvs co -A)
        build/ ...  (created by ant)
    

This way, you can always know if you are working on the stable branch, or on the head of the tree, and your builds will also always be kept separate.

To make this structure, simply do the following commands:

cd (wherever you want this structure to start, maybe ~/work for example)
mkdir jhdl
cd jhdl
mkdir stable
mkdir head
cd stable
cvs co -r stable-branch byucc/jhdl
cd ..
cd head
cvs co -A byucc/jhdl
cd ..
    

Done! =) (The 'build' directories will be made when you run ant for the first time.)

****** USING BRANCHES ******

*** Checkout:

Usage:

cvs co -r <branch> <repository>

Get the head of CVS:

cvs co byucc/jhdl

Get the stable-branch of CVS:

cvs co -r stable-branch byucc/jhdl

*** Updating:

Usage:

cvs update [files]

Update to the new stuff on this branch:

cvs update

Note:

For those of you used to using 'cvs update -A' before you commit, *never* do this in a branch, it will move you out of the branch and into the HEAD. You don't need to use this command anymore.

*** Committing:

Usage:

cvs commit [files]

Commit changed files to the current branch.

cvs commit

Note:

Notice that -sRR={y|n} is now no longer required, and in fact, if provided it does absolutely nothing at all. The RELEASE_READYness of your changes are determined not by a command-line flag, but by what branch you are committing them to.

*** Using CVS Log:

Usage:

cvs log [files]

see the commit-log for build.xml

cvs log build.xml

Note:

Changes made in a branch in CVS will NOT be found at the top of the log, even if they are the most recent changes. Instead, you will have to scroll down near the very bottom where branch commit messages are shown.

*** Merging Changes:

Usage:

ask the person in charge, currently wjl

Note:

Merging changes between branches is a little tricky, and doesn't work well as a free-for-all. Accordingly, someone always needs to be in charge of merging changes between various branches, including the head. If you need to move an approved new feature into the stable branch, or merge a bug-fix back to the head, simply talk to your friendly neighborhood person-in-charge-of-the-branch. Currently, this is Wes Landaker, wjl@ee.byu.edu.