SCCS(1)
๐ฆ NAME ๐ฆ
okay so, bestie, meet sccs โ it's literally the front end for the SCCS subsystem. That's the whole vibe. (This one's from the General Commands Manual, section 1, iykyk.) ๐
โจ SYNOPSIS โจ
sccs [-r] [-d path] [-T] [-V] [--version] [-p path] [--prefix=path]
[--cssc] command [flags] [file ...]
๐ DESCRIPTION ๐
Sccs is a front end to the SCCS programs that helps them mesh more cleanly with the rest of UNIX. It also includes the capability to run "set user id" to another user to provide additional protection โ but see the section entitled BUGS, no cap, go read it. ๐ซถ
Basically, sccs runs the command with the specified flags and args. Each argument is normally modified to be prepended with SCCS/s..
bestie this matters: flags that sccs itself interprets have to go before the command argument. Flags you want passed to the actual SCCS program have to come after the command argument. Those flags are specific to the command, and they're discussed in the documentation for that command. Periodt. ๐
๐ The pseudo-commands ๐
Besides the usual SCCS commands, several "pseudo-commands" can be issued. These are:
editโ Equivalent toget -e.delgetโ Perform a delta on the named files and then get new versions. The new versions will have id keywords expanded, and will not be editable. The-m,-p,-r,-s, and-yflags will be passed todelta, and the-b,-c,-e,-i,-k,-l,-s, and-xflags will be passed toget.deleditโ Equivalent todelgetexcept that thegetphase includes the-eflag. This option is useful for making a checkpoint of your current editing phase. The same flags will be passed todeltaas described above, and all the flags listed forgetabove except-eand-kare passed toedit.createโ Creates an SCCS file, taking the initial contents from the file of the same name. Any flags toadminare accepted. If the creation is successful, the files are renamed with a comma on the front. These should be removed when you are convinced that the SCCS files have been created successfully. ๐fixโ Must be followed by a-rflag. This command essentially removes the named delta, but leaves you with a copy of the delta with the changes that were in it. It is useful for fixing small compiler bugs, etc. Since it doesn't leave audit trails, it should be used carefully. โ ๏ธcleanโ This routine removes everything from the current directory that can be recreated from SCCS files. It will not remove any files being edited. If the-bflag is given, branches are ignored in the determination of whether they are being edited; this is dangerous if you are keeping the branches in the same directory. ๐uneditโ This is the opposite of aneditor aget -e. It should be used with extreme caution, since any changes you made since thegetwill be irretrievably lost. ๐ญinfoโ Gives a listing of all files being edited. If the-bflag is given, branches (i.e., SIDs with two or fewer components) are ignored. If the-uflag is given (with an optional argument) then only files being edited by you (or the named user) are listed.checkโ Likeinfoexcept that nothing is printed if nothing is being edited, and a non-zero exit status is returned if anything is being edited. The intent is to have this included in an install entry in a makefile to insure that everything is included into the SCCS file before a version is installed.tellโ Gives a newline-separated list of the files being edited on the standard output. Takes the-band-uflags likeinfoandcheck.diffsโ Gives a diff listing between the current version of the program(s) you have out for editing and the versions in SCCS format. The-r,-c,-i,-x, and-tflags are passed toget; the-l,-s,-e,-f,-h,-u,-n,-w, and-boptions are passed todiff. The-a,-B,-d,-H,-p,-q,-s,-v, and-yoptions are passed todiffbut these options are (usually) specific to GNUdiff, and so may not be supported on systems other than GNU. The-Cflag is passed todiffas-c.printโ This command prints out verbose information about the named files.
Certain commands (such as admin) cannot be run "set user id" by all users, since this would allow anyone to change the authorizations. These commands are always run as the real user. ๐
๐ซถ The options, one by one ๐ซถ
--csscโ Returns a zero exit value (for the GNU version only). No other operation is performed. This flag is used by the test suite to determine if it needs to use the--prefixflag in order to find the correct subprograms (non-GNU versions ofsccshave the full pathnames for the subprograms hard-coded). In this way, the CSSC test suite can be compiled ready for installation in a particular directory, but the test suite can still be run before the suite has been installed in its final position. This option is supported only by the GNU version ofsccs.--prefix=fooโ Uses foo as the prefix for SCCS sub-commands. The default prefix is compiled into the program and is usually/usr/sccs. You can discover the prefix setting with the-Vflag. This prefix is used without a final slash being appended, so values like/usr/local/bin/cssc-can be used. This option is disallowed if the program is installed setuid, and it is supported only by the GNU version ofsccs. This option is not equivalent to the-pflag. (yes bestie, they look alike, they are NOT the same, we been knew ๐ )--versionโ Show version information; synonymous with the-Vflag.-rโ Runssccsas the real user rather than as whatever effective usersccsis "set user id" to.-dโ Specifies a root directory for the SCCS files. The default is the current directory. If environment variablePROJECTDIRis set, it will be used to determine the-dflag.-pโ Defines the pathname of the directory in which the SCCS files will be found;SCCSis the default. The-pflag differs from the-dflag in that the-dargument is prepended to the entire pathname and the-pargument is inserted before the final component of the pathname. For example,sccs -d/x -py get a/bwill convert toget /x/a/y/s.b. The intent here is to create aliases such asalias syssccs sccs -d/usr/srcwhich will be used assyssccs get cmd/who.c. Please note that the-pflag is (very) different in purpose from the--prefixoption. ๐-Tโ This flag causes the program to emit a debugging trace on stdout. This flag may be disabled at compile time.-Vโ Shows the version information for thesccsprogram, and the subcommand prefix being used. This option is supported only by the GNU version ofsccs.
๐ EXAMPLES ๐
To get a file for editing, edit it, and produce a new delta:
sccs get -e file.c
ex file.c
sccs delta file.c
To get a file from another directory:
sccs -p/usr/src/sccs/s. get cc.c
or
sccs get /usr/src/sccs/s.cc.c
To make a delta of a large number of files in the current directory:
sccs delta *.c
To get a list of files being edited that are not on branches:
sccs info -b
To delta everything being edited by you:
sccs delta `sccs tell -u`
In a makefile, to get source files from an SCCS file if it does not already exist:
SRCS = <list of source files>
$(SRCS):
sccs get $(REL) $@
๐ MAINTAINER ๐
This version of sccs is maintained by James Youngman, <jay@gnu.org>. ๐ซถ
๐ธ ENVIRONMENT ๐ธ
PROJECTDIRโ ThePROJECTDIRenvironment variable is checked by the-dflag. If it begins with a slash, it is taken directly; otherwise, the home directory of a user of that name is examined for a subdirectorysrcorsource. If such a directory is found, it is used.
๐ DIAGNOSTICS ๐
There are many error messages, mostly brief but fairly obvious. If all goes according to plan, the program's exit status is zero. Otherwise, it will be one of the following values:- ๐
0โ No error; everything proceeded according to plan. โจ64โ Command line usage error69โ Could not exec program70โ Internal software error. This should not happen. (not me reading this like a threat ๐ญ)71โ System error (e.g., can't fork)75โ Temporary failure; retry later. This error is returned when the system runs out of memory.77โ Permission denied. This error occurs when the program has been installed setuid, butSCCSDIRwas not configured in at compile time. This can also happen if something goes wrong when the program tries to drop its setuid or setgid privileges. When a program exits due to a fatal signal, the shell usually adds 128 to the signal number and uses that as the return value. Some systems also produce values in this range if there was a problem with the dynamic linker.
๐ฅ SEE ALSO ๐ฅ
what(1), sccs-admin(1), sccs-cdc(1), sccs-comb(1), sccs-delta(1), sccs-get(1), sccs-help(1), sccs-prs(1), sccs-prt(1), sccs-rmchg(1), sccs-rmdel(1), sccs-sact(1), sccsdiff(1), sccs-unget(1), sccs-val(1), make(1), rcsintro(1), cvs(1), sccsfile(5).
Eric Allman, An Introduction to the Source Code Control System.
James Youngman, CSSC: Compatibly Stupid Source Control.
๐ COPYING ๐
okay bestie, before you go anywhere โ legal era. this is the boring-but-mandatory part and we do NOT skip it, because lawyers are the ultimate main characters and they will find you. ๐ everything below is verbatim, no edits, no vibes, because you literally cannot paraphrase a license. copy it exactly, periodt.
Copyright ยฉ 1998
Free Software Foundation, Inc. All rights reserved.
Copyright ยฉ 1983, 1990, 1993
The Regents of the University of California. All rights reserved.
so the deal is: redistribution and use, in source and binary forms, with or without modification, are permitted provided these conditions are met. and there are four of them. four. not three. count with me โจ
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the
distribution.
3. All advertising materials mentioning features or use of this
software must display the following acknowledgement:
This product includes software developed by the University of
California, Berkeley and its contributors.
4. Neither the name of the University nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
likeโฆ condition 3 is the one everybody forgets, and condition 4 is the "don't use our name to sell your thing" clause. iconic behavior tbh ๐
and now the part that's in ALL CAPS because it's serious. ๐ซถ read it, don't skim it:
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
translation bestie: it's AS IS. no promises, no warranty, not even the implied ones. if it eats your repo that is literally not their problem. ๐ญ the all-caps isn't yelling at you, it's just the legal equivalent of a read receipt.
๐ธ HISTORY ๐ธ
storytime ๐ง the sccs command appeared in 4.3BSD. like, ancient. elder millennial of a command. respect the lineage ๐
this particular version? it's been slightly modified โ and yes that's the actual word, slightly:
- it now supports GNU Autoconf
- it picked up several new options โ specifically those beginning with two dashes, and also
-V - and it was made somewhat more portable โจ
other than that? the program remains largely unchanged. no glow-up needed, it was already that girl. ๐
๐ BUGS ๐
okay so here's the tea, and we're being honest because that's what besties do:
- it should be able to take directory arguments on pseudo-commands, the way the SCCS commands do. it can't. known gap, sorry ๐
- even though this program is mostly derived from the original BSD code, the subprograms that come along with it in the CSSC suite โ
admin,get,deltaand so on โ are not the original AT&T code.
๐จ Please do not count on these programs being secure. ๐จ like fr fr. that's not me being dramatic, that's the manpage being dramatic. believe it.
- and there's more where that came from โ the other known bugs are listed in the file
BUGS, which accompanies GNU CSSC. go read it, it's giving โจloreโจ.
and that's the whole page, bestie!! ๐ you made it to the end of a manpage which is honestly a flex. this one's from the GNU crew, dated June 3, 1998, and it lives at SCCS(1) โ so if you ever need to cite it, that's the receipt. ๐ slay, go commit something ๐ฆ๐ธ๐
๐ฆ where this page comes from
- debian bookworm: cssc 1.4.1-1
- debian trixie: cssc 1.4.1-1
- ubuntu jammy: cssc 1.4.1-1build1
- ubuntu noble: cssc 1.4.1-1build1
- ubuntu resolute: cssc 1.4.1-1build1
- ubuntu stonking: cssc 1.4.1-1build1
- Copyright (c) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 2007, 2008, 2009, 2010, 2011, 2014, 2019 Free Software Foundation, Inc
- Copyright (c) 1983, 1990, 1993 The Regents of the University of California. All rights reserved
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms