POSSE CVS Branches
In order to facilitate concurrent development, the POSSE source code will have multiple paths of development. Each path of development will follow a separate CVS branch or set of branches. During the life cycle of a given POSSE release, the most current code will exist on different branches as described below. A number of CVS tags will be used to mark milestones in the life cycle of a POSSE release.
In CVS, branches are defined as a special kind of CVS tag. In addition to branch tags, CVS has a class of tags that are plain marker tags. Plain marker tags should be used to mark milestones in the life cycle of a given release. In order to aid in visually distinguishing branch tags from plain marker tags, I propose that branch tags use only lowercase letters and plain marker tags use all uppercase letters. In summary. branch tags represent a separate path or line of development, while marker tags exist to mark a state, or milestone in the development path.
In addition to the POSSE specific tags, there are two built-in CVS tags that should be described, HEAD and MAIN. The HEAD marker tag is a always located at the newest committed revision on the MAIN branch of a specific file's or directories' version tree. From that description, I hope it is obvious that HEAD is a plain marker tag, and that MAIN is a branch tag. In this case the MAIN branch tag deviates from my proposed naming convention of lowercase letters for branch tags.
The life cycle of each POSSE release will have two major phases, "active development" and "maintenance". When a POSSE release is in the "active development" phase, the POSSE release will be open to new feature additions and bug fix changes. When a POSSE release is in the "maintenance" phase, only bug fix changes can be checked in. Since the key difference between the "active development" and "maintenance" phases is the ability to add new features, the "active development" phase will also be known as the "features" phase. The transition between the two phases is traditionally called a "Code Freeze" and is a major milestone in the life cycle of a POSSE release.
For the POSSE project, the "active development" or "features" phase is synonymous with the CVS MAIN branch. The duration of time when a given version of POSSE is open for new feature additions, check-ins that occur on the MAIN branch will be included in that release of POSSE. The only exception to that rule is if a new feature addition is backed out of a POSSE release due to whatever reason. In order to prevent regressions, bug fix changes should also be checked in to the MAIN branch, in addition to any specific "maintenance" branch. Unless you specify otherwise, CVS will perform actions on the MAIN branch, and hence the "active development" area.
The point in time when a release of POSSE is closed to further feature additions, traditionally called "Code Freeze", is when that POSSE version's development path forks onto a new branch. To mark the transition from "active development" to "maintenance" a CVS tag will be placed on the current revisions of all POSSE elements to mark this milestone. The CVS tag's name will be based on the specific release of POSSE, and will serve as the basis for the maintenance branch. The maintenance branch will be described below. The naming structure for this CVS tag is POSSE_[version]_BASE.
The "maintenance" phase of a POSSE release will always occur on a branch other than MAIN. This branch will be known as the "maintenance" branch and it is POSSE version specific. Only bug fixes are to be included in a POSSE release under maintenance. The maintenance branch names will follow the pattern, posse_[version]. When a POSSE release transitions to the "maintenance" phase, it then becomes the current maintenance release, replacing any previous maintenance release. Where the MAIN branch is always the new feature branch, the maintenance branch will change over time as new versions of POSSE are begun.
For Example:
Two versions of POSSE are currently available, V1.0 and V2.0. Version 1.0 is the current POSSE maintenance version, and version 2.0 is the active development or new features version. The following CVS version tree is representative of the current state of POSSE files.
The numbers represent the underlying RCS/CVS revision numbers.
The words represent CVS tags.
Comments are in parentheses.
1.3.2.1----1.3.2.2----1.3.2.3 (Maintenance Branch)
/
/
/
1.1----1.2----1.3------------1.4----1.5 (New Features Branch)
MAIN posse_10 HEAD
POSSE_10_BASE
For this file, the revision 1.3 was the beginning of the POSSE 1.0 maintenance branch, posse_10. The 1.3 revision has two tags, the POSSE_10_BASE tag to mark the base revision for the posse_10 branch, and the posse_10 branch tag itself. In RCS/CVS, the revision numbers given to a branch consists of a second pair of numbers, which is why the revisions on the posse_10 branch have four numbers separated by dots, where as the revisions on the MAIN branch only have two numbers. Please read the RCS documentation for more information on revision numbering.
What does this mean for POSSE developers:
For each path of development that you want work on, you should setup the local CVS directory with the appropriately checked out revisions.
To create a POSSE new features workspace
mkdir -p posse_features/src
cd posse_features/src
cvs co posseall
cvs co -r HEAD posseall
cvs co -r MAIN posseall
To create a POSSE V1.0 maintenance workspace
mkdir -p posse_10/src
cd posse_10/src
cvs co -r posse_10 posseall