This is the documentation for SVMS (Source Version Management System).
svms
command. The basic
svms
command format is:
svms
command_name command_arguments ...
With the exception of the new
command, all svms
commands work
on the current project directory. The current
project directory is found by starting from the
current working directory and repeatedly looking
up the parent chain until an SVMS
directory is found. For all SVMS commands, except
`svms new
', it is error if either no
SVMS
directory is found or multiple
nested SVMS
directories are found.
The parent directory that contains the
SVMS
directory is called the
project root. As is described shortly
below, the project root is referred to by a single
colon character (`:
'.)
Every project has a project nickname that is assigned to the project when it is created. While there is no way to guarantee that project nicknames are unique, it is very desirable that they be unique. For this reason, most projects used for individual development should have the user's login name in the nickname (e.g. "gramlich-home1".)
Any project can have at most one parent project.
This parent project is used by the
svms bringover
and
svms putback
commands.
Many of the svms
commands take a
file_list in addition to some command
specific options. A file_list is a
space/tab separated list of one or more of the
following:
/...
'.) It is
@
'). Slice files contain
lines of file_list entrys or
comment lines, where a comment line starts
with a sharp character (`#
');
blank lines are permitted as well. Slice
files can refer to other slice files,
provided no infinite recursion loop is
introduced by doing so.
:
') at the beginning of
a file name is an indication that the file name
is relative to a project root, rather than
relative to the current working directory.
The following colon syntax is supported:
:/
file_name ::/
file_name :::/
file_name,
specifies a file_name relative
to the grand parent project directory.
:
project_nickname/file_name ~
user syntax that
many Unix shells implement.
../
' syntax can be used to
reference as many parent directories as
appropriate. Warning messages are issues if
a sequence of `../
' exits the
files covered by the project root.
/
')
or tilde (`~
') are relative to the
file system root or some user's login directory.
In general, such file names are discouraged since
they are unlikely to reference files in the current
project.
%
') is used
to introduce characters into file names that are
typically used for other purposes (e.g. the
`@
'.) The percent character is
followed by two hexadecimal digits that specify
the desired character. A percent character can be
introduced into a file name via `%25
'
and an at sign character (`@
') can be
introduced via `%40
'. Since many
Unix shells use percent for job control purposes,
it many be necessary to quote each percent
character in order to specify it in a file name.
svms
command is one of the following:
bringover
[
-l
]
[ file_list
]
If no file_list is specified,
`/...
' is used as a default
file_list, thereby causing all
files from the parent project to be brought
over.
The -l
option will perform
a lazy bringover from the parent. This
is quite efficient in terms of disk space,
but it does require that the parent
project always be accessible. The
svms parent
command can be
used after a lazy bringover, but it may
cause substantial numbers of files to
be brought over. Cascaded lazy bringovers
are supported.
cd
file_list svms.mk
files are constructed as a side-effect of this
command (see svms make
.)
close
[
-f
|
-h
history_file
] [
file_list ] ./...
' is used by default,
thereby closing all files in the current
directory and below.
The close
command disallows
symbolic links that do not point to existing
regular files somewhere in the project via a
relative path, unless it overridden via the
-f
option.
The -h
option causes
history_file to be used as the
history file, thereby suppressing the
prompting for a history comment.
copy
old_file new_file create
[
-R
|
-b
|
-t
]
[ -f
] file_list
The -R
option will create
any necessary directory delta files
to store each text/binary file or
symbolic link.
In general, heuristics are used to determine
the file type for regular files. The
-b
and -t
options
are used to override the heuristics for
choosing between binary files and text
files respectively. There is no way to
selectively override heuristics on a file
by file basis from the command line; instead,
multiple svms create
commands
are needed.
The -f
option is used to force
the create of symbolic links that do not
point to regular files within the project
via a relative path.
The execute bit is preserved for both text and binary files so that both shell scripts and binary executables can be stored under SVMS.
delete
[
-R
|
-r
]
file_list
In general, directories and directory trees
will only be deleted if they contain no files.
The -R
option will recursively
delete directory trees even if they are not
empty. The -r
option will
recursively delete only any empty directories
in a file tree. Thus,
`svms delete -r /...
' will
clean up any unused directories in the
entire project.
filter
%
xx them to the
appropriate character. This command is
meant to be used in conjunction with
the svms history -m
command.
get
[ -n
project_nickname.delta_number
| -d
yyyy/mm/dd@hh:mm:ss-ZZZ |
-r
release_name
] [
file_list ]
[ -o
output_file_name ] ./...
' is used by default
thereby causing all files in the current
directory an below to be gotten. The
command `svms get /...
'
will cause all of the files in a project
to be gotten.
The -n
option is used to
explicitly get an older version named by
project_nickname.delta_number.
The -r
option is used to
get relased named release_name.
The -d
option is used to
fetch an older version via a date and
time yyyy/mm/dd@hh:mm:ss-ZZZ
GMT
,
EST
, PST
,
or PDT
.
If file_list consists of a single file,
the -o
option will cause the file
to be stored in output_file_name. If
output_file_name is a single hyphen
character (`-
'), the file will be
output to the standard output.
help
[
command_name ] history
[
-m
]
file_list
If the -m
option causes
the history to be output with one line
per delta for subsequent machine processing.
In this mode, spaces are used exclusively
to separate fields. All other spaces
and new-lines are represented in
%
xx format.
list
[
-a
|
-c
|
-d
|
-o
]
[ file_list
] ./...
is used
by default.
If the -a
all files are listed
irrespective of whether they are open, closed,
or deleted.
If the -c
option is specified,
all closed files are listed.
If the -d
option is specified,
all deleted files are listed.
If the -o
option is specified,
all open files are listed.
If no options are specified, the
-o
option is used by default.
make
[
-d
]
[ file_list
] svms.mk
to be created
for each directory in file_list.
For each file in file_list,
implicit dependency tracking (i.e.
header file dependencies) is enabled.
This command is `sticky' in the sense
that any time a directory is created
by an svms
command, it
will create the corresponding
svms.mk
file as well.
The -d
option undoes
the effect of this command.
If no file_list is present,
.
is used by default.
new
[
-R
]
new_project_directory
project_nickname
The -R
option will recursively
create any directories needed prior to
creating the SVMS
project
directory.
open
file_list parent
[
-a
user_account
|
-r
|
-u
parent_project_url
]
The -p
option will set the
parent project to parent_project_url.
parent_project_url can be a
URL of the following two forms:
http://
host[:
port]//
path/
file:/
path/
The -u
option will unparent
the current project.
putback
[
file_list ]
If no file_list is specified,
`/...
' is used as a default
file_list, thereby causing all
files from the current project to be put
back to the parent directory.
release
release_name get
command
to fetch a previous version of a command.
reroot
new_project_directory SVMS
directory and rewrites
every delta file in
the project; hence, this command can be
quite expensive.
Moving the project root up the directory hierarchy is fairly easy; moving it down requires that creating a child project and bringing over just those portions of the project that are needed in the new rerooted project.
REMOVE
project_directory svms delete
command.
rename
old_file new_file changes convert identifiers