SirPro change management tools and functions: Difference between revisions
m (add graphics) |
m (mixed case for XCOMPARE) |
||
Line 36: | Line 36: | ||
programmer in the <var class="product">SirPro</var>/<var class="product">SirLib</var>-controlled environment. This screen, and others like it, | programmer in the <var class="product">SirPro</var>/<var class="product">SirLib</var>-controlled environment. This screen, and others like it, | ||
provide access to all procedure activity in <var class="product">Model 204</var>. | provide access to all procedure activity in <var class="product">Model 204</var>. | ||
For details on the use of <var class="product">SirLib</var>, including the special commands for managed updates, see | For details on the use of <var class="product">SirLib</var>, including the special commands for managed updates, see [[SirLib]]. | ||
Only the special Procedure List screen | Only the special Procedure List screen | ||
prefix commands (<code>Q</code>, <code>X</code>, <code>K</code>, <code>N</code>, and <code>Z</code>) for creating and manipulating managed updates are explained here. | prefix commands (<code>Q</code>, <code>X</code>, <code>K</code>, <code>N</code>, and <code>Z</code>) for creating and manipulating managed updates are explained here. | ||
Line 57: | Line 57: | ||
update procedures can be generated. | update procedures can be generated. | ||
<p class="caption" style="width:450px">Sequencing a procedure with the | <p class="caption" style="width:450px">Sequencing a procedure with the Q command</p> | ||
<p class="figure">[[File:SProSequence.png|450px]]</p> | <p class="figure">[[File:SProSequence.png|450px]]</p> | ||
Line 64: | Line 64: | ||
"sequenced" copy of the procedure (a copy containing sequence or | "sequenced" copy of the procedure (a copy containing sequence or | ||
line numbers), which will later be used as comparison input for the | line numbers), which will later be used as comparison input for the | ||
< | <var>Xcompare</var> command. | ||
Building these copies is always the first step in generating a managed update. | Building these copies is always the first step in generating a managed update. | ||
The < | The <var>Q</var> prefix command presents the <b>Sequence procedure</b> screen, which has the following input fields: | ||
<table class="thJustBold"> | <table class="thJustBold"> | ||
Line 145: | Line 145: | ||
The sequenced version of a procedure should never be changed, as it is | The sequenced version of a procedure should never be changed, as it is | ||
the "before" image for the < | the "before" image for the <var>Xcompare</var> that will eventually generate | ||
the update procedure. | the update procedure. | ||
Sequence numbers generally should not concern programmers, though there are a few times when it is worth knowing something about how they work. | Sequence numbers generally should not concern programmers, though there are a few times when it is worth knowing something about how they work. | ||
Line 151: | Line 151: | ||
The <code>Q</code> prefix command automatically begins sequencing at 10000 and | The <code>Q</code> prefix command automatically begins sequencing at 10000 and | ||
increments each line in the <code>BASE.<i>procname</i></code> procedure by 10000. | increments each line in the <code>BASE.<i>procname</i></code> procedure by 10000. | ||
As changes are generated, the < | As changes are generated, the <var>Xcompare</var> function generates new line numbers for lines of code being inserted and replaced. | ||
for lines of code being inserted and replaced. | The <var>Xcompare</var> algorithm attempts to number the first new line of code beginning with a sequence | ||
The < | |||
attempts to number the first new line of code beginning with a sequence | |||
number 1 greater than its starting point in the existing sequence (this | number 1 greater than its starting point in the existing sequence (this | ||
applies to Inserts and Replaces: it is irrelevant for Deletes). | applies to Inserts and Replaces: it is irrelevant for Deletes). | ||
Line 167: | Line 165: | ||
in a <code>SEQ</code> procedure however will indicate the number of times a section | in a <code>SEQ</code> procedure however will indicate the number of times a section | ||
of code has been changed. The sequence numbers themselves will | of code has been changed. The sequence numbers themselves will | ||
indicate whether the < | indicate whether the <var>Xcompare</var> will be able to "fit" changes into the same section of code again. | ||
the same section of code again. | |||
For example, a section of code with sequence numbers that look like this indicates that changes will still "fit" in the hundreds and tens columns: | For example, a section of code with sequence numbers that look like this indicates that changes will still "fit" in the hundreds and tens columns: | ||
<p class="code">003451001 | <p class="code">003451001 | ||
Line 187: | Line 184: | ||
Replace (a <code>./R</code> command in an update procedure) operates | Replace (a <code>./R</code> command in an update procedure) operates | ||
slightly differently than Insert, but the outcome looks very similar. | slightly differently than Insert, but the outcome looks very similar. | ||
When changes will no longer "fit," < | When changes will no longer "fit," <var>Xcompare</var> can still | ||
successfully generate an update procedure that effects this section of | successfully generate an update procedure that effects this section of | ||
code, but the update procedure will become unnecessarily long and | code, but the update procedure will become unnecessarily long and | ||
Line 200: | Line 197: | ||
<div id="xcomp"></div> | <div id="xcomp"></div> | ||
== | ==Xcompare: Creating an update procedure== | ||
<!--Caution: <div> above--> | <!--Caution: <div> above--> | ||
The < | The <var>Xcompare</var> operation is executed by placing an <code>X</code> next to the | ||
changed procedure on the Procedure List screen. | changed procedure on the Procedure List screen. | ||
This invokes a compare operation of that procedure | This invokes a compare operation of that procedure | ||
Line 209: | Line 206: | ||
The output from this operation is an update procedure. | The output from this operation is an update procedure. | ||
<p class="caption" style="width:450px"> | <p class="caption" style="width:450px">Xcompare screen for creating a "differences" deck</p> | ||
<p class="figure">[[File:SProXcompare.png|450px]]</p> | <p class="figure">[[File:SProXcompare.png|450px]]</p> | ||
Line 216: | Line 213: | ||
"sequenced" procedure, and to generate another procedure | "sequenced" procedure, and to generate another procedure | ||
containing the differences between the two. | containing the differences between the two. | ||
The < | The <var>X</var> prefix command presents the <b>Build Update Deck</b> screen, which has the following input fields: | ||
<table class="thJustBold"> | <table class="thJustBold"> | ||
Line 229: | Line 226: | ||
<tr><th>Procedure</th> | <tr><th>Procedure</th> | ||
<td>Procedure name of sequenced procedure. <code>SEQ.</code> is the prefix generated by the <code>Q</code> command, so < | <td>Procedure name of sequenced procedure. <code>SEQ.</code> is the prefix generated by the <code>Q</code> command, so <var>Xcompare</var> defaults to this.</td></tr> | ||
<tr><th>FixFile</th> | <tr><th>FixFile</th> | ||
<td>Name of destination file for update procedure output from this < | <td>Name of destination file for update procedure output from this <var>Xcompare</var>.</td></tr> | ||
<tr><th>Password</th> | <tr><th>Password</th> | ||
Line 257: | Line 254: | ||
<p> | <p> | ||
The default sync count value is 2, and this will work well for the vast majority of cases. Increasing the sync count may reduce the number of difference lines found, | The default sync count value is 2, and this will work well for the vast majority of cases. Increasing the sync count may reduce the number of difference lines found, | ||
resulting in smaller update procedures, or it may have no effect at all beyond a minor performance penalty in the < | resulting in smaller update procedures, or it may have no effect at all beyond a minor performance penalty in the <var>Xcompare</var> operation. In a very few cases it may produce larger output procedures. </p> | ||
<p> | <p> | ||
An entered value of asterisk (<code>*</code>) tells < | An entered value of asterisk (<code>*</code>) tells <var>Xcompare</var> to repeat the compare operation, increasing the sync count from 1 until it hits a value that no longer produces a smaller output procedure. As might be imagined, this is the worst-performing option for running <var>Xcompare</var>, but it will almost always generate the smallest possible output procedure. Unless changes are massive and many, the size of the output procedure is fairly irrelevant, and playing with the sync count has little utility.</p></td></tr> | ||
<tr><th>Unlock this procedure?</th> | <tr><th>Unlock this procedure?</th> | ||
Line 389: | Line 386: | ||
Notice that no sequenced copy of a procedure is needed for New, Erase, | Notice that no sequenced copy of a procedure is needed for New, Erase, | ||
or Resequence operations. < | or Resequence operations. <var>Q</var> (seQuence) is the managed update equivalent of a Copy, just as <var>N</var> (New) is the equivalent of Create, and <var>K</var> (Klobber, or Erase) is the equivalent of Delete. | ||
(Klobber, or Erase) is the equivalent of Delete. | <var>Xcompare</var> has no direct equivalent in the "unmanaged" command structure, though coupled with later reconfiguration using the output update procedure, it is analogous to moving finished changes to a staging area. Resequencing is of course a special purpose function with no "unmanaged" corollary. | ||
< | |||
is analogous to moving finished changes to a staging area. | |||
Resequencing is of course a special purpose function with no "unmanaged" corollary. | |||
<p class="caption" style="width:444px">How a change progresses through SirLib</p> | <p class="caption" style="width:444px">How a change progresses through SirLib</p> | ||
Line 402: | Line 396: | ||
A single line of new code is inserted in <code>TEMP</code> (the line | A single line of new code is inserted in <code>TEMP</code> (the line | ||
<code>PRINT STATE AND ZIP AT 40</code>). | <code>PRINT STATE AND ZIP AT 40</code>). | ||
Using < | Using <var>Xcompare</var>, the update is generated to file <code>CHANGES</code>, and named <code>PFILE1.CHG1.TEMP</code>. | ||
A project leader defines the project name <code>CHG1</code> in <code>CONTROL.PFILE1</code>. | A project leader defines the project name <code>CHG1</code> in <code>CONTROL.PFILE1</code>. | ||
Revision as of 16:09, 28 October 2015
Overview
Managed-update commands allow the manipulation and promotion of just the updates you make to a procedure, "deltas," instead of preserving and working with a sequence of updated copies of the entire procedure or entire procedure file. Managed-update commands are available in SirPro if the change management system, SirLib, is active in the Online.
The output from a managed-update command that produces update procedures contains a single-line comment describing the creator, date, time, and source file for the change.
The managed-update commands are entered as prefix commands on the Procedure List screen (see SirPro procedure-list operations). These prefix commands are:
X | Xcompare.
Compares two versions of a procedure and creates a third procedure containing the differences between the two. This output is an "update procedure," the physical unit managed by the change management system. |
---|---|
Q | Sequence.
Creates both a working and sequenced version of a procedure that are the later input to Xcompare. |
N | New.
Creates a "differences" update procedure similar to Xcompare, but which is the source for a new procedure. |
K | Erase.
Creates an update procedure similar to Xcompare output, but telling SirLib to perform a logical delete on the procedure. |
Z | ReSequence.
Creates a special update procedure to reorder the internal sequence numbers of a procedure. |
The Procedure List screen is the main working environment for the
programmer in the SirPro/SirLib-controlled environment. This screen, and others like it,
provide access to all procedure activity in Model 204.
For details on the use of SirLib, including the special commands for managed updates, see SirLib.
Only the special Procedure List screen
prefix commands (Q
, X
, K
, N
, and Z
) for creating and manipulating managed updates are explained here.
The Q
, X
, N
, K
, and Z
prefix commands are used to generate "working" base and sequenced copies of procedures and to generate updates from those copies.
Type one of these managed update commands to the left of the selected procedure and press
the Enter key.
SirPro then presents one of the managed update screens to get
further details on the managed update.
Those screens are shown in the following detailed sections.
Sequencing: Creating working copies of procedures
"Sequencing" is the managed update method by which programmers
make copies of procedures to work on. In other systems, programmers
make backup copies of procedures and then work on the original.
In SirPro, programmers never alter the original program code, but execute Q
commands to get working and sequenced copies from which
update procedures can be generated.
Placing a Q
to the left of a procedure name on the Procedure List screen tells SirLib to generate both a copy of the
selected procedure (the copy that the programmer will work on) and a
"sequenced" copy of the procedure (a copy containing sequence or
line numbers), which will later be used as comparison input for the
Xcompare command.
Building these copies is always the first step in generating a managed update.
The Q prefix command presents the Sequence procedure screen, which has the following input fields:
Output procedures | Enter a procedure file where SirLib should create a working and SEQ. version of the selected procedure. |
---|---|
Password | An update password for this output procedure file is required unless the file is already open with update privileges. |
UnSequenced procedure | Procedure name for the copy of the selected procedure that the programmer will be making updates to. This defaults to the input procedure name. |
Sequenced procedure | Procedure name for a copy of the procedure with each line prefixed by a sequence number, indicating line sequence and amount of update activity that has been applied in generating the working version.
The default procedure name for sequenced procedures is: SEQ.procname This default prefix may be overridden if it conflicts with local APSY naming standards. |
FixFile | Name of the file containing Control and Update procedures for this file. Default file is SIRLIBP . |
Password | A password for this FixFile is required unless the file is public or is already open with read privileges. The privileges for this password must allow the contents of procedures in the control file to be read.
|
Replace existing procedures | This field defaults to N , indicating that if a same-named procedure already exists in the destination procedure file, the attempt to copy over it will be aborted. To overwrite existing procedures, set this indicator to Y . |
When the Q
prefix command is executed from the Procedure
List screen, SirLib looks in the
source file for a procedure named BASE.procname
, where
procname is the name of the selected procedure.
If no such procedure is found, SirLib copies the selected
procedure into the specified target procedure in the specified Output file.
In addition, SirLib generates a sequenced copy of the procedure, named whatever the programmer specified in the Sequenced procedure field on this screen. The sequenced copy of the procedure is identical to the unsequenced (or working) copy, except that each line is prefixed with a sequence number.
If SirLib does find a BASE.procname
procedure, it looks for the CONTROL.filename
procedure in the specified FixFile.
A control procedure of the specified name must exist or the Q
prefix
command fails. Noting the active projects in the control procedure,
SirLib finds all update procedure names that match this pattern:
file.project.procname
Where:
- file is the name of the input file for this operation.
- procname is the name of the selected input procedure.
- project is one of the identifiers in columns 1 to 8 of the specified control procedure.
All update procedure names that conform to this pattern are sorted by their project and then by the sequence line numbers they effect.
This aggregate update is then applied to BASE.procname
to
produce the sequenced and unsequenced output procedures.
In other words, the programmer doesn't just get a copy of the procedure they
request, they get a generated procedure that is the BASE of what they
want, with all active updates applied.
If a project name is commented out in the control procedure, it is not included in the resulting sequenced and unsequenced output procedures. A project name is commented out by placing an asterisk (*) in front of it in the control procedure. (This is how working versions of production procedures can be generated in development regions if the development region has active projects that do not exist yet in production).
The sequenced version of a procedure should never be changed, as it is the "before" image for the Xcompare that will eventually generate the update procedure. Sequence numbers generally should not concern programmers, though there are a few times when it is worth knowing something about how they work.
The Q
prefix command automatically begins sequencing at 10000 and
increments each line in the BASE.procname
procedure by 10000.
As changes are generated, the Xcompare function generates new line numbers for lines of code being inserted and replaced.
The Xcompare algorithm attempts to number the first new line of code beginning with a sequence
number 1 greater than its starting point in the existing sequence (this
applies to Inserts and Replaces: it is irrelevant for Deletes).
Subsequent new lines which are part of the same update are incremented
by a power of 10 less than the last sequence of numbers for the section of code.
Later changes that apply to the same section again begin
numbering at their starting sequence number plus 1, and continue to
increment at the next lowest available power of 10.
Fortunately, you do not have to understand any of this in order for it to work.
The lower-order digit(s) of the sequence numbers
in a SEQ
procedure however will indicate the number of times a section
of code has been changed. The sequence numbers themselves will
indicate whether the Xcompare will be able to "fit" changes into the same section of code again.
For example, a section of code with sequence numbers that look like this indicates that changes will still "fit" in the hundreds and tens columns:
003451001 003452001 003453001
If an update procedure attempts to insert three lines of code after line 003452001, the resulting code will be numbered like this:
003451001 003452001 003452102 003452202 003452302 003453001 003454001
Replace (a ./R
command in an update procedure) operates
slightly differently than Insert, but the outcome looks very similar.
When changes will no longer "fit," Xcompare can still
successfully generate an update procedure that effects this section of
code, but the update procedure will become unnecessarily long and
SirLib might lose its ability to detect update collisions.
In this case, a Resequence is required. Resequencing is described later in this page.
Once an initial update has been coded and the update procedure placed
in the FixFile, all subsequent Q
prefix commands against the same
procedure generate copies containing the update, and sequence
numbers in output sequenced versions of the procedure reflect the
insertion of the update code.
Xcompare: Creating an update procedure
The Xcompare operation is executed by placing an X
next to the
changed procedure on the Procedure List screen.
This invokes a compare operation of that procedure
against its sequenced version.
The output from this operation is an update procedure.
Placing an X
to the left of a procedure name in the Procedure List screen
tells SirLib to compare the specified procedure against a matching
"sequenced" procedure, and to generate another procedure
containing the differences between the two.
The X prefix command presents the Build Update Deck screen, which has the following input fields:
UnSequenced input procedure | Protected fields displaying the source file and procedure. |
---|---|
Sequenced input procedure | Source file of sequenced procedure. This defaults to the same file as for the input unsequenced procedure. |
Password | Read access is required for the above file. No password need be input if the file is already open or has high enough default privileges to read procedures. |
Procedure | Procedure name of sequenced procedure. SEQ. is the prefix generated by the Q command, so Xcompare defaults to this. |
FixFile | Name of destination file for update procedure output from this Xcompare. |
Password | Write access to this FixFile is required. If the file is already open, or if default privileges for the file are high enough to allow the creation of a new procedure, no password is required. |
Project Name | This is the 8-character project name to which this update should be linked.
The SirLib file administrator may have required that updates for this file only be linked to existing projects, in which case the entered project name is checked to make sure it exists in the control procedure. If this setting is not on, updates may be created, and the project entered in the control procedure later. |
Target File | The production file containing the base procedure against which this update will apply. |
Replace existing update? | Entering Y in this field lets you overwrite a same-named update procedure in the destination file with the current update procedure. Programmers are always permitted to overwrite update procedures created under their userid when this switch is set to Y .
The SirLib file administrator may have specified in the Administration options that programmers may not overwrite each other's update procedures, either in this file or within the entire system. If this option is set, and an update procedure exists of the same name as the one being created in the target file, and the userid who created the update procedure (or last updated it) is not the same as the current user's ID, the generation of the update is not permitted. |
Enter editor for update? | Entering Y at this prompt places the generating user into an edit session on the new update procedure. The update procedure will have already been stored before the edit session is invoked, so QUIT (F3) may be used to exit the edit session without losing the update procedure. |
Synchronization count | This field lets you set the number of lines that will be compared before the sequenced and unsequenced versions of the procedures are considered to be back in sync, and further lines are no longer to be generated to the output update procedure (at least until the next mismatch).
The default sync count value is 2, and this will work well for the vast majority of cases. Increasing the sync count may reduce the number of difference lines found, resulting in smaller update procedures, or it may have no effect at all beyond a minor performance penalty in the Xcompare operation. In a very few cases it may produce larger output procedures.
An entered value of asterisk ( |
Unlock this procedure? | Entering Y in this field makes the procedure available to other programmers in systems or files where procedures are locked to one updating user at a time.
Any value but If procedure locking is not turned on, the lock/unlock information is still maintained for historical reporting, but this switch has no actual effect in locking procedures. See Administration options for Procedure Locking options. |
New: Create a new procedure via update deck
Placing an N
to the left of a procedure name in the Procedure List screen tells SirLib to generate an update procedure, similar to that produced by X
,
but containing all lines of the specified procedure (because it is a new procedure to the system).
Prefixing a procedure by N
in the Procedure List screen
presents the Create New proc screen, which has the following input fields:
New procedure name | Protected fields displaying the source procedure file and source procedure for this update procedure creation. | ||||||||
---|---|---|---|---|---|---|---|---|---|
Output update procedure |
| ||||||||
Replace existing update? | Entering Y in this field lets you overwrite a same-named update procedure in the destination file with the current update procedure. Programmers are permitted to overwrite update procedures created under their userid when this switch is set to Y .
The SirLib file administrator may have specified in the Administration options that programmers may not overwrite each other's update procedures either in this file or within the entire system. If this option is set, and an update procedure exists of the same name as the one being created in the target file, and the userid of the creator of the update procedure (or that last updated it) is not the same as the current user's ID, then the generation of the update procedure is not permitted. | ||||||||
Enter Editor for update? | Entering Y at this prompt places the generating user into an edit session on the new update procedure. The update procedure will have already been stored before the edit session is invoked, so QUIT may be used to exit the edit session without the update procedure being lost. |
K (Klobber): Managed-update procedure deletion
Placing a K
to the left of a procedure name in the Procedure List screen generates an update procedure that contains only a special command that tells SirLib that the "change" to the K-prefixed procedure is a delete.
Managed update deletes are always logical deletes, allowing deleted procedures to be recovered at any time when the file is reconfigured.
For this reason, an empty (zero-line) version of the erased procedure is left in the file and should not be physically deleted.
The K
prefix command presents the
Klobber procedure screen, which has the same input fields as the Create New proc screen described in New: Create a new procedure via update deck.
ReSequence: Refreshing internal sequence numbers
The sequence numbers generated by SirLib are generally of no concern to the programmers working on procedures. However, if a large number of update procedures are generated that affect the same section of code in a procedure, further changes to the same section may result in unnecessarily large update procedures. In addition, SirLib will lose its ability to detect when updates are overwriting each other.
In case this rare event occurs, a manager can generate a resequence procedure.
By placing a Z
to the left of the procedure name on the Procedure List screen,
the ReSequence procedure screen is produced:
The ReSequence procedure screen has the following input fields:
Resequence procedure |
| ||||||||
---|---|---|---|---|---|---|---|---|---|
Output update procedure |
| ||||||||
Replace existing update? | Entering Y in this field lets you overwrite a same-named update procedure in the destination file with the current update procedure.
Programmers are permitted to overwrite update procedures created under their userid when this switch is set to The SirLib file administrator may have specified in the Administration options that programmers may not overwrite each other's update procedures either in this file or within the entire system. If this option is set, and an update procedure exists of the same name as the one being created in the target file, and the userid that created the update procedure (or last updated it) is not the same as the current user's, the generation of the update procedure is not permitted. | ||||||||
Enter editor for update? | Entering Y at this prompt places the generating user into an edit session on the new update procedure. The update procedure is already stored before the edit session is invoked, so QUIT may be used to exit the edit session without the update procedure being lost. |
SirPro change management overview
Notice that no sequenced copy of a procedure is needed for New, Erase, or Resequence operations. Q (seQuence) is the managed update equivalent of a Copy, just as N (New) is the equivalent of Create, and K (Klobber, or Erase) is the equivalent of Delete. Xcompare has no direct equivalent in the "unmanaged" command structure, though coupled with later reconfiguration using the output update procedure, it is analogous to moving finished changes to a staging area. Resequencing is of course a special purpose function with no "unmanaged" corollary.
In the example above, procedure TEMP
exists in file PFILE1
(upper left). The programmer uses the Q
command to copy TEMP
into WORKFILE
, getting both a working and a SEQ
version of the procedure.
A single line of new code is inserted in TEMP
(the line
PRINT STATE AND ZIP AT 40
).
Using Xcompare, the update is generated to file CHANGES
, and named PFILE1.CHG1.TEMP
.
A project leader defines the project name CHG1
in CONTROL.PFILE1
.
Finally, SirLib's ReConfiguration function is used to create a "BASE" version of the procedure, so the update can be backed out if necessary, and the original procedure TEMP
is deleted.
The update procedure PFILE1.CHG1.TEMP
is applied to BASE.TEMP
to create the new executable procedure TEMP
.
The final state of PFILE1
is shown lower right.
See also
- SirPro
- SirPro procedure-list selection
- SirPro procedure-list operations
- SirPro command processor
- SirPro Print All Information facility
- SirPro field definition display
- SirPro CCASTAT password maintenance
- SirPro file-group maintenance
- SirPro change management tools and functions
- SirPro date processing