sccs(1) User Commands sccs(1)

sccs - front end for the Source Code Control System (SCCS)

/usr/bin/sccs [-R] [-r] [-drootprefix] [-p subdir] subcommand
[option]... [file]...

/usr/xpg4/bin/sccs [-R] [-r] [-d rootprefix] [-p subdir]
subcommand [option]... [file]...

The sccs command is a comprehensive, straightforward front end to the various utility programs of the Source Code Control System (SCCS).

sccs applies the indicated subcommand to the history file associated with each of the indicated files.

The name of an SCCS history file is derived by prepending the `s.' prefix to the filename of a working copy. The sccs command normally expects these `s.files' to reside in an SCCS subdirectory. Thus, when you supply sccs with a file argument, it normally applies the subcommand to a file named s.file in the SCCS subdirectory. If file is a path name, sccs looks for the history file in the SCCS subdirectory of that file's parent directory. If file is a directory, however, sccs applies the subcommand to every s.file it contains. Thus, the command:


example% sccs get program.c

would apply the get subcommand to a history file named SCCS/s.program.c, while the command:


example% sccs get SCCS

would apply it to every s.file in the SCCS subdirectory.

Options for the sccs command itself must appear before the subcommand argument. Options for a given subcommand must appear after the subcommand argument. These options are specific to each subcommand, and are described along with the subcommands themselves (see Subcommands below).

Besides the usual SCCS commands, several ``pseudo-commands'' can be issued. These are:

branch
Create a new branch and retrieve a version for editing. Equivalent to ``get -b -e'' followed by ``delta -s -n'' followed by ``get -e -t -g''.

The -c, -i, -r and -x flags are passed to the first get; the -p and -l flags are passed to the second get.

cvt
Convert SCCS history files between SCCS v4 and SCCS v6. Equivalent to ``sccscvt''.

edit
Retrieves a version for editing. Equivalent to ``get -e''.

editor
Edit a file whether or not it is controlled by SCCS. Retrieves a version for editing before, if needed.

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, -o, -p, -r, -s, and -y flags will be passed to delta, and the -b, -c, -e, -i, -k, -l, -s, and -x flags will be passed to get.

deledit
Equivalent to delget except that the get phase includes the -e flag. This option is useful for making a ``checkpoint'' of your current editing phase. The same flags will be passed to delta as described above, and all the flags listed for get above except -e and -k are passed to edit.

create
Creates an SCCS file, taking the initial contents from the file of the same name. Any flags to admin are 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 -r flag. 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 -b flag 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 an edit or a get -e. It should be used with extreme caution, since any changes you made since the get will be irretrievably lost.

info
Gives a listing of all files being edited. If the -b flag is given, branches (i.e., SID's with two or fewer components) are ignored. If the -u flag is given (with an optional argument) then only files being edited by you (or the named user) are listed.

istext
Checks whether the files are pure text files or whether they need to be encoded.

check
Like info except 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 -b and -u flags like info and check.

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 -t flags are passed to get; the -l, -s, -e, -f, -h and -b flags are passed to diff. The -C flag is passed to diff as -c.

ldiffs
The same as sccs diffs but the diff(1) command from the local platform is used instead of the diff command included with the SCCS system.

log
Display a changelog from SCCS history files using delta comments.

print
This command prints out verbose information about the named files.

rcs2sccs
This command converts RCS files into SCCS files.

The -R flag lets sccs iterate the command over the directory tree below the directory tree below the current working directory or the directory tree below the directory type argument. Some commands are currently not permitted to be run in recursive mode.

The sccs command also includes the capability to run ``setuid'' to provide additional protection. However, this does not apply to subcommands such as sccs-admin(1), since this would allow anyone to change the authorizations of the history file. Commands that would do so always run as the real user. The -r flag runs sccs as the real user rather than as whatever effective user sccs is ``set user id'' to.

The following options are supported by the sccs(1) command itself:

-drootprefix

-d rootprefix
Defines the root portion of the path name for SCCS history files. The default root portion is the current directory. rootprefix is prepended to the entire file argument, even if file is an absolute path name. -d overrides any directory specified by the PROJECTDIR environment variable (see ENVIRONMENT VARIABLES below).

-psubdir

-p subdir
Defines the (sub)directory within which a history file is expected to reside. SCCS is the default. (See EXAMPLES below).

-r
Runs sccs with the real user ID, rather than set to the effective user ID.

-R
Run sccs in recursive mode via libfind. If no file type arguments are given to the related sccs subcommand, the directory scan operation starts at the current directory. If the related subcommand is expected to operate only on files that are currently edited, sccs only operates on files for which an associated ``p.'' file exists. For all other subcommands, sccs operated on all ``s.'' files except for those that are in ignored sub directories.

This option is a SCHILY extension that does not exist in historic sccs implementations.

-T
Trace. Print extra debug messages.

-V
-version
--version
Prints the sccs version number string and exists.

The following operands are supported:

file

a file passed to subcommand

option

an option or option-argument passed to subcommand

subcommand

one of the subcommands listed in Usage

The usage for sccs is described below.

Many of the following sccs subcommands invoke programs that reside in /usr/ccs/bin. Many of these subcommands accept additional arguments that are documented in the reference page for the utility program the subcommand invokes.

admin

Modify the flags or checksum of an SCCS history file. Refer to sccs-admin(1) for more information about the admin utility. While admin can be used to initialize a history file, you might find that the create subcommand is simpler to use for this purpose.

branch

Create a new branch and retrieve a version for editing. Except for creating a new branch, this is equivalent to the edit subcommand.

cdc -rsid [-y[comment]]

cdc -r sid | -rsid [-y[comment]]

Annotate (change) the delta commentary. Refer to sccs-cdc(1) for more information about the cdc utility. The fix subcommand can be used to replace the delta, rather than merely annotating the existing commentary.

-r sid | -rsid

Specify the SCCS delta ID (SID) to which the change notation is to be added. The SID for a given delta is a number, in Dewey decimal format, composed of two or four fields: the release and level fields, and for branch deltas, the branch and sequence fields. For instance, the SID for the initial delta is normally 1.1.

-y[comment]

Specify the comment with which to annotate the delta commentary. If -y is omitted, sccs prompts for a comment. A null comment results in an empty annotation.

check [-b] [-u[username] ]

check [-b] [-u [username] | -U ]

Check for files currently being edited. Like info and tell, but returns an exit code, rather than producing a listing of files. check returns a non-zero exit status 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.

-b

Ignore branches.

-u[username] | -u [username] | -U

Check only files being edited by you. When username is specified, check only files being edited by that user. For /usr/xpg4/bin/sccs, the -U option is equivalent to -u <current_user>.

clean [ -b ]

Remove everything in the current directory that can be retrieved from an SCCS history. Does not remove files that are being edited.

-b
Do not check branches to see if they are being edited. `clean -b' is dangerous when branch versions are kept in the same directory.

comb

Generate scripts to combine deltas. Refer to sccs-comb(1) for more information about the comb utility.

create [-o] [options]

Create (initialize) history files. create performs the following steps:

o
Renames the original source file to ,program.c in the current directory.
o
Create the history file called s.program.c in the SCCS subdirectory.
o
Performs an `sccs get' on program.c to retrieve a read-only copy of the initial version.

Options are passed to the admin program, e.g.:

-o
Use the original file time instead of the current time for the time of the initial delta.

cvt

Convert SCCS v4 history files (as introduced in February 1977) into SCCS v6 history files (as introduced in August 2011) and vice versa. Refer to sccs-cvt(1) for more information about the sccscvt utility. In order to convert a larger historic project (like e.g. the BSD CSRG sccs history) from a different timezone than the local timezone into SCCS v6 use a command similar to:

TZ=PST sccs -R cvt -V6 .

This subcommand is a SCHILY extension that does not exist in historic sccs implementations.

deledit [-o] [-s] [-f] [-q] [-y[comment]]

Equivalent to an `sccs delta' and then an `sccs edit'. deledit checks in a delta, and checks the file back out again, but leaves the current working copy of the file intact. The same flags will be passed to delta as described with ``delget'', and all the flags listed with ``delget'' for ``get'' except -e and -k are passed to ``edit''.

-o

Use the original file time instead of the current time for the time of the delta.

-s

Silent. Do not report delta numbers or statistics.

-f

In NSE mode, force to create a delta even when no p. file is present.

-q
Switch on NSE mode.

-y[comment]

Supply a comment for the delta commentary. If -y is omitted, delta prompts for a comment. A null comment results in an empty comment field for the delta.

The options -f and -q are SCHILY extensions that do not exist in historic sccs implementations.

delget [-o] [-s] [-f] [-q] [-y[comment]]

Perform an `sccs delta' and then an `sccs get' to check in a delta and retrieve read-only copies of the resulting new version. See the deledit subcommand for a description of -s, -f, -q, and -y. sccs performs a delta on all the files specified in the argument list, and then a get on all the files. If an error occurs during the delta, the get is not performed. The -m, -o, -p, -r, -f, -q, -s, and -y flags will be passed to delta, and the -b, -c, -e, -i, -k, -l, -s, and -x flags will be passed to get.

delta [-o] [-s] [-f] [-q] [-y[comment]]

Check in pending changes. Records the line-by-line changes introduced while the file was checked out. The effective user ID must be the same as the ID of the person who has the file checked out. Refer to sccs-delta(1) for more information about the delta utility. See the deledit subcommand for a description of -s, -f, -q, and -y.

diffs [-C] [-I] [-cdate-time] [-rsid] diff-options

diffs [-C] [-I] [-c date-time | -cdate-time ]
[-r sid | -rsid] diff-options

Compare (in diff(1) format) the working copy of a file that is checked out for editing, with a version from the SCCS history. Use the most recent checked-in version by default. The diffs subcommand accepts the same options as diff.

Any -r, -c, -i, -x, and -t options are passed to subcommand get. A -C option is passed to diff as -c. An -I option is passed to diff as -i.

The diffs subcommand calls the UNIX diff(1) command that is delivered with the SCCS packet. If you like to call the local diff(1) command that is in your PATH, use the ldiffs subcommand.

-c date-time | -cdate-time

Use the most recent version checked in before the indicated date and time for comparison. date-time takes the form: yy[mm[dd[hh[mm[ss]]]]]. Omitted units default to their maximum possible values; that is -c7502 is equivalent to -c750228235959.

-r sid | -rsid

Use the version corresponding to the indicated delta for comparison.

The SCHILY version of SCCS calls `get -o' to retrieve the old version of the file in order to be able to get correct time stamps when e.g. the -u flag is passed to diff(1).

edit

Retrieve a version of the file for editing. `sccs edit' extracts a version of the file that is writable by you, and creates a p.file in the SCCS subdirectory as lock on the history, so that no one else can check that version in or out. ID keywords are retrieved in unexpanded form. edit accepts the same options as get, below. Refer to sccs-get(1) for more information about the get utility and for a list of ID keywords and their definitions. The edit subcommand is basically equivalent to ``get -e''.

editor

Edit a file whether or not is is controlled by SCCS. If a file is controlled by SCCS and currently not checked out for editing, the file is checked out for editing first and then edited. If the file is not under control of SCCS, the editor is called directly.

The SCCS_EDITOR or EDITOR environment variable must be set appropriately in order to call a custom editor.

A way to hide the fact that files need to checked out for editing first, is to set SCCS_EDITOR and then alias the editor, e.g.:

SCCS_EDITOR=ved alias ved='sccs editor'

Note that in order to minimize the side effects of calling the alias `ved *', sccs editor will call unget(1) or sccs unedit on all files that have not been modified by the edit session and that have not been checked out for editing before.

This subcommand is a SCHILY extension that does not exist in historic sccs implementations.

enter

Similar to create, but omits the final `sccs get'. This can be used if an `sccs edit' is to be performed immediately after the history file is initialized.

fix -rsid [-d]

fix [-d] -r sid | -rsid

Revise a (leaf) delta. Remove the indicated delta from the SCCS history, but leave a working copy of the current version in the directory. This is useful for incorporating trivial updates for which no audit record is needed, or for revising the delta commentary. fix must be followed by a -r option, to specify the SID of the delta to remove. The indicated delta must be the most recent (leaf) delta in its branch. Use fix with caution since it does not leave an audit trail of differences (although the previous commentary is retained within the history file).

-d
Fully discard the delta. By default only the file content for the related SID is removed and the delta table entry is changed to the new type `R'. When in discard mode, the delta table entry is also completely discarded.

get [-ekmops] [-Gnewname] [-cdate-time] [-r[sid] ]

get [-ekmops] [-G newname | -Gnewname]
[-c date-time | -cdate-time] [-r sid | -rsid]

Retrieve a version from the SCCS history. By default, this is a read-only working copy of the most recent version. ID keywords are in expanded form. Refer to sccs-get(1) for more information about the get utility, which includes a list of ID keywords and their definitions.

-c date-time | -cdate-time

Retrieve the latest version checked in prior to the date and time indicated by the date-time argument. date-time takes the form: yy[mm[dd[hh[mm[ss]]]]].

-e

Retrieve a version for editing. Same as sccs edit.

-G newname | -Gnewname

Use newname as the name of the retrieved version.

-k

Retrieve a writable copy but do not check out the file. ID keywords are unexpanded.

-m

Precede each line with the SID of the delta in which it was added.

-o

Retrieves the file under the original time of the requested version.

-p

Produce the retrieved version on the standard output. Reports that would normally go to the standard output (delta IDs and statistics) are directed to the standard error.

-r sid | -rsid

Retrieve the version corresponding to the indicated SID. For /usr/bin/sccs, if no sid is specified, the latest sid for the specified file is retrieved.

-s

Silent. Do not report version numbers or statistics.

help message-code | sccs-command

help stuck

Supply more information about SCCS diagnostics. help displays a brief explanation of the error when you supply the code displayed by an SCCS diagnostic message. If you supply the name of an SCCS command, it prints a usage line. help also recognizes the keyword stuck. Refer to sccs-help(1) for more information about the help utility.

info [-b] [-u[username] ]

info [-b] [-u [username] | -U]

Display a list of files being edited, including the version number checked out, the version to be checked in, the name of the user who holds the lock, and the date and time the file was checked out.

-b
Ignore branches.

-u[username] | -u [username] | -U

List only files checked out by you. When username is specified, list only files checked out by that user. For /usr/xpg4/bin/sccs, the -U option is equivalent to -u <current_user>.

istext [-s] [-V4 | -V6]

Checks whether the files are pure text files or whether they need to be encoded.

-s
Be silent. If all file are pure text, the exit code is 0.
-V4
Check with SCCS v4 rules. A file is not pure text if it contains one or more null characters, if a line starts with \001 (^A) or if the file does not end with a newline character.
-V6
Check with SCCS v6 rules. A file is not pure text if it contains one or more null characters.

This subcommand is a SCHILY extension that does not exist in historic sccs implementations.

ldiffs

Compare different file versions.

The ldiffs subcommand calls the local UNIX diff(1) command as found via the PATH environment variable. The ldiffs subcommand is otherwise identical to the diffs subcommand.

This subcommand is a SCHILY extension that does not exist in historic sccs implementations.

log

Display a changelog from SCCS history files using delta comments. Refer to sccs-log(1) for more information about the sccslog utility.

This subcommand is a SCHILY extension that does not exist in historic sccs implementations.

print

Print the entire history of each named file. Equivalent to an `sccs prs -e' followed by an `sccs get -p -m'.

prs [-el] [-cdate-time] [-rsid]

prs [-el] [-c date-time | -cdate-time] [-r sid | -rsid]

Peruse (display) the delta table, or other portion of an s. file. Refer to sccs-prs(1) for more information about the prs utility.

-c date-time | -cdate-time

Specify the latest delta checked in before the indicated date and time. The date-time argument takes the orm: yy[mm[dd[hh[mm[ss]]]]].

-e

Display delta table information for all deltas earlier than the one specified with -r (or all deltas if none is specified).

-l

Display information for all deltas later than, and including, that specified by -c or -r.

-r sid | -rsid

Specify a given delta by SID.

prt [-y]

Display the delta table, but omit the MR field (see sccsfile(4) for more information on this field). Refer to sccs-prt(1) for more information about the prt utility.

-y
Display the most recent delta table entry. The format is a single output line for each file argument, which is convenient for use in a pipeline with awk(1) or sed(1).

rcs2sccs [-rm] [-V6]

Convert RCS history files into SCCS history files. If a list of files is specified, this list is converted. If no file arguments are specified, all RCS files in the current directory are converted. Refer to sccs-rcs2sccs(1) for more information about the rcs2sccs utility.

This subcommand is a SCHILY extension that does not exist in historic sccs implementations.

rmdel -rsid

rmdel -r sid

Remove the indicated delta from the history file. That delta must be the most recent (leaf) delta in its branch. Refer to sccs-rmdel(1) for more information about the rmdel utility.

sact

Show editing activity status of an SCCS file. Refer to sccs-sact(1) for more information about the sact utility.

sccsdiff -rold-sid -rnew-sid diff-options

Compare two versions corresponding to the indicated SIDs (deltas) using diff. Refer to sccs-sccsdiff(1) for more information about the sccsdiff utility.

tell [-b] [-u[username] ]

tell [-b] [-u [username] | -U]

Display the list of files that are currently checked out, one file per line.

-b

Ignore branches.

-u[username] | -u [username] | -U

List only files checked out to you. When username is specified, list only files checked out to that user. For /usr/xpg4/bin/sccs, the -U option is equivalent to -u <current_user>.

unedit [-o]

"Undo" the last edit or `get -e', and return the working copy to its previous condition. unedit backs out all pending changes made since the file was checked out. It should be used with extreme caution, since any changes you made since the get will be irretrievably lost.

-o
Retrieves the file under the original time instead of the current time with the final get command.

unget

Same as unedit. Refer to sccs-unget(1) for more information about the unget utility.

val

Validate the history file. Refer to sccs-val(1) for more information about the val utility.

what

Display any expanded ID keyword strings contained in a binary (object) or text file. Refer to what(1) for more information about the what utility.

Example 1 Checking out, editing, and checking in a file

To check out a copy of program.c for editing, edit it, and then check it back in:


example% sccs edit program.c
1.1
new delta 1.2
14 lines
example% vi program.c
your editing session
example% sccs delget program.c
comments? clarified cryptic diagnostic
1.2
3 inserted
2 deleted
12 unchanged
1.2
15 lines

Example 2 Defining the root portion of the command pathname

sccs converts the command:


example% sccs -d/usr/src/include get stdio.h

to:


/usr/ccs/bin/get   /usr/src/include/SCCS/s.stdio.h

Example 3 Defining the resident subdirectory

The command:


example% sccs -pprivate get include/stdio.h

becomes:


/usr/ccs/bin/get   include/private/s.stdio.h

Example 4 Initializing a history file

To initialize the history file for a source file named program.c, use `sccs create':


example% sccs create program.c
program.c:
1.1
14 lines

If needed, sccs will create the SCCS directory first. After verifying the working copy, you can remove the backup file that starts with a comma:


example% diff program.c ,program.c
example% rm ,program.c

Example 5 Retrieving a file from another directory

To retrieve a file from another directory into the current directory:


example% sccs get /usr/src/sccs/cc.c

or:


example% sccs -p/usr/src/sccs/ get cc.c

Example 6 Checking out all files

To check out all files under SCCS in the current directory:


example% sccs edit SCCS

Example 7 Checking in all files

To check in all files currently checked out to you:


example% sccs delta `sccs tell -u`

Example 8 Entering multiple lines of comments

If using -y to enter a comment, for most shells, enclose the comment in single or double quotes. In the following example, Myfile is checked in with a two-line comment:


example% sccs deledit Myfile -y
"Entering a
multi-line comment"
No id keywords (cm7)
1.2
2 inserted
0 deleted
14 unchanged
1.2
new delta 1.3

Displaying the SCCS history of Myfile:


example% sccs prt Myfile
SCCS/s.Myfile:
D 1.2   01/04/20  16:37:07  me 2 1    00002/00000/00014
Entering a
multi-line comment
D 1.1   01/04/15  13:23:32  me 1 0    00014/00000/00000
date and time created 01/04/15 13:23:32 by me

If -y is not used and sccs prompts for a comment, the newlines must be escaped using the backslash character (\):


example% sccs deledit Myfile
comments? Entering a \
multi-line comment
No id keywords (cm7)
1.2
0 inserted
0 deleted
14 unchanged
1.2
new delta 1.3

See environ(5) for descriptions of the following environment variables that affect the execution of sccs(1): LANG, LC_ALL, LC_CTYPE, LC_MESSAGES, and NLSPATH.

PROJECTDIR
If contains an absolute path name (beginning with a slash), sccs searches for SCCS history files in the directory given by that variable.

If PROJECTDIR does not begin with a slash, it is taken as the name of a user, and sccs searches the src or source subdirectory of that user's home directory for history files. If such a directory is found, it is used. Otherwise, the value is used as a relative path name.

SCCS_EDITOR
The editor to call with the sccs editor command.

EDITOR
The editor to call with the sccs editor command in case SCCS_EDITOR is not set. If neither SCCS_EDITOR nor EDITOR is set, vi(1) is called as editor.

SCCS_NO_HELP
If set, sccs(1) will not automatically call help(1) with the SCCS error code in order to print a more helpful error message. Scripts that depend on the exact error messages of SCCS commands should set the environment variable SCCS_NO_HELP and set LC_ALL=C.

TZ
Used for the timezone when reading or writing the SCCS history file or when converting between SCCS v4 and SCCS v6.

The following exit values are returned:

0
Successful completion.

>0
An error occurred.

SCCS
SCCS subdirectory

SCCS/d.file
temporary file created by the delta(1) program with the content of the previous version, used to compute differences to the current version

SCCS/e.file
temporary file to hold an uuencoded version of the g-file in case of an encoded history file

l.file
file containing extracted delta table info created by the get(1) program

SCCS/p.file
permissions (lock) file for checked-out versions. See sccs-get(1) for a description of the layout of the p.file.

SCCS/q.file
temporary copy of the p.file; renamed to the p.file after completion

SCCS/s.file
SCCS history file

SCCS/x.file
temporary copy of the s.file; renamed to the s.file after completion

SCCS/z.file
temporary lock file contains the binary process id in host byte order followed by the host name

/usr/ccs/bin/*
SCCS utility programs

See attributes(5) for descriptions of the following attributes:

ATTRIBUTE TYPE ATTRIBUTE VALUE
Availability SUNWsprot

ATTRIBUTE TYPE ATTRIBUTE VALUE
Availability SUNWxcu4t
Interface Stability Standard

sccs-admin(1), sccs-cdc(1), sccs-comb(1), sccs-cvt(1), sccs-delta(1), sccs-get(1), sccs-help(1), sccs-log(1), sccs-prs(1), sccs-prt(1), sccs-rmdel(1), sccs-sact(1), sccs-sccsdiff(1), sccs-unget(1), sccs-val(1), bdiff(1), diff(1), what(1), sccschangeset(4), sccsfile(4), attributes(5), environ(5), standards(5).

sccs(1) was originally written by Eric Allman at UCB in 1980. It was later maintained by various people at AT&T and Sun Microsystems. Since 2006, it is maintained by Joerg Schilling.

A frequently updated source code for the SCCS suite is included in the schilytools project and may be retrieved from the schilytools project at Sourceforge at:

http://sourceforge.net/projects/schilytools/

The download directory is:

http://sourceforge.net/projects/schilytools/files/

Check for the schily-*.tar.bz2 archives.

Less frequently updated source code for the SCCS suite is at:

http://sourceforge.net/projects/sccs/files/

Separate project informations for the SCCS project may be retrieved from:

http://sccs.sf.net

2018/12/18 SunOS 5.11