home *** CD-ROM | disk | FTP | other *** search
-
-
-
- CI(1) CI(1)
-
-
- NNAAMMEE
- ci - check in RCS revisions
-
- SSYYNNOOPPSSIISS
- ccii [_o_p_t_i_o_n_s] _f_i_l_e ...
-
- DDEESSCCRRIIPPTTIIOONN
- ccii stores new revisions into RCS files. Each pathname
- matching an RCS suffix is taken to be an RCS file. All
- others are assumed to be working files containing new
- revisions. ccii deposits the contents of each working file
- into the corresponding RCS file. If only a working file
- is given, ccii tries to find the corresponding RCS file in
- an RCS subdirectory and then in the working file's
- directory. For more details, see FILE NAMING below.
-
- For ccii to work, the caller's login must be on the access
- list, except if the access list is empty or the caller is
- the superuser or the owner of the file. To append a new
- revision to an existing branch, the tip revision on that
- branch must be locked by the caller. Otherwise, only a
- new branch can be created. This restriction is not
- enforced for the owner of the file if non-strict locking
- is used (see rrccss(1)). A lock held by someone else may be
- broken with the rrccss command.
-
- Unless the --ff option is given, ccii checks whether the
- revision to be deposited differs from the preceding one.
- If not, instead of creating a new revision ccii reverts to
- the preceding one. To revert, ordinary ccii removes the
- working file and any lock; ccii --ll keeps and ccii --uu removes
- any lock, and then they both generate a new working file
- much as if ccoo --ll or ccoo --uu had been applied to the
- preceding revision. When reverting, any --nn and --ss options
- apply to the preceding revision.
-
- For each revision deposited, ccii prompts for a log message.
- The log message should summarize the change and must be
- terminated by end-of-file or by a line containing .. by
- itself. If several files are checked in ccii asks whether
- to reuse the previous log message. If the standard input
- is not a terminal, ccii suppresses the prompt and uses the
- same log message for all files. See also --mm.
-
- If the RCS file does not exist, ccii creates it and deposits
- the contents of the working file as the initial revision
- (default number: 11..11). The access list is initialized to
- empty. Instead of the log message, ccii requests
- descriptive text (see --tt below).
-
- The number _r_e_v of the deposited revision can be given by
- any of the options --ff, --ii, --II, --jj, --kk, --ll, --MM, --qq, --rr, or
- --uu. _r_e_v may be symbolic, numeric, or mixed. If _r_e_v is $$,
- ccii determines the revision number from keyword values in
-
-
-
- GNU 1992/07/28 1
-
-
-
-
-
- CI(1) CI(1)
-
-
- the working file.
-
- If _r_e_v is a revision number, it must be higher than the
- latest one on the branch to which _r_e_v belongs, or must
- start a new branch.
-
- If _r_e_v is a branch rather than a revision number, the new
- revision is appended to that branch. The level number is
- obtained by incrementing the tip revision number of that
- branch. If _r_e_v indicates a non-existing branch, that
- branch is created with the initial revision numbered
- _r_e_v..11.
-
- If _r_e_v is omitted, ccii tries to derive the new revision
- number from the caller's last lock. If the caller has
- locked the tip revision of a branch, the new revision is
- appended to that branch. The new revision number is
- obtained by incrementing the tip revision number. If the
- caller locked a non-tip revision, a new branch is started
- at that revision by incrementing the highest branch number
- at that revision. The default initial branch and level
- numbers are 11.
-
- If _r_e_v is omitted and the caller has no lock, but owns the
- file and locking is not set to _s_t_r_i_c_t, then the revision
- is appended to the default branch (normally the trunk; see
- the --bb option of rrccss(1)).
-
- Exception: On the trunk, revisions can be appended to the
- end, but not inserted.
-
- OOPPTTIIOONNSS
- --rr_r_e_v Check in revision _r_e_v.
-
- --rr The bare --rr option (without any revision) has an
- unusual meaning in ccii. With other RCS commands, a
- bare --rr option specifies the most recent revision
- on the default branch, but with ccii, a bare --rr
- option reestablishes the default behavior of
- releasing a lock and removing the working file, and
- is used to override any default --ll or --uu options
- established by shell aliases or scripts.
-
- --ll[_r_e_v]
- works like --rr, except it performs an additional
- ccoo --ll for the deposited revision. Thus, the
- deposited revision is immediately checked out again
- and locked. This is useful for saving a revision
- although one wants to continue editing it after the
- checkin.
-
- --uu[_r_e_v]
- works like --ll, except that the deposited revision
- is not locked. This lets one read the working file
-
-
-
- GNU 1992/07/28 2
-
-
-
-
-
- CI(1) CI(1)
-
-
- immediately after checkin.
-
- The --ll, bare --rr, and --uu options are mutually
- exclusive and silently override each other. For
- example, ccii --uu --rr is equivalent to ccii --rr because
- bare --rr overrides --uu.
-
- --ff[_r_e_v]
- forces a deposit; the new revision is deposited
- even it is not different from the preceding one.
-
- --kk[_r_e_v]
- searches the working file for keyword values to
- determine its revision number, creation date,
- state, and author (see ccoo(1)), and assigns these
- values to the deposited revision, rather than
- computing them locally. It also generates a
- default login message noting the login of the
- caller and the actual checkin date. This option is
- useful for software distribution. A revision that
- is sent to several sites should be checked in with
- the --kk option at these sites to preserve the
- original number, date, author, and state. The
- extracted keyword values and the default log
- message may be overridden with the options --dd, --mm,
- --ss, --ww, and any option that carries a revision
- number.
-
- --qq[_r_e_v]
- quiet mode; diagnostic output is not printed. A
- revision that is not different from the preceding
- one is not deposited, unless --ff is given.
-
- --ii[_r_e_v]
- initial checkin; report an error if the RCS file
- already exists. This avoids race conditions in
- certain applications.
-
- --jj[_r_e_v]
- just checkin and do not initialize; report an error
- if the RCS file does not already exist.
-
- --II[_r_e_v]
- interactive mode; the user is prompted and
- questioned even if the standard input is not a
- terminal.
-
- --dd[_d_a_t_e]
- uses _d_a_t_e for the checkin date and time. The _d_a_t_e
- is specified in free format as explained in ccoo(1).
- This is useful for lying about the checkin date,
- and for --kk if no date is available. If _d_a_t_e is
- empty, the working file's time of last modification
- is used.
-
-
-
- GNU 1992/07/28 3
-
-
-
-
-
- CI(1) CI(1)
-
-
- --MM[_r_e_v]
- Set the modification time on any new working file
- to be the date of the retrieved revision. For
- example, ccii --dd --MM --uu _f does not alter _f's
- modification time, even if _f's contents change due
- to keyword substitution. Use this option with
- care; it can confuse mmaakkee(1).
-
- --mm_m_s_g uses the string _m_s_g as the log message for all
- revisions checked in.
-
- --nn_n_a_m_e assigns the symbolic name _n_a_m_e to the number of the
- checked-in revision. ccii prints an error message if
- _n_a_m_e is already assigned to another number.
-
- --NN_n_a_m_e same as --nn, except that it overrides a previous
- assignment of _n_a_m_e.
-
- --ss_s_t_a_t_e
- sets the state of the checked-in revision to the
- identifier _s_t_a_t_e. The default state is EExxpp.
-
- --tt_f_i_l_e writes descriptive text from the contents of the
- named _f_i_l_e into the RCS file, deleting the existing
- text. The _f_i_l_e may not begin with --.
-
- --tt--_s_t_r_i_n_g
- Write descriptive text from the _s_t_r_i_n_g into the RCS
- file, deleting the existing text.
-
- The --tt option, in both its forms, has effect only
- during an initial checkin; it is silently ignored
- otherwise.
-
- During the initial checkin, if --tt is not given, ccii
- obtains the text from standard input, terminated by
- end-of-file or by a line containing .. by itself.
- The user is prompted for the text if interaction is
- possible; see --II.
-
- For backward compatibility with older versions of
- RCS, a bare --tt option is ignored.
-
- --TT Preserve the modification time on the RCS file
- unless a new revision is added. If you have locked
- a revision, ccii usually updates the RCS file's
- modification time even when reverting to the
- previous revision, because the lock is stored in
- the RCS file and removing the lock requires
- changing the RCS file. However, ccii --TT preserves
- the RCS file's modification time if no new revision
- is added, even if the RCS file changes because a
- lock is removed or because the --nn or --ss options
- affect the previous revision. This option can
-
-
-
- GNU 1992/07/28 4
-
-
-
-
-
- CI(1) CI(1)
-
-
- suppress extensive recompilation caused by a
- mmaakkee(1) dependency of some other copy of the
- working file on the RCS file. Use this option with
- care; it can suppress recompilation even when it is
- needed, i.e. when the change of lock, symbolic
- name, or state would mean a change to keyword
- strings in the other working file.
-
- --ww_l_o_g_i_n
- uses _l_o_g_i_n for the author field of the deposited
- revision. Useful for lying about the author, and
- for --kk if no author is available.
-
- --VV Print s version number.
-
- --VV_n Emulate RCS version _n. See ccoo(1) for details.
-
- --xx_s_u_f_f_i_x_e_s
- specifies the suffixes for RCS files. A nonempty
- suffix matches any pathname ending in the suffix.
- An empty suffix matches any pathname of the form
- RRCCSS//_p_a_t_h or _p_a_t_h_1//RRCCSS//_p_a_t_h_2_. The --xx option can
- specify a list of suffixes separated by //. For
- example, --xx,,vv// specifies two suffixes: ,,vv and the
- empty suffix. If two or more suffixes are
- specified, they are tried in order when looking for
- an RCS file; the first one that works is used for
- that file. If no RCS file is found but an RCS file
- can be created, the suffixes are tried in order to
- determine the new RCS file's name. The default for
- _s_u_f_f_i_x_e_s is installation-dependent; normally it is
- ,,vv// for hosts like Unix that permit commas in
- filenames, and is empty (i.e. just the empty
- suffix) for other hosts.
-
- FFIILLEE NNAAMMIINNGG
- Pairs of RCS files and working files may be specified in
- three ways (see also the example section).
-
- 1) Both the RCS file and the working file are given. The
- RCS pathname is of the form _p_a_t_h_1//_w_o_r_k_f_i_l_e_X and the
- working pathname is of the form _p_a_t_h_2//_w_o_r_k_f_i_l_e where
- _p_a_t_h_1// and _p_a_t_h_2// are (possibly different or empty) paths,
- _w_o_r_k_f_i_l_e is a filename, and _X is an RCS suffix. If _X is
- empty, _p_a_t_h_1// must start with RRCCSS// or must contain //RRCCSS//.
-
- 2) Only the RCS file is given. Then the working file is
- created in the current directory and its name is derived
- from the name of the RCS file by removing _p_a_t_h_1// and the
- suffix _X.
-
- 3) Only the working file is given. Then ccii considers each
- RCS suffix _X in turn, looking for an RCS file of the form
- _p_a_t_h_2//RRCCSS//_w_o_r_k_f_i_l_e_X or (if the former is not found and _X
-
-
-
- GNU 1992/07/28 5
-
-
-
-
-
- CI(1) CI(1)
-
-
- is nonempty) _p_a_t_h_2//_w_o_r_k_f_i_l_e_X_.
-
- If the RCS file is specified without a path in 1) and 2),
- ccii looks for the RCS file first in the directory ..//RRCCSS and
- then in the current directory.
-
- ccii reports an error if an attempt to open an RCS file
- fails for an unusual reason, even if the RCS file's
- pathname is just one of several possibilities. For
- example, to suppress use of RCS commands in a directory _d,
- create a regular file named _d//RRCCSS so that casual attempts
- to use RCS commands in _d fail because _d//RRCCSS is not a
- directory.
-
- EEXXAAMMPPLLEESS
- Suppose ,,vv is an RCS suffix and the current directory
- contains a subdirectory RRCCSS with an RCS file iioo..cc,,vv. Then
- each of the following commands check in a copy of iioo..cc
- into RRCCSS//iioo..cc,,vv as the latest revision, removing iioo..cc.
-
- ccii iioo..cc;; ccii RRCCSS//iioo..cc,,vv;; ccii iioo..cc,,vv;;
- ccii iioo..cc RRCCSS//iioo..cc,,vv;; ccii iioo..cc iioo..cc,,vv;;
- ccii RRCCSS//iioo..cc,,vv iioo..cc;; ccii iioo..cc,,vv iioo..cc;;
-
- Suppose instead that the empty suffix is an RCS suffix and
- the current directory contains a subdirectory RRCCSS with an
- RCS file iioo..cc. The each of the following commands checks
- in a new revision.
-
- ccii iioo..cc;; ccii RRCCSS//iioo..cc;;
- ccii iioo..cc RRCCSS//iioo..cc;;
- ccii RRCCSS//iioo..cc iioo..cc;;
-
- FFIILLEE MMOODDEESS
- An RCS file created by ccii inherits the read and execute
- permissions from the working file. If the RCS file exists
- already, ccii preserves its read and execute permissions.
- ccii always turns off all write permissions of RCS files.
-
- FFIILLEESS
- Several temporary files may be created in the directory
- containing the working file, and also in the temporary
- directory (see TTMMPPDDIIRR under EENNVVIIRROONNMMEENNTT). A semaphore
- file or files are created in the directory containing the
- RCS file. With a nonempty suffix, the semaphore names
- begin with the first character of the suffix; therefore,
- do not specify an suffix whose first character could be
- that of a working filename. With an empty suffix, the
- semaphore names end with __ so working filenames should not
- end in __.
-
- ccii never changes an RCS or working file. Normally, ccii
- unlinks the file and creates a new one; but instead of
- breaking a chain of one or more symbolic links to an RCS
-
-
-
- GNU 1992/07/28 6
-
-
-
-
-
- CI(1) CI(1)
-
-
- file, it unlinks the destination file instead. Therefore,
- ccii breaks any hard or symbolic links to any working file
- it changes; and hard links to RCS files are ineffective,
- but symbolic links to RCS files are preserved.
-
- The effective user must be able to search and write the
- directory containing the RCS file. Normally, the real
- user must be able to read the RCS and working files and to
- search and write the directory containing the working
- file; however, some older hosts cannot easily switch
- between real and effective users, so on these hosts the
- effective user is used for all accesses. The effective
- user is the same as the real user unless your copies of ccii
- and ccoo have setuid privileges. As described in the next
- section, these privileges yield extra security if the
- effective user owns all RCS files and directories, and if
- only the effective user can write RCS directories.
-
- Users can control access to RCS files by setting the
- permissions of the directory containing the files; only
- users with write access to the directory can use RCS
- commands to change its RCS files. For example, in hosts
- that allow a user to belong to several groups, one can
- make a group's RCS directories writable to that group
- only. This approach suffices for informal projects, but
- it means that any group member can arbitrarily change the
- group's RCS files, and can even remove them entirely.
- Hence more formal projects sometimes distinguish between
- an RCS administrator, who can change the RCS files at
- will, and other project members, who can check in new
- revisions but cannot otherwise change the RCS files.
-
- SSEETTUUIIDD UUSSEE
- To prevent anybody but their RCS administrator from
- deleting revisions, a set of users can employ setuid
- privileges as follows.
-
- +o Check that the host supports RCS setuid use. Consult a
- trustworthy expert if there are any doubts. It is best
- if the sseetteeuuiidd(()) system call works as described in Posix
- 1003.1a Draft 5, because RCS can switch back and forth
- easily between real and effective users, even if the
- real user is rroooott. If not, the second best is if the
- sseettuuiidd(()) system call supports saved setuid (the
- {_POSIX_SAVED_IDS} behavior of Posix 1003.1-1990); this
- fails only if the real or effective user is rroooott. If
- RCS detects any failure in setuid, it quits immediately.
-
- +o Choose a user _A to serve as RCS administrator for the
- set of users. Only _A will be able to invoke the rrccss
- command on the users' RCS files. _A should not be rroooott
- or any other user with special powers. Mutually
- suspicious sets of users should use different
- administrators.
-
-
-
- GNU 1992/07/28 7
-
-
-
-
-
- CI(1) CI(1)
-
-
- +o Choose a pathname _B that will be a directory of files to
- be executed by the users.
-
- +o Have _A set up _B to contain copies of ccii and ccoo that are
- setuid to _A by copying the commands from their standard
- installation directory _D as follows:
-
- mmkkddiirr _B
- ccpp _D//cc[[iioo]] _B
- cchhmmoodd ggoo--ww,,uu++ss _B//cc[[iioo]]
-
- +o Have each user prepend _B to their path as follows:
-
- PPAATTHH==_B::$$PPAATTHH;; eexxppoorrtt PPAATTHH # ordinary shell
- sseett ppaatthh==((_B $$ppaatthh)) # C shell
-
- +o Have _A create each RCS directory _R with write access
- only to _A as follows:
-
- mmkkddiirr _R
- cchhmmoodd ggoo--ww _R
-
- +o If you want to let only certain users read the RCS
- files, put the users into a group _G, and have _A further
- protect the RCS directory as follows:
-
- cchhggrrpp _G _R
- cchhmmoodd gg--ww,,oo--rrwwxx _R
-
- +o Have _A copy old RCS files (if any) into _R, to ensure
- that _A owns them.
-
- +o An RCS file's access list limits who can check in and
- lock revisions. The default access list is empty, which
- grants checkin access to anyone who can read the RCS
- file. If you want limit checkin access, have _A invoke
- rrccss --aa on the file; see rrccss(1). In particular,
- rrccss --ee --aa_A limits access to just _A.
-
- +o Have _A initialize any new RCS files with rrccss --ii before
- initial checkin, adding the --aa option if you want to
- limit checkin access.
-
- +o Give setuid privileges only to ccii, ccoo, and rrccsscclleeaann; do
- not give them to rrccss or to any other command.
-
- +o Do not use other setuid commands to invoke RCS commands;
- setuid is trickier than you think!
-
- EENNVVIIRROONNMMEENNTT
- RRCCSSIINNIITT
- options prepended to the argument list, separated
- by spaces. A backslash escapes spaces within an
- option. The RRCCSSIINNIITT options are prepended to the
-
-
-
- GNU 1992/07/28 8
-
-
-
-
-
- CI(1) CI(1)
-
-
- argument lists of most RCS commands. Useful
- RRCCSSIINNIITT options include --qq, --VV, and --xx.
-
- TTMMPPDDIIRR Name of the temporary directory. If not set, the
- environment variables TTMMPP and TTEEMMPP are inspected
- instead and the first value found is taken; if none
- of them are set, a host-dependent default is used,
- typically //ttmmpp.
-
- DDIIAAGGNNOOSSTTIICCSS
- For each revision, ccii prints the RCS file, the working
- file, and the number of both the deposited and the
- preceding revision. The exit status is zero if and only
- if all operations were successful.
-
- IIDDEENNTTIIFFIICCAATTIIOONN
- Author: Walter F. Tichy.
- Revision Number: 5.12; Release Date: 1992/07/28.
- Copyright 1982, 1988, 1989 by Walter F. Tichy.
- Copyright 1990, 1991, 1992 by Paul Eggert.
-
- SSEEEE AALLSSOO
- co(1), ident(1), make(1), rcs(1), rcsclean(1), rcsdiff(1),
- rcsintro(1), rcsmerge(1), rlog(1), rcsfile(5)
- Walter F. Tichy, RCS--A System for Version Control,
- _S_o_f_t_w_a_r_e_-_-_P_r_a_c_t_i_c_e _& _E_x_p_e_r_i_e_n_c_e 1155, 7 (July 1985),
- 637-654.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- GNU 1992/07/28 9
-
-
-