diff options
author | Peter Wemm <peter@FreeBSD.org> | 2000-10-02 06:33:59 +0000 |
---|---|---|
committer | Peter Wemm <peter@FreeBSD.org> | 2000-10-02 06:33:59 +0000 |
commit | a3b502f88fd3d67bf547634d411d567524c4c1b1 (patch) | |
tree | c2ec0b150478a3cab9fb18e60d02dedbdc1cfd15 /contrib/cvs/doc/cvs.texinfo | |
parent | d81819680486521a84c8aecc540ed04ba315dec0 (diff) | |
download | src-a3b502f88fd3d67bf547634d411d567524c4c1b1.tar.gz src-a3b502f88fd3d67bf547634d411d567524c4c1b1.zip |
Notes
Diffstat (limited to 'contrib/cvs/doc/cvs.texinfo')
-rw-r--r-- | contrib/cvs/doc/cvs.texinfo | 772 |
1 files changed, 486 insertions, 286 deletions
diff --git a/contrib/cvs/doc/cvs.texinfo b/contrib/cvs/doc/cvs.texinfo index 4d8b9490ea6c..8d5de53ade45 100644 --- a/contrib/cvs/doc/cvs.texinfo +++ b/contrib/cvs/doc/cvs.texinfo @@ -252,7 +252,7 @@ free download from the internet. For more information on downloading @sc{cvs} and other @sc{cvs} topics, see: @example -http://www.cyclic.com/ +http://www.cvshome.org/ http://www.loria.fr/~molli/cvs-index.html @end example @@ -728,7 +728,7 @@ they should be in separate locations. @c as it is; need a little reorganization... @cindex :local:, setting up -@sc{Cvs} can access a repository by a variety of +@sc{cvs} can access a repository by a variety of means. It might be on the local computer, or it might be on a computer across the room or across the world. To distinguish various ways to access a repository, the @@ -859,8 +859,8 @@ the file permissions appropriate for the repository. @node Repository files @subsection Where files are stored within the repository -@c @cindex filenames, legal -@c @cindex legal filenames +@c @cindex Filenames, legal +@c @cindex Legal filenames @c Somewhere we need to say something about legitimate @c characters in filenames in working directory and @c repository. Not "/" (not even on non-unix). And @@ -989,12 +989,12 @@ rules see @ref{Tags}. @c -- Move this to @node Creating a repository or similar @cindex Security, file permissions in repository @cindex File permissions, general -@cindex permissions, general +@cindex Permissions, general @c FIXME: we need to somehow reflect "permissions in @c repository" versus "permissions in working @c directory" in the index entries. @cindex Group -@cindex read-only files, in repository +@cindex Read-only files, in repository All @samp{,v} files are created read-only, and you should not change the permission of those files. The directories inside the repository should be writable by @@ -1019,7 +1019,7 @@ out files, because @sc{cvs} needs to create lock files @c Like val-tags gets created by someone who doesn't @c have CVSUMASK set right? Also note that users must have write access to the -@file{CVSROOT/val-tags} file. @sc{Cvs} uses it to keep +@file{CVSROOT/val-tags} file. @sc{cvs} uses it to keep track of what tags are valid tag names (it is sometimes updated when tags are used, as well as when they are created). @@ -1029,7 +1029,7 @@ checked it in. This has little significance; what really matters is who owns the directories. @cindex CVSUMASK, environment variable -@cindex umask, for repository files +@cindex Umask, for repository files @sc{cvs} tries to set up reasonable file permissions for new directories that are added inside the tree, but you must fix the permissions manually when a new @@ -1043,7 +1043,7 @@ directory; such files have the permissions which are typical for newly created files, except that sometimes @sc{cvs} creates them read-only (see the sections on watches, @ref{Setting a watch}; -r, @ref{Global -options}; or CVSREAD, @ref{Environment variables}). +options}; or @code{CVSREAD}, @ref{Environment variables}). @c FIXME: Need more discussion of which @c group should own the file in the repository. @c Include a somewhat detailed example of the usual @@ -1091,10 +1091,10 @@ permissions on the @sc{cvsroot} directory and directories above it in the tree; see @ref{Password authentication security}. -@cindex setuid -@cindex setgid -@cindex security, setuid -@cindex installed images (VMS) +@cindex Setuid +@cindex Setgid +@cindex Security, setuid +@cindex Installed images (VMS) Some operating systems have features which allow a particular program to run with the ability to perform operations which the caller of the program could not. @@ -1118,7 +1118,7 @@ carefully if you are considering this option @subsection File Permission issues specific to Windows @cindex Windows, and permissions @cindex File permissions, Windows-specific -@cindex permissions, Windows-specific +@cindex Permissions, Windows-specific Some file permission issues are specific to Windows operating systems (Windows 95, Windows NT, and @@ -1140,7 +1140,7 @@ something out, please let us know as described in @node Attic @subsection The attic -@cindex attic +@cindex Attic You will notice that sometimes @sc{cvs} stores an @sc{rcs} file in the @code{Attic}. For example, if the @@ -1159,7 +1159,7 @@ but if it goes in the attic, it would be in /usr/local/cvsroot/yoyodyne/tc/Attic/backend.c,v @end example -@cindex dead state +@cindex Dead state instead. It should not matter from a user point of view whether a file is in the attic; @sc{cvs} keeps track of this and looks in the attic when it needs to. @@ -1276,7 +1276,7 @@ there must be a single tab character there and no spaces. @cindex #cvs.rfl, technical details @cindex #cvs.wfl, technical details @cindex #cvs.lock, technical details -@cindex locks, cvs, technical details +@cindex Locks, cvs, technical details For an introduction to CVS locks focusing on user-visible behavior, see @ref{Concurrency}. The following section is aimed at people who are writing @@ -1907,7 +1907,7 @@ in the repository; for the most part it is possible to back them up just like any other files. However, there are a few issues to consider. -@cindex locks, cvs, and backups +@cindex Locks, cvs, and backups @cindex #cvs.rfl, and backups The first is that to be paranoid, one should either not use @sc{cvs} during the backup, or have the backup @@ -1953,9 +1953,9 @@ the changes into the repository. @node Moving a repository @section Moving a repository -@cindex repository, moving -@cindex moving a repository -@cindex copying a repository +@cindex Repository, moving +@cindex Moving a repository +@cindex Copying a repository Just as backing up the files in the repository is pretty much like backing up any other files, if you @@ -1990,7 +1990,7 @@ isn't worth it. @cindex Repositories, remote @cindex Remote repositories @cindex Client/Server Operation -@cindex server, CVS +@cindex Server, CVS Your working copy of the sources can be on a different machine than the repository. Using @sc{cvs} @@ -2171,7 +2171,7 @@ for example @file{/usr/local/bin/cvs-1.6}. @c different ones for different roots. e.g. ":server;cvs=cvs-1.6:" @c instead of ":server:". -There is no need to edit @code{inetd.conf} or start a +There is no need to edit @file{inetd.conf} or start a @sc{cvs} server daemon. @cindex :server:, setting up @@ -2179,7 +2179,7 @@ There is no need to edit @code{inetd.conf} or start a @cindex Kerberos, using kerberized rsh @cindex SSH (rsh replacement) @cindex rsh replacements (Kerberized, SSH, &c) -There are two access methods that you use in CVSROOT +There are two access methods that you use in @code{CVSROOT} for rsh. @code{:server:} specifies an internal rsh client, which is supported only by some CVS ports. @code{:ext:} specifies an external rsh program. By @@ -2252,9 +2252,9 @@ permissions on the @file{$CVSROOT} and @file{$CVSROOT/CVSROOT} directories. See @ref{Password authentication security}, for more details. -@cindex Pserver (subcommand) -@cindex password server, setting up -@cindex authenticating server, setting up +@cindex pserver (subcommand) +@cindex Password server, setting up +@cindex Authenticating server, setting up @c FIXME: this isn't quite right regarding port @c numbers; CVS looks up "cvspserver" in @c /etc/services (on unix, but what about non-unix?). @@ -2272,7 +2272,7 @@ single line in @file{inetd.conf}) should be sufficient: @example 2401 stream tcp nowait root /usr/local/bin/cvs -cvs --allow-root=/usr/cvsroot pserver +cvs -f --allow-root=/usr/cvsroot pserver @end example You could also use the @@ -2312,86 +2312,126 @@ If you are having trouble setting this up, see Because the client stores and transmits passwords in cleartext (almost---see @ref{Password authentication security}, for details), a separate @sc{cvs} password -file may be used, so people don't compromise their -regular passwords when they access the repository. -This file is @file{$CVSROOT/CVSROOT/passwd} -(@pxref{Intro administrative files}). Its format is -similar to @file{/etc/passwd}, except that it only has -two or three fields, username, password, and optional -username for the server to use. For example: - -@example +file is generally used, so people don't compromise +their regular passwords when they access the +repository. This file is +@file{$CVSROOT/CVSROOT/passwd} (@pxref{Intro +administrative files}). It uses a colon-separated +format, similar to @file{/etc/passwd} on Unix systems, +except that it has fewer fields: @sc{cvs} username, +optional password, and an optional system username for +@sc{cvs} to run as if authentication succeeds. Here is +an example @file{passwd} file with five entries: + +@example +anonymous: bach:ULtgRLXo7NRxs -cwang:1sOp854gDF3DY +spwang:1sOp854gDF3DY +melissa:tGX1fS8sun6rY:pubcvs +qproj:XR4EZcEs0szik:pubcvs @end example -The password is encrypted according to the standard +(The passwords are encrypted according to the standard Unix @code{crypt()} function, so it is possible to paste in passwords directly from regular Unix -@file{passwd} files. - +@file{/etc/passwd} files.) + +The first line in the example will grant access to any +@sc{cvs} client attempting to authenticate as user +@code{anonymous}, no matter what password they use, +including an empty password. (This is typical for +sites granting anonymous read-only access; for +information on how to do the "read-only" part, see +@xref{Read-only access}.) + +The second and third lines will grant access to +@code{bach} and @code{spwang} if they supply their +respective plaintext passwords. + +@cindex User aliases +The fourth line will grant access to @code{melissa}, if +she supplies the correct password, but her @sc{cvs} +operations will actually run on the server side under +the system user @code{pubcvs}. Thus, there need not be +any system user named @code{melissa}, but there +@emph{must} be one named @code{pubcvs}. + +The fifth line shows that system user identities can be +shared: any client who successfully authenticates as +@code{qproj} will actually run as @code{pubcvs}, just +as @code{melissa} does. That way you could create a +single, shared system user for each project in your +repository, and give each developer their own line in +the @file{$CVSROOT/CVSROOT/passwd} file. The @sc{cvs} +username on each line would be different, but the +system username would be the same. The reason to have +different @sc{cvs} usernames is that CVS will log their +actions under those names: when @code{melissa} commits +a change to a project, the checkin is recorded in the +project's history under the name @code{melissa}, not +@code{pubcvs}. And the reason to have them share a +system username is so that you can arrange permissions +in the relevant area of the repository such that only +that account has write-permission there. + +If the system-user field is present, all +password-authenticated @sc{cvs} commands run as that +user; if no system user is specified, @sc{cvs} simply +takes the @sc{cvs} username as the system username and +runs commands as that user. In either case, if there +is no such user on the system, then the @sc{cvs} +operation will fail (regardless of whether the client +supplied a valid password). + +The password and system-user fields can both be omitted +(and if the system-user field is omitted, then also +omit the colon that would have separated it from the +encrypted password). For example, this would be a +valid @file{$CVSROOT/CVSROOT/passwd} file: + +@example +anonymous::pubcvs +fish:rKa5jzULzmhOo:kfogel +sussman:1sOp854gDF3DY +@end example + +When the password field is omitted or empty, then the +client's authentication attempt will succeed with any +password, including the empty string. However, the +colon after the @sc{cvs} username is always necessary, +even if the password is empty. + +CVS can also fall back to use system authentication. When authenticating a password, the server first checks -for the user in the @sc{cvs} @file{passwd} file. If it -finds the user, it compares against that password. If -it does not find the user, or if the @sc{cvs} -@file{passwd} file does not exist, then the server -tries to match the password using the system's -user-lookup routine (using the system's user-lookup -routine can be disabled by setting @code{SystemAuth=no} -in the config file, @pxref{config}). When using the @sc{cvs} -@file{passwd} file, the server runs as the -username specified in the third argument in the -entry, or as the first argument if there is no third -argument (in this way @sc{cvs} allows imaginary -usernames provided the @sc{cvs} @file{passwd} file -indicates corresponding valid system usernames). In -any case, @sc{cvs} will have no privileges which the -(valid) user would not have. - -@cindex user aliases - It is possible to ``map'' cvs-specific -usernames onto system usernames (i.e., onto system -login names) in the @file{$CVSROOT/CVSROOT/passwd} file -by appending a colon and the system username after the -password. For example: - -@example -cvs:ULtgRLXo7NRxs:kfogel -generic:1sOp854gDF3DY:spwang -anyone:1sOp854gDF3DY:spwang -@end example - - Thus, someone remotely accessing the repository -on @file{faun.example.org} with the following -command: - -@example -cvs -d :pserver:cvs@@faun.example.org:/usr/local/cvsroot checkout foo -@end example - - would end up running the server under the -system identity kfogel, assuming successful -authentication. However, the remote user would not -necessarily need to know kfogel's system password, as -the @file{$CVSROOT/CVSROOT/passwd} file might contain a -different password, used only for @sc{cvs}. And as the -example above indicates, it is permissible to map -multiple cvs usernames onto a single system username. - - This feature is designed to allow people -repository access without full system access (in -particular, see @ref{Read-only access}); however, also -see @ref{Password authentication security}. Any sort of -repository access very likely implies a degree of -general system access as well. +for the user in the @file{$CVSROOT/CVSROOT/passwd} +file. If it finds the user, it will use that entry for +authentication as described above. But if it does not +find the user, or if the @sc{cvs} @file{passwd} file +does not exist, then the server can try to authenticate +the username and password using the operating system's +user-lookup routines (this "fallback" behavior can be +disabled by setting @code{SystemAuth=no} in the +@sc{cvs} @file{config} file, @pxref{config}). Be +aware, however, that falling back to system +authentication might be a security risk: @sc{cvs} +operations would then be authenticated with that user's +regular login password, and the password flies across +the network in plaintext. See @ref{Password +authentication security} for more on this. Right now, the only way to put a password in the @sc{cvs} @file{passwd} file is to paste it there from somewhere else. Someday, there may be a @code{cvs passwd} command. -Unlike many of the files in @file{$CVSROOT/CVSROOT}, -you edit the @file{passwd} file directly, rather than -via @sc{cvs}. + +Unlike many of the files in @file{$CVSROOT/CVSROOT}, it +is normal to edit the @file{passwd} file in-place, +rather than via @sc{cvs}. This is because of the +possible security risks of having the @file{passwd} +file checked out to people's working copies. If you do +want to include the @file{passwd} file in checkouts of +@file{$CVSROOT/CVSROOT}, see @xref{checkoutlist}. + @c We might also suggest using the @code{htpasswd} command @c from freely available web servers as well, but that @c would open up a can of worms in that the users next @@ -2403,74 +2443,98 @@ via @sc{cvs}. @node Password authentication client @subsubsection Using the client with password authentication @cindex Login (subcommand) -@cindex password client, using -@cindex authenticated client, using +@cindex Password client, using +@cindex Authenticated client, using @cindex :pserver:, setting up -Before connecting to the server, the client must @dfn{log -in} with the command @code{cvs login}. Logging in -verifies a password with the server, and also records -the password for later transactions with the server. -The @code{cvs login} command needs to know the -username, server hostname, and full repository path, -and it gets this information from the repository -argument or the @code{CVSROOT} environment variable. +To run a @sc{cvs} command on a remote repository via +the password-authenticating server, one specifies the +@code{pserver} protocol, username, repository host, and +path to the repository. For example: -@code{cvs login} is interactive --- it prompts for a -password: +@example +cvs -d :pserver:bach@@faun.example.org:/usr/local/cvsroot checkout someproj +@end example + +or + +@example +CVSROOT=:pserver:bach@@faun.example.org:/usr/local/cvsroot +cvs checkout someproj +@end example + +However, unless you're connecting to a public-access +repository (i.e., one where that username doesn't +require a password), you'll need to @dfn{log in} first. +Logging in verifies your password with the repository. +It's done with the @code{login} command, which will +prompt you interactively for the password: @example cvs -d :pserver:bach@@faun.example.org:/usr/local/cvsroot login CVS password: @end example -The password is checked with the server; if it is -correct, the @code{login} succeeds, else it fails, -complaining that the password was incorrect. - -Once you have logged in, you can force @sc{cvs} to -connect directly to the server and authenticate with -the stored password: +After you enter the password, @sc{cvs} verifies it with +the server. If the verification succeeds, then that +combination of username, host, repository, and password +is permanently recorded, so future transactions with +that repository won't require you to run @code{cvs +login}. (If verification fails, @sc{cvs} will exit +complaining that the password was incorrect, and +nothing will be recorded.) + +The records are stored, by default, in the file +@file{$HOME/.cvspass}. That file's format is +human-readable, and to a degree human-editable, but +note that the passwords are not stored in +cleartext---they are trivially encoded to protect them +from "innocent" compromise (i.e., inadvertent viewing +by a system administrator or other non-malicious +person). +@cindex CVS_PASSFILE, environment variable +You can change the default location of this file by +setting the @code{CVS_PASSFILE} environment variable. +If you use this variable, make sure you set it +@emph{before} @code{cvs login} is run. If you were to +set it after running @code{cvs login}, then later +@sc{cvs} commands would be unable to look up the +password for transmission to the server. + +Once you have logged in, all @sc{cvs} commands using +that remote repository and username will authenticate +with the stored password. So, for example + @example cvs -d :pserver:bach@@faun.example.org:/usr/local/cvsroot checkout foo @end example -The @samp{:pserver:} is necessary because without it, -@sc{cvs} will assume it should use @code{rsh} to -connect with the server (@pxref{Connecting via rsh}). -(Once you have a working copy checked out and are -running @sc{cvs} commands from within it, there is no -longer any need to specify the repository explicitly, -because @sc{cvs} records it in the working copy's -@file{CVS} subdirectory.) +should just work (unless the password changes on the +server side, in which case you'll have to re-run +@code{cvs login}). -@cindex CVS_PASSFILE, environment variable -Passwords are stored by default in the file -@file{$HOME/.cvspass}. Its format is human-readable, -but don't edit it unless you know what you are doing. -The passwords are not stored in cleartext, but are -trivially encoded to protect them from "innocent" -compromise (i.e., inadvertently being seen by a system -administrator who happens to look at that file). +Note that if the @samp{:pserver:} were not present in +the repository specification, @sc{cvs} would assume it +should use @code{rsh} to connect with the server +instead (@pxref{Connecting via rsh}). + +Of course, once you have a working copy checked out and +are running @sc{cvs} commands from within it, there is +no longer any need to specify the repository +explicitly, because @sc{cvs} can deduce the repository +from the working copy's @file{CVS} subdirectory. @c FIXME: seems to me this needs somewhat more @c explanation. @cindex Logout (subcommand) -The password for the currently chosen remote repository -can be removed from the CVS_PASSFILE by using the +The password for a given remote repository can be +removed from the @code{CVS_PASSFILE} by using the @code{cvs logout} command. -The @code{CVS_PASSFILE} environment variable overrides -this default. If you use this variable, make sure you -set it @emph{before} @code{cvs login} is run. If you -were to set it after running @code{cvs login}, then -later @sc{cvs} commands would be unable to look up the -password for transmission to the server. - @node Password authentication security @subsubsection Security considerations with password authentication -@cindex security, of pserver +@cindex Security, of pserver The passwords are stored on the client side in a trivial encoding of the cleartext, and transmitted in the same encoding. The encoding is done only to @@ -2534,7 +2598,7 @@ security, get Kerberos. @subsection Direct connection with GSSAPI @cindex GSSAPI -@cindex security, GSSAPI +@cindex Security, GSSAPI @cindex :gserver:, setting up @cindex Kerberos, using :gserver: GSSAPI is a generic interface to network security @@ -2588,7 +2652,7 @@ cvs -d :gserver:faun.example.org:/usr/local/cvsroot checkout foo @subsection Direct connection with kerberos @cindex Kerberos, using :kserver: -@cindex security, kerberos +@cindex Security, kerberos @cindex :kserver:, setting up The easiest way to use kerberos is to use the kerberos @code{rsh}, as described in @ref{Connecting via rsh}. @@ -2616,7 +2680,7 @@ on. You must then use the @code{-x} global option to request encryption. @cindex CVS_CLIENT_PORT -You need to edit @code{inetd.conf} on the server +You need to edit @file{inetd.conf} on the server machine to run @code{cvs kserver}. The client uses port 1999 by default; if you want to use another port specify it in the @code{CVS_CLIENT_PORT} environment @@ -2673,7 +2737,7 @@ environment variable. @c --------------------------------------------------------------------- @node Read-only access @section Read-only repository access -@cindex read-only repository access +@cindex Read-only repository access @cindex readers (admin file) @cindex writers (admin file) @@ -2762,8 +2826,8 @@ read-only access. @node Server temporary directory @section Temporary directories for the server -@cindex temporary directories, and server -@cindex server, temporary directories +@cindex Temporary directories, and server +@cindex Server, temporary directories While running, the @sc{cvs} server creates temporary directories. They are named @@ -2775,7 +2839,7 @@ cvs-serv@var{pid} @noindent where @var{pid} is the process identification number of the server. They are located in the directory -specified by the @samp{TMPDIR} environment variable +specified by the @code{TMPDIR} environment variable (@pxref{Environment variables}), the @samp{-T} global option (@pxref{Global options}), or failing that @file{/tmp}. @@ -2879,15 +2943,14 @@ original source directory. @example $ cd .. -$ mv @var{dir} @var{dir}.orig -$ cvs checkout yoyodyne/@var{dir} # @r{Explanation below} -$ diff -r @var{dir}.orig yoyodyne/@var{dir} -$ rm -r @var{dir}.orig +$ cvs checkout yoyodyne/@var{rdir} # @r{Explanation below} +$ diff -r @var{wdir} yoyodyne/@var{rdir} +$ rm -r @var{wdir} @end example @noindent Erasing the original sources is a good idea, to make sure that you do -not accidentally edit them in @var{dir}, bypassing @sc{cvs}. +not accidentally edit them in @var{wdir}, bypassing @sc{cvs}. Of course, it would be wise to make sure that you have a backup of the sources before you remove them. @@ -2897,7 +2960,7 @@ examples) or a path name relative to @code{$CVSROOT}, as it did in the example above. It is a good idea to check that the permissions -@sc{cvs} sets on the directories inside @samp{$CVSROOT} +@sc{cvs} sets on the directories inside @code{$CVSROOT} are reasonable, and that they belong to the proper groups. @xref{File permissions}. @@ -3033,7 +3096,7 @@ Then, use @code{add} to add files (and new directories) as they appear. Check that the permissions @sc{cvs} sets on the -directories inside @samp{$CVSROOT} are reasonable. +directories inside @code{$CVSROOT} are reasonable. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Defining the module @@ -3296,7 +3359,7 @@ taginfo file (@pxref{user-defined logging}). @c issues which arise. @cindex Adding a tag -@cindex tag, example +@cindex Tag, example The following example shows how you can add a tag to a file. The commands must be issued inside your working directory. That is, you should issue the @@ -3407,7 +3470,7 @@ like this: @node Tagging the working directory @section Specifying what to tag from the working directory -@cindex Tag (subcommand) +@cindex tag (subcommand) The example in the previous section demonstrates one of the most common ways to choose which revisions to tag. Namely, running the @code{cvs tag} command without @@ -3439,7 +3502,7 @@ cvs [tag aborted]: correct the above errors first! @node Tagging by date/tag @section Specifying what to tag by date or revision -@cindex Rtag (subcommand) +@cindex rtag (subcommand) The @code{cvs rtag} command tags the repository as of a certain date or time (or can be used to tag the latest @@ -3501,9 +3564,9 @@ recover from errors. If you are a @sc{cvs} administrator, you may consider restricting these commands with taginfo (@pxref{user-defined logging}). -@cindex deleting tags -@cindex removing tags -@cindex tags, deleting +@cindex Deleting tags +@cindex Removing tags +@cindex Tags, deleting To delete a tag, specify the @samp{-d} option to either @code{cvs tag} or @code{cvs rtag}. For example: @@ -3513,8 +3576,8 @@ cvs rtag -d rel-0-4 tc deletes the tag @code{rel-0-4} from the module @code{tc}. -@cindex moving tags -@cindex tags, moving +@cindex Moving tags +@cindex Tags, moving When we say @dfn{move} a tag, we mean to make the same name point to different revisions. For example, the @code{stable} tag may currently point to revision 1.4 @@ -3528,8 +3591,8 @@ accomplished as: cvs tag -r 1.6 -F stable backend.c @end example -@cindex renaming tags -@cindex tags, renaming +@cindex Renaming tags +@cindex Tags, renaming When we say @dfn{rename} a tag, we mean to make a different name point to the same revisions as the old tag. For example, one may have misspelled the tag name @@ -3631,7 +3694,7 @@ you delete them with @samp{cvs update -A}. The the head of the trunk, and forgets any sticky tags, dates, or options. -@cindex sticky date +@cindex Sticky date The most common use of sticky tags is to identify which branch one is working on, as described in @ref{Accessing branches}. However, non-branch @@ -4760,8 +4823,8 @@ later merge the removals to another branch if you want @node Removing directories @section Removing directories -@cindex removing directories -@cindex directories, removing +@cindex Removing directories +@cindex Directories, removing In concept removing directories is somewhat similar to removing files---you want the directory to not exist in @@ -4773,9 +4836,11 @@ The way that you remove a directory is to remove all the files in it. You don't remove the directory itself; there is no way to do that. Instead you specify the @samp{-P} option to -@code{cvs update}, @code{cvs checkout}, or @code{cvs -export}, which will cause @sc{cvs} to remove empty -directories from working directories. Probably the +@code{cvs update} or @code{cvs checkout}, +which will cause @sc{cvs} to remove empty +directories from working directories. +(Note that @code{cvs export} always removes empty directories.) +Probably the best way to do this is to always specify @samp{-P}; if you want an empty directory then put a dummy file (for example @file{.keepme}) in it to prevent @samp{-P} from @@ -4788,7 +4853,7 @@ removing it. @c need for -P and so that a file can be a directory in @c one revision and a regular file in another. Note that @samp{-P} is implied by the @samp{-r} or @samp{-D} -options of @code{checkout} and @code{export}. This way +options of @code{checkout}. This way @sc{cvs} will be able to correctly create the directory or not depending on whether the particular version you are checking out contains any files in that directory. @@ -5120,6 +5185,11 @@ You can use the history file (@pxref{history file}) to log various @sc{cvs} actions. To retrieve the information from the history file, use the @code{cvs history} command (@pxref{history}). + +Note: you can control what is logged to this file by using the +@samp{LogHistory} keyword in the @file{CVSROOT/config} file +(@pxref{config}). + @c @c The history database has many problems: @c * It is very unclear what field means what. This @@ -5213,7 +5283,7 @@ Notified}); this command is useful even if you are not using @code{cvs watch on}. @cindex taginfo -@cindex exit status, of taginfo +@cindex Exit status, of taginfo The @file{taginfo} file defines programs to execute when someone executes a @code{tag} or @code{rtag} command. The @file{taginfo} file has the standard form @@ -5481,8 +5551,8 @@ considerably with the operating system. @cindex File locking @cindex Locking files @cindex Working copy -@cindex reserved checkouts -@cindex unreserved checkouts +@cindex Reserved checkouts +@cindex Unreserved checkouts @cindex RCS-style locking When more than one person works on a software project @@ -5525,7 +5595,7 @@ is almost automatic. @c FIXME? should probably use the word "watch" here, to @c tie this into the text below and above. -@sc{Cvs} also supports mechanisms which facilitate +@sc{cvs} also supports mechanisms which facilitate various kinds of communication, without actually enforcing rules like reserved checkouts do. @@ -5703,7 +5773,7 @@ resolve the conflict as described in @ref{Conflicts example}. @item Unknown @cindex Unknown -@sc{Cvs} doesn't know anything about this file. For +@sc{cvs} doesn't know anything about this file. For example, you have created a new file and have not run @code{add}. @c @@ -5782,7 +5852,7 @@ these options, see @ref{Invoking CVS}. @cindex Bringing a file up to date @cindex Updating a file @cindex Merging a file -@cindex update, introduction +@cindex Update, introduction When you want to update or merge a file, use the @code{update} command. For files that are not up to date this is roughly equivalent @@ -6026,7 +6096,7 @@ newsgroup. @node Concurrency @section Several developers simultaneously attempting to run CVS -@cindex locks, cvs, introduction +@cindex Locks, cvs, introduction @c For a discussion of *why* CVS creates locks, see @c the comment at the start of src/lock.c If several developers try to run @sc{cvs} at the same @@ -6163,7 +6233,7 @@ certain files are to be watched. @cindex watch on (subcommand) @deffn Command {cvs watch on} [@code{-lR}] files @dots{} -@cindex read-only files, and watches +@cindex Read-only files, and watches Specify that developers should run @code{cvs edit} before editing @var{files}. CVS will create working copies of @var{files} read-only, to remind developers @@ -6187,8 +6257,16 @@ If @var{files} is omitted, it defaults to the current directory. @deffn Command {cvs watch off} [@code{-lR}] files @dots{} -Do not provide notification about work on @var{files}. CVS will create -working copies of @var{files} read-write. +Do not create @var{files} read-only on checkout; thus, +developers will not be reminded to use @code{cvs edit} +and @code{cvs unedit}. +@ignore +CVS will check out @var{files} +read-write as usual, unless other permissions override +due to the @code{PreservePermissions} option being +enabled in the @file{config} administrative file +(@pxref{Special Files}, @pxref{config}) +@end ignore The @var{files} and options are processed as for @code{cvs watch on}. @@ -6271,7 +6349,7 @@ standard thing to put in the @code{notify} file is the single line: @example -ALL mail %s -s \"CVS notification\" +ALL mail %s -s "CVS notification" @end example This causes users to be notified by electronic mail. @@ -6295,7 +6373,7 @@ instead of passing the name of the user to be notified to @file{notify}, @sc{cvs} will pass the @var{value} (normally an email address on some other machine). -@sc{Cvs} does not notify you for your own changes. +@sc{cvs} does not notify you for your own changes. Currently this check is done based on whether the user name of the person taking the action which triggers notification matches the user name of the person @@ -6317,7 +6395,7 @@ changing. @node Editing files @subsection How to edit a file which is being watched -@cindex checkout, as term for getting ready to edit +@cindex Checkout, as term for getting ready to edit Since a file which is being watched is checked out read-only, you cannot simply edit it. To make it read-write, and inform others that you are planning to @@ -6355,6 +6433,7 @@ receive notifications, she should specify @code{-a none}. The @var{files} and options are processed as for the @code{cvs watch} commands. +@ignore @strong{Caution:} If the @code{PreservePermissions} option is enabled in the repository (@pxref{config}), CVS will not change the permissions on any of the @@ -6362,6 +6441,7 @@ CVS will not change the permissions on any of the that using @samp{cvs edit} does not interfere with the ability to store file permissions in the CVS repository. +@end ignore @end deffn @@ -6373,8 +6453,8 @@ your changes, or not to make any changes, you can use the @code{cvs unedit} command. @cindex unedit (subcommand) -@cindex abandoning work -@cindex reverting to repository version +@cindex Abandoning work +@cindex Reverting to repository version @deffn Command {cvs unedit} [@code{-lR}] files @dots{} Abandon work on the working files @var{files}, and revert them to the @@ -6457,7 +6537,7 @@ that will restore the repository to a state which @node Choosing a model @section Choosing between reserved or unreserved checkouts -@cindex choosing, reserved or unreserved checkouts +@cindex Choosing, reserved or unreserved checkouts Reserved and unreserved checkouts each have pros and cons. Let it be said that a lot of this is a matter of @@ -6980,7 +7060,7 @@ directory; if you want to work with the sources import them first and then check them out into a different directory (@pxref{Getting the source}). -@cindex Wdiff (import example) +@cindex wdiff (import example) Suppose you have the sources to a program called @code{wdiff} in a directory @file{wdiff-0.04}, and are going to make private modifications that you @@ -7158,7 +7238,7 @@ an error in some future release. @c "Revision management" section. @node Builds @chapter How your build system interacts with CVS -@cindex builds +@cindex Builds @cindex make As mentioned in the introduction, @sc{cvs} does not @@ -7191,7 +7271,7 @@ periodically (in between changes, using the approach just described) updating your entire tree, you ensure that your sources are sufficiently up to date. -@cindex bill of materials +@cindex Bill of materials One common need is to record which versions of which source files went into a particular build. This kind of functionality is sometimes called @dfn{bill of @@ -7251,12 +7331,12 @@ is Odin (see @node Special Files @chapter Special Files -@cindex special files -@cindex device nodes -@cindex ownership, saving in CVS -@cindex permissions, saving in CVS -@cindex hard links -@cindex symbolic links +@cindex Special files +@cindex Device nodes +@cindex Ownership, saving in CVS +@cindex Permissions, saving in CVS +@cindex Hard links +@cindex Symbolic links In normal circumstances, CVS works only with regular files. Every file in a project is assumed to be @@ -7269,6 +7349,7 @@ if the device file cannot be opened, CVS will refuse to handle it. Files also lose their ownerships and permissions during repository transactions. +@ignore If the configuration variable @code{PreservePermissions} (@pxref{config}) is set in the repository, CVS will save the following file characteristics in the @@ -7347,6 +7428,7 @@ with client/server @sc{cvs}. Another limitation is that hard links must be to other files within the same directory; hard links across directories are not supported. +@end ignore @c --------------------------------------------------------------------- @node CVS commands @@ -7438,7 +7520,7 @@ the documentation instead. @node Exit status @appendixsec CVS's exit status -@cindex exit status, of CVS +@cindex Exit status, of CVS CVS can indicate to the calling environment whether it succeeded or failed by setting its @dfn{exit status}. @@ -7474,7 +7556,7 @@ other @sc{cvs} commands. @node ~/.cvsrc @appendixsec Default options and the ~/.cvsrc file @cindex .cvsrc file -@cindex option defaults +@cindex Option defaults There are some @code{command_options} that are used so often that you might have set up an alias or some other @@ -7548,8 +7630,8 @@ left of @samp{cvs_command}) are: Specify legal @sc{cvsroot} directory. See @ref{Password authentication server}. -@cindex authentication, stream -@cindex stream authentication +@cindex Authentication, stream +@cindex Stream authentication @item -a Authenticate all communication between the client and the server. Only has an effect on the @sc{cvs} client. @@ -7637,7 +7719,7 @@ Cause the command to be somewhat quiet; informational messages, such as reports of recursion through subdirectories, are suppressed. -@cindex read-only files, and -r +@cindex Read-only files, and -r @item -r Make new working files read-only. Same effect as if the @code{$CVSREAD} environment variable is set @@ -7672,8 +7754,8 @@ set or @samp{-r} is given. @c be the same as a get and a cvs edit?), but I'm not @c completely sure whether to document it this way. -@cindex encryption @item -x +@cindex Encryption Encrypt all communication between the client and the server. Only has an effect on the @sc{cvs} client. As of this writing, this is only implemented when using a @@ -7686,8 +7768,13 @@ special configure option, @file{--enable-encryption}, when you build @sc{cvs}. @item -z @var{gzip-level} -Set the compression level. Only has an effect on the -@sc{cvs} client. +@cindex Compression +@cindex Gzip +Set the compression level. +Valid levels are 1 (high speed, low compression) to +9 (low speed, high compression), or 0 to disable +compression (the default). +Only has an effect on the @sc{cvs} client. @end table @@ -7796,8 +7883,8 @@ slightly different way; @pxref{history options}). @c Headers Issue 4, Version 2 (September 1994), in the @c entry for getdate() on page 231 -@cindex timezone, in input -@cindex zone, time, in input +@cindex Timezone, in input +@cindex Zone, time, in input A wide variety of date formats are supported by @sc{cvs}. The most standard ones are ISO8601 (from the International Standards Organization) and the Internet @@ -8124,7 +8211,7 @@ There can be no space between @samp{-b} and its argument. @c work, as of 17 Sep 1997, but probably will once "cvs @c admin" is internal to CVS. -@cindex comment leader +@cindex Comment leader @item -c@var{string} Sets the comment leader to @var{string}. The comment leader is not used by current versions of @sc{cvs} or @@ -8360,13 +8447,7 @@ If @var{file} is omitted, obtain the text from standard input, terminated by end-of-file or by a line containing @samp{.} by itself. Prompt for the text if interaction is possible; see -@samp{-I}. Reading from standard input does not work -for client/server @sc{cvs} and may change in a future -release of @sc{cvs}. -@c Changing it to doeditor() is the most obvious thing -@c (but with a different syntax, as we would like to -@c phase out optional arguments). I don't know. I'm -@c tempted to say the whole concept is unnecessary. +@samp{-I}. @item -t-@var{string} Similar to @samp{-t@var{file}}. Write descriptive text @@ -8425,8 +8506,8 @@ this option has never done anything useful. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node checkout @appendixsec checkout---Check out sources for editing -@cindex Checkout (subcommand) -@cindex Co (subcommand) +@cindex checkout (subcommand) +@cindex co (subcommand) @itemize @bullet @item @@ -8658,7 +8739,7 @@ $ cvs checkout -D yesterday tc @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node commit @appendixsec commit---Check files into the repository -@cindex Commit (subcommand) +@cindex commit (subcommand) @itemize @bullet @item @@ -8858,7 +8939,7 @@ $ cvs checkout -r EXPR1 whatever_module @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node diff @appendixsec diff---Show differences between revisions -@cindex Diff (subcommand) +@cindex diff (subcommand) @itemize @bullet @item @@ -9038,7 +9119,7 @@ $ cvs diff -u | less @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node export @appendixsec export---Export sources from CVS, similar to checkout -@cindex Export (subcommand) +@cindex export (subcommand) @itemize @bullet @item @@ -9055,7 +9136,8 @@ the @sc{cvs} administrative directories. For example, you might use @code{export} to prepare source for shipment off-site. This command requires that you specify a date or tag (with @samp{-D} or @samp{-r}), so that you -can count on reproducing the source you ship to others. +can count on reproducing the source you ship to others +(and thus it always prunes empty directories). One often would like to use @samp{-kv} with @code{cvs export}. This causes any keywords to be @@ -9133,7 +9215,7 @@ Contributed examples are gratefully accepted. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node history @appendixsec history---Show status of files and users -@cindex History (subcommand) +@cindex history (subcommand) @itemize @bullet @item @@ -9186,7 +9268,7 @@ Report on a particular module. (You can meaningfully use @samp{-m} more than once on the command line.) @item -o -Report on checked-out modules. +Report on checked-out modules. This is the default report type. @item -T Report on all tags. @@ -9269,6 +9351,15 @@ Show data since @var{date}. This is slightly different from the normal use of @samp{-D @var{date}}, which selects the newest revision older than @var{date}. +@item -f @var{file} +Show data for a particular file +(you can specify several @samp{-f} options on the same command line). +This is equivalent to specifying the file on the command line. + +@item -n @var{module} +Show data for a particular module +(you can specify several @samp{-n} options on the same command line). + @item -p @var{repository} Show data for a particular source repository (you can specify several @samp{-p} options on the same command @@ -9288,6 +9379,10 @@ above in that it reads only the history file, not the @item -u @var{name} Show records for user @var{name}. + +@item -z @var{timezone} +Show times in the selected records using the specified +time zone instead of UTC. @end table @ignore @@ -9302,7 +9397,7 @@ Contributed examples will gratefully be accepted. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node import @appendixsec import---Import sources into CVS, using vendor branches -@cindex Import (subcommand) +@cindex import (subcommand) @c FIXME: This node is way too long for one which has subnodes. @@ -9444,8 +9539,8 @@ you will have to merge the changes. @item I @var{file} The file is being ignored (@pxref{cvsignore}). -@cindex symbolic link, importing -@cindex link, symbolic, importing +@cindex Symbolic link, importing +@cindex Link, symbolic, importing @c FIXME: also (somewhere else) probably @c should be documenting what happens if you "cvs add" @c a symbolic link. Also maybe what happens if @@ -9471,7 +9566,7 @@ See @ref{Tracking sources}, and @ref{From files}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node log @appendixsec log---Print out log information for files -@cindex Log (subcommand) +@cindex log (subcommand) @itemize @bullet @item @@ -9489,8 +9584,8 @@ determines the format of the output and the options, which are not quite in the style of the other @sc{cvs} commands. -@cindex timezone, in output -@cindex zone, time, in output +@cindex Timezone, in output +@cindex Zone, time, in output @c Kind of a funny place to document the timezone used @c in output from commands other than @code{log}. @c There is also more we need to say about this, @@ -9672,7 +9767,7 @@ Contributed examples are gratefully accepted. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node rdiff @appendixsec rdiff---'patch' format diffs between releases -@cindex Rdiff (subcommand) +@cindex rdiff (subcommand) @itemize @bullet @item @@ -9802,7 +9897,7 @@ File bar.h,v changed from revision 1.29.2.1 to 1.2 @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node release @appendixsec release---Indicate that a Module is no longer in use -@cindex Release (subcommand) +@cindex release (subcommand) @itemize @bullet @item @@ -9928,7 +10023,7 @@ $ @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node update @appendixsec update---Bring work tree in sync with repository -@cindex Update (subcommand) +@cindex update (subcommand) @itemize @bullet @item @@ -10010,6 +10105,11 @@ These special options are also available with Reset any sticky tags, dates, or @samp{-k} options. See @ref{Sticky tags}, for more information on sticky tags/dates. +@item -C +Overwrite locally modified files with clean copies from +the repository (the modified file is saved in +@file{.#@var{file}.@var{revision}}, however). + @item -d Create any directories that exist in the repository if they're missing from the working directory. Normally, @@ -10199,7 +10299,7 @@ options}. Print a help message. See @ref{Global options}. @item -l -Do not log in CVSROOT/history file. See @ref{Global +Do not log in @file{$CVSROOT/CVSROOT/history} file. See @ref{Global options}. @item -n @@ -10233,15 +10333,14 @@ Make new working files read-write. See @ref{Global options}. @item -x -Encrypt all communication (client only). See -@ref{Global options}. +Encrypt all communication (client only). +See @ref{Global options}. @item -z @var{gzip-level} +@cindex Compression +@cindex Gzip Set the compression level (client only). -@c FIXME: what are the valid values for gzip-level. -@c And shouldn't this be documented in at least a -@c little bit of detail somewhere? - +See @ref{Global options}. @end table Keyword expansion modes (@pxref{Substitution modes}): @@ -10884,6 +10983,11 @@ Bring work tree in sync with repository. See Reset any sticky tags/date/options. See @ref{Sticky tags} and @ref{Keyword substitution}. +@item -C +Overwrite locally modified files with clean copies from +the repository (the modified file is saved in +@file{.#@var{file}.@var{revision}}, however). + @item -D @var{date} Check out revisions as of @var{date} (is sticky). See @ref{Common options}. @@ -10929,6 +11033,11 @@ Checkout revision @var{tag} (is sticky). See @ref{Common options}. More wrappers. See @ref{import options}. @end table +@item version + +Display the version of @sc{cvs} being used. If the repository +is remote, display both the client and server versions. + @item watch [on|off|add|remove] [@var{options}] [@var{files}@dots{}] on/off: turn on/off read-only checkouts of files. See @@ -11045,6 +11154,8 @@ a file @file{sfile}. * Ampersand modules:: * Excluding directories:: Excluding directories from a module * Module options:: Regular and ampersand modules can take options +* Module program options:: How the modules ``program options'' programs + are run. @end menu @node Alias modules @@ -11218,7 +11329,7 @@ a future release of @sc{cvs}. @node Excluding directories @appendixsubsec Excluding directories -@cindex excluding directories, in modules file +@cindex Excluding directories, in modules file @cindex !, in modules file An alias module may exclude particular directories from @@ -11241,7 +11352,7 @@ the subdirectory @samp{first-dir/sdir}. @node Module options @appendixsubsec Module options -@cindex options, in modules file +@cindex Options, in modules file Either regular modules or ampersand modules can contain options, which supply additional information concerning @@ -11327,6 +11438,49 @@ this module. @c they are no good for security-type stuff. @end table +You should also see @pxref{Module program options} about how the +``program options'' programs are run. + +@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +@node Module program options +@appendixsubsec How the modules file ``program options'' programs are run +@cindex Modules file program options +@cindex -u, in modules file +@cindex -t, in modules file +@cindex -o, in modules file +@cindex -i, in modules file +@cindex -e, in modules file + +@noindent +For checkout, rtag, and export, the program is server-based, and as such the +following applies:- + +If using remote access methods (pserver, ext, etc.), +CVS will execute this program on the server from a temporary +directory. The path is searched for this program. + +If using ``local access'' (on a local or remote NFS filesystem, i.e. +repository set just to a path), +the program will be executed from the newly checked-out tree, if +found there, or alternatively searched for in the path if not. + +@noindent +The commit and update programs are locally-based, and are run as +follows:- + +The program is always run locally. One must +re-checkout the tree one is using if these options are updated in the +modules administrative file. The file CVS/Checkin.prog contains the +value of the option `-i' set in the modules file, and similarly for +the file CVS/Update.prog and `-u'. The program is always executed from +the top level of the checked-out copy on the client. Again, the program +is first searched for in the checked-out copy and then using the path. + +The programs are all run after the operation has effectively +completed. + + @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Wrappers @appendixsec The cvswrappers file @@ -11573,7 +11727,7 @@ all have a common format. The purpose of the files are described later on. The common syntax is described here. -@cindex regular expression syntax +@cindex Regular expression syntax Each line contains the following: @itemize @bullet @item @@ -11643,7 +11797,7 @@ repository is appended to the template, followed by the file names of any files involved in the commit (added, removed, and modified files). -@cindex exit status, of commitinfo +@cindex Exit status, of commitinfo The first line with a regular expression matching the directory within the repository will be used. If the command returns a non-zero exit status the commit will @@ -11661,7 +11815,7 @@ All occurrences of the name @samp{ALL} appearing as a regular expression are used in addition to the first matching regular expression or the name @samp{DEFAULT}. -Note: when @sc{CVS} is accessing a remote repository, +Note: when @sc{cvs} is accessing a remote repository, @file{commitinfo} will be run on the @emph{remote} (i.e., server) side, not the client side (@pxref{Remote repositories}). @@ -11686,7 +11840,7 @@ repositories}). @node verifymsg @appendixsec Verifying log messages @cindex verifymsg (admin file) -@cindex log message, verifying +@cindex Log message, verifying Once you have entered a log message, you can evaluate that message to check for specific content, such as @@ -11716,7 +11870,7 @@ If the repository name does not match any of the regular expressions in this file, the @samp{DEFAULT} line is used, if it is specified. -@cindex exit status, of verifymsg +@cindex Exit status, of verifymsg If the verification script exits with a non-zero exit status, the commit is aborted. @@ -11829,7 +11983,7 @@ line is used, if it is specified. If the edit script exits with a non-zero exit status, the commit is aborted. -Note: when @sc{CVS} is accessing a remote repository, +Note: when @sc{cvs} is accessing a remote repository, or when the @samp{-m} or @samp{-F} options to @code{cvs commit} are used, @file{editinfo} will not be consulted. There is no good workaround for this; use @@ -11950,22 +12104,22 @@ For example, some valid format strings are @samp{%}, The output will be a string of tokens separated by spaces. For backwards compatibility, the first -token will be the repository name. The rest of the +token will be the repository subdirectory. The rest of the tokens will be comma-delimited lists of the information requested in the format string. For example, if -@samp{/u/src/master} is the repository, @samp{%@{sVv@}} +@samp{/u/src/master/yoyodyne/tc} is the repository, @samp{%@{sVv@}} is the format string, and three files (@t{ChangeLog}, @t{Makefile}, @t{foo.c}) were modified, the output might be: @example -/u/src/master ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13 +yoyodyne/tc ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13 @end example As another example, @samp{%@{@}} means that only the name of the repository will be generated. -Note: when @sc{CVS} is accessing a remote repository, +Note: when @sc{cvs} is accessing a remote repository, @file{loginfo} will be run on the @emph{remote} (i.e., server) side, not the client side (@pxref{Remote repositories}). @@ -12017,9 +12171,9 @@ like this: @c What other index entries? It seems like @c people might want to use a lot of different @c words for this functionality. -@cindex keeping a checked out copy -@cindex checked out copy, keeping -@cindex web pages, maintaining with CVS +@cindex Keeping a checked out copy +@cindex Checked out copy, keeping +@cindex Web pages, maintaining with CVS It is often useful to maintain a directory tree which contains files which correspond to the latest version @@ -12107,7 +12261,7 @@ template. @xref{verifymsg}, for an example @file{rcsinfo} file. -When @sc{CVS} is accessing a remote repository, +When @sc{cvs} is accessing a remote repository, the contents of @file{rcsinfo} at the time a directory is first checked out will specify a template which does not then change. If you edit @file{rcsinfo} or its @@ -12290,6 +12444,8 @@ format changes with future releases of @sc{cvs}. @node Variables @appendixsec Expansions in administrative files +@cindex Internal variables +@cindex Variables Sometimes in writing an administrative file, you might want the file to be able to know various things based @@ -12321,11 +12477,13 @@ internal variables are: @table @code @item CVSROOT +@cindex CVSROOT, internal variable This is the value of the @sc{cvs} root in use. @xref{Repository}, for a description of the various ways to specify this. @item RCSBIN +@cindex RCSBIN, internal variable In @sc{cvs} 1.9.18 and older, this specified the directory where @sc{cvs} was looking for @sc{rcs} programs. Because @sc{cvs} no longer runs @sc{rcs} @@ -12333,20 +12491,29 @@ programs, specifying this internal variable is now an error. @item CVSEDITOR +@cindex CVSEDITOR, internal variable @itemx VISUAL +@cindex VISUAL, internal variable @itemx EDITOR +@cindex EDITOR, internal variable These all expand to the same value, which is the editor that @sc{cvs} is using. @xref{Global options}, for how to specify this. @item USER +@cindex USER, internal variable Username of the user running @sc{cvs} (on the @sc{cvs} server machine). +When using pserver, this is the user specified in the repository +specification which need not be the same as the username the +server is running as (@pxref{Password authentication server}). @end table If you want to pass a value to the administrative files which the user who is running @sc{cvs} can specify, -use a user variable. To expand a user variable, the +use a user variable. +@cindex User variables +To expand a user variable, the administrative file contains @code{$@{=@var{variable}@}}. To set a user variable, specify the global option @samp{-s} to @sc{cvs}, with @@ -12413,6 +12580,7 @@ pserver users must exist in @file{CVSROOT/passwd}. The default is @samp{yes}. For more on pserver, see @ref{Password authenticated}. +@ignore @cindex PreservePermissions, in CVSROOT/config @item PreservePermissions=@var{value} Enable support for saving special device files, @@ -12420,6 +12588,7 @@ symbolic links, file permissions and ownerships in the repository. The default value is @samp{no}. @xref{Special Files}, for the full implications of using this keyword. +@end ignore @cindex TopLevelAdmin, in CVSROOT/config @item TopLevelAdmin=@var{value} @@ -12432,10 +12601,10 @@ The default value is @samp{no}. This option is useful if you find yourself performing many commands at the top level of your working directory, rather than in one of the checked out -subdirectories. The @samp{CVS} directory created there -will mean you don't have to specify @samp{CVSROOT} for +subdirectories. The @file{CVS} directory created there +will mean you don't have to specify @code{CVSROOT} for each command. It also provides a place for the -@samp{CVS/Template} file (@pxref{Working directory +@file{CVS/Template} file (@pxref{Working directory storage}). @cindex LockDir, in CVSROOT/config @@ -12460,6 +12629,14 @@ put them another place, and therefore the repository could become corrupted. CVS 1.10 does not support LockDir but it will print a warning if run on a repository with LockDir enabled. + +@cindex LogHistory, in CVSROOT/config +@item LogHistory=@var{value} +Control what is logged to the @file{CVSROOT/history} file. +Default of @samp{TOFEWGCMAR} (or simply @samp{all}) will log +all transactions. Any subset of the default is +legal. (For example, to only log transactions that modify the +@file{*,v} files, use @samp{LogHistory=TMAR}.) @end table @c --------------------------------------------------------------------- @@ -12483,7 +12660,7 @@ A whitespace-separated list of file name patterns that @sc{cvs} should treat as wrappers. @xref{Wrappers}. @cindex CVSREAD, environment variable -@cindex read-only files, and CVSREAD +@cindex Read-only files, and CVSREAD @item $CVSREAD If this is set, @code{checkout} and @code{update} will try hard to make the files in your working directory @@ -12528,10 +12705,10 @@ programs it uses. @item $HOMEDRIVE Used to locate the directory where the @file{.cvsrc} file, and other such files, are searched. On Unix, CVS -just checks for HOME. On Windows NT, the system will -set HOMEDRIVE, for example to @samp{d:} and HOMEPATH, +just checks for @code{HOME}. On Windows NT, the system will +set @code{HOMEDRIVE}, for example to @samp{d:} and @code{HOMEPATH}, for example to @file{\joe}. On Windows 95, you'll -probably need to set HOMEDRIVE and HOMEPATH yourself. +probably need to set @code{HOMEDRIVE} and @code{HOMEPATH} yourself. @c We are being vague about whether HOME works on @c Windows; see long comment in windows-NT/filesubr.c. @@ -12567,9 +12744,9 @@ the server side. (Currently not used for Unix clients). @cindex CVS_CLIENT_LOG, environment variable @item $CVS_CLIENT_LOG Used for debugging only in client-server -mode. If set, everything send to the server is logged +mode. If set, everything sent to the server is logged into @file{@code{$CVS_CLIENT_LOG}.in} and everything -send from the server is logged into +sent from the server is logged into @file{@code{$CVS_CLIENT_LOG}.out}. @cindex CVS_SERVER_SLEEP, environment variable @@ -12585,7 +12762,7 @@ For @sc{cvs} 1.10 and older, setting this variable prevents @sc{cvs} from overwriting the @file{CVS/Root} file when the @samp{-d} global option is specified. Later versions of @sc{cvs} do not rewrite -@file{CVS/Root}, so CVS_IGNORE_REMOTE_ROOT has no +@file{CVS/Root}, so @code{CVS_IGNORE_REMOTE_ROOT} has no effect. @cindex COMSPEC, environment variable @@ -12599,7 +12776,7 @@ command interpreter and defaults to @sc{cmd.exe}. @itemx $TMP @cindex TEMP, environment variable @itemx $TEMP -@cindex temporary files, location of +@cindex Temporary files, location of @c This is quite nuts. We don't talk about tempnam @c or mkstemp which we sometimes use. The discussion @c of "Global options" is semi-incoherent. @@ -12628,8 +12805,8 @@ if your server and client are both running @sc{cvs} @appendix Compatibility between CVS Versions @cindex CVS, versions of -@cindex versions, of CVS -@cindex compatibility, between CVS versions +@cindex Versions, of CVS +@cindex Compatibility, between CVS versions @c We don't mention versions older than CVS 1.3 @c on the theory that it would clutter it up for the vast @c majority of people, who don't have anything that old. @@ -12760,8 +12937,8 @@ This is a generic response when trying to connect to a pserver server which chooses not to provide a specific reason for denying authorization. Check that the username and password specified are correct and -that the CVSROOT specified is allowed by --allow-root -in inetd.conf. See @ref{Password authenticated}. +that the @code{CVSROOT} specified is allowed by @samp{--allow-root} +in @file{inetd.conf}. See @ref{Password authenticated}. @item @var{file}:@var{line}: Assertion '@var{text}' failed The exact format of this message may vary depending on @@ -12880,7 +13057,7 @@ bug (@pxref{BUGS}). @item cvs [login aborted]: could not find out home directory This means that you need to set the environment variables that CVS uses to locate your home directory. -See the discussion of HOME, HOMEDRIVE, and HOMEPATH in +See the discussion of @code{HOME}, @code{HOMEDRIVE}, and @code{HOMEPATH} in @ref{Environment variables}. @item cvs update: could not merge revision @var{rev} of @var{file}: No such file or directory @@ -13011,8 +13188,9 @@ other than CVS. If not, it indicates a CVS bug This message will be followed by a usage message for @sc{rcs}. It means that you have an old version of @sc{rcs} (probably supplied with your operating -system). CVS only works with @sc{rcs} version 5 and -later. +system), as well as an old version of @sc{cvs}. +@sc{cvs} 1.9.18 and earlier only work with @sc{rcs} version 5 and +later; current versions of @sc{cvs} do not run @sc{rcs} programs. @c For more information on installing @sc{cvs}, see @c (FIXME: where? it depends on whether you are @c getting binaries or sources or what). @@ -13056,6 +13234,10 @@ find the log file which inetd writes your system). For details, see @ref{Connection}, and @ref{Password authentication server}. +@item cvs server: cannot open /root/.cvsignore: Permission denied +@itemx cvs [server aborted]: can't chdir(/root): Permission denied +See @ref{Connection}. + @item cvs commit: Up-to-date check failed for `@var{file}' This means that someone else has committed a change to that file since the last time that you did a @code{cvs @@ -13063,9 +13245,9 @@ update}. So before proceeding with your @code{cvs commit} you need to @code{cvs update}. CVS will merge the changes that you made and the changes that the other person made. If it does not detect any conflicts -it will report @samp{M cacErrCodes.h} and you are ready +it will report @samp{M @var{file}} and you are ready to @code{cvs commit}. If it detects conflicts it will -print a message saying so, will report @samp{C cacErrCodes.h}, +print a message saying so, will report @samp{C @var{file}}, and you need to manually resolve the conflict. For more details on this process see @ref{Conflicts example}. @@ -13105,11 +13287,11 @@ This is a normal message, not an error. See @ref{Concurrency}, for more details. @item cvs commit: warning: editor session failed -@cindex exit status, of editor +@cindex Exit status, of editor This means that the editor which @sc{cvs} is using exits with a nonzero exit status. Some versions of vi will do this even when there was not a problem editing the file. If so, point the -@sc{CVSEDITOR} environment variable to a small script +@code{CVSEDITOR} environment variable to a small script such as: @example @@ -13166,7 +13348,7 @@ cvs [pserver aborted]: bad auth protocol start: foo @end example If this fails to work, then make sure inetd is working -right. Change the invocation in inetd.conf to run the +right. Change the invocation in @file{inetd.conf} to run the echo program instead of cvs. For example: @example @@ -13189,6 +13371,29 @@ to address this problem. Another good debugging tool is the @samp{-d} (debugging) option to inetd. Consult your system documentation for more information. + +If you seem to be connecting but get errors like: + +@example +cvs server: cannot open /root/.cvsignore: Permission denied +cvs [server aborted]: can't chdir(/root): Permission denied +@end example + +then either you haven't specified @samp{-f} in @file{inetd.conf} +or your system is setting the @code{HOME} environment variable +for programs being run by inetd. In the latter case, you can either +have inetd run a shell script that unsets @code{HOME} and then runs +@sc{cvs}, or you can use @code{env} to run @sc{cvs} with a pristine +environment. + +If you can connect successfully for a while but then can't, +you've probably hit inetd's rate limit. +(If inetd receives too many requests for the same service +in a short period of time, it assumes that something is wrong +and temporarily disables the service.) +Check your inetd documentation to find out how to adjust the +rate limit (some versions of inetd have a single rate limit, +others allow you to set the limit for each service separately.) @end table @node Other problems @@ -13288,7 +13493,6 @@ report, there are companies which will do that for a fee. Two such companies are: @cindex Signum Support -@cindex Cyclic Software @cindex Support, getting CVS support @example Signum Support AB @@ -13300,10 +13504,6 @@ Phone: +46 (0)13 - 21 46 00 Fax: +46 (0)13 - 21 47 00 http://www.signum.se/ -Cyclic Software -United States of America -http://www.cyclic.com/ -info@@cyclic.com @end example @item @@ -13327,7 +13527,7 @@ There may be resources on the net which can help. Two good places to start are: @example -http://www.cyclic.com +http://www.cvshome.org http://www.loria.fr/~molli/cvs-index.html @end example |