Greg,
I was never much of a developer, have written little code in last 25yrs,
more download, compile and use now :)
And in that light, used a number of VCS, open source & not, over the years.
Not a ‘power user’ :(
but not unpracticed.
Reading the SCCS docs, ‘what’ and ‘vc’ seem related,
placing / looking for version related strings in code at a minimum.
‘what’ obviously is similar RCS’ ‘ident’, has its own SCCS id list.
I can’t think of an equivalent of ‘vc’ in RCS - doing something Configuration related.
I’ve done config management & conversion / port to new platforms on a few modest
systems (1M lines of code)
and can see what you’re getting at with ‘vc’ and its ability to take any file, SCCS or
not,
and rewrite them using AWK-like functionality.
There’s a nomenclature quirk problem in the man pages I had to get past:
‘control character’ is used to mean the (ascii) delimiter for matched/substituted
strings.
With more a comms background, I first read it as low-value ASCII chars :)
I stumbled on Tony Finch’s blog, author of ‘unifdef’, and how he displays the version
string in that program.
Inferences:
- the people who wrote SCCS used ‘vc’, or people very close to them needed it, had it
written for them.
- it’s NOT trying to replicate Identifiers, as RCS ident does. This is quite different
functionality.
- ‘vc’ works on non-SCCS files, so it can work on make files, config, release &
distribution scripts…
- the awk-like syntax, delimiter + keyword substitution suggests you’d not apply it to
code - too easy to make a huge mess.
As you suggested, have a Configuration SCCS Repo storing all the components / version-id
of all files for a Release to a set of target platforms,
and some scripts + ‘vc’ to reliably generate builds making bit-identical objects for a
release.
First part of any good production acceptance test process would be ‘build it all from
source’ - and check all created objects were bit-identical to Release Candidate.
I’ve heard people complain with ‘git’ that for some projects the compile time/date string
is included - making invariant object builds impossible…
A retrograde step IMHO.
This would make sense if you were Bell Labs / USL around 1984 building source for many
hardware targets, many O/S platforms.
They’d have automated the build/release process and (hopefully) insisted on bit-identical
objects.
I’m not sure how many people understand Configuration Management - its subtle, even
supporting two versions of the same system & tools.
I did enough to know I didn’t know much about it :)
cheers
steve
[ Notes at end ]
On 15 Dec 2024, at 11:53, Greg A. Woods
<woods(a)robohack.ca> wrote:
Hi Marc,
This is more of an aside, but as a long time and ongoing SCCS user I've
wondered about the vc(1) command included in the SCCS tool suite.
So I was hoping you (or anyone else reading) might be able to shed some
light on its origins and maybe give, or point to, some examples of how
it was intended to be used, or indeed how it ended up being used.
When I first encountered it, which would have been in the mid-1980s, I
thought it might be useful to help build a proper configuration
management system on top of or alongside SCCS, but I've never managed to
hack anything like that together myself, nor was I ever able to find any
examples of its use that might help me.
Most people I asked about vc(1) were dismissive and suggested it was
archaic and useless, or as with this time with a tangentially related
question where all I got was silence:
https://mirrors.nycbug.org/pub/The_Unix_Archive/Unix_Usenet/comp.unix.quest…
--
Greg A. Woods <gwoods(a)acm.org>
Kelowna, BC +1 250 762-7675 RoboHack <woods(a)robohack.ca>
Planix, Inc. <woods(a)planix.com> Avoncote Farms <woods(a)avoncote.ca>
===============
Notes.
Inserting SCCS ID keywords in a file
<http://courses.itee.uq.edu.au/csse2310/2012s1/resources/unixhelp/utilities1/sccs_insert.html>
3.2.1.2 Inserting SCCS ID Keywords
<https://docs.oracle.com/cd/E19205-01/819-5262/aeucp/index.html>
ident
<https://man.openbsd.org/ident.1>
AIX 4.3 what Command
<https://sites.ualberta.ca/dept/chemeng/AIX-43/share/man/info/C/a_doc_lib/cmds/aixcmds6/what.htm>
AIX 4.3 List of Additional SCCS Commands
<https://sites.ualberta.ca/dept/chemeng/AIX-43/share/man/info/C/a_doc_lib/aixprggd/genprogc/ls_sccs_cmds.htm>
vc Substitutes assigned values for identification keywords.
vc -- version control (SCCS)
<http://osr507doc.sco.com/en/man/html.CP/vc.CP.html>
The vc command is awk-like tool used for version control of sets of files.
While it is distributed as part of the SCCS package, it does not require the files it
operates on to be under SCCS control.
===============
Tony Finch
2024-05-13 – Unix version control lore: what, ident
<https://dotat.at/@/2024-05-13-what-ident.html>
[ on my mac ]
[ both what & ident report no tags in /usr/bin/unifdef ]
steve$ unifdef -V
Version: unifdef-2.5.6.21f1388
FreeBSD: src/usr.bin/unifdef/unifdef.c,v 1.31 2011/01/21 18:10:11 fanf Exp
Author: Tony Finch (dot(a)dotat.at)
URL:
http://dotat.at/prog/unifdef
Each line is prefixed with an SCCS magic marker @(#) so that what can find it, and wrapped
in an RCS-style $Keyword$so that ident can find it.
There’s a fairly trivial version() function that spits out the copyright[] string when you
run unifdef -V.
embedding versions from git
My projects have various horrible build scripts for embedding the version number from git.
The basic idea is,
• use an annotated or signed tag to mark a release, i.e. git tag -a or git tag -s
• use git describe to get a version string that includes an extra number counting
commits since the last release
• maybe use git show --pretty=format:%ai -s HEAD to get a release date
• stuff the outputs from git into the $Version$ and $Date$ RCS keywords
I enjoy keeping this old feature working, even though it isn’t very useful if no-one knows
about it!
Maybe if I blog about it, it’ll become more widespread?
===============
--
Steve Jenkin, IT Systems and Design
0412 786 915 (+61 412 786 915)
PO Box 38, Kippax ACT 2615, AUSTRALIA
mailto:sjenkin@canb.auug.org.au
http://members.tip.net.au/~sjenkin