Recent Changes - Search:

WikiDoc

Categories

AlphaTclCVS Modules states And Tags

This page gives some details on the CVS internals used on the AlphaTcl CVS server. It is mostly only useful to AlphaTcl developers and SF project developers with ssh access.

Modules

Currently two CVS modules are declared, AlphaTcl for user installs and AlphaTclDevel for developer installs.

  • AlphaTcl contains the directories 'Tcl', 'Help', 'Tools' and 'Examples'.

  • AlphaTclDevel additionally contains the directory 'Developer'.


The following attempts to explain the reasoning behind the various tags, (branch-)tag formats and revision states that are setup and maintained by the alphatcl-makerelease.tcl script in Developer/Tools. In general these tags should be left alone and private tags should not collide with naming schemes detailed here to ensure problem-free operation of the release script. (see CVS.MakingAlphaTclReleasesFromCvs for more details on the release script)

Version numbers, release stages

AlphaTcl version numbers are expected to follow the following format:

 
   regexp {^(\d{1,2})\.(\d{1,2})(?:(d|a|b|fc|\.)(\d{1,2}))?$} $vers -> major minor stage patch

version tags are then derived from version numbers via

 
   regsub -all {\.} $vers "_" cvsvers
   set verstag "vers-$cvsvers"

i.e. version number 7.5d12 becomes version tag vers-7_5d12

All file revisions which are part of an AlphaTcl release with version $vers, are tagged with versiontag $verstag.

The release stage of a version is determined by the

 
   (d|a|b|fc|\.)

part of the regexp. An empty stage is equivalent to stage

 
   {.}

File Revision States

CVS revision states are short arbitrary strings attached to all file releases, they can be checked via the cvs log command.

Any file revision in AlphaTcl CVS that has never been part of a release is given the default state Exp (Experimental) by CVS.

File revisions that have been part of releases get the highest state obtained over all release stages they have ever been released under according to the following mapping and order:

 
    array set States {
	d  Devel
	a  Alpha
	b  Beta
	fc Final
	.  Release
    }

i.e. say revision 1.5 of file dummy.tcl was part of releases 7.3b10, 7.3fc2, 7.4.1 and 7.5d1. The state of that revision will be set to Release.

File revision states allow you to quickly ascertain the maturity of code in a given file revision without browsing through all the version tags that may be attached to it. Even though a given file revision may be part of a current development release, if it's revision state is Release you'll know it contains pretty mature code that has been part as is of a full release in the past.

Tracking Tags

Tracking tags are a fixed set of CVS tags that are always present in the repository and in general applied in parallel to a version tag. With any release, an appropriate subset of these tags depending on the version release stage will be moved to the new release.

Tracking tags are intended allow users to track a given degree of code stability in the repository without having to know or care about individual version tags.

Names of tracking tags are in uppercase by convention, the current list of tracking tags is as follows: (in order of increasing code stability)

 
      HEAD
      CURRENT
      LATEST
      DEVEL
      ALPHA
      BETA
      STABLE
      FINAL
      RELEASE

   HEAD:   this is of course a CVS internal tag designating the latest revision of any file present in the repository.  It is also a valid branch tag designating the trunk.  For our purposes HEAD can be used as a tracking tag designating the very latest code checked into the repository;  AlphaTcl is not guaranteed to start up or to be in a consistent state when checked out under this tag. Obviously this tracking tag is restricted to the trunk.

   CURRENT:   designates the most recent code on the trunk forming a coherent state of AlphaTcl, in general this will mean a release, but can also mean a pre-release testing version. For instance, the release engineer might ask testers to test CURRENT before he makes a release. This tracking tag is restricted to the trunk.

   LATEST:   designates the most recent release that has been tagged in the repository, be it on the trunk or on branches. This tracking tag is also used by the release engineer to tag what file revisions are to be released before using the ''alphatcl-makerelease'' script. By default, the script releases file revisions tagged by LATEST, it can also be given a branch tag to release the tip of that branch (including HEAD, but that might be dangerous in a busy repository), the script will then tag that tip as LATEST.

   DEVEL:   designates the most recent release of at least stage ''development'' in the repository; devel releases are assumed to take place on the trunk only, which means that when tracking DEVEL you will not pick up e.g. a new RELEASE on a branch (i.e in general this will be a back port of changes from the trunk anyway). This tracking tag is restricted to the trunk.

   ALPHA, BETA, FINAL, RELEASE:   designate the most recent release in the repository of at least the corresponding release stage. e.g. when tracking ALPHA, you will pick up the most recent of all alpha, beta, final or release versions tagged in the repository but not development releases.

   STABLE:   designates the most recent release in the repository that can be considered ''stable'' for daily use by the common user. FINAL releases are considered stable, but e.g. beta versions could be declared STABLE as well. This is a good tag to track if you don't want to run into bugs introduced with ongoing development but would like to take advantage of new features as soon as possible.

In general, AlphaTcl developers will want to track CURRENT or DEVEL, and AlphaTcl users STABLE or RELEASE; more adventurous users may want to track ALPHA or BETA.

Branch tags

When creating branches in the repository, they should be rooted at revisions tagged by a version tag $verstag, with a branch tag given by

 
   regsub  {vers} $verstag {branch} $branchtag

i.e. vers-7_5d10 tags the root of branch-7_5d10

Branches created for back-porting purposes will generally be rooted at release stage versions.

Manual tagging

To manually set or modify tags described in this document you should use the cvs commands detailed here to avoid disturbing existing tags:

  • to tag the HEAD as LATEST in preparation for a release : (or e.g as CURRENT to pass on to testers)

 
	cvs rtag -a -F LATEST AlphaTclDevel

  • to tag the tip of branch-7_5 as LATEST in preparation for a release :

 
	cvs rtag -d LATEST AlphaTclDevel
	cvs rtag -F -r branch-7_5 LATEST AlphaTclDevel

  • to declare a beta version tagged with vers-7_5b10 as STABLE :

 
	cvs rtag -d STABLE AlphaTclDevel
	cvs rtag -F -r vers-7_5b10 STABLE AlphaTclDevel

  • to create a branch at vers-7_5 :

 
	cvs rtag -b -r vers-7_5 branch-7_5 AlphaTclDevel


das 6/11/01


Category.CVS

Page last modified on January 23, 2006, at 02:49 PM
Hosted on SourceForge.net Logo