Release engineering and methodology with CVS branching and merging


Release engineering is the collection of methods, tools and techniques for managing software product releases. Projects using CVS need to define a clear method to facilitate the addition and integration of new features. This document described my own release engineering methodology based on CVS (Heavily inspired by FreeBSD release engineering)


Two main branches STABLE and CURRENT

In order to maintain an always stable source tree. Two main branches are used. The STABLE branch and the CURRENT branch. The CURRENT branch is the CVS's default HEAD branch. The STABLE branch is created from the CURRENT branch.

New source is imported to the CURRENT branch by default. After testing the new source code in the CURRENT branch, it is merged to the STABLE branch.


Create a new branch for new features

New features that require important changes in the code are developed in a separate new branch (one branch per feature). The following rules must be followed :

  cvs update -rHEAD
  cvs tag FTR_FEATURE_ROOT
  cvs tag -b -r FTR_FEATURE_ROOT -r FTR_FEATURE
  cvs update -r FTR_FEATURE
  cvs update -rFTR_FEATURE
  cvs tag FTR_FEATURE_MERGE_CURRENT
  cvs update -rHEAD
  cvs checkout -j FTR_FEATURE_MERGE_CURRENT
  cvs update -rHEAD
  cvs tag FTR_FEATURE_MERGE_STABLE
  cvs update -rSTABLE
  cvs checkout -j FTR_FEATURE_MERGE_STABLE

Preparing a new release

If the source code is ready for a new release. Proceed as follows :

  cvs update -rSTABLE
  cvs tag REL-X-X



Miscellaneous commands


Removing a branch tag :

cvs tag -d -B BRANCH-TAG

Removing revisions

cvs admin -o 1.6.4.1:1.6.4.5 file.c

Useful links



Labels: , , Wireless Internet Security Coding Network Monitoring