[comp.unix.questions] SCCS version control

markv@ingr.UUCP (Mark VandenBrink) (12/09/88)

I have, what I hope is a simple problem.  A thousand pardons if this question
has been asked "billions and billions" of times.

In developing a product under SCCS, we have, finally, gotten to the point
where we need to make a release.  So far no problems; however, I would like
to "remember" or baseline our platform so that some later time (fixes release,
etc.) I can automagically recreate the platform.

I've kluged up shell scripts to ferret out the "highest" delta from the s-file,
and I save a file that has lines: "/usr2/ee/ti/src/SCCS/s.ti.c 1.3".  And
I can write a shell script to read this file and "get -r1.3...."  But there
has got to be a better way (ala the VAX/VMS CMS command baseline).

Finally, the question.  _IS_ there a better way??  The Unix SYSV 3.1 release
we use has a program called vc(1) that purports to be a version control
filter for SCCS files, but darned if I can see how it is any help.

Send email, post here, send smoke signals, anything!!! :-)

Many thanks in advance.
-- 
                                          Mark VandenBrink
                                          Intergraph Corp.
                                          ...uunet!ingr!b17b!b109i2!markv
                                          (205) 772-1770

gwyn@smoke.BRL.MIL (Doug Gwyn ) (12/10/88)

In article <3217@ingr.UUCP> markv@ingr.UUCP (Mark VandenBrink) writes:
>In developing a product under SCCS, we have, finally, gotten to the point
>where we need to make a release.  So far no problems; however, I would like
>to "remember" or baseline our platform so that some later time (fixes release,
>etc.) I can automagically recreate the platform.

Well, UNIX System V has a "comb" utility that can help combine deltas,
but if your project is organized like ours, you may want to do what we
plan to do, which is to run a massive find on the source tree and for
each SCCS archive, do a "get -e", remove the archive, and "admin -i" a
replacement archive with SCCS ID 1.1.  Something similar but not so
drastic could then be done for subsequent releases, so that there are
no unreleased changes in the archives except for the current
developmental work.

norm@oglvee.UUCP (Norman Joseph) (12/13/88)

From article <9125@smoke.BRL.MIL>, by gwyn@smoke.BRL.MIL (Doug Gwyn ):

> In article <3217@ingr.UUCP> markv@ingr.UUCP (Mark VandenBrink) writes:
>>In developing a product under SCCS, we have, finally, gotten to the point
>>where we need to make a release.  So far no problems; however, I would like
>>to "remember" or baseline our platform so that some later time (fixes release,
>>etc.) I can automagically recreate the platform.
> 
>                     ... run a massive find on the source tree and for
> each SCCS archive, do a "get -e", remove the archive, and "admin -i" a
> replacement archive with SCCS ID 1.1.  Something similar but not so
> drastic could then be done for subsequent releases ...

If the version levels of all your source files are of the form `1.*',
you may also try doing a `get -e -r2' followed by a `delta'.  This
will bring the version level of all your source up to `2.1', which
you may consider a baseline.  At the next release, use `get -e -r3', etc.

If you follow this approach after using Doug's suggestion, you should
have a history of baseline releases of the form `1.1', `2.1', `3.1'...
Intermediate bug fixes and mods will have in-house version levels of
the form `<release>.<level>' where `<level>' is > 1.

Norm

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*//////////////////////////////////////
 Norm Joseph                   | UUCP: ...!{pitt,cgh}!amanue!oglvee!norm
 Oglevee Computer System, Inc. | "Everything's written in stone, until the
 Connellsville, PA  15425      |  next guy with a sledgehammer comes along."
/////////////////////////////////////*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

asa@unisoft.UUCP (Asa Romberger) (12/14/88)

In article <3217@ingr.UUCP> markv@ingr.UUCP (Mark VandenBrink) writes:
>In developing a product under SCCS, we have, finally, gotten to the point
>where we need to make a release.  So far no problems; however, I would like
>to "remember" or baseline our platform so that some later time (fixes release,
>etc.) I can automagically recreate the platform.
> ...

Why not bump up the MAJOR sccs number by one for the release.
Suppose that your current files are version 2.*
for all files
	get -r3 s.filename
	delta s.filename << COMMENT
	UPDATE VERSION FOR RELEASE 3
	COMMENT
	get s.filename
Since the specified release (-r3) is greater than what is in the file, the
current most recent version will be retrieved, but the new version will be
3.1. (See the almost unreadable table under the get(1) manual page!)

clewis@ecicrl.UUCP (12/15/88)

In article <9125@smoke.BRL.MIL> gwyn@brl.arpa (Doug Gwyn (VLD/VMB) <gwyn>) writes:
>In article <3217@ingr.UUCP> markv@ingr.UUCP (Mark VandenBrink) writes:
>>In developing a product under SCCS, we have, finally, gotten to the point
>>where we need to make a release.  So far no problems; however, I would like
>>to "remember" or baseline our platform so that some later time (fixes release,
>>etc.) I can automagically recreate the platform.
>
>Well, UNIX System V has a "comb" utility that can help combine deltas,
>but if your project is organized like ours, you may want to do what we
>plan to do, which is to run a massive find on the source tree and for
>each SCCS archive, do a "get -e", remove the archive, and "admin -i" a
>replacement archive with SCCS ID 1.1.

Doug is using the "change everything in the release to the same SID"
approach.  Which I don't like because you lose a lot of history on the files.

Somewhat less drastic is to use the SCCS "cutoff" facility - specify the
date at which the release was frozen to "get" via the "-c" flag.  Eg,

	make GFLAGS="-c880204"

Which will cause make to get every SCCS file with the last version before
the date specified.  Using this method, we used to be able to recreate whole
UNIX kernels and utility sets that were byte-per-byte identical.  (Mind you,
this was before COFF and it's compilation date headers...)
-- 
Chris Lewis, Markham, Ontario, Canada
{uunet!attcan,utgpu,yunexus,utzoo}!lsuc!ecicrl!clewis
Ferret Mailing list: ...!lsuc!gate!eci386!ferret-request
(or lsuc!gate!eci386!clewis or lsuc!clewis)

bak@csd-v.UUCP (Bruce A. Kern) (12/17/88)

In article <3217@ingr.UUCP> markv@ingr.UUCP (Mark VandenBrink) writes:
>
>In developing a product under SCCS, we have, finally, gotten to the point
>where we need to make a release.  So far no problems; however, I would like
>to "remember" or baseline our platform so that some later time (fixes release,
>etc.) I can automagically recreate the platform.
>
>I've kluged up shell scripts to ferret out the "highest" delta from the s-file,
>and I save a file that has lines: "/usr2/ee/ti/src/SCCS/s.ti.c 1.3".  And
>I can write a shell script to read this file and "get -r1.3...."  But there
>has got to be a better way (ala the VAX/VMS CMS command baseline).
>
>Finally, the question.  _IS_ there a better way??  The Unix SYSV 3.1 release
>we use has a program called vc(1) that purports to be a version control
>filter for SCCS files, but darned if I can see how it is any help.
>

For years I have been on a crusade to get my coworkers to
include the following lines in every file:

static char *file_name = "whetever.c";
static char *file_date = " Fri Dec 16 22:30:49 EST 1988 ";

And then (and this is the important thing) redefine the exit
key (not the quit) to search for the date string and replace
it with teh current date on exit.

If this system is followed then every module in an executable is
date stamped, on-line in ascii, as well as every listing.  This
has saved me many hours of frustration when debugging with an out of
date listing.

Also it is very easy to draw a thread through an executable and
reconstruct it from SCCS under unix or CMS on a vax.  Finally when
going to the field or giving telephone help to some one in the field
a useful set of listings can be compiled.

The key is however that the dating be enforced by the painless method
of redefining the editor exit key so that the correct date is simply
there by default.  The programmer has to go out of his/her way to
screw things up, almost maliciously since the procedure is so simple.
-- 
Bruce A. Kern                                  1-203-270-0399 
Computer Systems Design                        Voice: 730 - 1700 Mon. thru Fri.
29 High Rock Road                              Data:  All other times  
Sandy Hook, Ct.  06482                         

guy@auspex.UUCP (Guy Harris) (12/18/88)

>And then (and this is the important thing) redefine the exit
>key (not the quit) to search for the date string and replace
>it with teh current date on exit.

Err, umm, "redefine the exit key"?  In order to enforce that, you're
going to have to enforce the use of an editor that 1) has an exit key,
2) lets you redefine it, and 3) lets you redefine keys to mean "search
for a given string and insert the current date".

I happen to like such editors.  However, it's going to be an uphill
climb, at best, to get *everybody* to choose them.

meissner@xyzzy.UUCP (Michael Meissner) (12/19/88)

In article <3217@ingr.UUCP> markv@ingr.UUCP (Mark VandenBrink) writes:
| In developing a product under SCCS, we have, finally, gotten to the point
| where we need to make a release.  So far no problems; however, I would like
| to "remember" or baseline our platform so that some later time (fixes release,
| etc.) I can automagically recreate the platform.

The simplest way is to use branch delta's if your version of SCCS supports
them (System V.3 supports them and earlier versions did as well.  Sun 3.5
doesn't seem to support them).  In preparation to use branch delta's, do
the following:

	admin -fb s.*

(ie, set the 'b' flag, which allows branch deltas).  You probably want to
set up whatever scripts you use to create new sccs files to include -fb
automatically.

After you make the release, then do the following:

	get -e -b s.*
	delta -y"Revmark for release xx" s.*
	admin -fd2 s.*
	get s.*

The "get -e" line checks out all of your sources as a branch (ie, version
numbers will start at 2.1 now instead of 1.xx).  The delta checks things
back in as always.  The admin line sets flag d to 2 (ie, the default version
will be the highest delta in release 2).  For the next release, you would use
3 instead of 2.  The final get just gets the current version of the source
(and also is useful to see if there are errors).

If you ever want to get the source for release 1, just use the -r1 switch
on the get.  You can even make changes in release 1 for update type fixes,
providing you don't freeze the release with -fc<number> or -fl<list>.  Again,
on the Sun 3.5 system I tried it on, using -r gave errors.  I was able to
move sccs files between systems, so if you have a system V-type box, but
have to use a broken SCCS, you might be able to move the s.* files to the
System V system, do the above steps, and move them back.

To be fair to Sun, I seem to remember that I had the exact same problems
on DG's port of UNIX (native = DG/UX, hosted = MV/UX).  On early rev's
which were based on System III and later System V.1, everything worked.
When we upgraded to System V.2 (release 3.10 of DG/UX), branch delta's
stopped working, though I could move the files to an older system, do
the work, and when I moved them back, everything was cool.  Finally when
we upgraded to System V.3 (release 4.00 of DG/UX), branch delta's worked
again.  So maybe SunOS 4.00 fixes the problem (which may have been a System
V.2 source problem).
-- 
Michael Meissner, Data General.

Uucp:	...!mcnc!rti!xyzzy!meissner
Arpa:	meissner@dg-rtp.DG.COM   (or) meissner%dg-rtp.DG.COM@relay.cs.net

meissner@xyzzy.UUCP (Michael Meissner) (12/19/88)

In article <2432@xyzzy.UUCP> meissner@xyzzy.UUCP (Michael Meissner) writes:
| (ie, set the 'b' flag, which allows branch deltas).  You probably want to
| set up whatever scripts you use to create new sccs files to include -fb
| automatically.

(I know, following up to my own posting)

If you do use branch delta's, you also need to modify whatever you use
to create new sccs files to add:

	-r<rel>.1 -fd<rel>

where <rel> is the current release number.

An alternative to branch delta's is to use WHAT(1) strings that are
created by sccs.  You have to modify the code, so that each module
has lines of the form:

	#ifndef lint
	static char sccs_id[] = "%W% %G% %U%";
	#endif

and then by executing the what command on the binary, it will give you
a list of sources, their version number, and the day/time the last
change was made.  Note, for include files, you have to do something
tricky, like define a macro whose body is a string containing "%W% %G%
%U%", and have one routine initialize another static char array with
the macro.

-- 
Michael Meissner, Data General.

Uucp:	...!mcnc!rti!xyzzy!meissner
Arpa:	meissner@dg-rtp.DG.COM   (or) meissner%dg-rtp.DG.COM@relay.cs.net