Previous | Contents | Index |
If you are the project leader for a stream, you must create new build streams from time to time so you can build OpenVMS for your release. You may also have to create the stream you are project-leading. This section tells you how to perform these operations.
Streams are classified into build streams, and into
release streams. Build streams are used for builds and
establish the files involved with each build, and are usually of
interest only to those engineers directly involved with source code
builds. Release streams are of general interest to all VDE or
VSC users, as they are the streams used for managing source
code development.
5.7.1 Creating Build Streams
To create a build stream for the development stream that you project lead, you must perform two operations: Create the build stream in the VSC database and create a CMS class for that build stream. To create the build stream in the VSC database, use the CREATE STREAM command. If you are the project leader for stream BIRCH, for example, you could use the following command to create a build stream:
VSC„ CREATE STREAM BIRCH_BUILD - _VSC„ /PARENT=BIRCH /CMS_CLASS - _VSC„ /REMARK="Build stream" |
The CREATE STREAM command does not create a CMS class for the stream, but the /CMS_CLASS qualifier specifies that a CMS class for each facility should be maintained for the new stream as that stream is modified with future VSC commands (such as INSERT or DELETE GENERATION). How you create the CMS class initially is discussed shortly.
Specification of a remark is required; if you omit the /REMARK qualifier, VSC prompts you for a remark string.
Specification of a remark for the new stream is required. Digital strongly recommends the remark indicate that the stream is a build stream. |
For the OpenVMS VAX VDE library, the CREATE STREAM command takes about 20 minutes. You should run this command after you have performed all replacements that you want included in the build stream. It is best to run this command at less-busy times as it locks parts of the VSC database and can therefore prevent access by other users for various operations.
To create and populate a CMS class in each facility for the new stream, you must run the SYSBLDCOM$:POPULATE_LIBRARIES.COM command procedure. This procedure submits a separate batch job for each OpenVMS facility in order to populate the desired class as fast as possible. The whole operation is still time-consuming; it takes about four hours for the OpenVMS VAX library. To run this command procedure, enter the following command at DCL level:
$ @SYSBLDCOM$:POPULATE_LIBRARIES.COM BIRCH_BUILD BIRCH |
If you already have an existing CMS class you want to reuse, you can
use the
SYSBLDCOM$:POP_REUSED_CLASS.COM command procedure instead. Its
invocation is similar to that of POPULATE_LIBRARIES; the comments in
the procedure give the details.
5.7.2 Creating Release Streams
To create a development stream for a new OpenVMS release (in other words, a stream that most OpenVMS developers will use to reserve and replace modules), you must make a number of decisions:
To create the stream, use the CREATE STREAM command, much the same as explained in Section 5.7.1 for build streams. To create a new development stream MAPLE, for example, you might enter the following command:
VSC„ CREATE STREAM MAPLE - _VSC„ /OWNER=SMITH - _VSC„ /PARENT=BIRCH /MAIN - _VSC„ /CMS_CLASS /REPLACEMENT=QUEUE - _VSC„ /REMARK="New-feature stream" |
The use of the /OWNER qualifier specifies the owner of the new stream; this person is typically the stream's project leader. If you use this qualifier, developers can later use the SHOW STREAM command to determine the stream's owner.
The /MAIN qualifier causes the new stream to become the last stream on the main line of descent, and it causes VSC to use whole-number CMS generation expressions for the stream. /MAIN also causes VSC to update all successor stream links to link to this new mainline stream.
The /PARENT qualifier is informational in some cases, but can be critical during certain VSC operations such as CMS facility uploads. It should always be specified, and it should always specify the correct parent stream.
The /[NO]MAIN and /PARENT qualifiers are central and necessary to the CMS generation number selection process used within VSC, and Digital recommands that these qualifiers be specified with care. In particular, the /MAIN qualifier can and should be used only on mainline streams, while /NOMAIN should be specified for non-mainline streams. Incorrect specification of /[NO]MAIN and/or /PARENT can and will cause longer CMS generation numbers, and has been shown to cause both confusion and consternation among developers accustomed to the typical (cardinal) progression of CMS generations that occurs for modules on the mainline. |
Just as for build streams, the /CMS_CLASS qualifier specifies that a CMS class in each facility should be maintained for the stream.
The /REPLACEMENT qualifier specifies that the new stream requires all replacements into the stream to be queued (as opposed to immediate) replacements. Queued replacements go through the VSC review mechanism and give you control over when replacements are actually performed. The /REMARK qualifier specifies a remark string for the stream; if you omit this qualifier, VSC prompts you for a remark string.
Specification of a remark for the new stream is required. Digital strongly recommends the remark indicate that the stream is a release or new-feature stream. |
As explained in Section 5.7.1, the CREATE STREAM command does not create and populate the CMS class for the stream. Instead, you must submit the SYSBLDCOM$:POPULATE_LIBRARIES.COM or SYSBLDCOM$:POP_REUSED_CLASS.COM command procedure at DCL level to create and populate a CMS class for the stream in each facility. Section 5.7.1 describes how you use these procedures. One of these procedures should be run at the same time as you run the CREATE STREAM command, and you must ensure that no VSC commands that update the parent stream run at that time.
When you create a new development stream, you often want to specify that future replacements into some previously existing stream should be propagated to the new stream. For example, if stream MAPLE is created from stream BIRCH, you may want all future changes to BIRCH to be propagated to MAPLE so that MAPLE will contain all features and bug fixes that BIRCH contains. As a later stream, MAPLE will presumably also receive new features that are omitted from BIRCH. To specify this sort of stream successor relationship, you use the /SUCCESSOR qualifier to the MODIFY STREAM command. This is an example:
VSC„ MODIFY STREAM BIRCH /SUCCESSOR=MAPLE |
You can specify multiple successors for a given stream if that is the behavior you want. To do so, specify a parenthesized list of stream names separated by commas with the /SUCCESSOR qualifier. Alternatively, specify each successor stream with a separate MODIFY STREAM command. To cancel successor relationships, use the /NOSUCCESSOR qualifier to the MODIFY STREAM command. (The HELP text has the details.)
To confirm that you have established the successor relationships correctly, use the /SUCCESSOR qualifier to the SHOW STREAM command. This example illustrates its output:
VSC„ SHOW STREAM/SUCCESSOR BIRCH, MAPLE Stream BIRCH Successor chains: BIRCH -> MAPLE Stream MAPLE Successor chains: MAPLE (no successors) VSC„ |
When you create a new release stream, you should also determine whether
you want certain developers to review or be notified of all
replacements into the stream. In particular, you probably want to be
notified of all such replacements yourself. To specify the reviewers
and developers to notify, use the /REVIEWER and /NOTIFY qualifiers to
the CREATE STREAM or MODIFY STREAM command. Section 5.6 describes
these qualifiers.
5.7.3 Example Stream Creations
The following code example shows how an OpenVMS development stream is created and populated. The example is typical of an OpenVMS mainline development stream.
The steps outlined below create a new mainline stream int the OpenVMS database, and a matching mainline stream in the OpenVMS test database. It temporarily disables propogation from the parent stream, as populating the stream can require some time. It then populates the new mainline streams, disables propogation into the new mainlines to prevent unintentional overwriting, and finally resets the proper propogation attribute on the parent stream.
These operations should be performed only when the VSC database is quiescent, as one typically wishes all modifications to the parent database to be propogated into the new stream.
$ VDE Set Library VMS$ Create Stream - /CMS_CLASS/NOINIT_CMS_CLASS - /noGENERATION - /DEFER - /MAIN - ! warning: alters generation selection /Populate - /Frozen - /Conference=YELLOW$NOTES:DRAGON-YELLOW.NOTE - /PARENT=CORAL - /NoSuccessor - /REPLACEMENT=QUEUE - /REMARK="Post-CORAL release stream"- DRAGON Modify Stream DRAGON - /Reviewer=(projectleader) - /NOTIFY=(projectleader,DRAGONbld) - DRAGON Modify Stream CORAL/NoSuccessor Populate Stream DRAGON/From_Stream=CORAL Modify Stream DRAGON/NoPopulate Modify Stream CORAL/Successor=DRAGON Exit $! $ VDE Set Library VMSTEST$ Create Stream/CMS_CLASS/NOINIT_CMS_CLASS - /noGENERATION - /DEFER - /MAIN - ! warning: alters generation selection /Populate - /Frozen - /conference=YELLOW$NOTES:VMSTEST-YELLOW.NOTE - /PARENT=CORAL - /noSuccessor - /REPLACEMENT=QUEUE - /REMARK="Post-CORAL release stream"- DRAGON $! Modify Stream DRAGON - /reviewer=(projectleader,testleader) - /NOTIFY=(projectleader,testleader,DRAGONbld) Modify Stream CORAL/NoSuccessor Populate Stream DRAGON/From_Stream=CORAL Modify Stream DRAGON/NoPopulate Modify Stream CORAL/Successor=DRAGON Exit $ EXIT |
The above example creates a mainline stream, which effects
5.8 Tailoring Processing With Scripts
As a project leader, you can tailor how VSC or VDE responds to certain situations using script files. Script files allow a number of common operations to be customized to site-specific requirements.
Table 5-5 contains a list of the available script types, and a brief description of each. Script creation uses the CREATE SCRIPT command, and requires the CRESCRP privilege.
BUILD | |
The build script sets up optional build-job definitions. This script is executed at the start of each build-job process. | |
COMPILE | |
The compile script contains the command(s) used to compile a module. The compile script is called by a build job, and by a COMPILE command. | |
COPY | |
copy command copies a module. The script is called as part of a build job, and is called by the COPY command. | |
DELETE_GENERATION | |
The delete-generation script performs optional processing for the DELETE GENERATION command. | |
DIFFERENCES | |
The differences script is used to determine the differences between two generations of a module. The script is called by the DIFFERENCES command. | |
FETCH | |
The fetch script performs optional processing for the FETCH command. | |
INSERT_GENERATION | |
The insert-generation script performs optional processing for the INSERT GENERATION command. | |
LINK | |
The link script links a module. This script is called by build jobs and by the LINK command. | |
NEW_STREAM | |
The new-stream script copies files for a particular facility from the parent stream into a new stream. This script is called when a new stream is created. | |
NOKEEP | |
The nokeep script performs optional processing for the REPLACE command. Specifically, the nokeep script is called when the REPLACE/NOKEEP command is specified. | |
REPLACE | |
The replace script performs optional processing for the REPLACE command.
If stream-specific reference directories are required, this script can be used to update the reference directory on each replacement. |
|
RESERVE | |
The reserve script performs optional processing when a RESERVE command
is entered.
Should notification of a reservation be required, a site-specific reserve script can be coded to send mail. |
|
SET_FACILITY | |
The set-facility script performs optional processing for the SET FACILITY command. | |
SET_STREAM | |
The set-stream script performs optional processing for the SET STREAM command. | |
STAGING | |
The staging script copies a source file to a staging area for the REPLACE command when the replacement is queued. | |
UNRESERVE | |
The unreserve script performs optional processing for the UNRESERVE command. |
Previous | Next | Contents | Index |