Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The procedure for creating a new HEAD tag is more complicated because the caller specifies packages to be addeed, removed or upgraded, but it also involves adding a tag "all at once" to a collection of files which already have some other tag.

Why This Isn't Good Enough

On occasion CVS commands fail in such a way that they leave locks in the repository which can interfere with later operations.  This might be related to the more pernicious problem of incomplete tags, which can cause obscure build failures.

Options for Improvement

  1. Leave procedures as they are.  Work on automating detection and possibly repair of stale CVS locks and incomplete tags.
  2. Modify creation of HEAD and release tags to go package by package. The description of a HEAD or release tag is based on a list of package tags; the tag itself is then a derived quantity.  The primary source for the  list of package tags may be
    1. in a file, e.g. packageList.txt OR
    2. in the RM database
  3. Get rid of container-wide tags altogether, at least for HEAD and releases.  For container check-out, write script which can interpret list of package tags (in form of file or db entries) belonging to the build and check out files accordingly. Would also need a new trigger for RM to build the new HEAD or release tag.

...

LATEST tags appear to be much less subject to problems than HEAD. I suspect this is because the LATEST tags are made bit by bit.  At the very least, the SConsFiles part of each container should receive its (HEAD or release) tag last since to minimize contention. (RM is watching SConstruct to determine when there is a new tag to be built. When it finds one, it submits several jobs which will do check-outs.  Check-outs require a read lock; tagging requires a write lock.)

2.b. is probably more robust than 2.a but also more work.  Either tagCollector.py has to be modified to access the database or the currently-disabled tag collecting in RMViewer has to be revisited.