SirLib implementation: Difference between revisions
m (add graphics) |
m (rename screen) |
||
(One intermediate revision by the same user not shown) | |||
Line 5: | Line 5: | ||
Managing changes to program code generally means controlling entire procedures | Managing changes to program code generally means controlling entire procedures | ||
or files. | or files. | ||
<var class="product">SirLib</var> manages <b | <var class="product">SirLib</var> manages <b>changes</b>, that is, differences between old and new versions of procedures. | ||
versions of procedures. | |||
The central construct underlying the <var class="product">SirLib</var> system is that of an <b>update procedure</b>. | The central construct underlying the <var class="product">SirLib</var> system is that of an <b>update procedure</b>. | ||
Line 17: | Line 16: | ||
"deltas", or differences. | "deltas", or differences. | ||
All update procedures for one file are kept together, separate from the managed | All update procedures for one file are kept together, separate from the managed | ||
file in another <var class="product">Model 204</var> procedure file called the | file in another <var class="product">Model 204</var> procedure file called the <b>FixFile</b>. | ||
<b>FixFile</b>. | |||
==Update procedures== | |||
The naming convention for <var class="product">SirLib</var> update procedures identifies the | <p class="caption" style="width:450px">An update procedure</p> | ||
target file for the update, the project to which the update links, and | <p class="figure">[[File:SlibUpdateProc.png|450px]]</p> | ||
the procedure to be updated. | |||
The naming convention for <var class="product">SirLib</var> update procedures identifies the target file for the update, the project to which the update links, and the procedure to be updated. | |||
Update procedure names must follow the following convention: | Update procedure names must follow the following convention: | ||
<p class=" | |||
<p class="syntax"><span class="term">filename</span>.<span class="term">project</span>.<span class="term">proc-name</span> | |||
</p> | </p> | ||
In the example above | In the example screen above: | ||
identifies the target file as <code> | <ul> | ||
The | <li>The name of the update procedure being edited identifies the target file as <code>SIRMON</code>, the project as <code>F6SNAPID</code>, and the target procedure as <code>MOPR-SYSOVR</code>. </li> | ||
as <code> | |||
<li>The <code>./ I</code> command in the third line tells <var class="product">SirLib</var> to <var>I</var>nsert after the line sequenced as 128 the lines up to the next <code>./</code> command. </li> | |||
<li>The <code>./ R</code> command in the eighth line tells <var class="product">SirLib</var> to <var>R</var>eplace the line sequenced as 133 with the following line of code (up to the next <code>./</code> command prefix). </li> | |||
<li>Deletion of lines of code is handled in a similar way with <code>./ D</code>. </li> | |||
<li><code>./ *</code> comments at the top of each update procedure specify the user, date, time, and source file for each change. </li> | |||
</ul> | |||
==Control procedures== | |||
The other kind of procedure contained in a FixFile is a Control procedure. | The other kind of procedure contained in a FixFile is a Control procedure. | ||
Control procedures are <var class="product">Model 204</var> procedures that contain control data for the change management process. | Control procedures are <var class="product">Model 204</var> procedures that contain control data for the change management process. | ||
The control data is simply a list of <b>Projects</b>. | The control data is simply a list of <b>Projects</b>. | ||
< | <p class="caption" style="width:450px">Control procedures contain project identifiers</p> | ||
<p class="figure">[[File:SlibControlProc.png|450px]]</p> | |||
Project identifiers are 8-character names of logical changes which | Project identifiers are 8-character names of logical changes which | ||
Line 55: | Line 57: | ||
CONTROL.<i>xxxxx</i> procedure, as shown above. | CONTROL.<i>xxxxx</i> procedure, as shown above. | ||
==Base and Sequenced procedures== | |||
<b>Base</b> | When <var class="product">SirLib</var> attempts to apply an update against a procedure, it looks first for a procedure of the same name with a prefix of <code>BASE.</code>. Such <code>BASE.</code>, or <b>Base</b>, procedures are versions of procedures before any updates have been applied to them through <var class="product">SirLib</var>. | ||
<ul> | |||
<li>If a Base procedure is found, <var class="product">SirLib</var> applies the changes as directed to the Base version, deleting and replacing the previous executable procedure. </li> | |||
<li>If no Base version of the procedure is found, <var class="product">SirLib</var> assumes this is the first managed change to be applied to this procedure, and it creates the Base version | |||
If no Base version of the procedure is found, <var class="product">SirLib</var> assumes this is the first | |||
managed change to be applied to this procedure, and it creates the Base version | |||
before changes are applied (by copying the executable version into a Base | before changes are applied (by copying the executable version into a Base | ||
version). | version). </li> | ||
</ul> | |||
<i>Once a Base version of any procedure exists in a file it should never | <i>Once a Base version of any procedure exists in a file it should never | ||
be altered or deleted</i>. | be altered or deleted</i>. Base procedures should only be deleted as part of the Cutover process described later. | ||
Base procedures should only be deleted as part of the Cutover process | |||
described later. | |||
Until the first update is applied to a procedure there is no need to | Until the first update is applied to a procedure, there is no need to | ||
create a separate Base copy of the procedure. | create a separate Base copy of the procedure. The list of Base procedures in the managed file is the list of procedures that have had updates applied to them. <var class="product">SirLib</var> always creates base procedures automatically; no user action is required to create a base. | ||
The list of Base procedures in the managed file is the list of procedures that | |||
have had updates applied to them. | |||
<var class="product">SirLib</var> always creates base procedures automatically; no user action is required to create a base. | |||
<b>Sequenced</b> versions of procedures are produced when programmers use | <b>Sequenced</b> versions of procedures are produced when programmers use | ||
<var class="product">SirLib</var> facilities to make copies of procedures to work on. | <var class="product">SirLib</var> facilities to make copies of procedures to work on. Sequenced versions are created automatically, and they are named the same as the target procedure but with a <code>SEQ.</code> prefix. | ||
Sequenced versions are created automatically and named the same as | |||
the target procedure but | Internal sequence numbers are attached to each line of the original procedure and stored as part of the sequenced copy. | ||
Internal sequence numbers are attached to each line of the original procedure | When the programmer is finished making changes, this numbered version is used as the comparison procedure for producing an update procedure. | ||
and stored as part of the sequenced copy. | |||
When the programmer is finished making changes, this numbered version is used | |||
as the comparison procedure for producing an update procedure. | |||
Sequenced versions of procedures are kept by programmers for however long | Sequenced versions of procedures are kept by programmers for however long | ||
changes are being made and update procedures are being generated (update | changes are being made and update procedures are being generated (update | ||
procedures can be regenerated as many times as a programmer | procedures can be regenerated as many times as a programmer wants). | ||
When the programmer is finished with the program changes, and a final version | When the programmer is finished with the program changes, and a final version of the update procedure has been generated, the sequenced and working version of the procedure may be deleted. | ||
of the update procedure has been generated, the sequenced and working version | |||
of the procedure may be deleted. | |||
==SirLib advantages== | |||
practice it is simpler than most other change tracking systems | The <var class="product">SirLib</var> process for generating updates may sound complicated, but in practice it is simpler than most other change tracking systems. And it is far simpler in many ways than not using a change control system at all. | ||
simpler in many ways than not using a change control system at all. | In brief, the programmer: | ||
<ol> | |||
with the <var>Q</var> command | <li>Generates working and sequenced copies of a procedure | ||
with the <var>Q</var> command. </li> | |||
<li>Makes any changes needed. </li> | |||
<li>Generates the update procedure (the "<b>differences</b>") with an <var>X</var> command (<var>XCOMPARE</var>). | |||
<p> | |||
The update procedure is applied as part of a project when all parts of | The update procedure is applied as part of a project when all parts of | ||
that project are completed. | that project are completed. </p></li> | ||
</ol> | |||
In <var class="product">SirLib</var>, the most important procedures are the <var>BASE.<i>procname</i></var> and | In <var class="product">SirLib</var>, the most important procedures are the <var>BASE.<i>procname</i></var> and | ||
the update procedures that apply to that Base procedure. | the update procedures that apply to that Base procedure. | ||
If actual executable procedures are deleted they can be recreated by applying | If actual executable procedures are deleted, they can be recreated by applying the updates to Base versions of the procedures. This is how updates are applied when a file is being reconfigured. | ||
the updates to Base versions of the procedures. | |||
This is how updates are applied when a file is being reconfigured. | |||
Change tracking and reporting can be done using the update procedure | Change tracking and reporting can be done using the update procedure | ||
names alone — they supply the exact number of changed programs in a | names alone — they supply the exact number of changed programs in a | ||
release | release. Coupled with the number of lines within the update | ||
procedures, managers can tell the number of lines of new or replacement | procedures, managers can tell the number of lines of new or replacement | ||
code generated, and the date and time each update was completed. | code generated, and the date and time each update was completed. | ||
Programmers need never be given update access to the actual production | Programmers need never be given update access to the actual production | ||
copies of procedure files. | copies of procedure files. Development and testing is done by whatever method a site uses. The assumed standard is for sites to define development subsystems (APSYs) with grouped procedure files, though this method is not a prerequisite for <var class="product">SirLib</var> functioning. | ||
Development and testing is done by whatever method a | |||
The assumed standard is for | |||
When a programmer finishes working on a procedure an update is | When a programmer finishes working on a procedure, an update is | ||
generated instead of the entire procedure | generated instead of a copying of the entire procedure to a staging or | ||
production file. | production file. Once all update procedures are generated for a release, a manager reviews the updates to make sure they conform to local coding standards and that they are linked to projects existing in the control procedure. This level of monitoring, which used to be difficult if not impossible to do, is a simple task under <var class="product">SirLib</var>, because the update procedures tend to be small, and because the internal comments clearly indicate who generated the new code, where it came from, and when it was created. | ||
Once all update procedures are generated for a release, a manager reviews | |||
the updates to make sure they conform to local coding standards and that they | |||
are linked to projects existing in the control procedure. | |||
This level of monitoring, which used to be difficult if not impossible to do, | |||
is a simple task under <var class="product">SirLib</var>, because the update procedures tend to be small, | |||
and because the internal comments clearly indicate who generated the new code, | |||
where it came from and when it was created | |||
Another option is to distribute the FixFile itself. | The manager applies the updates using option 2 (<b>Apply changes</b>) in the [[SirLib change control|SirLib main menu]], and the production version of the procedure is ready for testing or distribution. | ||
A | |||
Update procedures can be distributed in the FixFile and applied on a | Another option is to distribute the FixFile itself. A site with multiple <var class="product">Model 204</var> Online regions can run a copy of <var class="product">SirLib</var> in each region. Update procedures can be distributed in the FixFile and applied on a region-by-region basis. This allows for faster backouts in production regions, and it removes the complications of distributing each managed file. | ||
region-by-region basis | |||
regions, and removes the complications of distributing each managed file. | |||
==SirLib operations overview== | ==SirLib operations overview== | ||
Line 165: | Line 148: | ||
difficulty of getting into production an error-free SOUL system. | difficulty of getting into production an error-free SOUL system. | ||
<p class="caption" style="width:450px">Change | <p class="caption" style="width:450px">Change management using SirLib</p> | ||
<p class="figure">[[File:SlibChangeMgmt.png|450px]]</p> | <p class="figure">[[File:SlibChangeMgmt.png|450px]]</p> | ||
The figure above shows a change promotion scheme using the <var class="product">SirLib</var> system. | The figure above shows a change promotion scheme using the <var class="product">SirLib</var> system. In the simple flow diagram shown above, changes for the various procedure files are all generated into a single FixFile (here called <code>Changes</code>) in the development environment. The <code>Changes</code> file is distributed or shared across Onlines, and the updates are applied in each region by a local copy of <var class="product">SirLib</var>. | ||
In the simple flow diagram shown above changes for the various procedure | |||
files are all generated into a single FixFile (here called <code>Changes</code>) in the development environment. | |||
The <code>Changes</code> file is distributed or shared across Onlines, and the updates are applied in each region by a local copy of <var class="product">SirLib</var>. | |||
The majority of configuration management tasks are invisible to | The majority of configuration management tasks are invisible to | ||
programmers using <var class="product">SirLib</var>. | programmers using <var class="product">SirLib</var>. Programmers work in <var class="product">[[SirPro]]</var>, which acts as a front-end to the <var class="product">Model 204</var> editor and to the <var class="product">Model 204</var> command structure. <var class="product">SirPro</var> gives the SOUL developer an SPF-like "toolbox" with which to work, supplying prefix commands for copying, deleting, moving, renaming, editing, and browsing SOUL procedures in a selected file. | ||
Programmers work in <var class="product">SirPro</var>, which acts as a front-end to the <var class="product">Model 204</var> | |||
editor and to the <var class="product">Model 204</var> command structure. | In addition, when <var class="product">SirLib</var> is managing changes, special prefix commands are supplied within <var class="product">SirPro</var> that tell the <var class="product">SirLib</var> system that a <b>managed update</b> is taking place. The commands are: | ||
<var class="product">SirPro</var> gives the SOUL developer an SPF-like "toolbox" | |||
with which to work, supplying prefix commands for copying, deleting, | |||
moving, renaming, editing and browsing SOUL procedures in a selected file. | |||
In addition, when <var class="product">SirLib</var> is managing changes, special prefix commands are | |||
supplied within <var class="product">SirPro</var> | |||
The commands are: | |||
<table class="thJustBold"> | <table class="thJustBold"> | ||
<tr><th>Q</th> | <tr><th>Q</th> | ||
Line 212: | Line 186: | ||
These commands are explained in more detail in [[SirLib programmer's reference]]. | These commands are explained in more detail in [[SirLib programmer's reference]]. | ||
Note in the previous figure, all the promotions paths are simplified. | Note that in the previous figure, all the promotions paths are simplified. | ||
This is because <var class="product">SirLib</var> allows updates to all managed files to be | This is because <var class="product">SirLib</var> allows updates to all managed files to be stored, managed, and promoted within the same FixFile. | ||
stored, managed and promoted within the same FixFile. | |||
Note also the elimination of the "copyback" path from the previous | Note also the elimination of the "copyback" path from the previous | ||
illustration. | illustration. This path is generally a violation of a managed environment, and is tolerated because of the need to generate emergency fixes against production code, and because of the occasional requirement to re-align development and production procedures. <var class="product">SirLib</var> eliminates this path by providing the tools to let users know the exact state of production code, and to duplicate the "update level" of production in any other environment. | ||
This path is generally a violation of a managed environment, and is tolerated | |||
because of the need to generate emergency fixes against production code, | |||
and because of the occasional requirement to re-align development and | |||
production procedures. | |||
<var class="product">SirLib</var> eliminates this path by providing the tools to let users know the exact state of production code, and to duplicate the "update level" of production in any other environment. | |||
Programming a managed update consists of | Programming a managed update consists of: | ||
copy of a procedure using the <var>Q</var> command | <ol> | ||
program changes to the working copy | <li>Making a working and sequenced copy of a procedure using the <var>Q</var> command </li> | ||
command against the copy to produce an update procedure. | |||
The <var>X</var> command compares the working copy which has | <li>Making program changes to the working copy </li> | ||
changed | |||
The resulting update procedure is the differences between the two. | <li>Executing an <var>X</var> command against the copy to produce an update procedure. | ||
<p> | |||
The <var>X</var> command compares the working copy (which has | |||
changed) to the sequenced copy (which will not have changed). | |||
The resulting update procedure is the differences between the two. </p></li> | |||
</ol> | |||
<p class="caption" style="width:450px">Update procedures linked to project via naming convention</p> | <p class="caption" style="width:450px">Update procedures linked to project via naming convention</p> | ||
Line 237: | Line 211: | ||
working copy of the procedure and the matching sequenced version; the | working copy of the procedure and the matching sequenced version; the | ||
<var class="product">SirLib</var> system generates the new production procedure by applying the update(s) against the Base procedure. | <var class="product">SirLib</var> system generates the new production procedure by applying the update(s) against the Base procedure. | ||
This is done by a programmer, project leader or administrator | This is done by a programmer, project leader, or administrator using the | ||
<b> | <b>Apply changes (Reconfigure)</b> option in the <var class="product">SirLib</var> main menu. | ||
<p class="caption" style="width:450px">SirLib | <p class="caption" style="width:450px">SirLib functions</p> | ||
<p class="figure">[[File:SlibFunctions.png|450px]]</p> | <p class="figure">[[File:SlibFunctions.png|450px]]</p> | ||
Management activity in the <var class="product">SirLib</var> system begins when a functional change is identified in a particular file in the local application. | Management activity in the <var class="product">SirLib</var> system begins when a functional change is identified in a particular file in the local application. In the <var class="product">SirLib</var> Project screen (invoked by main menu option 1), you enter a new line containing | ||
In the <var class="product">SirLib</var> Project screen (option 1), a new line | |||
an 8-character project name and an optional description. | an 8-character project name and an optional description. | ||
PF key access allows an unlimited amount of optional documentation to be | PF key access allows an unlimited amount of optional documentation to be | ||
attached to a Project. | attached to a Project. | ||
The physical order of these project identifiers should not be altered once | The physical order of these project identifiers should not be altered once | ||
updates are linked to the identifiers, as this sequence specifies the order | updates are linked to the identifiers, as this sequence specifies the order in which updates are applied. Updates that effect the same line of code will not apply correctly unless previous updates have been applied. | ||
in which updates are applied. | |||
Updates that effect the same line of code will not apply correctly unless | |||
previous updates have been applied. | |||
<p class="caption" style="width:450px">Project screen</p> | <p class="caption" style="width:450px">Project screen</p> | ||
<p class="figure">[[File:SlibProjectDefList.png|450px]]</p> | <p class="figure">[[File:SlibProjectDefList.png|450px]]</p> | ||
The <b>Project</b> option allows entry of Project names, and allows PF key | The <b>Project Definition List</b> option allows entry of Project names, and allows PF key access to a documentation feature for the project. | ||
access to a documentation feature for the project. | |||
Entry fields on the | Entry fields on the project definition screen are: | ||
<table class="thJustBold"> | <table class="thJustBold"> |
Latest revision as of 20:16, 27 October 2015
Managing changes to program code generally means controlling entire procedures or files. SirLib manages changes, that is, differences between old and new versions of procedures.
The central construct underlying the SirLib system is that of an update procedure. An update procedure is a Model 204 procedure containing lines of code to be changed in another Model 204 procedure.
Interspersed with the lines of code are lines containing SirLib commands and sequence numbers which tell SirLib where in the target procedure the lines to be changed are located. In other systems, update procedures are sometimes referred to as "deltas", or differences. All update procedures for one file are kept together, separate from the managed file in another Model 204 procedure file called the FixFile.
Update procedures
The naming convention for SirLib update procedures identifies the target file for the update, the project to which the update links, and the procedure to be updated. Update procedure names must follow the following convention:
filename.project.proc-name
In the example screen above:
- The name of the update procedure being edited identifies the target file as
SIRMON
, the project asF6SNAPID
, and the target procedure asMOPR-SYSOVR
. - The
./ I
command in the third line tells SirLib to Insert after the line sequenced as 128 the lines up to the next./
command. - The
./ R
command in the eighth line tells SirLib to Replace the line sequenced as 133 with the following line of code (up to the next./
command prefix). - Deletion of lines of code is handled in a similar way with
./ D
. ./ *
comments at the top of each update procedure specify the user, date, time, and source file for each change.
Control procedures
The other kind of procedure contained in a FixFile is a Control procedure. Control procedures are Model 204 procedures that contain control data for the change management process. The control data is simply a list of Projects.
Project identifiers are 8-character names of logical changes which allow physical changes (actual update procedures) to be grouped so they are always applied and backed together. Project identifiers are used as the second qualifier of update procedure names. Project identifiers may also be followed by a line of comment in the CONTROL.xxxxx procedure, as shown above.
Base and Sequenced procedures
When SirLib attempts to apply an update against a procedure, it looks first for a procedure of the same name with a prefix of BASE.
. Such BASE.
, or Base, procedures are versions of procedures before any updates have been applied to them through SirLib.
- If a Base procedure is found, SirLib applies the changes as directed to the Base version, deleting and replacing the previous executable procedure.
- If no Base version of the procedure is found, SirLib assumes this is the first managed change to be applied to this procedure, and it creates the Base version before changes are applied (by copying the executable version into a Base version).
Once a Base version of any procedure exists in a file it should never be altered or deleted. Base procedures should only be deleted as part of the Cutover process described later.
Until the first update is applied to a procedure, there is no need to create a separate Base copy of the procedure. The list of Base procedures in the managed file is the list of procedures that have had updates applied to them. SirLib always creates base procedures automatically; no user action is required to create a base.
Sequenced versions of procedures are produced when programmers use
SirLib facilities to make copies of procedures to work on. Sequenced versions are created automatically, and they are named the same as the target procedure but with a SEQ.
prefix.
Internal sequence numbers are attached to each line of the original procedure and stored as part of the sequenced copy. When the programmer is finished making changes, this numbered version is used as the comparison procedure for producing an update procedure.
Sequenced versions of procedures are kept by programmers for however long changes are being made and update procedures are being generated (update procedures can be regenerated as many times as a programmer wants). When the programmer is finished with the program changes, and a final version of the update procedure has been generated, the sequenced and working version of the procedure may be deleted.
SirLib advantages
The SirLib process for generating updates may sound complicated, but in practice it is simpler than most other change tracking systems. And it is far simpler in many ways than not using a change control system at all. In brief, the programmer:
- Generates working and sequenced copies of a procedure with the Q command.
- Makes any changes needed.
- Generates the update procedure (the "differences") with an X command (XCOMPARE).
The update procedure is applied as part of a project when all parts of that project are completed.
In SirLib, the most important procedures are the BASE.procname and the update procedures that apply to that Base procedure. If actual executable procedures are deleted, they can be recreated by applying the updates to Base versions of the procedures. This is how updates are applied when a file is being reconfigured.
Change tracking and reporting can be done using the update procedure names alone — they supply the exact number of changed programs in a release. Coupled with the number of lines within the update procedures, managers can tell the number of lines of new or replacement code generated, and the date and time each update was completed.
Programmers need never be given update access to the actual production copies of procedure files. Development and testing is done by whatever method a site uses. The assumed standard is for sites to define development subsystems (APSYs) with grouped procedure files, though this method is not a prerequisite for SirLib functioning.
When a programmer finishes working on a procedure, an update is generated instead of a copying of the entire procedure to a staging or production file. Once all update procedures are generated for a release, a manager reviews the updates to make sure they conform to local coding standards and that they are linked to projects existing in the control procedure. This level of monitoring, which used to be difficult if not impossible to do, is a simple task under SirLib, because the update procedures tend to be small, and because the internal comments clearly indicate who generated the new code, where it came from, and when it was created.
The manager applies the updates using option 2 (Apply changes) in the SirLib main menu, and the production version of the procedure is ready for testing or distribution.
Another option is to distribute the FixFile itself. A site with multiple Model 204 Online regions can run a copy of SirLib in each region. Update procedures can be distributed in the FixFile and applied on a region-by-region basis. This allows for faster backouts in production regions, and it removes the complications of distributing each managed file.
SirLib operations overview
Without SirLib, SOUL change control might look like this:
Typically, programmers make backup copies of procedures they are about to work on, either in the development file or in a "backup" file set aside for this purpose. They then work on the original procedure in the development file, integrating their changes either in the development file or when updates are sent to a test environment. Changes are promoted from development to test and from test to production either on a procedure-level or a file-level basis.
As shown in the illustration, often each file requires its own distribution or "staging" copy in each environment, and a mechanism is usually provided for copying procedures back from production to test and from test to development (the backward migration paths at the bottom of the picture).
On large projects the flow of change promotion can become extremely complex, with multiple development files and online environments, and various levels of integration both within and across onlines. Obviously the more complex the development path, the greater the difficulty of getting into production an error-free SOUL system.
The figure above shows a change promotion scheme using the SirLib system. In the simple flow diagram shown above, changes for the various procedure files are all generated into a single FixFile (here called Changes
) in the development environment. The Changes
file is distributed or shared across Onlines, and the updates are applied in each region by a local copy of SirLib.
The majority of configuration management tasks are invisible to programmers using SirLib. Programmers work in SirPro, which acts as a front-end to the Model 204 editor and to the Model 204 command structure. SirPro gives the SOUL developer an SPF-like "toolbox" with which to work, supplying prefix commands for copying, deleting, moving, renaming, editing, and browsing SOUL procedures in a selected file.
In addition, when SirLib is managing changes, special prefix commands are supplied within SirPro that tell the SirLib system that a managed update is taking place. The commands are:
Q | SEQUENCE.
Tells SirLib to generate working and "sequenced" copy of a procedure. |
---|---|
X | XCOMPARE.
Generates an update procedure by comparing the working and sequenced procedure copies. Output is a procedure containing the differences. |
N | NEW.
Generates an update procedure for a new procedure. |
K | KLOBBER.
Generates an update procedure for a logical delete of a procedure. |
Z | RESEQUENCE.
Renumbers the internal sequence numbers for a procedure that has had many changes applied to it without the file being cutover. |
These commands are explained in more detail in SirLib programmer's reference.
Note that in the previous figure, all the promotions paths are simplified. This is because SirLib allows updates to all managed files to be stored, managed, and promoted within the same FixFile.
Note also the elimination of the "copyback" path from the previous illustration. This path is generally a violation of a managed environment, and is tolerated because of the need to generate emergency fixes against production code, and because of the occasional requirement to re-align development and production procedures. SirLib eliminates this path by providing the tools to let users know the exact state of production code, and to duplicate the "update level" of production in any other environment.
Programming a managed update consists of:
- Making a working and sequenced copy of a procedure using the Q command
- Making program changes to the working copy
- Executing an X command against the copy to produce an update procedure.
The X command compares the working copy (which has changed) to the sequenced copy (which will not have changed). The resulting update procedure is the differences between the two.
Once an update procedure is produced the programmer can delete the working copy of the procedure and the matching sequenced version; the SirLib system generates the new production procedure by applying the update(s) against the Base procedure. This is done by a programmer, project leader, or administrator using the Apply changes (Reconfigure) option in the SirLib main menu.
Management activity in the SirLib system begins when a functional change is identified in a particular file in the local application. In the SirLib Project screen (invoked by main menu option 1), you enter a new line containing an 8-character project name and an optional description. PF key access allows an unlimited amount of optional documentation to be attached to a Project.
The physical order of these project identifiers should not be altered once updates are linked to the identifiers, as this sequence specifies the order in which updates are applied. Updates that effect the same line of code will not apply correctly unless previous updates have been applied.
The Project Definition List option allows entry of Project names, and allows PF key access to a documentation feature for the project.
Entry fields on the project definition screen are:
Status | If this column is blank (or shows the default pad character, the underscore, the project is active and changes associated with this project will be included in subsequent file reconfigures and cutovers. To comment out a project, enter an asterisk (*) in this field. Care should be taken in commenting out projects that have dependencies in projects that are implemented after them. |
---|---|
Project ID | Project ID is an alphanumeric identifier of 1 to 8 characters that links together change decks containing related changes.
The project ID should conform to some meaningful pattern as established at the site. For instance, all bug fixes could be prefixed with |
Description | As many as 72 characters of text can be added to the project. This descriptive text is displayed on the reconfigure screen and cutover screen, and in the SIRLIB reports.
Extra text can be added to a project via PF2 and this text is stored as data records in SIRLIBD . |
In a highly controlled environment the project leader may require that no changes occur in a file unless a project is entered first via the Project facility (options are provided to protect the ability to define Projects). In a less structured project, updates may be produced as programmers need to build them, and a project leader may later decide which will be included in a particular release by adding a project that links the updates in.
Along with making distribution files smaller this allows changes to be distributed and applied by SirLib directly in a production region. Generally, all changes for all procedure files can be kept in a single file, greatly reducing complex distribution problems. Operating in this manner allows changes to be backed out much faster. It also allows releases to be shipped to all sites and applied on a region-by-region or project-by-project basis. Status of the current configuration can be viewed in SirLib screens and also by reviewing the procedure comments placed by SirLib inside each proc that has had an update applied to it. Change status can also be seen in SirLib reports.