0f8d2e61ad
- Use MASTER_SITE_GNU as MASTER_SITES PR: ports/104035 Submitted by: KIMURA Yasuhiro <yasu@utahime.org> Approved by: portmgr
4062 lines
117 KiB
Text
4062 lines
117 KiB
Text
Index: FREEBSD-Xlist
|
||
diff -u /dev/null src/contrib/cvs/FREEBSD-Xlist:1.1
|
||
--- /dev/null Fri Oct 20 15:17:33 2006
|
||
+++ FREEBSD-Xlist Thu Jun 10 05:14:53 2004
|
||
@@ -0,0 +1,21 @@
|
||
+FreeBSD: src/contrib/cvs/FREEBSD-Xlist,v 1.1 2004/06/09 20:14:53 des Exp $
|
||
+
|
||
+*/*.com
|
||
+*/*.dep
|
||
+*/*.dsp
|
||
+*/*.mak
|
||
+*/.cvsignore
|
||
+.cvsignore
|
||
+README.VMS
|
||
+build.com
|
||
+cvs.spec*
|
||
+cvsnt.*
|
||
+doc/*.info*
|
||
+doc/*.ps
|
||
+doc/texinfo.tex
|
||
+emx
|
||
+lib/getdate.c
|
||
+os2
|
||
+vms
|
||
+windows-NT
|
||
+zlib
|
||
Index: FREEBSD-upgrade
|
||
diff -u /dev/null src/contrib/cvs/FREEBSD-upgrade:1.11
|
||
--- /dev/null Fri Oct 20 15:17:33 2006
|
||
+++ FREEBSD-upgrade Thu Jun 10 05:51:26 2004
|
||
@@ -0,0 +1,38 @@
|
||
+FreeBSD: src/contrib/cvs/FREEBSD-upgrade,v 1.11 2004/06/09 20:51:26 des Exp $
|
||
+
|
||
+MAINTAINER= peter@FreeBSD.org
|
||
+
|
||
+This directory contains the virgin CVS source on the vendor branch. Do
|
||
+not under any circumstances commit new versions onto the mainline, new
|
||
+versions or official-patch versions must be imported.
|
||
+
|
||
+To prepare a new cvs dist for import, extract it into a fresh directory;
|
||
+then delete the files and directories listed in FREEBSD-Xlist.
|
||
+
|
||
+CVS is imported from its top level directory something like this:
|
||
+ cvs -n import src/contrib/cvs CVSHOME v<version>
|
||
+
|
||
+The -n option is "don't do anything" so you can see what is about to happen
|
||
+first. Remove it when it looks ok.
|
||
+
|
||
+The initial import was done with:
|
||
+ cvs import src/contrib/cvs CVSHOME v1_8_1
|
||
+
|
||
+When new versions are imported, cvs will give instructions on how to merge
|
||
+the local and vendor changes when/if conflicts arise.
|
||
+
|
||
+The developers can be reached at: <devel-cvs@cyclic.com>. Local changes
|
||
+that are suitable for public consumption should be submitted for inclusion
|
||
+in future releases.
|
||
+
|
||
+peter@freebsd.org - 20 Aug 1996
|
||
+
|
||
+Current local changes:
|
||
+ - CVS_LOCAL_BRANCH_NUM environment variable support for choosing the
|
||
+ magic branch number. (for CVSup local-commit support)
|
||
+ - CVSREADONLYFS environment variable and global option -R to enable
|
||
+ no-locking readonly mode (eg: cvs repo is a cdrom or mirror)
|
||
+ - the verify message script can edit the submitted log message.
|
||
+ - CVSROOT/options file
|
||
+ - Variable keyword expansion controls including custom keywords.
|
||
+ - $ CVSHeader$ keyword - like Header, but with $CVSROOT stripped off.
|
||
Index: contrib/sccs2rcs.in
|
||
diff -u src/contrib/cvs/contrib/sccs2rcs.in:1.1.1.3 src/contrib/cvs/contrib/sccs2rcs.in:1.5
|
||
--- src/contrib/cvs/contrib/sccs2rcs.in:1.1.1.3 Thu Apr 15 10:01:55 2004
|
||
+++ contrib/sccs2rcs.in Thu Apr 15 10:17:25 2004
|
||
@@ -48,6 +48,7 @@
|
||
# -Allan G. Schrum schrum@ofsoptics.com agschrum@mindspring.com
|
||
# Fri Sep 26 10:40:40 EDT 2003
|
||
#
|
||
+# FreeBSD: src/contrib/cvs/contrib/sccs2rcs.in,v 1.5 2004/04/15 01:17:25 peter Exp $
|
||
|
||
|
||
#we'll assume the user set up the path correctly
|
||
Index: diff/diagmeet.note
|
||
diff -u src/contrib/cvs/diff/diagmeet.note:1.1.1.1 src/contrib/cvs/diff/diagmeet.note:removed
|
||
--- src/contrib/cvs/diff/diagmeet.note:1.1.1.1 Mon Jan 26 12:09:49 1998
|
||
+++ diff/diagmeet.note Fri Oct 20 15:17:34 2006
|
||
@@ -1,71 +0,0 @@
|
||
-Here is a comparison matrix which shows a case in which
|
||
-it is possible for the forward and backward scan in `diag'
|
||
-to meet along a nonzero length of diagonal simultaneous
|
||
-(so that bdiag[d] and fdiag[d] are not equal)
|
||
-even though there is no snake on that diagonal at the meeting point.
|
||
-
|
||
-
|
||
- 85 1 1 1 159 1 1 17
|
||
- 1 2 3 4
|
||
-60
|
||
- 1 2
|
||
-1
|
||
- 2 2 3 4
|
||
-71
|
||
- 3 3 4 5
|
||
-85
|
||
- 4 3 4 5
|
||
-17
|
||
- 5 4 5
|
||
-1
|
||
- 6 4 5 6
|
||
-183
|
||
- 7 5 6 7
|
||
-10
|
||
- 8 6 7
|
||
-1
|
||
- 9 6 7 8
|
||
-12
|
||
- 7 8 9 10
|
||
-13
|
||
- 10 8 9 10
|
||
-14
|
||
- 10 9 10
|
||
-17
|
||
- 10 10
|
||
-1
|
||
- 10 9 10
|
||
-1
|
||
- 8 10 10 10
|
||
-183
|
||
- 8 7 9 9 9
|
||
-10
|
||
- 7 6 8 9 8 8
|
||
-1
|
||
- 6 5 7 7
|
||
-1
|
||
- 5 6 6
|
||
-1
|
||
- 5 5 5
|
||
-50
|
||
- 5 4 4 4
|
||
-1
|
||
- 4 3 3
|
||
-85
|
||
- 5 4 3 2 2
|
||
-1
|
||
- 2 1
|
||
-17
|
||
- 5 4 3 2 1 1
|
||
-1
|
||
- 1 0
|
||
- 85 1 1 1 159 1 1 17
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
Index: diff/diff3.c
|
||
diff -u src/contrib/cvs/diff/diff3.c:1.1.1.7 src/contrib/cvs/diff/diff3.c:1.6
|
||
--- src/contrib/cvs/diff/diff3.c:1.1.1.7 Thu Apr 15 10:01:56 2004
|
||
+++ diff/diff3.c Thu Apr 15 10:17:26 2004
|
||
@@ -12,6 +12,9 @@
|
||
GNU General Public License for more details.
|
||
|
||
*/
|
||
+/*
|
||
+ * FreeBSD: src/contrib/cvs/diff/diff3.c,v 1.6 2004/04/15 01:17:26 peter Exp $
|
||
+ */
|
||
|
||
/* Written by Randy Smith */
|
||
/* Librarification by Tim Pierce */
|
||
Index: lib/md5.h
|
||
diff -u src/contrib/cvs/lib/md5.h:1.1.1.3 src/contrib/cvs/lib/md5.h:1.2
|
||
--- src/contrib/cvs/lib/md5.h:1.1.1.3 Sat Dec 11 21:22:56 1999
|
||
+++ lib/md5.h Sun Dec 12 00:10:02 1999
|
||
@@ -1,8 +1,21 @@
|
||
/* See md5.c for explanation and copyright information. */
|
||
|
||
+/*
|
||
+ * FreeBSD: src/contrib/cvs/lib/md5.h,v 1.2 1999/12/11 15:10:02 peter Exp $
|
||
+ */
|
||
+
|
||
#ifndef MD5_H
|
||
#define MD5_H
|
||
|
||
+#ifdef __FreeBSD__
|
||
+#define cvs_MD5Context MD5Context
|
||
+#define cvs_MD5Init MD5Init
|
||
+#define cvs_MD5Update MD5Update
|
||
+#define cvs_MD5Final MD5Final
|
||
+#define cvs_MD5Transform MD5Transform
|
||
+#include <sys/md5.h>
|
||
+#else
|
||
+
|
||
/* Unlike previous versions of this code, uint32 need not be exactly
|
||
32 bits, merely 32 bits or more. Choosing a data type which is 32
|
||
bits instead of 64 is not important; speed is considerably more
|
||
@@ -23,4 +36,6 @@
|
||
struct cvs_MD5Context *context));
|
||
void cvs_MD5Transform PROTO ((cvs_uint32 buf[4], const unsigned char in[64]));
|
||
|
||
+#endif
|
||
+
|
||
#endif /* !MD5_H */
|
||
Index: man/cvs.1
|
||
diff -u /dev/null src/contrib/cvs/man/cvs.1:1.22
|
||
--- /dev/null Fri Oct 20 15:17:35 2006
|
||
+++ man/cvs.1 Thu Jul 28 22:53:45 2005
|
||
@@ -0,0 +1,2203 @@
|
||
+.\" FreeBSD: src/contrib/cvs/man/cvs.1,v 1.22 2005/07/28 13:53:45 keramida Exp $
|
||
+.de Id
|
||
+.ds Rv \\$3
|
||
+.ds Dt \\$4
|
||
+..
|
||
+.TH CVS 1 "\*(Dt"
|
||
+.\" Full space in nroff; half space in troff
|
||
+.de SP
|
||
+.if n .sp
|
||
+.if t .sp .5
|
||
+..
|
||
+.\" quoted command
|
||
+.de `
|
||
+.RB ` "\|\\$1\|" '\\$2
|
||
+..
|
||
+.SH "NAME"
|
||
+cvs \- Concurrent Versions System
|
||
+.SH "SYNOPSIS"
|
||
+.TP
|
||
+\fBcvs\fP [ \fIcvs_options\fP ]
|
||
+.I cvs_command
|
||
+[
|
||
+.I command_options
|
||
+] [
|
||
+.I command_args
|
||
+]
|
||
+.SH "NOTE"
|
||
+This manpage is a summary of some of the features of
|
||
+.B cvs
|
||
+but it may no longer be kept up-to-date.
|
||
+For more current and in-depth documentation, please consult the
|
||
+Cederqvist manual (via the
|
||
+.B info cvs
|
||
+command or otherwise,
|
||
+as described in the SEE ALSO section of this manpage).
|
||
+.SH "DESCRIPTION"
|
||
+.IX "revision control system" "\fLcvs\fR"
|
||
+.IX cvs "" "\fLcvs\fP \- concurrent versions system"
|
||
+.IX "concurrent versions system \- \fLcvs\fP"
|
||
+.IX "release control system" "cvs command" "" "\fLcvs\fP \- concurrent versions system"
|
||
+.IX "source control system" "cvs command" "" "\fLcvs\fP \- concurrent versions system"
|
||
+.IX revisions "cvs command" "" "\fLcvs\fP \- source control"
|
||
+CVS is a version control system, which allows you to keep old versions
|
||
+of files (usually source code), keep a log of who, when, and why
|
||
+changes occurred, etc., like RCS or SCCS. Unlike the simpler systems,
|
||
+CVS does not just operate on one file at a time or one directory at a
|
||
+time, but operates on hierarchical collections of directories
|
||
+consisting of version controlled files. CVS helps to manage releases
|
||
+and to control the concurrent editing of source files among multiple
|
||
+authors. CVS allows triggers to enable/log/control various
|
||
+operations and works well over a wide area network.
|
||
+.SP
|
||
+.B cvs
|
||
+keeps a single copy of the master sources.
|
||
+This copy is called the source ``repository''; it contains all the
|
||
+information to permit extracting previous software releases at any
|
||
+time based on either a symbolic revision tag, or a date in the past.
|
||
+.SH "ESSENTIAL COMMANDS"
|
||
+.B cvs
|
||
+provides a rich variety of commands (\fIcvs_command\fP in the
|
||
+Synopsis), each of which often has a wealth of options, to satisfy the
|
||
+many needs of source management in distributed environments. However,
|
||
+you don't have to master every detail to do useful work with
|
||
+.BR cvs ;
|
||
+in fact, five commands are sufficient to use (and contribute to)
|
||
+the source repository.
|
||
+.TP
|
||
+\fBcvs checkout\fP \fImodules\fP\|.\|.\|.
|
||
+A necessary preliminary for most \fBcvs\fP work: creates your private
|
||
+copy of the source for \fImodules\fP (named collections of source; you
|
||
+can also use a path relative to the source repository here). You can
|
||
+work with this copy without interfering with others' work. At least
|
||
+one subdirectory level is always created.
|
||
+.TP
|
||
+.B cvs update
|
||
+Execute this command from \fIwithin\fP your private source
|
||
+directory when you wish to update your copies of source files from
|
||
+changes that other developers have made to the source in the
|
||
+repository.
|
||
+.TP
|
||
+\fBcvs add\fP \fIfile\fP\|.\|.\|.
|
||
+Use this command to enroll new files in \fBcvs\fP records of your
|
||
+working directory. The files will be added to the repository the next
|
||
+time you run
|
||
+.` "cvs commit".
|
||
+Note:
|
||
+You should use the
|
||
+.` "cvs import"
|
||
+command to bootstrap new sources into the source repository.
|
||
+.` "cvs add"
|
||
+is only used for new files to an already checked-out module.
|
||
+.TP
|
||
+\fBcvs remove\fP \fIfile\fP\|.\|.\|.
|
||
+Use this command (after erasing any files listed) to declare that you
|
||
+wish to eliminate files from the repository. The removal does not
|
||
+affect others until you run
|
||
+.` "cvs commit".
|
||
+.TP
|
||
+\fBcvs commit\fP \fIfile\fP\|.\|.\|.
|
||
+Use this command when you wish to ``publish'' your changes to other
|
||
+developers, by incorporating them in the source repository.
|
||
+.SH "OPTIONS"
|
||
+The
|
||
+.B cvs
|
||
+command line can include
|
||
+.IR cvs_options ,
|
||
+which apply to the overall
|
||
+.B cvs
|
||
+program; a
|
||
+.IR cvs_command ,
|
||
+which specifies a particular action on the source repository; and
|
||
+.I command_options
|
||
+and
|
||
+.I command_arguments
|
||
+to fully specify what the
|
||
+.I cvs_command
|
||
+will do.
|
||
+.SP
|
||
+.I Warning:
|
||
+you must be careful of precisely where you place options relative to the
|
||
+.IR cvs_command .
|
||
+The same option can mean different things depending on whether it
|
||
+is in the
|
||
+.I cvs_options
|
||
+position (to the left of a
|
||
+.B cvs
|
||
+command) or in the
|
||
+.I command_options
|
||
+position (to the right of a
|
||
+.B cvs
|
||
+command).
|
||
+.SP
|
||
+There are only two situations where you may omit
|
||
+.IR cvs_command :
|
||
+.` "cvs \-H"
|
||
+or
|
||
+.` "cvs --help"
|
||
+elicits a list of available commands, and
|
||
+.` "cvs \-v"
|
||
+or
|
||
+.` "cvs --version"
|
||
+displays version information on \fBcvs\fP itself.
|
||
+.SP
|
||
+.SH "CVS OPTIONS"
|
||
+As of release 1.6,
|
||
+.B cvs
|
||
+supports
|
||
+.SM GNU
|
||
+style long options as well as short options. Only
|
||
+a few long options are currently supported, these are listed in
|
||
+brackets after the short options whose functions they duplicate.
|
||
+.SP
|
||
+Use these options to control the overall
|
||
+.B cvs
|
||
+program:
|
||
+.TP
|
||
+.B \-H [ --help ]
|
||
+Display usage information about the specified
|
||
+.I cvs_command
|
||
+(but do not actually execute the command). If you don't specify a
|
||
+command name,
|
||
+.` "cvs \-H"
|
||
+displays a summary of all the commands available.
|
||
+.TP
|
||
+.B \-Q
|
||
+Causes the command to be
|
||
+.I really
|
||
+quiet; the command will generate output only for serious problems.
|
||
+.TP
|
||
+.B \-q
|
||
+Causes the command to be somewhat quiet; informational messages, such
|
||
+as reports of recursion through subdirectories, are suppressed.
|
||
+.TP
|
||
+\fB\-b\fP \fIbindir\fP
|
||
+Use
|
||
+.I bindir
|
||
+as the directory where
|
||
+.SM RCS
|
||
+programs are located (CVS 1.9 and older).
|
||
+Overrides the setting of the
|
||
+.SM RCSBIN
|
||
+environment variable.
|
||
+This value should be specified as an absolute pathname.
|
||
+.TP
|
||
+\fB\-d\fP \fICVS_root_directory\fP
|
||
+Use
|
||
+.I CVS_root_directory
|
||
+as the root directory pathname of the master
|
||
+source repository.
|
||
+Overrides the setting of the
|
||
+.SM CVSROOT
|
||
+environment variable.
|
||
+This value should be specified as an absolute pathname.
|
||
+.TP
|
||
+\fB\-e\fP \fIeditor\fP
|
||
+Use
|
||
+.I editor
|
||
+to enter revision log information.
|
||
+Overrides the setting of the
|
||
+.SM CVSEDITOR\c
|
||
+,
|
||
+.SM VISUAL\c
|
||
+, and
|
||
+.SM EDITOR
|
||
+environment variables.
|
||
+.TP
|
||
+.B \-f
|
||
+Do not read the
|
||
+.B cvs
|
||
+startup file (\fI~/.cvsrc\fP).
|
||
+.TP
|
||
+.B \-n
|
||
+Do not change any files. Attempt to execute the
|
||
+.IR cvs_command ,
|
||
+but only to issue reports; do not remove, update, or merge any
|
||
+existing files, or create any new files.
|
||
+.TP
|
||
+.B \-t
|
||
+Trace program execution; display messages showing the steps of
|
||
+.B cvs
|
||
+activity. Particularly useful with
|
||
+.B \-n
|
||
+to explore the potential impact of an unfamiliar command.
|
||
+.TP
|
||
+.B \-r
|
||
+Makes new working files read-only.
|
||
+Same effect as if the
|
||
+.SM CVSREAD
|
||
+environment variable is set.
|
||
+.TP
|
||
+.B \-R
|
||
+Turns on read-only repository mode. This allows one to check out from a
|
||
+read-only repository, such as within an anoncvs server, or from a CDROM
|
||
+repository.
|
||
+Same effect as if the
|
||
+.SM CVSREADONLYFS
|
||
+environment variable is set. Using
|
||
+.B \-R
|
||
+can also considerably speed up checkout's over NFS.
|
||
+.TP
|
||
+.B \-v [ --version ]
|
||
+Displays version and copyright information for
|
||
+.BR cvs .
|
||
+.TP
|
||
+.B \-w
|
||
+Makes new working files read-write (default).
|
||
+Overrides the setting of the
|
||
+.SM CVSREAD
|
||
+environment variable.
|
||
+.TP
|
||
+.B \-g
|
||
+Forces group-write perms on working files. This option is typically
|
||
+used when you have multiple users sharing a single checked out source
|
||
+tree, allowing them to operate their shells with a less dangerous umask.
|
||
+To use this feature, create a directory to hold the checked-out source
|
||
+tree, set it to a private group, and set up the directory such that
|
||
+files created under it inherit the group id of the directory. This occurs
|
||
+automatically with FreeBSD. With SysV you must typically set the SGID bit
|
||
+on the directory. The users who are to share the checked out tree must
|
||
+be placed in that group. Note that the sharing of a single checked-out
|
||
+source tree is very different from giving several users access to a common
|
||
+CVS repository. Access to a common CVS repository already maintains shared
|
||
+group-write perms and does not require this option.
|
||
+
|
||
+To use the option transparently, simply place the line 'cvs -g' in your
|
||
+~/.cvsrc file. Doing this is not recommended unless you firewall all your
|
||
+source checkouts within a private group or within a private mode 0700
|
||
+directory.
|
||
+.TP
|
||
+.B \-x
|
||
+Encrypt all communication between the client and the server. As of
|
||
+this writing, this is only implemented when using a Kerberos
|
||
+connection.
|
||
+.TP
|
||
+\fB\-z\fP \fIcompression\-level\fP
|
||
+When transferring files across the network use
|
||
+.B gzip
|
||
+with compression level \fIcompression\-level\fP to compress and
|
||
+de-compress data as it is transferred. Requires the presence of
|
||
+the
|
||
+.SM GNU
|
||
+.B gzip
|
||
+program in the current search path at both ends of the link.
|
||
+.SH "USAGE"
|
||
+Except when requesting general help with
|
||
+.` "cvs \-H",
|
||
+you must specify a
|
||
+.I cvs_command
|
||
+to
|
||
+.B cvs
|
||
+to select a specific release control function to perform.
|
||
+Each
|
||
+.B cvs
|
||
+command accepts its own collection of options and arguments.
|
||
+However, many options are available across several commands.
|
||
+You can display a usage summary for each command by specifying the
|
||
+.B \-H
|
||
+option with the command.
|
||
+.SH "CVS STARTUP FILE"
|
||
+Normally, when CVS starts up, it reads the
|
||
+.I .cvsrc
|
||
+file from the home directory of the user reading it. This startup
|
||
+procedure can be turned off with the
|
||
+.B \-f
|
||
+flag.
|
||
+.SP
|
||
+The
|
||
+.I .cvsrc
|
||
+file lists CVS commands with a list of arguments, one command per
|
||
+line. For example, the following line in \fI.cvsrc\fP:
|
||
+.SP
|
||
+diff \-c
|
||
+.SP
|
||
+will mean that the
|
||
+.` "cvs diff"
|
||
+command will always be passed the \-c option in addition to any
|
||
+other options that are specified in the command line (in this case
|
||
+it will have the effect of producing context sensitive diffs for
|
||
+all executions of
|
||
+.` "cvs diff"
|
||
+).
|
||
+.SP
|
||
+Global options are specified using the \fBcvs\fP keyword. For example,
|
||
+the following:
|
||
+.SP
|
||
+cvs \-q
|
||
+.SP
|
||
+will mean that all
|
||
+.` "cvs"
|
||
+commands will behave as thought he \-q global option had been supplied.
|
||
+.SH "CVS COMMAND SUMMARY"
|
||
+Here are brief descriptions of all the
|
||
+.B cvs
|
||
+commands:
|
||
+.TP
|
||
+.B add
|
||
+Add a new file or directory to the repository, pending a
|
||
+.` "cvs commit"
|
||
+on the same file.
|
||
+Can only be done from within sources created by a previous
|
||
+.` "cvs checkout"
|
||
+invocation.
|
||
+Use
|
||
+.` "cvs import"
|
||
+to place whole new hierarchies of sources under
|
||
+.B cvs
|
||
+control.
|
||
+(Does not directly affect repository; changes
|
||
+working directory.)
|
||
+.TP
|
||
+.B admin
|
||
+Execute
|
||
+control functions on the source repository. (Changes
|
||
+repository directly; uses working directory without changing it.)
|
||
+.TP
|
||
+.B checkout
|
||
+Make a working directory of source files for editing. (Creates or changes
|
||
+working directory.)
|
||
+.TP
|
||
+.B commit
|
||
+Apply to the source repository changes, additions, and deletions from your
|
||
+working directory. (Changes repository.)
|
||
+.TP
|
||
+.B diff
|
||
+Show differences between files in working directory and source
|
||
+repository, or between two revisions in source repository.
|
||
+(Does not change either repository or working directory.)
|
||
+.TP
|
||
+.B export
|
||
+Prepare copies of a set of source files for shipment off site.
|
||
+Differs from
|
||
+.` "cvs checkout"
|
||
+in that no
|
||
+.B cvs
|
||
+administrative directories are created (and therefore
|
||
+.` "cvs commit"
|
||
+cannot be executed from a directory prepared with
|
||
+.` "cvs export"),
|
||
+and a symbolic tag must be specified.
|
||
+(Does not change repository; creates directory similar to working
|
||
+directories).
|
||
+.TP
|
||
+.B history
|
||
+Show reports on
|
||
+.B cvs
|
||
+commands that you or others have executed on a particular file or
|
||
+directory in the source repository. (Does not change repository or
|
||
+working directory.) History logs are kept only if enabled by creation
|
||
+of the
|
||
+.` "$CVSROOT/CVSROOT/history"
|
||
+file; see
|
||
+.BR cvs ( 5 ).
|
||
+.TP
|
||
+.B import
|
||
+Incorporate a set of updates from off-site into the source repository,
|
||
+as a ``vendor branch''. (Changes repository.)
|
||
+.TP
|
||
+.B init
|
||
+Initialize a repository by adding the CVSROOT subdirectory and some default
|
||
+control files. You must use this command or initialize the repository in
|
||
+some other way before you can use it.
|
||
+.TP
|
||
+.B log
|
||
+Display
|
||
+log information.
|
||
+(Does not change repository or working directory.)
|
||
+.TP
|
||
+.B rdiff
|
||
+Prepare a collection of diffs as a patch file between two releases in
|
||
+the repository. (Does not change repository or working directory.)
|
||
+.TP
|
||
+.B release
|
||
+Cancel a
|
||
+.` "cvs checkout",
|
||
+abandoning any changes.
|
||
+(Can delete working directory; no effect on repository.)
|
||
+.TP
|
||
+.B remove
|
||
+Remove files from the source repository, pending a
|
||
+.` "cvs commit"
|
||
+on the same files. (Does not directly affect repository;
|
||
+changes working directory.)
|
||
+.TP
|
||
+.B rtag
|
||
+Explicitly specify a symbolic tag for particular revisions of files in the
|
||
+source repository. See also
|
||
+.` "cvs tag".
|
||
+(Changes repository directly; does not require or affect
|
||
+working directory.)
|
||
+.TP
|
||
+.B status
|
||
+Show current status of files: latest version, version in working
|
||
+directory, whether working version has been edited and, optionally,
|
||
+symbolic tags in the
|
||
+.SM RCS
|
||
+file. (Does not change
|
||
+repository or working directory.)
|
||
+.TP
|
||
+.B tag
|
||
+Specify a symbolic tag for files in the repository. By default, tags
|
||
+the revisions
|
||
+that were last synchronized with your working directory. (Changes
|
||
+repository directly; uses working directory without changing it.)
|
||
+.TP
|
||
+.B update
|
||
+Bring your working directory up to date with changes from the
|
||
+repository. Merges are performed automatically when possible; a
|
||
+warning is issued if manual resolution is required for conflicting
|
||
+changes. (Changes working directory; does not change repository.)
|
||
+.SH "COMMON COMMAND OPTIONS"
|
||
+This section describes the
|
||
+.I command_options
|
||
+that are available across several
|
||
+.B cvs
|
||
+commands. Not all commands support all of these options; each option
|
||
+is only supported for commands where it makes sense. However, when
|
||
+a command has one of these options you can count on the same meaning
|
||
+for the option as in other commands. (Other command
|
||
+options, which are listed with the individual commands, may have
|
||
+different meanings from one
|
||
+.B cvs
|
||
+command to another.)
|
||
+.I "Warning:"
|
||
+the
|
||
+.B history
|
||
+command is an exception;
|
||
+it supports many options that conflict
|
||
+even with these standard options.
|
||
+.TP
|
||
+\fB\-D\fP \fIdate_spec\fP
|
||
+Use the most recent revision no later than \fIdate_spec\fP (a single
|
||
+argument, date description specifying a date in the
|
||
+past). A wide variety of date formats are supported, in particular
|
||
+ISO ("1972-09-24 20:05") or Internet ("24 Sep 1972 20:05").
|
||
+The \fIdate_spec\fP is interpreted as being in the local timezone, unless a
|
||
+specific timezone is specified.
|
||
+The specification is ``sticky'' when you use it to make a
|
||
+private copy of a source file; that is, when you get a working file
|
||
+using \fB\-D\fP, \fBcvs\fP records the date you
|
||
+specified, so that further updates in the same directory will use the
|
||
+same date (unless you explicitly override it; see the description of
|
||
+the \fBupdate\fP command).
|
||
+.B \-D
|
||
+is available with the
|
||
+.BR checkout ", " diff ", " history ", " export ", "
|
||
+.BR rdiff ", " rtag ", and "
|
||
+.B update
|
||
+commands.
|
||
+Examples of valid date specifications include:
|
||
+.in +1i
|
||
+.ft B
|
||
+.nf
|
||
+1 month ago
|
||
+2 hours ago
|
||
+400000 seconds ago
|
||
+last year
|
||
+last Monday
|
||
+yesterday
|
||
+a fortnight ago
|
||
+3/31/92 10:00:07 PST
|
||
+January 23, 1987 10:05pm
|
||
+22:00 GMT
|
||
+.fi
|
||
+.ft P
|
||
+.in -1i
|
||
+.TP
|
||
+.B \-f
|
||
+When you specify a particular date or tag to \fBcvs\fP commands, they
|
||
+normally ignore files that do not contain the tag (or did not exist on
|
||
+the date) that you specified. Use the \fB\-f\fP option if you want
|
||
+files retrieved even when there is no match for the tag or date. (The
|
||
+most recent version is used in this situation.)
|
||
+.B \-f
|
||
+is available with these commands:
|
||
+.BR checkout ", " export ", "
|
||
+.BR rdiff ", " rtag ", and " update .
|
||
+.TP
|
||
+\fB\-k\fP \fIkflag\fP
|
||
+Alter the default
|
||
+processing of keywords.
|
||
+The \fB\-k\fP option is available with the
|
||
+.BR add ", " checkout ", " diff ", " export ", "
|
||
+.BR rdiff ", and " update
|
||
+commands. Your \fIkflag\fP specification is ``sticky'' when you use
|
||
+it to create a private copy of a source file; that is, when you use
|
||
+this option with the \fBcheckout\fP or \fBupdate\fP commands,
|
||
+\fBcvs\fP associates your selected \fIkflag\fP with the file, and
|
||
+continues to use it with future \fBupdate\fP commands on the same file
|
||
+until you specify otherwise.
|
||
+.SP
|
||
+Some of the more useful \fIkflag\fPs are \-ko and \-kb (for binary files),
|
||
+and \-kv which is useful for an
|
||
+.B export
|
||
+where you wish to retain keyword information after an
|
||
+.B import
|
||
+at some other site.
|
||
+.TP
|
||
+.B \-l
|
||
+Local; run only in current working directory, rather than recurring through
|
||
+subdirectories. Available with the following commands:
|
||
+.BR checkout ", " commit ", " diff ", "
|
||
+.BR export ", " remove ", " rdiff ", " rtag ", "
|
||
+.BR status ", " tag ", and " update .
|
||
+.TP
|
||
+.B \-n
|
||
+Do
|
||
+.I not
|
||
+run any
|
||
+.BR checkout / commit / tag / update
|
||
+program. (A program can be specified to run on each of these
|
||
+activities, in the modules database; this option bypasses it.)
|
||
+Available with the
|
||
+.BR checkout ", " commit ", " export ", and "
|
||
+.B rtag
|
||
+commands.
|
||
+.I Warning:
|
||
+this is not the same
|
||
+as the overall
|
||
+.` "cvs \-n"
|
||
+option, which you can specify to the
|
||
+.I left
|
||
+of a
|
||
+.B cvs
|
||
+command!
|
||
+.TP
|
||
+.B \-P
|
||
+Prune (remove) directories that are empty after being updated, on
|
||
+.BR checkout ", or " update .
|
||
+Normally, an empty directory (one that is void of revision-controlled
|
||
+files) is left alone.
|
||
+Specifying
|
||
+.B \-P
|
||
+will cause these directories to be silently removed from your checked-out
|
||
+sources.
|
||
+This does not remove the directory from the repository, only from your
|
||
+checked out copy.
|
||
+Note that this option is implied by the
|
||
+.B \-r
|
||
+or
|
||
+.B \-D
|
||
+options of
|
||
+.BR checkout " and " export .
|
||
+.TP
|
||
+.B \-T
|
||
+Create/Update CVS/Template by copying it from the (local) repository.
|
||
+This option is useful for developers maintaining a local cvs repository
|
||
+but committing to a remote repository. By maintaining CVS/Template the
|
||
+remote commits will still be able to bring up the proper template in the
|
||
+commit editor session.
|
||
+Available with the
|
||
+.BR checkout " and " update
|
||
+commands.
|
||
+.TP
|
||
+.B \-p
|
||
+Pipe the files retrieved from the repository to standard output,
|
||
+rather than writing them in the current directory. Available with the
|
||
+.BR checkout " and " update
|
||
+commands.
|
||
+.TP
|
||
+\fB\-r\fP \fItag\fP
|
||
+Use the revision specified by the
|
||
+.I tag
|
||
+argument instead of the default ``head'' revision. As well as
|
||
+arbitrary tags defined with the \fBtag\fP or \fBrtag\fP command, two
|
||
+special tags are always available:
|
||
+.` "HEAD"
|
||
+refers to the most
|
||
+recent version available in the repository, and
|
||
+.` "BASE"
|
||
+refers to the revision you last checked out into the current working
|
||
+directory.
|
||
+.SP
|
||
+The \fItag\fP specification is ``sticky'' when you use
|
||
+this option with
|
||
+.` "cvs checkout"
|
||
+or
|
||
+.` "cvs update"
|
||
+to
|
||
+make your own copy of a file: \fBcvs\fP remembers the \fItag\fP and
|
||
+continues to use it on future \fBupdate\fP commands, until you specify
|
||
+otherwise.
|
||
+.I tag
|
||
+can be either a symbolic or numeric tag.
|
||
+Specifying the
|
||
+.B \-q
|
||
+global option along with the
|
||
+.B \-r
|
||
+command option is often useful, to suppress the warning messages when the
|
||
+.SM RCS
|
||
+file does not contain the specified tag.
|
||
+.B \-r
|
||
+is available with the
|
||
+.BR checkout ", " commit ", " diff ", "
|
||
+.BR history ", " export ", "
|
||
+.BR rdiff ", " rtag ", and " update
|
||
+commands.
|
||
+.I Warning:
|
||
+this is not the same
|
||
+as the overall
|
||
+.` "cvs \-r"
|
||
+option, which you can specify to the
|
||
+.I left
|
||
+of a
|
||
+.B cvs
|
||
+command!
|
||
+.SH "CVS COMMANDS"
|
||
+Here (finally) are details on all the
|
||
+.B cvs
|
||
+commands and the options each accepts. The summary lines at the top
|
||
+of each command's description highlight three kinds of things:
|
||
+.TP 1i
|
||
+\ \ \ \ Command Options and Arguments
|
||
+Special options are described in detail below; common command options
|
||
+may appear only in the summary line.
|
||
+.TP 1i
|
||
+\ \ \ \ Working Directory, or Repository?
|
||
+Some \fBcvs\fP commands require a working directory to operate; some
|
||
+require a repository. Also, some commands \fIchange\fP the
|
||
+repository, some change the working directory, and some change
|
||
+nothing.
|
||
+.TP 1i
|
||
+\ \ \ \ Synonyms
|
||
+Many commands have synonyms, which you may find easier to
|
||
+remember (or type) than the principal name.
|
||
+.PP
|
||
+.TP
|
||
+\fBadd\fP [\fB\-k\fP \fIkflag\fP] [\fB\-m '\fP\fImessage\fP\fB'\fP] \fIfiles.\|.\|.\fP
|
||
+.I Requires:
|
||
+repository, working directory.
|
||
+.br
|
||
+.I Changes:
|
||
+working directory.
|
||
+.br
|
||
+.I Synonym:
|
||
+.B new
|
||
+.br
|
||
+Use the
|
||
+.B add
|
||
+command to create a new file or directory in the
|
||
+source repository.
|
||
+The files or directories specified with
|
||
+.B add
|
||
+must already exist in the current directory (which must have been created
|
||
+with the
|
||
+.B checkout
|
||
+command).
|
||
+To add a whole new directory hierarchy to the source repository
|
||
+(for example, files received from a third-party vendor), use the
|
||
+.` "cvs import"
|
||
+command instead.
|
||
+.SP
|
||
+If the argument to
|
||
+.` "cvs add"
|
||
+refers to an immediate sub-directory, the directory is
|
||
+created at the correct place in the
|
||
+source repository, and the necessary
|
||
+.B cvs
|
||
+administration files are created in your working directory.
|
||
+If the directory already exists in the source repository,
|
||
+.` "cvs add"
|
||
+still creates the administration files in your version of the directory.
|
||
+This allows you to use
|
||
+.` "cvs add"
|
||
+to add a particular directory to your private sources even if
|
||
+someone else created that directory after your
|
||
+.B checkout
|
||
+of the sources. You can do the following:
|
||
+.SP
|
||
+.in +1i
|
||
+.ft B
|
||
+.nf
|
||
+example% mkdir new_directory
|
||
+example% cvs add new_directory
|
||
+example% cvs update new_directory
|
||
+.fi
|
||
+.ft P
|
||
+.in -1i
|
||
+.SP
|
||
+An alternate approach using
|
||
+.` "cvs update"
|
||
+might be:
|
||
+.SP
|
||
+.in +1i
|
||
+.ft B
|
||
+.nf
|
||
+example% cvs update -d new_directory
|
||
+.fi
|
||
+.ft P
|
||
+.in -1i
|
||
+.SP
|
||
+(To add \fIany available\fP new directories to your working directory, it's
|
||
+probably simpler to use
|
||
+.` "cvs checkout"
|
||
+or
|
||
+.` "cvs update -d".)
|
||
+.SP
|
||
+The added files are not placed in the
|
||
+source repository until you use
|
||
+.` "cvs commit"
|
||
+to make the change permanent.
|
||
+Doing a
|
||
+.` "cvs add"
|
||
+on a file that was removed with the
|
||
+.` "cvs remove"
|
||
+command will resurrect the file, if no
|
||
+.` "cvs commit"
|
||
+command intervened.
|
||
+.SP
|
||
+You will have the opportunity to specify a logging message, as usual,
|
||
+when you use
|
||
+.` "cvs commit"
|
||
+to make the new file permanent. If you'd like to have another
|
||
+logging message associated with just
|
||
+.I creation
|
||
+of the file (for example, to describe the file's purpose), you can
|
||
+specify it with the
|
||
+.` "\-m \fImessage\fP"
|
||
+option to the
|
||
+.B add
|
||
+command.
|
||
+.SP
|
||
+The
|
||
+.` "-k kflag"
|
||
+option specifies the default way that this
|
||
+file will be checked out.
|
||
+The
|
||
+.` "kflag"
|
||
+argument is stored in the
|
||
+.SM RCS
|
||
+file and can be changed with
|
||
+.` "cvs admin".
|
||
+Specifying
|
||
+.` "-ko"
|
||
+is useful for checking in binaries that
|
||
+shouldn't have
|
||
+keywords expanded.
|
||
+.TP
|
||
+\fBadmin\fP [\fIrcs-options\fP] \fIfiles.\|.\|.\fP
|
||
+.I Requires:
|
||
+repository, working directory.
|
||
+.br
|
||
+.I Changes:
|
||
+repository.
|
||
+.br
|
||
+.I Synonym:
|
||
+.B rcs
|
||
+.br
|
||
+This is the
|
||
+.B cvs
|
||
+interface to assorted administrative
|
||
+facilities, similar to
|
||
+.BR rcs ( 1 ).
|
||
+This command works recursively, so extreme care should be
|
||
+used.
|
||
+.TP
|
||
+\fBcheckout\fP [\fBoptions\fP] \fImodules\fP.\|.\|.
|
||
+.I Requires:
|
||
+repository.
|
||
+.br
|
||
+.I Changes:
|
||
+working directory.
|
||
+.br
|
||
+.I Synonyms:
|
||
+.BR co ", " get
|
||
+.br
|
||
+Make a working directory containing copies of the source files specified by
|
||
+.IR modules .
|
||
+You must execute
|
||
+.` "cvs checkout"
|
||
+before using most of the other
|
||
+.B cvs
|
||
+commands, since most of them operate on your working directory.
|
||
+.SP
|
||
+\fImodules\fP are either symbolic names (themselves defined as the
|
||
+module
|
||
+.` "modules"
|
||
+in the source repository; see
|
||
+.BR cvs ( 5 ))
|
||
+for some collection of source directories and files, or paths to
|
||
+directories or files in the repository.
|
||
+.SP
|
||
+Depending on the
|
||
+.I modules
|
||
+you specify,
|
||
+.B checkout
|
||
+may recursively create directories and populate them with the appropriate
|
||
+source files.
|
||
+You can then edit these source files at any time (regardless of whether
|
||
+other software developers are editing their own copies of the sources);
|
||
+update them to include new changes applied by others to the source
|
||
+repository; or commit your work as a permanent change to the
|
||
+repository.
|
||
+.SP
|
||
+Note that
|
||
+.B checkout
|
||
+is used to create directories.
|
||
+The top-level directory created is always added to the directory
|
||
+where
|
||
+.B checkout
|
||
+is invoked, and usually has the same name as the specified
|
||
+.IR module .
|
||
+In the case of a
|
||
+.I module
|
||
+alias, the created sub-directory may have a different name, but you can be
|
||
+sure that it will be a sub-directory, and that
|
||
+.B checkout
|
||
+will show the relative path leading to each file as it is extracted into
|
||
+your private work area (unless you specify the
|
||
+.B \-Q
|
||
+global option).
|
||
+.SP
|
||
+Running
|
||
+.` "cvs checkout"
|
||
+on a directory that was already built by a prior
|
||
+.B checkout
|
||
+is also permitted, and
|
||
+has the same effect as specifying the
|
||
+.B \-d
|
||
+option to the
|
||
+.B update
|
||
+command described below.
|
||
+.SP
|
||
+The
|
||
+.I options
|
||
+permitted with
|
||
+.` "cvs checkout"
|
||
+include the standard command options
|
||
+.BR \-P ", " \-f ", "
|
||
+.BI \-k " kflag"
|
||
+\&,
|
||
+.BR \-l ", " \-n ", " \-p ", "
|
||
+.BR \-r
|
||
+.IR tag ", and"
|
||
+.BI \-D " date"\c
|
||
+\&.
|
||
+.SP
|
||
+In addition to those, you can use these special command options
|
||
+with
|
||
+.BR checkout :
|
||
+.SP
|
||
+Use the
|
||
+.B \-A
|
||
+option to reset any sticky tags, dates, or
|
||
+.B \-k
|
||
+options. (If you get a working file using one of the
|
||
+\fB\-r\fP, \fB\-D\fP, or \fB\-k\fP options, \fBcvs\fP remembers the
|
||
+corresponding tag, date, or \fIkflag\fP and continues using it on
|
||
+future updates; use the \fB\-A\fP option to make \fBcvs\fP forget these
|
||
+specifications, and retrieve the ``head'' version of the file).
|
||
+.SP
|
||
+The
|
||
+.BI \-j " branch"
|
||
+option merges the changes made between the
|
||
+resulting revision and the revision that it is based on (e.g., if
|
||
+the tag refers to a branch,
|
||
+.B cvs
|
||
+will merge all changes made in that branch into your working file).
|
||
+.SP
|
||
+With two \fB-j\fP options,
|
||
+.B cvs
|
||
+will merge in the changes between the two respective revisions.
|
||
+This can be used to ``remove'' a certain delta from your working file.
|
||
+.SP
|
||
+In addition, each \fB-j\fP option can contain on optional date
|
||
+specification which, when used with branches, can limit the chosen
|
||
+revision to one within a specific date.
|
||
+An optional date is specified by adding a colon (:) to the tag.
|
||
+An example might be what
|
||
+.` "cvs import"
|
||
+tells you to do when you have
|
||
+just imported sources that have conflicts with local changes:
|
||
+.SP
|
||
+.in +1i
|
||
+.ft B
|
||
+.nf
|
||
+example% cvs checkout -jTAG:yesterday -jTAG module
|
||
+.fi
|
||
+.ft P
|
||
+.in -1i
|
||
+.SP
|
||
+Use the
|
||
+.B \-N
|
||
+option with
|
||
+.` "\-d \fIdir\fP"
|
||
+to avoid shortening module paths in your working directory. (Normally, \fBcvs\fP shortens paths as much as possible when you specify an explicit target directory.)
|
||
+.SP
|
||
+Use the
|
||
+.B \-c
|
||
+option to copy the module file, sorted, to the standard output,
|
||
+instead of creating or modifying any files or directories in your
|
||
+working directory.
|
||
+.SP
|
||
+Use the
|
||
+.BI \-d " dir"
|
||
+option to create a directory called
|
||
+.I dir
|
||
+for the working files, instead of using the module name. Unless you
|
||
+also use \fB\-N\fP, the paths created under \fIdir\fP will be as short
|
||
+as possible.
|
||
+.SP
|
||
+Use the
|
||
+.B \-s
|
||
+option to display per-module status information stored with
|
||
+the
|
||
+.B \-s
|
||
+option within the modules file.
|
||
+.TP
|
||
+\fBcommit\fP [\fB\-lnR\fP] [\fB\-m\fP '\fIlog_message\fP' | \fB\-F\fP \fIfile\fP] [\fB\-r\fP \fIrevision\fP] [\fIfiles.\|.\|.\fP]
|
||
+.I Requires:
|
||
+working directory, repository.
|
||
+.br
|
||
+.I Changes:
|
||
+repository.
|
||
+.br
|
||
+.I Synonym:
|
||
+.B ci
|
||
+.br
|
||
+Use
|
||
+.` "cvs commit"
|
||
+when you want to incorporate changes from your working source
|
||
+files into the general source repository.
|
||
+.SP
|
||
+If you don't specify particular \fIfiles\fP to commit, all
|
||
+of the files in your working current directory are examined.
|
||
+.B commit
|
||
+is careful to change in the repository only those files that you have
|
||
+really changed. By default (or if you explicitly specify the
|
||
+.B \-R
|
||
+option), files
|
||
+in subdirectories are also examined and committed if they have
|
||
+changed; you can use the
|
||
+.B \-l
|
||
+option to limit
|
||
+.B commit
|
||
+to the current directory only.
|
||
+Sometimes you may want to force a file to be committed even though it
|
||
+is unchanged; this is achieved with the
|
||
+.B \-f
|
||
+flag, which also has the effect of disabling recursion (you can turn
|
||
+it back on with
|
||
+.B \-R
|
||
+of course).
|
||
+.SP
|
||
+.B commit
|
||
+verifies that the selected files are up to date with the current revisions
|
||
+in the source repository; it will notify you, and exit without
|
||
+committing, if any of the specified files must be made current first
|
||
+with
|
||
+.` "cvs update".
|
||
+.B commit
|
||
+does not call the
|
||
+.B update
|
||
+command for you, but rather leaves that for you to do when
|
||
+the time is right.
|
||
+.SP
|
||
+When all is well, an editor is invoked to allow you to enter a log
|
||
+message that will be written to one or more logging programs and placed in the
|
||
+source repository file.
|
||
+You can instead specify the log message on the command line with the
|
||
+.B \-m
|
||
+option, thus suppressing the editor invocation, or use the
|
||
+.B \-F
|
||
+option to specify that the argument \fIfile\fP contains the log message.
|
||
+.SP
|
||
+The
|
||
+.B \-r
|
||
+option can be used to commit to a particular symbolic or numeric revision.
|
||
+For example, to bring all your files up to the
|
||
+revision ``3.0'' (including those that haven't changed), you might do:
|
||
+.SP
|
||
+.in +1i
|
||
+.ft B
|
||
+.nf
|
||
+example% cvs commit -r3.0
|
||
+.fi
|
||
+.ft P
|
||
+.in -1i
|
||
+.SP
|
||
+.B cvs
|
||
+will only allow you to commit to a revision that is on the main trunk (a
|
||
+revision with a single dot).
|
||
+However, you can also commit to a branch revision (one that has an even
|
||
+number of dots) with the
|
||
+.B \-r
|
||
+option.
|
||
+To create a branch revision, one typically use the
|
||
+.B \-b
|
||
+option of the
|
||
+.BR rtag " or " tag
|
||
+commands.
|
||
+Then, either
|
||
+.BR checkout " or " update
|
||
+can be used to base your sources on the newly created branch.
|
||
+From that point on, all
|
||
+.B commit
|
||
+changes made within these working sources will be automatically added
|
||
+to a branch revision, thereby not perturbing main-line development in any
|
||
+way.
|
||
+For example, if you had to create a patch to the 1.2 version of the
|
||
+product, even though the 2.0 version is already under development, you
|
||
+might do:
|
||
+.SP
|
||
+.in +1i
|
||
+.ft B
|
||
+.nf
|
||
+example% cvs rtag -b -rFCS1_2 FCS1_2_Patch product_module
|
||
+example% cvs checkout -rFCS1_2_Patch product_module
|
||
+example% cd product_module
|
||
+[[ hack away ]]
|
||
+example% cvs commit
|
||
+.fi
|
||
+.ft P
|
||
+.in -1i
|
||
+.SP
|
||
+Say you have been working on some extremely experimental software, based on
|
||
+whatever revision you happened to checkout last week.
|
||
+If others in your group would like to work on this software with you, but
|
||
+without disturbing main-line development, you could commit your change to a
|
||
+new branch.
|
||
+Others can then checkout your experimental stuff and utilize the full
|
||
+benefit of
|
||
+.B cvs
|
||
+conflict resolution.
|
||
+The scenario might look like:
|
||
+.SP
|
||
+.in +1i
|
||
+.ft B
|
||
+.nf
|
||
+example% cvs tag -b EXPR1
|
||
+example% cvs update -rEXPR1
|
||
+[[ hack away ]]
|
||
+example% cvs commit
|
||
+.fi
|
||
+.ft P
|
||
+.in -1i
|
||
+.SP
|
||
+Others would simply do
|
||
+.` "cvs checkout -rEXPR1 whatever_module"
|
||
+to work with you on the experimental change.
|
||
+.TP
|
||
+\fBdiff\fP [\fB\-kl\fP] [\fIformat_options\fP] [[\fB\-r\fP \fIrev1\fP | \fB\-D\fP \fIdate1\fP | \fB\-j\fP \fIrev1:date1\fP] [\fB\-r\fP \fIrev2\fP | \fB\-D\fP \fIdate2\fP | \fB\-j\fP \fIrev2:date2\fP]] [\fIfiles.\|.\|.\fP]
|
||
+.I Requires:
|
||
+working directory, repository.
|
||
+.br
|
||
+.I Changes:
|
||
+nothing.
|
||
+.br
|
||
+You can compare your working files with revisions in the source
|
||
+repository, with the
|
||
+.` "cvs diff"
|
||
+command. If you don't specify a particular revision, your files
|
||
+are compared with the revisions they were based on. You can also use
|
||
+the standard
|
||
+.B cvs
|
||
+command option
|
||
+.B \-r
|
||
+to specify a particular revision to compare your files with. Finally,
|
||
+if you use
|
||
+.B \-r
|
||
+twice, you can see differences between two revisions in the
|
||
+repository.
|
||
+You can also specify
|
||
+.B \-D
|
||
+options to diff against a revision (on the head branch) in the past, and
|
||
+you can also specify
|
||
+.B \-j
|
||
+options to diff against a revision relative to a branch tag in the past.
|
||
+The
|
||
+.B \-r
|
||
+and
|
||
+.B \-D
|
||
+and
|
||
+.B \-j
|
||
+options can be mixed together with at most two options ever specified.
|
||
+.SP
|
||
+See
|
||
+.` "cvs --help diff"
|
||
+for a list of supported
|
||
+.IR format_options .
|
||
+.SP
|
||
+If you don't specify any files,
|
||
+.B diff
|
||
+will display differences for all those files in the current directory
|
||
+(and its subdirectories, unless you use the standard option
|
||
+.BR \-l )
|
||
+that
|
||
+differ from the corresponding revision in the source repository
|
||
+(i.e. files that
|
||
+.I you
|
||
+have changed), or that differ from the revision specified.
|
||
+.TP
|
||
+\fBexport\fP [\-\fBf\|lNnQq\fP] \fB\-r\fP \fIrev\fP\||\|\fB\-D\fP \fIdate\fP [\fB\-d\fP \fIdir\fP] [\fB\-k\fP \fIkflag\fP] \fImodule\fP.\|.\|.
|
||
+.I Requires:
|
||
+repository.
|
||
+.br
|
||
+.I Changes:
|
||
+current directory.
|
||
+.br
|
||
+This command is a variant of
|
||
+.` "cvs checkout";
|
||
+use it when you want a copy of the source for \fImodule\fP
|
||
+without the \fBcvs\fP administrative directories. For example, you
|
||
+might use
|
||
+.` "cvs export"
|
||
+to prepare source for shipment
|
||
+off-site. This command \fIrequires\fP that you specify a date or tag
|
||
+(with \fB\-D\fP or \fB\-r\fP), so that you can count on reproducing
|
||
+the source you ship to others.
|
||
+.SP
|
||
+The only non-standard options are
|
||
+.` "\-d \fIdir\fP"
|
||
+(write the
|
||
+source into directory \fIdir\fP) and
|
||
+.` "\-N"
|
||
+(don't shorten
|
||
+module paths).
|
||
+These have the same meanings as the same options in
|
||
+.` "cvs checkout".
|
||
+.SP
|
||
+The
|
||
+.B \-kv
|
||
+option is useful when
|
||
+.B export
|
||
+is used.
|
||
+This causes any
|
||
+keywords to be expanded such that an
|
||
+.B import
|
||
+done at some other site will not lose the keyword revision information.
|
||
+Other \fIkflag\fPs may be used with
|
||
+.` "cvs export"
|
||
+and are described in
|
||
+.BR co ( 1 ).
|
||
+.TP
|
||
+\fBhistory\fP [\fB\-\fP\fIreport\fP] [\fB\-\fP\fIflags\fP] [\fB\-\fP\fIoptions args\fP] [\fIfiles\fP.\|.\|.]
|
||
+.I Requires:
|
||
+the file
|
||
+.` "$CVSROOT/CVSROOT/history"
|
||
+.br
|
||
+.I Changes:
|
||
+nothing.
|
||
+.br
|
||
+\fBcvs\fP keeps a history file that tracks each use of the
|
||
+\fBcheckout\fP, \fBcommit\fP, \fBrtag\fP, \fBupdate\fP, and \fBrelease\fP
|
||
+commands. You can use
|
||
+.` "cvs history"
|
||
+to display this
|
||
+information in various formats.
|
||
+.SP
|
||
+.I Warning:
|
||
+.` "cvs history"
|
||
+uses
|
||
+.` "\-f",
|
||
+.` "\-l",
|
||
+.` "\-n",
|
||
+and
|
||
+.` "\-p"
|
||
+in ways that conflict with the
|
||
+descriptions in
|
||
+.SM
|
||
+COMMON COMMAND OPTIONS\c
|
||
+\&.
|
||
+.SP
|
||
+Several options (shown above as \fB\-\fP\fIreport\fP) control what
|
||
+kind of report is generated:
|
||
+.TP 1i
|
||
+.B \ \ \ \ \ \ \-c
|
||
+Report on each time \fBcommit\fP was used (i.e., each time the
|
||
+repository was modified).
|
||
+.TP 1i
|
||
+\fB\ \ \ \ \ \ \-m\fP \fImodule\fP
|
||
+Report on a particular \fImodule\fP. (You can meaningfully use
|
||
+\fB\-m\fP more than once on the command line.)
|
||
+.TP 1i
|
||
+.B \ \ \ \ \ \ \-o
|
||
+Report on checked-out modules.
|
||
+.TP 1i
|
||
+.B \ \ \ \ \ \ \-T
|
||
+Report on all tags.
|
||
+.TP 1i
|
||
+\fB\ \ \ \ \ \ \-x\fP \fItype\fP
|
||
+Extract a particular set of record types \fIX\fP from the \fBcvs\fP
|
||
+history. The types are indicated by single letters, which you may
|
||
+specify in combination.
|
||
+Certain commands have a single record type: \fBcheckout\fP (type `O'),
|
||
+\fBrelease\fP (type `F'), and \fBrtag\fP (type `T'). One of four
|
||
+record types may result from an \fBupdate\fP: `W', when the working copy
|
||
+of a file is deleted during update (because it was gone from the
|
||
+repository); `U', when a working file was copied from the
|
||
+repository; `G', when a merge was necessary and it succeeded; and 'C',
|
||
+when a merge was necessary but collisions were detected (requiring
|
||
+manual merging). Finally, one of three record types results from
|
||
+\fBcommit\fP: `M', when a file was modified; `A', when a file is first
|
||
+added; and `R', when a file is removed.
|
||
+.TP 1i
|
||
+.B \ \ \ \ \ \ \-e
|
||
+Everything (all record types); equivalent to specifying
|
||
+.` "\-xMACFROGWUT".
|
||
+.TP 1i
|
||
+\fB\ \ \ \ \ \ \-z\fP \fIzone\fP
|
||
+Use time zone
|
||
+.I zone
|
||
+when outputting history records.
|
||
+The zone name
|
||
+.B LT
|
||
+stands for local time;
|
||
+numeric offsets stand for hours and minutes ahead of UTC.
|
||
+For example,
|
||
+.B +0530
|
||
+stands for 5 hours and 30 minutes ahead of (i.e. east of) UTC.
|
||
+.PP
|
||
+.RS .5i
|
||
+The options shown as \fB\-\fP\fIflags\fP constrain the report without
|
||
+requiring option arguments:
|
||
+.RE
|
||
+.TP 1i
|
||
+.B \ \ \ \ \ \ \-a
|
||
+Show data for all users (the default is to show data only for the user
|
||
+executing
|
||
+.` "cvs history").
|
||
+.TP 1i
|
||
+.B \ \ \ \ \ \ \-l
|
||
+Show last modification only.
|
||
+.TP 1i
|
||
+.B \ \ \ \ \ \ \-w
|
||
+Show only the records for modifications done from the same working
|
||
+directory where
|
||
+.` "cvs history"
|
||
+is executing.
|
||
+.PP
|
||
+.RS .5i
|
||
+The options shown as \fB\-\fP\fIoptions args\fP constrain the report
|
||
+based on an argument:
|
||
+.RE
|
||
+.TP 1i
|
||
+\fB\ \ \ \ \ \ \-b\fP \fIstr\fP
|
||
+Show data back to a record containing the string \fIstr\fP in either
|
||
+the module name, the file name, or the repository path.
|
||
+.TP 1i
|
||
+\fB\ \ \ \ \ \ \-D\fP \fIdate\fP
|
||
+Show data since \fIdate\fP.
|
||
+.TP 1i
|
||
+\fB\ \ \ \ \ \ \-p\fP \fIrepository\fP
|
||
+Show data for a particular source repository (you can specify several
|
||
+\fB\-p\fP options on the same command line).
|
||
+.TP 1i
|
||
+\fB\ \ \ \ \ \ \-r\fP \fIrev\fP
|
||
+Show records referring to revisions since the revision or tag
|
||
+named \fIrev\fP appears in individual RCS files.
|
||
+Each
|
||
+.SM RCS
|
||
+file is searched for the revision or tag.
|
||
+.TP 1i
|
||
+\fB\ \ \ \ \ \ \-t\fP \fItag\fP
|
||
+Show records since tag \fItag\fP was last added to the history file.
|
||
+This differs from the \fB-r\fP flag above in that it reads
|
||
+only the history file, not the
|
||
+.SM RCS
|
||
+files, and is much faster.
|
||
+.TP 1i
|
||
+\fB\ \ \ \ \ \ \-u\fP \fIname\fP
|
||
+Show records for user \fIname\fP.
|
||
+.PP
|
||
+.TP
|
||
+\fBimport\fP [\fB\-\fP\fIoptions\fP] \fIrepository vendortag releasetag\fP.\|.\|.
|
||
+.I Requires:
|
||
+Repository, source distribution directory.
|
||
+.br
|
||
+.I Changes:
|
||
+repository.
|
||
+.br
|
||
+Use
|
||
+.` "cvs import"
|
||
+to incorporate an entire source
|
||
+distribution from an outside source (e.g., a source vendor) into your
|
||
+source repository directory. You can use this command both for
|
||
+initial creation of a repository, and for wholesale updates to the
|
||
+module form the outside source.
|
||
+.SP
|
||
+The \fIrepository\fP argument gives a directory name (or a path to a
|
||
+directory) under the CVS root directory for repositories; if the
|
||
+directory did not exist, \fBimport\fP creates it.
|
||
+.SP
|
||
+When you use \fBimport\fP for updates to source that has been modified in your
|
||
+source repository (since a prior \fBimport\fP), it
|
||
+will notify you of any files that conflict in the two branches of
|
||
+development; use
|
||
+.` "cvs checkout -j"
|
||
+to reconcile the differences, as \fBimport\fP instructs you to do.
|
||
+.SP
|
||
+By default, certain file names are ignored during
|
||
+.` "cvs import":
|
||
+names associated with
|
||
+.SM CVS
|
||
+administration, or with other common source control systems; common
|
||
+names for patch files, object files, archive files, and editor backup
|
||
+files; and other names that are usually artifacts of assorted utilities.
|
||
+For an up to date list of ignored file names, see the Cederqvist manual (as
|
||
+described in the SEE ALSO section of this manpage).
|
||
+.SP
|
||
+The outside source is saved in a first-level
|
||
+branch, by default
|
||
+.` "1.1.1".
|
||
+Updates are leaves of this
|
||
+branch; for example, files from the first imported collection of
|
||
+source will be revision
|
||
+.` "1.1.1.1",
|
||
+then files from the first
|
||
+imported update will be revision
|
||
+.` "1.1.1.2",
|
||
+and so on.
|
||
+.SP
|
||
+At least three arguments are required. \fIrepository\fP is needed to
|
||
+identify the collection of source. \fIvendortag\fP is a tag for the
|
||
+entire branch (e.g., for
|
||
+.` "1.1.1").
|
||
+You must also specify at
|
||
+least one \fIreleasetag\fP to identify the files at the leaves created
|
||
+each time you execute
|
||
+.` "cvs import".
|
||
+.SP
|
||
+One of the standard
|
||
+.B cvs
|
||
+command options is available: \fB\-m\fP
|
||
+\fImessage\fP. If you do not specify a logging message with
|
||
+\fB\-m\fP, your editor is invoked (as with \fBcommit\fP) to allow you
|
||
+to enter one.
|
||
+.SP
|
||
+There are three additional special options.
|
||
+.SP
|
||
+Use
|
||
+.` "\-d"
|
||
+to specify that each file's time of last modification should be used
|
||
+for the checkin date and time.
|
||
+.SP
|
||
+Use
|
||
+.` "\-b \fIbranch\fP"
|
||
+to specify a first-level branch other
|
||
+than
|
||
+.` "1.1.1".
|
||
+.SP
|
||
+Use
|
||
+.` "\-I \fIname\fP"
|
||
+to specify file names that should be
|
||
+ignored during \fBimport\fP. You can use this option repeatedly.
|
||
+To avoid ignoring any files at all (even those ignored by default),
|
||
+specify
|
||
+.` "\-I !".
|
||
+.TP
|
||
+\fBlog\fP [\fB\-l\fP] \fIrlog-options [files\fP\|.\|.\|.]
|
||
+.I Requires:
|
||
+repository, working directory.
|
||
+.br
|
||
+.I Changes:
|
||
+nothing.
|
||
+.br
|
||
+.I Synonym:
|
||
+.B rlog
|
||
+.br
|
||
+Display log information for \fIfiles\fP.
|
||
+Among the more useful options are \fB\-h\fP
|
||
+to display only the header (including tag definitions, but omitting
|
||
+most of the full log); \fB\-r\fP to select logs on particular
|
||
+revisions or ranges of revisions; and \fB\-d\fP to select particular
|
||
+dates or date ranges. See
|
||
+.BR rlog ( 1 )
|
||
+for full explanations.
|
||
+This command is recursive by default, unless the
|
||
+.B \-l
|
||
+option is specified.
|
||
+.TP
|
||
+\fBrdiff\fP [\fB\-\fP\fIflags\fP] [\fB\-V\fP \fIvn\fP] [\fB\-r\fP \fIt\fP|\fB\-D\fP \fId\fP [\fB\-r\fP \fIt2\fP|\fB\-D\fP \fId2\fP]] \fImodules\|.\|.\|.\fP
|
||
+.I Requires:
|
||
+repository.
|
||
+.br
|
||
+.I Changes:
|
||
+nothing.
|
||
+.br
|
||
+.I Synonym:
|
||
+.B patch
|
||
+.br
|
||
+Builds a Larry Wall format
|
||
+.BR patch ( 1 )
|
||
+file between two releases, that can be fed directly into the
|
||
+.B patch
|
||
+program to bring an old release up-to-date with the new release.
|
||
+(This is one of the few \fBcvs\fP commands that operates directly from
|
||
+the repository, and doesn't require a prior
|
||
+.BR checkout .)
|
||
+The diff output is sent to the standard output device.
|
||
+You can specify (using the standard \fB\-r\fP and \fB\-D\fP options)
|
||
+any combination of one or two revisions or dates.
|
||
+If only one revision or date is specified, the
|
||
+patch file reflects differences between that revision or date and the
|
||
+current ``head'' revisions in the
|
||
+.SM RCS
|
||
+file.
|
||
+.SP
|
||
+Note that if the software release affected
|
||
+is contained in more than one directory, then it may be necessary to
|
||
+specify the
|
||
+.B \-p
|
||
+option to the
|
||
+.B patch
|
||
+command when patching the old sources, so that
|
||
+.B patch
|
||
+is able to find the files that are located in other directories.
|
||
+.SP
|
||
+The standard option \fIflags\fP \fB\-f\fP, and \fB\-l\fP
|
||
+are available with this command. There are also several
|
||
+special option flags:
|
||
+.SP
|
||
+If you use the
|
||
+.B \-s
|
||
+option, no patch output is produced.
|
||
+Instead, a summary of the changed or added files between the two
|
||
+releases is sent to the standard output device.
|
||
+This is useful for finding out, for example, which files have changed
|
||
+between two dates or revisions.
|
||
+.SP
|
||
+If you use the
|
||
+.B \-t
|
||
+option, a diff of the top two revisions is sent to the standard output device.
|
||
+This is most useful for seeing what the last change to a file was.
|
||
+.SP
|
||
+If you use the
|
||
+.B \-u
|
||
+option, the patch output uses the newer ``unidiff'' format for context
|
||
+diffs.
|
||
+.SP
|
||
+You can use
|
||
+.B \-c
|
||
+to explicitly specify the
|
||
+.` "diff \-c"
|
||
+form of context diffs
|
||
+(which is the default), if you like.
|
||
+.TP
|
||
+\fBrelease\fP [\fB\-dQq\fP] \fImodules\fP\|.\|.\|.
|
||
+.I Requires:
|
||
+Working directory.
|
||
+.br
|
||
+.I Changes:
|
||
+Working directory, history log.
|
||
+.br
|
||
+This command is meant to safely cancel the effect of
|
||
+.` "cvs checkout".
|
||
+Since
|
||
+.B cvs
|
||
+doesn't lock files, it isn't strictly necessary to use this command.
|
||
+You can always simply delete your working directory, if you
|
||
+like; but you risk losing changes you may have forgotten, and you
|
||
+leave no trace in the
|
||
+.B cvs
|
||
+history file that you've abandoned your checkout.
|
||
+.SP
|
||
+Use
|
||
+.` "cvs release"
|
||
+to avoid these problems. This command
|
||
+checks that no un-committed changes are present; that you are
|
||
+executing it from immediately above, or inside, a \fBcvs\fP working
|
||
+directory; and that the repository recorded for your files is the same
|
||
+as the repository defined in the module database.
|
||
+.SP
|
||
+If all these conditions are true,
|
||
+.` "cvs release"
|
||
+leaves a
|
||
+record of its execution (attesting to your intentionally abandoning
|
||
+your checkout) in the
|
||
+.B cvs
|
||
+history log.
|
||
+.SP
|
||
+You can use the \fB\-d\fP flag to request that your working copies of
|
||
+the source files be deleted if the \fBrelease\fP succeeds.
|
||
+.TP
|
||
+\fBremove\fP [\fB\-lR\fP] [\fIfiles\|.\|.\|.\fP]
|
||
+.I Requires:
|
||
+Working directory.
|
||
+.br
|
||
+.I Changes:
|
||
+Working directory.
|
||
+.br
|
||
+.I Synonyms:
|
||
+.BR rm ", " delete
|
||
+.br
|
||
+Use this command to declare that you wish to remove \fIfiles\fP from
|
||
+the source repository. Like most
|
||
+.B cvs
|
||
+commands,
|
||
+.` "cvs remove"
|
||
+works on files in your working
|
||
+directory, not directly on the repository. As a safeguard, it also
|
||
+requires that you first erase the specified files from your working
|
||
+directory.
|
||
+.SP
|
||
+The files are not actually removed until you apply your changes to the
|
||
+repository with
|
||
+.BR commit ;
|
||
+at that point, the corresponding
|
||
+.SM RCS
|
||
+files in the source repository are
|
||
+.I moved
|
||
+into the
|
||
+.` "Attic"
|
||
+directory (also within the source repository).
|
||
+.SP
|
||
+This command is recursive by default, scheduling all physically removed
|
||
+files that it finds for removal by the next
|
||
+.BR commit .
|
||
+Use the
|
||
+.B \-l
|
||
+option to avoid this recursion, or just specify that actual files that you
|
||
+wish remove to consider.
|
||
+.TP
|
||
+\fBrtag\fP [\fB\-f\|alnRQq\fP] [\fB\-b\fP] [\fB\-d\fP] [\fB\-r\fP \fItag\fP | \fB\-D\fP \fIdate\fP] \fIsymbolic_tag\fP \fImodules\|.\|.\|.\fP
|
||
+.I Requires:
|
||
+repository.
|
||
+.br
|
||
+.I Changes:
|
||
+repository.
|
||
+.br
|
||
+.I Synonym:
|
||
+.B rfreeze
|
||
+.br
|
||
+You can use this command to assign symbolic tags to particular,
|
||
+explicitly specified source versions in the repository.
|
||
+.` "cvs rtag"
|
||
+works directly on the repository contents (and requires no
|
||
+prior
|
||
+.BR checkout ).
|
||
+Use
|
||
+.` "cvs tag"
|
||
+instead, to base the selection of
|
||
+versions to tag on the contents of your working directory.
|
||
+.SP
|
||
+In general, tags (often the symbolic names of software distributions)
|
||
+should not be removed, but the
|
||
+.B \-d
|
||
+option is available as a means to remove completely obsolete symbolic names
|
||
+if necessary (as might be the case for an Alpha release, say).
|
||
+.SP
|
||
+.` "cvs rtag"
|
||
+will not move a tag that already exists. With the \fB\-F\fP option,
|
||
+however,
|
||
+.` "cvs rtag"
|
||
+will re-locate any instance of \fIsymbolic_tag\fP that already exists
|
||
+on that file to the new repository versions. Without the \fB\-F\fP
|
||
+option, attempting to use
|
||
+.` "cvs rtag"
|
||
+to apply a tag that already exists on that file will produce an error
|
||
+message.
|
||
+.SP
|
||
+The \fB-b\fP option makes the tag a ``branch'' tag, allowing
|
||
+concurrent, isolated development.
|
||
+This is most useful for creating a patch to a previously released software
|
||
+distribution.
|
||
+.SP
|
||
+You can use the standard \fB\-r\fP and \fB\-D\fP options to tag only those
|
||
+files that already contain a certain tag. This method would be used
|
||
+to rename a tag: tag only the files identified by the old tag, then delete the
|
||
+old tag, leaving the new tag on exactly the same files as the old tag.
|
||
+.SP
|
||
+.B rtag
|
||
+executes recursively by default, tagging all subdirectories of
|
||
+\fImodules\fP you specify in the argument. You can restrict its
|
||
+operation to top-level directories with the standard \fB\-l\fP option;
|
||
+or you can explicitly request recursion with \fB\-R\fP.
|
||
+.SP
|
||
+The modules database can specify a program to execute whenever a tag
|
||
+is specified; a typical use is to send electronic mail to a group of
|
||
+interested parties. If you want to bypass that program, use the
|
||
+standard \fB\-n\fP option.
|
||
+.SP
|
||
+Use the
|
||
+.B \-a
|
||
+option to have
|
||
+.B rtag
|
||
+look in the
|
||
+.` "Attic"
|
||
+for removed files that contain the specified tag.
|
||
+The tag is removed from these files, which makes it convenient to re-use a
|
||
+symbolic tag as development continues (and files get removed from the
|
||
+up-coming distribution).
|
||
+.TP
|
||
+\fBstatus\fP [\fB\-lRqQ\fP] [\fB\-v\fP] [\fIfiles\fP\|.\|.\|.]
|
||
+.I Requires:
|
||
+working directory, repository.
|
||
+.br
|
||
+.I Changes:
|
||
+nothing.
|
||
+.br
|
||
+Display a brief report on the current status of \fIfiles\fP with
|
||
+respect to the source repository, including any ``sticky'' tags,
|
||
+dates, or \fB\-k\fP options. (``Sticky'' options will restrict how
|
||
+.` "cvs update"
|
||
+operates until you reset them; see the
|
||
+description of
|
||
+.` "cvs update \-A\|.\|.\|.".)
|
||
+.SP
|
||
+You can also use this command to anticipate the potential impact of a
|
||
+.` "cvs update"
|
||
+on your working source directory. If you do
|
||
+not specify any \fIfiles\fP explicitly, reports are shown for all
|
||
+files that \fBcvs\fP has placed in your working directory. You can
|
||
+limit the scope of this search to the current directory itself (not
|
||
+its subdirectories) with the standard \fB\-l\fP option flag; or you
|
||
+can explicitly request recursive status reports with the \fB\-R\fP
|
||
+option.
|
||
+.SP
|
||
+The
|
||
+.B \-v
|
||
+option causes the symbolic tags for the
|
||
+.SM RCS
|
||
+file to be displayed as well.
|
||
+.TP
|
||
+\fBtag\fP [\fB\-lQqR\fP] [\fB\-F\fP] [\fB\-b\fP] [\fB\-d\fP] [\fB\-r\fP \fItag\fP | \fB\-D\fP \fIdate\fP] [\fB\-f\fP] \fIsymbolic_tag\fP [\fIfiles\fP\|.\|.\|.\|]
|
||
+.I Requires:
|
||
+working directory, repository.
|
||
+.br
|
||
+.I Changes:
|
||
+repository.
|
||
+.br
|
||
+.I Synonym:
|
||
+.B freeze
|
||
+.br
|
||
+Use this command to assign symbolic tags to the nearest repository
|
||
+versions to your working sources. The tags are applied immediately to
|
||
+the repository, as with \fBrtag\fP.
|
||
+.SP
|
||
+One potentially surprising aspect of the fact that \fBcvs tag\fP
|
||
+operates on the repository is that you are tagging the checked-in
|
||
+revisions, which may differ from locally modified files in your working
|
||
+directory. If you want to avoid doing this by mistake, specify the
|
||
+\fB-c\fP option to \fBcvs tag\fP. If there are any locally modified files, CVS
|
||
+will abort with an error before it tags any files.
|
||
+.SP
|
||
+One use for tags is to record a ``snapshot'' of the current sources
|
||
+when the software freeze date of a project arrives. As bugs are fixed
|
||
+after the freeze date, only those changed sources that are to be part
|
||
+of the release need be re-tagged.
|
||
+.SP
|
||
+The symbolic tags are meant to permanently record which revisions of which
|
||
+files were used in creating a software distribution.
|
||
+The
|
||
+.BR checkout ,
|
||
+.B export
|
||
+and
|
||
+.B update
|
||
+commands allow you to extract an exact copy of a tagged release at any time in
|
||
+the future, regardless of whether files have been changed, added, or removed
|
||
+since the release was tagged.
|
||
+.SP
|
||
+You can use the standard \fB\-r\fP and \fB\-D\fP options to tag only those
|
||
+files that already contain a certain tag. This method would be used
|
||
+to rename a tag: tag only the files identified by the old tag, then delete the
|
||
+old tag, leaving the new tag on exactly the same files as the old tag.
|
||
+.SP
|
||
+Specifying the \fB\-f\fP flag in addition to the \fB\-r\fP or \fB\-D\fP
|
||
+flags will tag those files named on the command line even if they do not
|
||
+contain the old tag or did not exist on the specified date.
|
||
+.SP
|
||
+By default (without a \fB\-r\fP or \fB\-D\fP flag)
|
||
+the versions to be tagged are supplied
|
||
+implicitly by the \fBcvs\fP records of your working files' history
|
||
+rather than applied explicitly.
|
||
+.SP
|
||
+If you use
|
||
+.` "cvs tag \-d \fIsymbolic_tag\fP\|.\|.\|.",
|
||
+the
|
||
+symbolic tag you specify is
|
||
+.I deleted
|
||
+instead of being added. \fIWarning\fP: Be very certain of your ground
|
||
+before you delete a tag; doing this effectively discards some
|
||
+historical information, which may later turn out to have been valuable.
|
||
+.SP
|
||
+.` "cvs tag"
|
||
+will not move a tag that already exists. With the \fB\-F\fP option,
|
||
+however,
|
||
+.` "cvs tag"
|
||
+will re-locate any instance of \fIsymbolic_tag\fP that already exists
|
||
+on that file to the new repository versions. Without the \fB\-F\fP
|
||
+option, attempting to use
|
||
+.` "cvs tag"
|
||
+to apply a tag that already exists on that file will produce an error
|
||
+message.
|
||
+.SP
|
||
+The \fB-b\fP option makes the tag a ``branch'' tag, allowing
|
||
+concurrent, isolated development.
|
||
+This is most useful for creating a patch to a previously released software
|
||
+distribution.
|
||
+.SP
|
||
+Normally,
|
||
+.B tag
|
||
+executes recursively through subdirectories; you can prevent this by
|
||
+using the standard \fB\-l\fP option, or specify the recursion
|
||
+explicitly by using \fB\-R\fP.
|
||
+.TP
|
||
+\fBupdate\fP [\fB\-ACdf\|lPpQqR\fP] [\fB\-d\fP] [\fB\-r\fP \fItag\fP|\fB\-D\fP \fIdate\fP] \fIfiles\|.\|.\|.\fP
|
||
+.I Requires:
|
||
+repository, working directory.
|
||
+.br
|
||
+.I Changes:
|
||
+working directory.
|
||
+.br
|
||
+After you've run
|
||
+.B checkout
|
||
+to create your private copy of source from the common repository,
|
||
+other developers will continue changing the central source. From time
|
||
+to time, when it is convenient in your development process, you can
|
||
+use the
|
||
+.B update
|
||
+command
|
||
+from within your working directory to reconcile your work with any
|
||
+revisions applied to the source repository since your last
|
||
+.B checkout
|
||
+or
|
||
+.BR update .
|
||
+.SP
|
||
+.B update
|
||
+keeps you informed of its progress by printing a line for each file,
|
||
+prefaced with one of the characters
|
||
+.` "U P A R M C ?"
|
||
+to indicate the status of the file:
|
||
+.TP 1i
|
||
+\fBU\fP \fIfile\fP
|
||
+The file was brought \fIup to date\fP with respect to the repository.
|
||
+This is done for any file that exists in the repository but not in
|
||
+your source, and for files that you haven't changed but are not the most
|
||
+recent versions available in the repository.
|
||
+.TP 1i
|
||
+\fBP\fP \fIfile\fP
|
||
+Like \fBU\fP, but the CVS server sends a patch instead of an entire file.
|
||
+This accomplishes the same thing as \fBU\fP using less bandwidth.
|
||
+.TP 1i
|
||
+\fBA\fP \fIfile\fP
|
||
+The file has been \fIadded\fP to your private copy of the sources, and
|
||
+will be added to the
|
||
+source repository when you run
|
||
+.` "cvs commit"
|
||
+on the file.
|
||
+This is a reminder to you that the file needs to be committed.
|
||
+.TP 1i
|
||
+\fBR\fP \fIfile\fP
|
||
+The file has been \fIremoved\fP from your private copy of the sources, and
|
||
+will be removed from the
|
||
+source repository when you run
|
||
+.` "cvs commit"
|
||
+on the file.
|
||
+This is a reminder to you that the file needs to be committed.
|
||
+.TP 1i
|
||
+\fBM\fP \fIfile\fP
|
||
+The file is \fImodified\fP in your working directory.
|
||
+.` "M"
|
||
+can indicate one of two states for a file you're working on: either
|
||
+there were no modifications to the same file in the repository, so
|
||
+that your file remains as you last saw it; or there were modifications
|
||
+in the repository as well as in your copy, but they were
|
||
+\fImerged\fP successfully, without conflict, in your working
|
||
+directory.
|
||
+.TP 1i
|
||
+\fBC\fP \fIfile\fP
|
||
+A \fIconflict\fP was detected while trying to merge your changes to
|
||
+\fIfile\fP with changes from the source repository. \fIfile\fP (the
|
||
+copy in your working directory) is now the result of merging
|
||
+the two versions; an unmodified copy of your file is also
|
||
+in your working directory, with the name `\fB.#\fP\fIfile\fP\fB.\fP\fIversion\fP',
|
||
+where
|
||
+.I version
|
||
+is the
|
||
+revision that your modified file started from.
|
||
+(Note that some systems automatically purge files that begin with
|
||
+\&
|
||
+.` ".#"
|
||
+if they have not been accessed for a few days.
|
||
+If you intend to keep a copy of your original file, it is a very good
|
||
+idea to rename it.)
|
||
+.TP 1i
|
||
+\fB?\fP \fIfile\fP
|
||
+\fIfile\fP is in your working directory, but does not correspond to
|
||
+anything in the source repository, and is not in the list of files
|
||
+for \fBcvs\fP to ignore (see the description of the \fB\-I\fP option).
|
||
+.PP
|
||
+.RS .5i
|
||
+.SP
|
||
+Use the
|
||
+.B \-A
|
||
+option to reset any sticky tags, dates, or
|
||
+.B \-k
|
||
+options. (If you get a working copy of a file by using one of the
|
||
+\fB\-r\fP, \fB\-D\fP, or \fB\-k\fP options, \fBcvs\fP remembers the
|
||
+corresponding tag, date, or \fIkflag\fP and continues using it on
|
||
+future updates; use the \fB\-A\fP option to make \fBcvs\fP forget these
|
||
+specifications, and retrieve the ``head'' version of the file).
|
||
+.SP
|
||
+The \fB\-j\fP\fIbranch\fP option
|
||
+merges the changes made between the
|
||
+resulting revision and the revision that it is based on (e.g., if
|
||
+the tag refers to a branch,
|
||
+.B cvs
|
||
+will merge all changes made in
|
||
+that branch into your working file).
|
||
+.SP
|
||
+With two \fB-j\fP options,
|
||
+.B cvs
|
||
+will merge in the changes between the two respective revisions.
|
||
+This can be used to ``remove'' a certain delta from your working file.
|
||
+E.g., If the file foo.c is based on
|
||
+revision 1.6 and I want to remove the changes made between 1.3 and
|
||
+1.5, I might do:
|
||
+.SP
|
||
+.in +1i
|
||
+.ft B
|
||
+.nf
|
||
+example% cvs update -j1.5 -j1.3 foo.c # note the order...
|
||
+.fi
|
||
+.ft P
|
||
+.in -1i
|
||
+.SP
|
||
+In addition, each \fB-j\fP option can contain on optional date
|
||
+specification which, when used with branches, can limit the chosen
|
||
+revision to one within a specific date.
|
||
+An optional date is specified by adding a colon (:) to the tag.
|
||
+.SP
|
||
+.in +1i
|
||
+.ft B
|
||
+.nf
|
||
+-jSymbolic_Tag:Date_Specifier
|
||
+.fi
|
||
+.ft P
|
||
+.in -1i
|
||
+.SP
|
||
+Use the
|
||
+.B \-d
|
||
+option to create any directories that exist in the repository if they're
|
||
+missing from the working directory. (Normally, update acts only on
|
||
+directories and files that were already enrolled in your
|
||
+working directory.) This is useful for updating directories
|
||
+that were created in the repository since the initial
|
||
+\fBcheckout\fP; but it has an unfortunate side effect. If you
|
||
+deliberately avoided certain directories in the repository when you
|
||
+created your working directory (either through use of a module name or by
|
||
+listing explicitly the files and directories you wanted on the
|
||
+command line), then updating with
|
||
+.B \-d
|
||
+will create those directories, which may not be what you want.
|
||
+.SP
|
||
+Use \fB\-I\fP \fIname\fP to ignore files whose names match \fIname\fP
|
||
+(in your working directory) during the update. You can specify
|
||
+\fB\-I\fP more than once on the command line to specify several files
|
||
+to ignore. By default,
|
||
+\fBupdate\fP ignores files whose names match certain patterns; for
|
||
+an up to date list of ignored file names, see the Cederqvist manual (as
|
||
+described in the SEE ALSO section of this manpage).
|
||
+.SP
|
||
+Use
|
||
+.` "\-I !"
|
||
+to avoid ignoring any files at all.
|
||
+.SP
|
||
+Use the
|
||
+.` "\-C"
|
||
+option to overwrite locally modified files with clean copies from
|
||
+the repository (the modified file is saved in
|
||
+`\fB.#\fP\fIfile\fP\fB.\fP\fIrevision\fP', however).
|
||
+.SP
|
||
+The standard \fBcvs\fP command options \fB\-f\fP, \fB\-k\fP,
|
||
+\fB\-l\fP, \fB\-P\fP, \fB\-p\fP, and \fB\-r\fP
|
||
+are also available with \fBupdate\fP.
|
||
+.RE
|
||
+.SH "FILES"
|
||
+For more detailed information on
|
||
+.B cvs
|
||
+supporting files, see
|
||
+.BR cvs ( 5 ).
|
||
+.LP
|
||
+.I
|
||
+Files in home directories:
|
||
+.TP
|
||
+\&.cvsrc
|
||
+The
|
||
+.B cvs
|
||
+initialization file. Lines in this file can be used to specify default
|
||
+options for each
|
||
+.B cvs
|
||
+command. For example the line
|
||
+.` "diff \-c"
|
||
+will ensure that
|
||
+.` "cvs diff"
|
||
+is always passed the
|
||
+.B \-c
|
||
+option in addition to any other options passed on the command line.
|
||
+.TP
|
||
+\&.cvswrappers
|
||
+Specifies wrappers to be used in addition to those specified in the
|
||
+CVSROOT/cvswrappers file in the repository.
|
||
+.LP
|
||
+.I
|
||
+Files in working directories:
|
||
+.TP
|
||
+CVS
|
||
+A directory of \fBcvs\fP administrative files.
|
||
+.I
|
||
+Do not delete.
|
||
+.TP
|
||
+CVS/Entries
|
||
+List and status of files in your working directory.
|
||
+.TP
|
||
+CVS/Entries.Backup
|
||
+A backup of
|
||
+.` "CVS/Entries".
|
||
+.TP
|
||
+CVS/Entries.Static
|
||
+Flag: do not add more entries on
|
||
+.` "cvs update".
|
||
+.TP
|
||
+CVS/Root
|
||
+Pathname to the repository (
|
||
+.SM CVSROOT
|
||
+) location at the time of checkout. This file is used instead
|
||
+of the
|
||
+.SM CVSROOT
|
||
+environment variable if the environment variable is not
|
||
+set. A warning message will be issued when the contents of this
|
||
+file and the
|
||
+.SM CVSROOT
|
||
+environment variable differ. The file may be over-ridden by the
|
||
+presence of the
|
||
+.SM CVS_IGNORE_REMOTE_ROOT
|
||
+environment variable.
|
||
+.TP
|
||
+CVS/Repository
|
||
+Pathname to the corresponding directory in the source repository.
|
||
+.TP
|
||
+CVS/Tag
|
||
+Contains the per-directory ``sticky'' tag or date information.
|
||
+This file is created/updated when you specify
|
||
+.B \-r
|
||
+or
|
||
+.B \-D
|
||
+to the
|
||
+.B checkout
|
||
+or
|
||
+.B update
|
||
+commands, and no files are specified.
|
||
+.TP
|
||
+CVS/Checkin.prog
|
||
+Name of program to run on
|
||
+.` "cvs commit".
|
||
+.TP
|
||
+CVS/Update.prog
|
||
+Name of program to run on
|
||
+.` "cvs update".
|
||
+.LP
|
||
+.I
|
||
+Files in source repositories:
|
||
+.TP
|
||
+$CVSROOT/CVSROOT
|
||
+Directory of global administrative files for repository.
|
||
+.TP
|
||
+CVSROOT/commitinfo,v
|
||
+Records programs for filtering
|
||
+.` "cvs commit"
|
||
+requests.
|
||
+.TP
|
||
+CVSROOT/cvswrappers,v
|
||
+Records
|
||
+.B cvs
|
||
+wrapper commands to be used when checking files into and out of the
|
||
+repository. Wrappers allow the file or directory to be processed
|
||
+on the way in and out of CVS. The intended uses are many, one
|
||
+possible use would be to reformat a C file before the file is checked
|
||
+in, so all of the code in the repository looks the same.
|
||
+.TP
|
||
+CVSROOT/editinfo,v
|
||
+Records programs for editing/validating
|
||
+.` "cvs commit"
|
||
+log entries.
|
||
+.TP
|
||
+CVSROOT/history
|
||
+Log file of \fBcvs\fP transactions.
|
||
+.TP
|
||
+CVSROOT/loginfo,v
|
||
+Records programs for piping
|
||
+.` "cvs commit"
|
||
+log entries.
|
||
+.TP
|
||
+CVSROOT/modules,v
|
||
+Definitions for modules in this repository.
|
||
+.TP
|
||
+CVSROOT/rcsinfo,v
|
||
+Records pathnames to templates used during a
|
||
+.` "cvs commit"
|
||
+operation.
|
||
+.TP
|
||
+CVSROOT/taginfo,v
|
||
+Records programs for validating/logging
|
||
+.` "cvs tag"
|
||
+and
|
||
+.` "cvs rtag"
|
||
+operations.
|
||
+.TP
|
||
+MODULE/Attic
|
||
+Directory for removed source files.
|
||
+.TP
|
||
+#cvs.lock
|
||
+A lock directory created by
|
||
+.B cvs
|
||
+when doing sensitive changes to the
|
||
+source repository.
|
||
+.TP
|
||
+#cvs.tfl.\fIpid\fP
|
||
+Temporary lock file for repository.
|
||
+.TP
|
||
+#cvs.rfl.\fIpid\fP
|
||
+A read lock.
|
||
+.TP
|
||
+#cvs.wfl.\fIpid\fP
|
||
+A write lock.
|
||
+.SH "ENVIRONMENT"
|
||
+.TP
|
||
+.SM CVSROOT
|
||
+Should contain the full pathname to the root of the
|
||
+.B cvs
|
||
+source repository (where the
|
||
+.SM RCS
|
||
+files are kept). This information must be available to \fBcvs\fP for
|
||
+most commands to execute; if
|
||
+.SM CVSROOT
|
||
+is not set, or if you wish to override it for one invocation, you can
|
||
+supply it on the command line:
|
||
+.` "cvs \-d \fIcvsroot cvs_command\fP\|.\|.\|."
|
||
+You may not need to set
|
||
+.SM CVSROOT
|
||
+if your \fBcvs\fP binary has the right path compiled in.
|
||
+.TP
|
||
+.SM CVSREAD
|
||
+If this is set,
|
||
+.B checkout
|
||
+and
|
||
+.B update
|
||
+will try hard to make the files in your working directory read-only.
|
||
+When this is not set, the default behavior is to permit modification
|
||
+of your working files.
|
||
+.TP
|
||
+.SM CVSREADONLYFS
|
||
+If this is set, the
|
||
+.B \-R
|
||
+option is assumed, and
|
||
+.B cvs
|
||
+operates in read-only repository mode.
|
||
+.TP
|
||
+.SM RCSBIN
|
||
+Specifies the full pathname where to find
|
||
+.SM RCS
|
||
+programs, such as
|
||
+.BR co ( 1 )
|
||
+and
|
||
+.BR ci ( 1 )
|
||
+(CVS 1.9 and older).
|
||
+.TP
|
||
+.SM CVSEDITOR
|
||
+Specifies the program to use for recording log messages during
|
||
+.BR commit .
|
||
+If not set, the
|
||
+.SM VISUAL
|
||
+and
|
||
+.SM EDITOR
|
||
+environment variables are tried (in that order).
|
||
+If neither is set, a system-dependent default editor (e.g.,
|
||
+.BR vi )
|
||
+is used.
|
||
+.TP
|
||
+.SM CVS_CLIENT_PORT
|
||
+If this variable is set then
|
||
+.B cvs
|
||
+will use this port in
|
||
+\fIpserver mode\fP
|
||
+rather than the default port (cvspserver 2401).
|
||
+.TP
|
||
+.SM CVS_IGNORE_REMOTE_ROOT
|
||
+If this variable is set then
|
||
+.B cvs
|
||
+will ignore all references to remote repositories in the CVS/Root file.
|
||
+.TP
|
||
+.SM CVS_OPTIONS
|
||
+Specifies a set of default options for
|
||
+.B cvs.
|
||
+These options are interpreted before the startup file (\fI~/.cvsrc\fP) is read
|
||
+and can be overridden by explicit command line parameters.
|
||
+.TP
|
||
+.SM CVS_RSH
|
||
+.B cvs
|
||
+uses the contents of this variable to determine the name of the
|
||
+remote shell command to use when starting a
|
||
+.B cvs
|
||
+server. If this variable is not set then
|
||
+.` "ssh"
|
||
+is used.
|
||
+.TP
|
||
+.SM CVS_SERVER
|
||
+.B cvs
|
||
+uses the contents of this variable to determine the name of the
|
||
+.B cvs
|
||
+server command. If this variable is not set then
|
||
+.` "cvs"
|
||
+is used.
|
||
+.TP
|
||
+.SM CVSWRAPPERS
|
||
+This variable is used by the
|
||
+.` "cvswrappers"
|
||
+script to determine the name of the wrapper file, in addition to the
|
||
+wrappers defaults contained in the repository
|
||
+.SM (CVSROOT/cvswrappers)
|
||
+and the user's home directory (~/.cvswrappers).
|
||
+.SH "AUTHORS"
|
||
+.TP
|
||
+Dick Grune
|
||
+Original author of the
|
||
+.B cvs
|
||
+shell script version posted to
|
||
+.B comp.sources.unix
|
||
+in the volume6 release of December, 1986.
|
||
+Credited with much of the
|
||
+.B cvs
|
||
+conflict resolution algorithms.
|
||
+.TP
|
||
+Brian Berliner
|
||
+Coder and designer of the
|
||
+.B cvs
|
||
+program itself in April, 1989, based on the original work done by Dick.
|
||
+.TP
|
||
+Jeff Polk
|
||
+Helped Brian with the design of the
|
||
+.B cvs
|
||
+module and vendor branch support and author of the
|
||
+.BR checkin ( 1 )
|
||
+shell script (the ancestor of
|
||
+.` "cvs import").
|
||
+.TP
|
||
+And many others too numerous to mention here.
|
||
+.SH "SEE ALSO"
|
||
+The most comprehensive manual for CVS is
|
||
+Version Management with CVS by Per Cederqvist et al. Depending on
|
||
+your system, you may be able to get it with the
|
||
+.B info cvs
|
||
+command or it may be available as cvs.ps (postscript), cvs.texinfo
|
||
+(texinfo source), or cvs.html.
|
||
+.SP
|
||
+For CVS updates, more information on documentation, software related
|
||
+to CVS, development of CVS, and more, see:
|
||
+.in +1i
|
||
+.B http://cvshome.org
|
||
+.B http://www.loria.fr/~molli/cvs-index.html
|
||
+.in -1i
|
||
+.SP
|
||
+.BR ci ( 1 ),
|
||
+.BR co ( 1 ),
|
||
+.BR cvs ( 5 ),
|
||
+.BR cvsbug ( 8 ),
|
||
+.BR diff ( 1 ),
|
||
+.BR grep ( 1 ),
|
||
+.BR patch ( 1 ),
|
||
+.BR rcs ( 1 ),
|
||
+.BR rcsdiff ( 1 ),
|
||
+.BR rcsmerge ( 1 ),
|
||
+.BR rlog ( 1 ).
|
||
Index: man/cvsbug.8
|
||
diff -u src/contrib/cvs/man/cvsbug.8:1.1.1.4 src/contrib/cvs/man/cvsbug.8:1.3
|
||
--- src/contrib/cvs/man/cvsbug.8:1.1.1.4 Mon Sep 2 14:50:19 2002
|
||
+++ man/cvsbug.8 Mon Oct 2 15:43:55 2000
|
||
@@ -17,6 +17,7 @@
|
||
.\" General Public License for more details.
|
||
.\"
|
||
.\" ---------------------------------------------------------------------------
|
||
+.\" FreeBSD: src/contrib/cvs/man/cvsbug.8,v 1.3 2000/10/02 06:43:55 peter Exp $
|
||
.nh
|
||
.TH CVSBUG 8 xVERSIONx "February 1993"
|
||
.SH NAME
|
||
Index: src/buffer.c
|
||
diff -u src/contrib/cvs/src/buffer.c:1.1.1.7 src/contrib/cvs/src/buffer.c:1.5
|
||
--- src/contrib/cvs/src/buffer.c:1.1.1.7 Thu Apr 15 10:01:55 2004
|
||
+++ src/buffer.c Thu Apr 15 10:17:26 2004
|
||
@@ -1,5 +1,7 @@
|
||
/* Code for the buffer data structure. */
|
||
|
||
+/* FreeBSD: src/contrib/cvs/src/buffer.c,v 1.5 2004/04/15 01:17:26 peter Exp $ */
|
||
+
|
||
#include <assert.h>
|
||
#include "cvs.h"
|
||
#include "buffer.h"
|
||
Index: src/checkout.c
|
||
diff -u src/contrib/cvs/src/checkout.c:1.1.1.13 src/contrib/cvs/src/checkout.c:1.5
|
||
--- src/contrib/cvs/src/checkout.c:1.1.1.13 Thu Apr 15 10:01:55 2004
|
||
+++ src/checkout.c Thu Apr 15 10:17:26 2004
|
||
@@ -33,6 +33,10 @@
|
||
* edited by the user, if necessary (when the repository is moved, e.g.)
|
||
*/
|
||
|
||
+/*
|
||
+ * FreeBSD: src/contrib/cvs/src/checkout.c,v 1.5 2004/04/15 01:17:26 peter Exp $
|
||
+ */
|
||
+
|
||
#include <assert.h>
|
||
#include "cvs.h"
|
||
|
||
@@ -50,6 +54,7 @@
|
||
"\t-N\tDon't shorten module paths if -d specified.\n",
|
||
"\t-P\tPrune empty directories.\n",
|
||
"\t-R\tProcess directories recursively.\n",
|
||
+ "\t-T\tCreate Template file from local repository for remote commit.\n",
|
||
"\t-c\t\"cat\" the module database.\n",
|
||
"\t-f\tForce a head revision match if tag/date not found.\n",
|
||
"\t-l\tLocal directory only, not recursive\n",
|
||
@@ -92,6 +97,7 @@
|
||
static char *join_rev1;
|
||
static char *join_rev2;
|
||
static int join_tags_validated;
|
||
+static int pull_template;
|
||
static char *preload_update_dir;
|
||
static char *history_name;
|
||
static enum mtype m_type;
|
||
@@ -139,7 +145,7 @@
|
||
else
|
||
{
|
||
m_type = CHECKOUT;
|
||
- valid_options = "+ANnk:d:flRpQqcsr:D:j:P";
|
||
+ valid_options = "+ANnk:d:flRpTQqcsr:D:j:P";
|
||
valid_usage = checkout_usage;
|
||
}
|
||
|
||
@@ -168,6 +174,9 @@
|
||
case 'n':
|
||
run_module_prog = 0;
|
||
break;
|
||
+ case 'T':
|
||
+ pull_template = 1;
|
||
+ break;
|
||
case 'Q':
|
||
case 'q':
|
||
#ifdef SERVER_SUPPORT
|
||
@@ -1096,8 +1105,7 @@
|
||
force_tag_match, 0 /* !local */ ,
|
||
1 /* update -d */ , aflag, checkout_prune_dirs,
|
||
pipeout, which, join_rev1, join_rev2,
|
||
- preload_update_dir, m_type == CHECKOUT,
|
||
- repository);
|
||
+ preload_update_dir, pull_template, repository);
|
||
goto out;
|
||
}
|
||
|
||
@@ -1153,8 +1161,7 @@
|
||
err += do_update (argc - 1, argv + 1, options, tag, date,
|
||
force_tag_match, local_specified, 1 /* update -d */,
|
||
aflag, checkout_prune_dirs, pipeout, which, join_rev1,
|
||
- join_rev2, preload_update_dir, m_type == CHECKOUT,
|
||
- repository);
|
||
+ join_rev2, preload_update_dir, pull_template, repository);
|
||
out:
|
||
free (preload_update_dir);
|
||
preload_update_dir = oldupdate;
|
||
Index: src/client.c
|
||
diff -u src/contrib/cvs/src/client.c:1.1.1.16 src/contrib/cvs/src/client.c:1.12
|
||
--- src/contrib/cvs/src/client.c:1.1.1.16 Fri Jun 11 04:05:37 2004
|
||
+++ src/client.c Fri Jun 11 04:12:50 2004
|
||
@@ -10,6 +10,10 @@
|
||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
GNU General Public License for more details. */
|
||
|
||
+/*
|
||
+ * FreeBSD: src/contrib/cvs/src/client.c,v 1.12 2004/06/10 19:12:50 peter Exp $
|
||
+ */
|
||
+
|
||
#ifdef HAVE_CONFIG_H
|
||
# include "config.h"
|
||
#endif /* HAVE_CONFIG_H */
|
||
@@ -262,7 +266,7 @@
|
||
}
|
||
|
||
/* Now check the value for root. */
|
||
- if (this_root && current_parsed_root
|
||
+ if (CVSroot_cmdline == NULL && this_root && current_parsed_root
|
||
&& (strcmp (this_root, current_parsed_root->original) != 0))
|
||
{
|
||
/* Don't send this, since the CVSROOTs don't match. */
|
||
@@ -4732,7 +4736,7 @@
|
||
example in CVS_RSH or other such mechanisms to be devised,
|
||
if that is what they want (the manual already tells them
|
||
that). */
|
||
- cvs_rsh = "rsh";
|
||
+ cvs_rsh = "ssh";
|
||
if (!cvs_server)
|
||
cvs_server = "cvs";
|
||
|
||
@@ -4793,7 +4797,7 @@
|
||
int child_pid;
|
||
|
||
if (!cvs_rsh)
|
||
- cvs_rsh = "rsh";
|
||
+ cvs_rsh = "ssh";
|
||
if (!cvs_server)
|
||
cvs_server = "cvs";
|
||
|
||
@@ -5151,7 +5155,8 @@
|
||
}
|
||
else if (vers->ts_rcs == NULL
|
||
|| args->force
|
||
- || strcmp (vers->ts_user, vers->ts_rcs) != 0)
|
||
+ || strcmp (vers->ts_user, vers->ts_rcs) != 0
|
||
+ || (vers->vn_user && *vers->vn_user == '0'))
|
||
{
|
||
if (args->no_contents
|
||
&& supported_request ("Is-modified"))
|
||
Index: src/commit.c
|
||
diff -u src/contrib/cvs/src/commit.c:1.1.1.14 src/contrib/cvs/src/commit.c:1.15
|
||
--- src/contrib/cvs/src/commit.c:1.1.1.14 Fri Jun 11 04:05:37 2004
|
||
+++ src/commit.c Fri Jun 11 04:12:50 2004
|
||
@@ -12,6 +12,7 @@
|
||
*
|
||
* The call is: cvs commit [options] files...
|
||
*
|
||
+ * FreeBSD: src/contrib/cvs/src/commit.c,v 1.15 2004/06/10 19:12:50 peter Exp $
|
||
*/
|
||
|
||
#include <assert.h>
|
||
Index: src/cvs.h
|
||
diff -u src/contrib/cvs/src/cvs.h:1.1.1.15 src/contrib/cvs/src/cvs.h:1.20
|
||
--- src/contrib/cvs/src/cvs.h:1.1.1.15 Fri Jun 11 04:05:38 2004
|
||
+++ src/cvs.h Fri Jun 11 04:12:50 2004
|
||
@@ -9,6 +9,7 @@
|
||
/*
|
||
* basic information used in all source files
|
||
*
|
||
+ * FreeBSD: src/contrib/cvs/src/cvs.h,v 1.20 2004/06/10 19:12:50 peter Exp $
|
||
*/
|
||
|
||
|
||
@@ -194,6 +195,7 @@
|
||
#define CVSROOTADM_WRITERS "writers"
|
||
#define CVSROOTADM_PASSWD "passwd"
|
||
#define CVSROOTADM_CONFIG "config"
|
||
+#define CVSROOTADM_OPTIONS "options"
|
||
|
||
#define CVSNULLREPOS "Emptydir" /* an empty directory */
|
||
|
||
@@ -263,6 +265,8 @@
|
||
#define CVSREAD_ENV "CVSREAD" /* make files read-only */
|
||
#define CVSREAD_DFLT 0 /* writable files by default */
|
||
|
||
+#define CVSREADONLYFS_ENV "CVSREADONLYFS" /* repository is read-only */
|
||
+
|
||
#define TMPDIR_ENV "TMPDIR" /* Temporary directory */
|
||
|
||
#define EDITOR1_ENV "CVSEDITOR" /* which editor to use */
|
||
@@ -372,6 +376,7 @@
|
||
extern int use_editor;
|
||
extern int cvswrite;
|
||
extern mode_t cvsumask;
|
||
+extern char *RCS_citag;
|
||
|
||
|
||
|
||
@@ -390,7 +395,9 @@
|
||
|
||
extern int trace; /* Show all commands */
|
||
extern int noexec; /* Don't modify disk anywhere */
|
||
+extern int readonlyfs; /* fail on all write locks; succeed all read locks */
|
||
extern int logoff; /* Don't write history entry */
|
||
+extern int require_real_user; /* skip CVSROOT/passwd, /etc/passwd users only*/
|
||
|
||
extern int top_level_admin;
|
||
|
||
@@ -498,6 +505,7 @@
|
||
char *strcat_filename_onto_homedir PROTO ((const char *, const char *));
|
||
char *cvs_temp_name PROTO ((void));
|
||
FILE *cvs_temp_file PROTO ((char **filename));
|
||
+void parseopts PROTO ((const char *root));
|
||
|
||
int numdots PROTO((const char *s));
|
||
char *increment_revnum PROTO ((const char *));
|
||
@@ -576,6 +584,7 @@
|
||
void WriteTag PROTO ((const char *dir, const char *tag, const char *date,
|
||
int nonbranch, const char *update_dir,
|
||
const char *repository));
|
||
+void WriteTemplate PROTO ((const char *dir, const char *update_dir));
|
||
void cat_module PROTO((int status));
|
||
void check_entries PROTO((char *dir));
|
||
void close_module PROTO((DBM * db));
|
||
Index: src/cvsbug.in
|
||
diff -u src/contrib/cvs/src/cvsbug.in:1.1.1.3 src/contrib/cvs/src/cvsbug.in:1.2
|
||
--- src/contrib/cvs/src/cvsbug.in:1.1.1.3 Thu Apr 15 10:01:55 2004
|
||
+++ src/cvsbug.in Wed Sep 7 22:39:44 2005
|
||
@@ -109,14 +109,12 @@
|
||
/usr/bin/ypcat passwd 2>/dev/null | cat - /etc/passwd | grep "^$LOGNAME:" |
|
||
cut -f5 -d':' | sed -e 's/,.*//' > $TEMP
|
||
ORIGINATOR="`cat $TEMP`"
|
||
- rm -f $TEMP
|
||
fi
|
||
fi
|
||
|
||
if [ "$ORIGINATOR" = "" ]; then
|
||
grep "^$LOGNAME:" /etc/passwd | cut -f5 -d':' | sed -e 's/,.*//' > $TEMP
|
||
ORIGINATOR="`cat $TEMP`"
|
||
- rm -f $TEMP
|
||
fi
|
||
|
||
if [ -n "$ORGANIZATION" ]; then
|
||
Index: src/diff.c
|
||
diff -u src/contrib/cvs/src/diff.c:1.1.1.12 src/contrib/cvs/src/diff.c:1.21
|
||
--- src/contrib/cvs/src/diff.c:1.1.1.12 Thu Apr 15 10:01:55 2004
|
||
+++ src/diff.c Thu Apr 15 10:31:28 2004
|
||
@@ -12,6 +12,8 @@
|
||
*
|
||
* Without any file arguments, runs diff against all the currently modified
|
||
* files.
|
||
+ *
|
||
+ * FreeBSD: src/contrib/cvs/src/diff.c,v 1.21 2004/04/15 01:31:28 peter Exp $
|
||
*/
|
||
|
||
#include <assert.h>
|
||
@@ -52,6 +54,7 @@
|
||
static char *diff_rev1, *diff_rev2;
|
||
/* Command line dates, from -D option. Malloc'd. */
|
||
static char *diff_date1, *diff_date2;
|
||
+static char *diff_join1, *diff_join2;
|
||
static char *use_rev1, *use_rev2;
|
||
static int have_rev1_label, have_rev2_label;
|
||
|
||
@@ -272,6 +275,8 @@
|
||
diff_rev2 = NULL;
|
||
diff_date1 = NULL;
|
||
diff_date2 = NULL;
|
||
+ diff_join1 = NULL;
|
||
+ diff_join2 = NULL;
|
||
|
||
optind = 0;
|
||
/* FIXME: This should really be allocating an argv to be passed to diff
|
||
@@ -282,7 +287,7 @@
|
||
* to diff.
|
||
*/
|
||
while ((c = getopt_long (argc, argv,
|
||
- "+abcdefhilnpstuwy0123456789BHNRTC:D:F:I:L:U:W:k:r:",
|
||
+ "+abcdefhilnpstuwy0123456789BHNRTC:D:F:I:L:U:W:k:r:j:",
|
||
longopts, &option_index)) != -1)
|
||
{
|
||
switch (c)
|
||
@@ -345,6 +350,27 @@
|
||
free (options);
|
||
options = RCS_check_kflag (optarg);
|
||
break;
|
||
+ case 'j':
|
||
+ {
|
||
+ char *ptr;
|
||
+ char *cpy = strdup(optarg);
|
||
+
|
||
+ if ((ptr = strchr(optarg, ':')) != NULL)
|
||
+ *ptr++ = 0;
|
||
+ if (diff_rev2 != NULL || diff_date2 != NULL)
|
||
+ error (1, 0,
|
||
+ "no more than two revisions/dates can be specified");
|
||
+ if (diff_rev1 != NULL || diff_date1 != NULL) {
|
||
+ diff_join2 = cpy;
|
||
+ diff_rev2 = optarg;
|
||
+ diff_date2 = ptr ? Make_Date(ptr) : NULL;
|
||
+ } else {
|
||
+ diff_join1 = cpy;
|
||
+ diff_rev1 = optarg;
|
||
+ diff_date1 = ptr ? Make_Date(ptr) : NULL;
|
||
+ }
|
||
+ }
|
||
+ break;
|
||
case 'r':
|
||
if (diff_rev2 != NULL || diff_date2 != NULL)
|
||
error (1, 0,
|
||
@@ -393,13 +419,18 @@
|
||
send_option_string (opts);
|
||
if (options[0] != '\0')
|
||
send_arg (options);
|
||
- if (diff_rev1)
|
||
+ if (diff_join1)
|
||
+ option_with_arg ("-j", diff_join1);
|
||
+ else if (diff_rev1)
|
||
option_with_arg ("-r", diff_rev1);
|
||
- if (diff_date1)
|
||
+ else if (diff_date1)
|
||
client_senddate (diff_date1);
|
||
- if (diff_rev2)
|
||
+
|
||
+ if (diff_join2)
|
||
+ option_with_arg ("-j", diff_join2);
|
||
+ else if (diff_rev2)
|
||
option_with_arg ("-r", diff_rev2);
|
||
- if (diff_date2)
|
||
+ else if (diff_date2)
|
||
client_senddate (diff_date2);
|
||
send_arg ("--");
|
||
|
||
@@ -413,28 +444,26 @@
|
||
|
||
send_to_server ("diff\012", 0);
|
||
err = get_responses_and_close ();
|
||
- free (options);
|
||
- options = NULL;
|
||
- return (err);
|
||
- }
|
||
+ } else
|
||
#endif
|
||
-
|
||
- if (diff_rev1 != NULL)
|
||
- tag_check_valid (diff_rev1, argc, argv, local, 0, "");
|
||
- if (diff_rev2 != NULL)
|
||
- tag_check_valid (diff_rev2, argc, argv, local, 0, "");
|
||
-
|
||
- which = W_LOCAL;
|
||
- if (diff_rev1 != NULL || diff_date1 != NULL)
|
||
- which |= W_REPOS | W_ATTIC;
|
||
-
|
||
- wrap_setup ();
|
||
-
|
||
- /* start the recursion processor */
|
||
- err = start_recursion (diff_fileproc, diff_filesdoneproc, diff_dirproc,
|
||
- diff_dirleaveproc, NULL, argc, argv, local,
|
||
- which, 0, CVS_LOCK_READ, (char *) NULL, 1,
|
||
- (char *) NULL);
|
||
+ {
|
||
+ if (diff_rev1 != NULL)
|
||
+ tag_check_valid (diff_rev1, argc, argv, local, 0, "");
|
||
+ if (diff_rev2 != NULL)
|
||
+ tag_check_valid (diff_rev2, argc, argv, local, 0, "");
|
||
+
|
||
+ which = W_LOCAL;
|
||
+ if (diff_rev1 != NULL || diff_date1 != NULL)
|
||
+ which |= W_REPOS | W_ATTIC;
|
||
+
|
||
+ wrap_setup ();
|
||
+
|
||
+ /* start the recursion processor */
|
||
+ err = start_recursion (diff_fileproc, diff_filesdoneproc, diff_dirproc,
|
||
+ diff_dirleaveproc, NULL, argc, argv, local,
|
||
+ which, 0, CVS_LOCK_READ, (char *) NULL, 1,
|
||
+ (char *) NULL);
|
||
+ }
|
||
|
||
/* clean up */
|
||
free (options);
|
||
@@ -444,6 +473,10 @@
|
||
free (diff_date1);
|
||
if (diff_date2 != NULL)
|
||
free (diff_date2);
|
||
+ if (diff_join1 != NULL)
|
||
+ free (diff_join1);
|
||
+ if (diff_join2 != NULL)
|
||
+ free (diff_join2);
|
||
|
||
return (err);
|
||
}
|
||
@@ -489,7 +522,7 @@
|
||
int exists;
|
||
|
||
exists = 0;
|
||
- /* special handling for TAG_HEAD */
|
||
+ /* special handling for TAG_HEAD XXX */
|
||
if (diff_rev1 && strcmp (diff_rev1, TAG_HEAD) == 0)
|
||
{
|
||
char *head =
|
||
@@ -886,7 +919,7 @@
|
||
|
||
if (diff_rev1 || diff_date1)
|
||
{
|
||
- /* special handling for TAG_HEAD */
|
||
+ /* special handling for TAG_HEAD XXX */
|
||
if (diff_rev1 && strcmp (diff_rev1, TAG_HEAD) == 0)
|
||
{
|
||
if (vers->vn_rcs != NULL && vers->srcfile != NULL)
|
||
@@ -902,7 +935,7 @@
|
||
}
|
||
if (diff_rev2 || diff_date2)
|
||
{
|
||
- /* special handling for TAG_HEAD */
|
||
+ /* special handling for TAG_HEAD XXX */
|
||
if (diff_rev2 && strcmp (diff_rev2, TAG_HEAD) == 0)
|
||
{
|
||
if (vers->vn_rcs != NULL && vers->srcfile != NULL)
|
||
Index: src/entries.c
|
||
diff -u src/contrib/cvs/src/entries.c:1.1.1.8 src/contrib/cvs/src/entries.c:1.4
|
||
--- src/contrib/cvs/src/entries.c:1.1.1.8 Thu Apr 15 10:01:55 2004
|
||
+++ src/entries.c Thu Apr 15 10:41:05 2004
|
||
@@ -11,6 +11,9 @@
|
||
* the Entries file.
|
||
*/
|
||
|
||
+/*
|
||
+ * FreeBSD: src/contrib/cvs/src/entries.c,v 1.4 2004/04/15 01:41:05 peter Exp $
|
||
+ */
|
||
#include "cvs.h"
|
||
#include "getline.h"
|
||
|
||
@@ -635,6 +638,72 @@
|
||
return (p);
|
||
}
|
||
|
||
+static char *root_template;
|
||
+
|
||
+static int
|
||
+get_root_template(const char *repository, const char *path)
|
||
+{
|
||
+ if (root_template) {
|
||
+ if (strcmp(path, root_template) == 0)
|
||
+ return(0);
|
||
+ free(root_template);
|
||
+ }
|
||
+ if ((root_template = strdup(path)) == NULL)
|
||
+ return(-1);
|
||
+ return(0);
|
||
+}
|
||
+
|
||
+/*
|
||
+ * Write out/Clear the CVS/Template file.
|
||
+ */
|
||
+void
|
||
+WriteTemplate (dir, update_dir)
|
||
+ const char *dir;
|
||
+ const char *update_dir;
|
||
+{
|
||
+ char *tmp = NULL;
|
||
+ struct stat st1;
|
||
+ struct stat st2;
|
||
+
|
||
+ if (Parse_Info(CVSROOTADM_RCSINFO, "cvs", get_root_template, 1) < 0)
|
||
+ return;
|
||
+
|
||
+ if (asprintf(&tmp, "%s/%s", dir, CVSADM_TEMPLATE) < 0)
|
||
+ error (1, errno, "out of memory");
|
||
+
|
||
+ if (stat(root_template, &st1) == 0) {
|
||
+ if (stat(tmp, &st2) < 0 || st1.st_mtime != st2.st_mtime) {
|
||
+ FILE *fi;
|
||
+ FILE *fo;
|
||
+
|
||
+ if ((fi = open_file(root_template, "r")) != NULL) {
|
||
+ if ((fo = open_file(tmp, "w")) != NULL) {
|
||
+ int n;
|
||
+ char buf[256];
|
||
+
|
||
+ while ((n = fread(buf, 1, sizeof(buf), fi)) > 0)
|
||
+ fwrite(buf, 1, n, fo);
|
||
+ fflush(fo);
|
||
+ if (ferror(fi) || ferror(fo)) {
|
||
+ fclose(fo);
|
||
+ remove(tmp);
|
||
+ error (1, errno, "error copying Template");
|
||
+ } else {
|
||
+ struct timeval times[2];
|
||
+ fclose(fo);
|
||
+ times[0].tv_sec = st1.st_mtime;
|
||
+ times[0].tv_usec = 0;
|
||
+ times[1] = times[0];
|
||
+ utimes(tmp, times);
|
||
+ }
|
||
+ }
|
||
+ fclose(fi);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ free(tmp);
|
||
+}
|
||
+
|
||
/*
|
||
* Write out/Clear the CVS/Tag file.
|
||
*/
|
||
Index: src/filesubr.c
|
||
diff -u src/contrib/cvs/src/filesubr.c:1.1.1.12 src/contrib/cvs/src/filesubr.c:1.12
|
||
--- src/contrib/cvs/src/filesubr.c:1.1.1.12 Fri Jun 11 04:05:37 2004
|
||
+++ src/filesubr.c Fri Jun 11 04:12:50 2004
|
||
@@ -17,6 +17,10 @@
|
||
definitions under operating systems (like, say, Windows NT) with different
|
||
file system semantics. */
|
||
|
||
+/*
|
||
+ * FreeBSD: src/contrib/cvs/src/filesubr.c,v 1.12 2004/06/10 19:12:50 peter Exp $
|
||
+ */
|
||
+
|
||
#include <assert.h>
|
||
#include "cvs.h"
|
||
|
||
@@ -872,8 +876,8 @@
|
||
const char *link;
|
||
{
|
||
char *file = NULL;
|
||
- int buflen = 128;
|
||
- int link_name_len;
|
||
+ int buflen = BUFSIZ;
|
||
+ int linklen;
|
||
|
||
/* Get the name of the file to which `from' is linked.
|
||
FIXME: what portability issues arise here? Are readlink &
|
||
@@ -881,15 +885,15 @@
|
||
do
|
||
{
|
||
file = xrealloc (file, buflen);
|
||
- link_name_len = readlink (link, file, buflen - 1);
|
||
+ errno = 0;
|
||
+ linklen = readlink (link, file, buflen - 1);
|
||
buflen *= 2;
|
||
}
|
||
- while (link_name_len < 0 && errno == ENAMETOOLONG);
|
||
+ while (linklen == -1 && errno == ENAMETOOLONG);
|
||
|
||
- if (link_name_len < 0)
|
||
+ if (linklen == -1)
|
||
error (1, errno, "cannot readlink %s", link);
|
||
-
|
||
- file[link_name_len] = '\0';
|
||
+ file[linklen] = '\0';
|
||
|
||
return file;
|
||
}
|
||
Index: src/import.c
|
||
diff -u src/contrib/cvs/src/import.c:1.1.1.13 src/contrib/cvs/src/import.c:1.12
|
||
--- src/contrib/cvs/src/import.c:1.1.1.13 Thu Apr 15 10:01:55 2004
|
||
+++ src/import.c Thu Apr 15 10:17:27 2004
|
||
@@ -14,6 +14,8 @@
|
||
* VendorReleTag Tag for this particular release
|
||
*
|
||
* Additional arguments specify more Vendor Release Tags.
|
||
+ *
|
||
+ * FreeBSD: src/contrib/cvs/src/import.c,v 1.12 2004/04/15 01:17:27 peter Exp $
|
||
*/
|
||
|
||
#include "cvs.h"
|
||
Index: src/lock.c
|
||
diff -u src/contrib/cvs/src/lock.c:1.1.1.12 src/contrib/cvs/src/lock.c:1.13
|
||
--- src/contrib/cvs/src/lock.c:1.1.1.12 Thu Apr 15 10:01:55 2004
|
||
+++ src/lock.c Thu Apr 15 10:17:27 2004
|
||
@@ -8,6 +8,8 @@
|
||
* Set Lock
|
||
*
|
||
* Lock file support for CVS.
|
||
+ *
|
||
+ * FreeBSD: src/contrib/cvs/src/lock.c,v 1.13 2004/04/15 01:17:27 peter Exp $
|
||
*/
|
||
|
||
/* The node Concurrency in doc/cvs.texinfo has a brief introduction to
|
||
@@ -407,7 +409,7 @@
|
||
(void) fprintf (stderr, "%s-> Reader_Lock(%s)\n", CLIENT_SERVER_STR,
|
||
xrepository);
|
||
|
||
- if (noexec)
|
||
+ if (noexec || readonlyfs)
|
||
return 0;
|
||
|
||
/* we only do one directory at a time for read locks! */
|
||
@@ -484,6 +486,11 @@
|
||
if (noexec)
|
||
return 0;
|
||
|
||
+ if (readonlyfs) {
|
||
+ error (0, 0, "write lock failed - read-only repository");
|
||
+ return (1);
|
||
+ }
|
||
+
|
||
/* We only know how to do one list at a time */
|
||
if (locklist != (List *) NULL)
|
||
{
|
||
Index: src/log.c
|
||
diff -u src/contrib/cvs/src/log.c:1.1.1.12 src/contrib/cvs/src/log.c:1.2
|
||
--- src/contrib/cvs/src/log.c:1.1.1.12 Fri Jun 11 04:05:37 2004
|
||
+++ src/log.c Tue Jul 6 17:10:38 2004
|
||
@@ -10,6 +10,8 @@
|
||
* Prints the RCS "log" (rlog) information for the specified files. With no
|
||
* argument, prints the log information for all the files in the directory
|
||
* (recursive by default).
|
||
+ *
|
||
+ * FreeBSD: src/contrib/cvs/src/log.c,v 1.2 2004/07/06 08:10:38 des Exp $
|
||
*/
|
||
|
||
#include "cvs.h"
|
||
@@ -1605,8 +1607,8 @@
|
||
&sec);
|
||
if (year < 1900)
|
||
year += 1900;
|
||
- sprintf (buf, "%04d/%02d/%02d %02d:%02d:%02d", year, mon, mday,
|
||
- hour, min, sec);
|
||
+ sprintf (buf, "%04d%c%02d%c%02d %02d:%02d:%02d",
|
||
+ year, datesep, mon, datesep, mday, hour, min, sec);
|
||
cvs_output (buf, 0);
|
||
|
||
cvs_output ("; author: ", 0);
|
||
Index: src/login.c
|
||
diff -u src/contrib/cvs/src/login.c:1.1.1.9 src/contrib/cvs/src/login.c:1.9
|
||
--- src/contrib/cvs/src/login.c:1.1.1.9 Thu Apr 15 10:01:55 2004
|
||
+++ src/login.c Sat Apr 23 02:58:25 2005
|
||
@@ -5,6 +5,8 @@
|
||
* specified in the README file that comes with CVS.
|
||
*
|
||
* Allow user to log in for an authenticating server.
|
||
+ *
|
||
+ * FreeBSD: src/contrib/cvs/src/login.c,v 1.9 2005/04/22 17:58:25 simon Exp $
|
||
*/
|
||
|
||
#include "cvs.h"
|
||
@@ -114,7 +116,7 @@
|
||
|
||
if (isspace(*(linebuf + 1)))
|
||
/* special case since strtoul ignores leading white space */
|
||
- entry_version = 0;
|
||
+ q = linebuf + 1;
|
||
else
|
||
entry_version = strtoul (linebuf + 1, &q, 10);
|
||
|
||
Index: src/logmsg.c
|
||
diff -u src/contrib/cvs/src/logmsg.c:1.1.1.10 src/contrib/cvs/src/logmsg.c:1.12
|
||
--- src/contrib/cvs/src/logmsg.c:1.1.1.10 Thu Apr 15 10:01:55 2004
|
||
+++ src/logmsg.c Thu Apr 15 10:17:27 2004
|
||
@@ -4,6 +4,8 @@
|
||
*
|
||
* You may distribute under the terms of the GNU General Public License as
|
||
* specified in the README file that comes with the CVS source distribution.
|
||
+ *
|
||
+ * FreeBSD: src/contrib/cvs/src/logmsg.c,v 1.12 2004/04/15 01:17:27 peter Exp $
|
||
*/
|
||
|
||
#include <assert.h>
|
||
@@ -226,6 +228,8 @@
|
||
(*messagep)[strlen (*messagep) - 1] != '\n')
|
||
(void) fprintf (fp, "\n");
|
||
}
|
||
+ else
|
||
+ (void) fprintf (fp, "\n");
|
||
|
||
if (repository != NULL)
|
||
/* tack templates on if necessary */
|
||
Index: src/main.c
|
||
diff -u src/contrib/cvs/src/main.c:1.1.1.13 src/contrib/cvs/src/main.c:1.25
|
||
--- src/contrib/cvs/src/main.c:1.1.1.13 Thu Apr 15 10:01:55 2004
|
||
+++ src/main.c Tue Jul 6 17:10:38 2004
|
||
@@ -10,10 +10,12 @@
|
||
* Credit to Dick Grune, Vrije Universiteit, Amsterdam, for writing
|
||
* the shell-script CVS system that this is based on.
|
||
*
|
||
+ * FreeBSD: src/contrib/cvs/src/main.c,v 1.25 2004/07/06 08:10:38 des Exp $
|
||
*/
|
||
|
||
#include <assert.h>
|
||
#include "cvs.h"
|
||
+#include "prepend_args.h"
|
||
|
||
#ifdef HAVE_WINSOCK_H
|
||
#include <winsock.h>
|
||
@@ -41,6 +43,8 @@
|
||
int quiet = 0;
|
||
int trace = 0;
|
||
int noexec = 0;
|
||
+int readonlyfs = 0;
|
||
+int require_real_user = 0;
|
||
int logoff = 0;
|
||
|
||
/* Set if we should be writing CVSADM directories at top level. At
|
||
@@ -106,7 +110,7 @@
|
||
{
|
||
{ "add", "ad", "new", add, CVS_CMD_MODIFIES_REPOSITORY | CVS_CMD_USES_WORK_DIR },
|
||
{ "admin", "adm", "rcs", admin, CVS_CMD_MODIFIES_REPOSITORY | CVS_CMD_USES_WORK_DIR },
|
||
- { "annotate", "ann", NULL, annotate, CVS_CMD_USES_WORK_DIR },
|
||
+ { "annotate", "ann", "blame", annotate, CVS_CMD_USES_WORK_DIR },
|
||
{ "checkout", "co", "get", checkout, 0 },
|
||
{ "commit", "ci", "com", commit, CVS_CMD_MODIFIES_REPOSITORY | CVS_CMD_USES_WORK_DIR },
|
||
{ "diff", "di", "dif", diff, CVS_CMD_USES_WORK_DIR },
|
||
@@ -247,8 +251,10 @@
|
||
" -q Cause CVS to be somewhat quiet.\n",
|
||
" -r Make checked-out files read-only.\n",
|
||
" -w Make checked-out files read-write (default).\n",
|
||
+ " -g Force group-write perms on checked-out files.\n",
|
||
" -n Do not execute anything that will change the disk.\n",
|
||
" -t Show trace of program execution -- try with -n.\n",
|
||
+ " -R Assume repository is read-only, such as CDROM\n",
|
||
" -v CVS version and copyright.\n",
|
||
" -T tmpdir Use 'tmpdir' for temporary files.\n",
|
||
" -e editor Use 'editor' for editing log information.\n",
|
||
@@ -406,7 +412,7 @@
|
||
int help = 0; /* Has the user asked for help? This
|
||
lets us support the `cvs -H cmd'
|
||
convention to give help for cmd. */
|
||
- static const char short_options[] = "+Qqrwtnvb:T:e:d:Hfz:s:xa";
|
||
+ static const char short_options[] = "+QqgrwtnRvb:T:e:d:Hfz:s:xaU";
|
||
static struct option long_options[] =
|
||
{
|
||
{"help", 0, NULL, 'H'},
|
||
@@ -469,6 +475,12 @@
|
||
}
|
||
if (getenv (CVSREAD_ENV) != NULL)
|
||
cvswrite = 0;
|
||
+ if (getenv (CVSREADONLYFS_ENV) != NULL) {
|
||
+ readonlyfs = 1;
|
||
+ logoff = 1;
|
||
+ }
|
||
+
|
||
+ prepend_default_options (getenv ("CVS_OPTIONS"), &argc, &argv);
|
||
|
||
/* Set this to 0 to force getopt initialization. getopt() sets
|
||
this to 1 internally. */
|
||
@@ -531,9 +543,20 @@
|
||
case 'w':
|
||
cvswrite = 1;
|
||
break;
|
||
+ case 'g':
|
||
+ /*
|
||
+ * force full group write perms (used for shared checked-out
|
||
+ * source trees, see manual page)
|
||
+ */
|
||
+ umask(umask(077) & 007);
|
||
+ break;
|
||
case 't':
|
||
trace = 1;
|
||
break;
|
||
+ case 'R':
|
||
+ readonlyfs = 1;
|
||
+ logoff = 1;
|
||
+ break;
|
||
case 'n':
|
||
noexec = 1;
|
||
logoff = 1;
|
||
@@ -623,6 +646,11 @@
|
||
We will issue an error later if stream
|
||
authentication is not supported. */
|
||
break;
|
||
+ case 'U':
|
||
+#ifdef SERVER_SUPPORT
|
||
+ require_real_user = 1;
|
||
+#endif
|
||
+ break;
|
||
case '?':
|
||
default:
|
||
usage (usg);
|
||
@@ -749,6 +777,12 @@
|
||
(void) putenv (env);
|
||
/* do not free env, as putenv has control of it */
|
||
}
|
||
+ {
|
||
+ char *env;
|
||
+ env = xmalloc (sizeof "CVS_PID=" + 32); /* XXX pid < 10^32 */
|
||
+ (void) sprintf (env, "CVS_PID=%ld", (long) getpid ());
|
||
+ (void) putenv (env);
|
||
+ }
|
||
#endif
|
||
|
||
#ifndef DONT_USE_SIGNALS
|
||
@@ -974,6 +1008,9 @@
|
||
if we didn't, then there would be no way to check in a new
|
||
CVSROOT/config file to fix the broken one! */
|
||
parse_config (current_parsed_root->directory);
|
||
+
|
||
+ /* Now is a convenient time to read CVSROOT/options */
|
||
+ parseopts(current_parsed_root->directory);
|
||
}
|
||
|
||
#ifdef CLIENT_SUPPORT
|
||
@@ -1166,3 +1203,64 @@
|
||
(void) fprintf (stderr, *cpp);
|
||
error_exit ();
|
||
}
|
||
+
|
||
+void
|
||
+parseopts(root)
|
||
+ const char *root;
|
||
+{
|
||
+ char path[PATH_MAX];
|
||
+ int save_errno;
|
||
+ char buf[1024];
|
||
+ const char *p;
|
||
+ char *q;
|
||
+ FILE *fp;
|
||
+
|
||
+ if (root == NULL) {
|
||
+ printf("no CVSROOT in parseopts\n");
|
||
+ return;
|
||
+ }
|
||
+ p = strchr (root, ':');
|
||
+ if (p)
|
||
+ p++;
|
||
+ else
|
||
+ p = root;
|
||
+ if (p == NULL) {
|
||
+ printf("mangled CVSROOT in parseopts\n");
|
||
+ return;
|
||
+ }
|
||
+ (void) sprintf (path, "%s/%s/%s", p, CVSROOTADM, CVSROOTADM_OPTIONS);
|
||
+ if ((fp = fopen(path, "r")) != NULL) {
|
||
+ while (fgets(buf, sizeof buf, fp) != NULL) {
|
||
+ if (buf[0] == '#')
|
||
+ continue;
|
||
+ q = strrchr(buf, '\n');
|
||
+ if (q)
|
||
+ *q = '\0';
|
||
+
|
||
+ if (!strcmp(buf, "iso8601")) {
|
||
+ datesep = '-';
|
||
+ }
|
||
+ if (!strncmp(buf, "tag=", 4)) {
|
||
+ char *what;
|
||
+ char *rcs_localid;
|
||
+
|
||
+ rcs_localid = buf + 4;
|
||
+ RCS_setlocalid(rcs_localid);
|
||
+ }
|
||
+ if (!strncmp(buf, "tagexpand=", 10)) {
|
||
+ char *what;
|
||
+ char *rcs_incexc;
|
||
+
|
||
+ rcs_incexc = buf + 10;
|
||
+ RCS_setincexc(rcs_incexc);
|
||
+ }
|
||
+ /*
|
||
+ * OpenBSD has a "umask=" and "dlimit=" command, we silently
|
||
+ * ignore them here since they are not much use to us. cvsumask
|
||
+ * defaults to 002 already, and the dlimit (data size limit)
|
||
+ * should really be handled elsewhere (eg: login.conf).
|
||
+ */
|
||
+ }
|
||
+ fclose(fp);
|
||
+ }
|
||
+}
|
||
Index: src/mkmodules.c
|
||
diff -u src/contrib/cvs/src/mkmodules.c:1.1.1.12 src/contrib/cvs/src/mkmodules.c:1.13
|
||
--- src/contrib/cvs/src/mkmodules.c:1.1.1.12 Thu Apr 15 10:01:55 2004
|
||
+++ src/mkmodules.c Thu Apr 15 10:17:27 2004
|
||
@@ -3,7 +3,10 @@
|
||
* Copyright (c) 1989-1992, Brian Berliner
|
||
*
|
||
* You may distribute under the terms of the GNU General Public License as
|
||
- * specified in the README file that comes with the CVS kit. */
|
||
+ * specified in the README file that comes with the CVS kit.
|
||
+ *
|
||
+ * FreeBSD: src/contrib/cvs/src/mkmodules.c,v 1.13 2004/04/15 01:17:27 peter Exp $
|
||
+ */
|
||
|
||
#include "cvs.h"
|
||
#include "getline.h"
|
||
Index: src/parseinfo.c
|
||
diff -u src/contrib/cvs/src/parseinfo.c:1.1.1.12 src/contrib/cvs/src/parseinfo.c:1.3
|
||
--- src/contrib/cvs/src/parseinfo.c:1.1.1.12 Thu Apr 15 10:01:55 2004
|
||
+++ src/parseinfo.c Thu Apr 15 10:17:27 2004
|
||
@@ -4,6 +4,8 @@
|
||
*
|
||
* You may distribute under the terms of the GNU General Public License as
|
||
* specified in the README file that comes with the CVS source distribution.
|
||
+ *
|
||
+ * FreeBSD: src/contrib/cvs/src/parseinfo.c,v 1.3 2004/04/15 01:17:27 peter Exp $
|
||
*/
|
||
|
||
#include "cvs.h"
|
||
@@ -350,6 +352,25 @@
|
||
goto error_return;
|
||
}
|
||
}
|
||
+ else if (strcmp (line, "tag") == 0) {
|
||
+ RCS_setlocalid(p);
|
||
+ }
|
||
+ else if (strcmp (line, "umask") == 0) {
|
||
+ cvsumask = (mode_t)(strtol(p, NULL, 8) & 0777);
|
||
+ }
|
||
+ else if (strcmp (line, "dlimit") == 0) {
|
||
+#ifdef BSD
|
||
+#include <sys/resource.h>
|
||
+ struct rlimit rl;
|
||
+
|
||
+ if (getrlimit(RLIMIT_DATA, &rl) != -1) {
|
||
+ rl.rlim_cur = atoi(p);
|
||
+ rl.rlim_cur *= 1024;
|
||
+
|
||
+ (void) setrlimit(RLIMIT_DATA, &rl);
|
||
+ }
|
||
+#endif /* BSD */
|
||
+ }
|
||
else if (strcmp (line, "PreservePermissions") == 0)
|
||
{
|
||
if (strcmp (p, "no") == 0)
|
||
Index: src/patch.c
|
||
diff -u src/contrib/cvs/src/patch.c:1.1.1.13 src/contrib/cvs/src/patch.c:1.2
|
||
--- src/contrib/cvs/src/patch.c:1.1.1.13 Thu Apr 15 10:01:55 2004
|
||
+++ src/patch.c Sat Apr 23 02:58:25 2005
|
||
@@ -10,6 +10,8 @@
|
||
* Create a Larry Wall format "patch" file between a previous release and the
|
||
* current head of a module, or between two releases. Can specify the
|
||
* release as either a date or a revision number.
|
||
+ *
|
||
+ * FreeBSD: src/contrib/cvs/src/patch.c,v 1.2 2005/04/22 17:58:25 simon Exp $
|
||
*/
|
||
|
||
#include <assert.h>
|
||
@@ -385,6 +387,7 @@
|
||
struct utimbuf t;
|
||
char *vers_tag, *vers_head;
|
||
char *rcs = NULL;
|
||
+ char *rcs_orig = NULL;
|
||
RCSNode *rcsfile;
|
||
FILE *fp1, *fp2, *fp3;
|
||
int ret = 0;
|
||
@@ -415,7 +418,7 @@
|
||
if ((rcsfile->flags & VALID) && (rcsfile->flags & INATTIC))
|
||
isattic = 1;
|
||
|
||
- rcs = xmalloc (strlen (finfo->file) + sizeof (RCSEXT) + 5);
|
||
+ rcs_orig = rcs = xmalloc (strlen (finfo->file) + sizeof (RCSEXT) + 5);
|
||
(void) sprintf (rcs, "%s%s", finfo->file, RCSEXT);
|
||
|
||
/* if vers_head is NULL, may have been removed from the release */
|
||
@@ -757,8 +760,8 @@
|
||
free (vers_tag);
|
||
if (vers_head != NULL)
|
||
free (vers_head);
|
||
- if (rcs != NULL)
|
||
- free (rcs);
|
||
+ if (rcs_orig)
|
||
+ free (rcs_orig);
|
||
return ret;
|
||
}
|
||
|
||
Index: src/rcs.c
|
||
diff -u src/contrib/cvs/src/rcs.c:1.1.1.14 src/contrib/cvs/src/rcs.c:1.28
|
||
--- src/contrib/cvs/src/rcs.c:1.1.1.14 Thu Apr 15 10:01:55 2004
|
||
+++ src/rcs.c Sat Apr 23 02:58:25 2005
|
||
@@ -6,6 +6,8 @@
|
||
*
|
||
* The routines contained in this file do all the rcs file parsing and
|
||
* manipulation
|
||
+ *
|
||
+ * FreeBSD: src/contrib/cvs/src/rcs.c,v 1.28 2005/04/22 17:58:25 simon Exp $
|
||
*/
|
||
|
||
#include <assert.h>
|
||
@@ -24,6 +26,7 @@
|
||
# endif
|
||
#endif
|
||
|
||
+int datesep = '/';
|
||
int preserve_perms = 0;
|
||
|
||
/* The RCS -k options, and a set of enums that must match the array.
|
||
@@ -134,6 +137,8 @@
|
||
evaluates its arguments multiple times. */
|
||
#define STREQ(a, b) (*(char *)(a) == *(char *)(b) && strcmp ((a), (b)) == 0)
|
||
|
||
+static char * getfullCVSname PROTO ((char *, char **));
|
||
+
|
||
/*
|
||
* We don't want to use isspace() from the C library because:
|
||
*
|
||
@@ -2502,13 +2507,25 @@
|
||
char *rev;
|
||
{
|
||
int rev_num;
|
||
- char *xrev, *test_branch;
|
||
+ char *xrev, *test_branch, *local_branch_num;
|
||
|
||
xrev = xmalloc (strlen (rev) + 14); /* enough for .0.number */
|
||
check_rev = xrev;
|
||
|
||
+ local_branch_num = getenv("CVS_LOCAL_BRANCH_NUM");
|
||
+ if (local_branch_num)
|
||
+ {
|
||
+ rev_num = atoi(local_branch_num);
|
||
+ if (rev_num < 2)
|
||
+ rev_num = 2;
|
||
+ else
|
||
+ rev_num &= ~1;
|
||
+ }
|
||
+ else
|
||
+ rev_num = 2;
|
||
+
|
||
/* only look at even numbered branches */
|
||
- for (rev_num = 2; ; rev_num += 2)
|
||
+ for ( ; ; rev_num += 2)
|
||
{
|
||
/* see if the physical branch exists */
|
||
(void) sprintf (xrev, "%s.%d", rev, rev_num);
|
||
@@ -3024,8 +3041,7 @@
|
||
if (retval != NULL)
|
||
return (retval);
|
||
|
||
- if (!force_tag_match ||
|
||
- (vers != NULL && RCS_datecmp (vers->date, date) <= 0))
|
||
+ if (vers && (!force_tag_match || RCS_datecmp (vers->date, date) <= 0))
|
||
return xstrdup (vers->version);
|
||
else
|
||
return NULL;
|
||
@@ -3481,27 +3497,31 @@
|
||
{
|
||
const char *string;
|
||
size_t len;
|
||
+ int expandit;
|
||
};
|
||
#define KEYWORD_INIT(s) (s), sizeof (s) - 1
|
||
-static const struct rcs_keyword keywords[] =
|
||
+static struct rcs_keyword keywords[] =
|
||
{
|
||
- { KEYWORD_INIT ("Author") },
|
||
- { KEYWORD_INIT ("Date") },
|
||
- { KEYWORD_INIT ("Header") },
|
||
- { KEYWORD_INIT ("Id") },
|
||
- { KEYWORD_INIT ("Locker") },
|
||
- { KEYWORD_INIT ("Log") },
|
||
- { KEYWORD_INIT ("Name") },
|
||
- { KEYWORD_INIT ("RCSfile") },
|
||
- { KEYWORD_INIT ("Revision") },
|
||
- { KEYWORD_INIT ("Source") },
|
||
- { KEYWORD_INIT ("State") },
|
||
- { NULL, 0 }
|
||
+ { KEYWORD_INIT ("Author"), 1 },
|
||
+ { KEYWORD_INIT ("Date"), 1 },
|
||
+ { KEYWORD_INIT ("CVSHeader"), 1 },
|
||
+ { KEYWORD_INIT ("Header"), 1 },
|
||
+ { KEYWORD_INIT ("Id"), 1 },
|
||
+ { KEYWORD_INIT ("Locker"), 1 },
|
||
+ { KEYWORD_INIT ("Log"), 1 },
|
||
+ { KEYWORD_INIT ("Name"), 1 },
|
||
+ { KEYWORD_INIT ("RCSfile"), 1 },
|
||
+ { KEYWORD_INIT ("Revision"), 1 },
|
||
+ { KEYWORD_INIT ("Source"), 1 },
|
||
+ { KEYWORD_INIT ("State"), 1 },
|
||
+ { NULL, 0, 0 },
|
||
+ { NULL, 0, 0 }
|
||
};
|
||
enum keyword
|
||
{
|
||
KEYWORD_AUTHOR = 0,
|
||
KEYWORD_DATE,
|
||
+ KEYWORD_CVSHEADER,
|
||
KEYWORD_HEADER,
|
||
KEYWORD_ID,
|
||
KEYWORD_LOCKER,
|
||
@@ -3510,8 +3530,10 @@
|
||
KEYWORD_RCSFILE,
|
||
KEYWORD_REVISION,
|
||
KEYWORD_SOURCE,
|
||
- KEYWORD_STATE
|
||
+ KEYWORD_STATE,
|
||
+ KEYWORD_LOCALID
|
||
};
|
||
+enum keyword keyword_local = KEYWORD_ID;
|
||
|
||
/* Convert an RCS date string into a readable string. This is like
|
||
the RCS date2str function. */
|
||
@@ -3527,8 +3549,8 @@
|
||
&sec);
|
||
if (year < 1900)
|
||
year += 1900;
|
||
- sprintf (buf, "%04d/%02d/%02d %02d:%02d:%02d", year, mon, mday,
|
||
- hour, min, sec);
|
||
+ sprintf (buf, "%04d%c%02d%c%02d %02d:%02d:%02d",
|
||
+ year, datesep, mon, datesep, mday, hour, min, sec);
|
||
return xstrdup (buf);
|
||
}
|
||
|
||
@@ -3689,7 +3711,8 @@
|
||
slen = s - srch;
|
||
for (keyword = keywords; keyword->string != NULL; keyword++)
|
||
{
|
||
- if (keyword->len == slen
|
||
+ if (keyword->expandit
|
||
+ && keyword->len == slen
|
||
&& strncmp (keyword->string, srch, slen) == 0)
|
||
{
|
||
break;
|
||
@@ -3736,15 +3759,25 @@
|
||
free_value = 1;
|
||
break;
|
||
|
||
+ case KEYWORD_CVSHEADER:
|
||
case KEYWORD_HEADER:
|
||
case KEYWORD_ID:
|
||
+ case KEYWORD_LOCALID:
|
||
{
|
||
const char *path;
|
||
int free_path;
|
||
char *date;
|
||
+ char *old_path;
|
||
|
||
- if (kw == KEYWORD_HEADER)
|
||
+ old_path = NULL;
|
||
+ if (kw == KEYWORD_HEADER ||
|
||
+ (kw == KEYWORD_LOCALID &&
|
||
+ keyword_local == KEYWORD_HEADER))
|
||
path = rcs->path;
|
||
+ else if (kw == KEYWORD_CVSHEADER ||
|
||
+ (kw == KEYWORD_LOCALID &&
|
||
+ keyword_local == KEYWORD_CVSHEADER))
|
||
+ path = getfullCVSname(rcs->path, &old_path);
|
||
else
|
||
path = last_component (rcs->path);
|
||
path = escape_keyword_value (path, &free_path);
|
||
@@ -3767,6 +3800,8 @@
|
||
* and we can discard the const.
|
||
*/
|
||
free ((char *)path);
|
||
+ if (old_path)
|
||
+ free (old_path);
|
||
free (date);
|
||
free_value = 1;
|
||
}
|
||
@@ -4103,7 +4138,7 @@
|
||
size_t len;
|
||
int free_value = 0;
|
||
char *log = NULL;
|
||
- size_t loglen;
|
||
+ size_t loglen = 0;
|
||
Node *vp = NULL;
|
||
#ifdef PRESERVE_PERMISSIONS_SUPPORT
|
||
uid_t rcs_owner = (uid_t) -1;
|
||
@@ -7421,7 +7456,7 @@
|
||
|
||
for (ln = 0; ln < headlines.nlines; ++ln)
|
||
{
|
||
- char buf[80];
|
||
+ char *buf;
|
||
/* Period which separates year from month in date. */
|
||
char *ym;
|
||
/* Period which separates month from day in date. */
|
||
@@ -7432,10 +7467,12 @@
|
||
if (prvers == NULL)
|
||
prvers = vers;
|
||
|
||
+ buf = xmalloc (strlen (prvers->version) + 24);
|
||
sprintf (buf, "%-12s (%-8.8s ",
|
||
prvers->version,
|
||
prvers->author);
|
||
cvs_output (buf, 0);
|
||
+ free (buf);
|
||
|
||
/* Now output the date. */
|
||
ym = strchr (prvers->date, '.');
|
||
@@ -8620,3 +8657,105 @@
|
||
}
|
||
return label;
|
||
}
|
||
+
|
||
+void
|
||
+RCS_setlocalid (arg)
|
||
+ const char *arg;
|
||
+{
|
||
+ char *copy, *next, *key;
|
||
+
|
||
+ copy = xstrdup(arg);
|
||
+ next = copy;
|
||
+ key = strtok(next, "=");
|
||
+
|
||
+ keywords[KEYWORD_LOCALID].string = xstrdup(key);
|
||
+ keywords[KEYWORD_LOCALID].len = strlen(key);
|
||
+ keywords[KEYWORD_LOCALID].expandit = 1;
|
||
+
|
||
+ /* options? */
|
||
+ while (key = strtok(NULL, ",")) {
|
||
+ if (!strcmp(key, keywords[KEYWORD_ID].string))
|
||
+ keyword_local = KEYWORD_ID;
|
||
+ else if (!strcmp(key, keywords[KEYWORD_HEADER].string))
|
||
+ keyword_local = KEYWORD_HEADER;
|
||
+ else if (!strcmp(key, keywords[KEYWORD_CVSHEADER].string))
|
||
+ keyword_local = KEYWORD_CVSHEADER;
|
||
+ else
|
||
+ error(1, 0, "Unknown LocalId mode: %s", key);
|
||
+ }
|
||
+ free(copy);
|
||
+}
|
||
+
|
||
+void
|
||
+RCS_setincexc (arg)
|
||
+ const char *arg;
|
||
+{
|
||
+ char *key;
|
||
+ char *copy, *next;
|
||
+ int include = 0;
|
||
+ struct rcs_keyword *keyword;
|
||
+
|
||
+ copy = xstrdup(arg);
|
||
+ next = copy;
|
||
+ switch (*next++) {
|
||
+ case 'e':
|
||
+ include = 0;
|
||
+ break;
|
||
+ case 'i':
|
||
+ include = 1;
|
||
+ break;
|
||
+ default:
|
||
+ free(copy);
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ if (include)
|
||
+ for (keyword = keywords; keyword->string != NULL; keyword++)
|
||
+ {
|
||
+ keyword->expandit = 0;
|
||
+ }
|
||
+
|
||
+ key = strtok(next, ",");
|
||
+ while (key) {
|
||
+ for (keyword = keywords; keyword->string != NULL; keyword++) {
|
||
+ if (strcmp (keyword->string, key) == 0)
|
||
+ keyword->expandit = include;
|
||
+ }
|
||
+ key = strtok(NULL, ",");
|
||
+ }
|
||
+ free(copy);
|
||
+ return;
|
||
+}
|
||
+
|
||
+#define ATTIC "/" CVSATTIC
|
||
+static char *
|
||
+getfullCVSname(CVSname, pathstore)
|
||
+ char *CVSname, **pathstore;
|
||
+{
|
||
+ if (current_parsed_root->directory) {
|
||
+ int rootlen;
|
||
+ char *c = NULL;
|
||
+ int alen = sizeof(ATTIC) - 1;
|
||
+
|
||
+ *pathstore = xstrdup(CVSname);
|
||
+ if ((c = strrchr(*pathstore, '/')) != NULL) {
|
||
+ if (c - *pathstore >= alen) {
|
||
+ if (!strncmp(c - alen, ATTIC, alen)) {
|
||
+ while (*c != '\0') {
|
||
+ *(c - alen) = *c;
|
||
+ c++;
|
||
+ }
|
||
+ *(c - alen) = '\0';
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ rootlen = strlen(current_parsed_root->directory);
|
||
+ if (!strncmp(*pathstore, current_parsed_root->directory, rootlen) &&
|
||
+ (*pathstore)[rootlen] == '/')
|
||
+ CVSname = (*pathstore + rootlen + 1);
|
||
+ else
|
||
+ CVSname = (*pathstore);
|
||
+ }
|
||
+ return CVSname;
|
||
+}
|
||
Index: src/rcs.h
|
||
diff -u src/contrib/cvs/src/rcs.h:1.1.1.10 src/contrib/cvs/src/rcs.h:1.11
|
||
--- src/contrib/cvs/src/rcs.h:1.1.1.10 Thu Apr 15 10:01:55 2004
|
||
+++ src/rcs.h Tue Jul 6 17:10:38 2004
|
||
@@ -6,6 +6,8 @@
|
||
* specified in the README file that comes with the CVS source distribution.
|
||
*
|
||
* RCS source control definitions needed by rcs.c and friends
|
||
+ *
|
||
+ * FreeBSD: src/contrib/cvs/src/rcs.h,v 1.11 2004/07/06 08:10:38 des Exp $
|
||
*/
|
||
|
||
/* Strings which indicate a conflict if they occur at the start of a line. */
|
||
@@ -244,8 +246,11 @@
|
||
void RCS_deltas PROTO ((RCSNode *, FILE *, struct rcsbuffer *, const char *,
|
||
enum rcs_delta_op, char **, size_t *,
|
||
char **, size_t *));
|
||
+void RCS_setincexc PROTO ((const char *arg));
|
||
+void RCS_setlocalid PROTO ((const char *arg));
|
||
char *make_file_label PROTO ((const char *, const char *, RCSNode *));
|
||
|
||
+extern int datesep;
|
||
extern int preserve_perms;
|
||
|
||
/* From import.c. */
|
||
Index: src/rcscmds.c
|
||
diff -u src/contrib/cvs/src/rcscmds.c:1.1.1.10 src/contrib/cvs/src/rcscmds.c:1.10
|
||
--- src/contrib/cvs/src/rcscmds.c:1.1.1.10 Thu Apr 15 10:01:55 2004
|
||
+++ src/rcscmds.c Thu Apr 15 10:17:27 2004
|
||
@@ -7,6 +7,8 @@
|
||
*
|
||
* The functions in this file provide an interface for performing
|
||
* operations directly on RCS files.
|
||
+ *
|
||
+ * FreeBSD: src/contrib/cvs/src/rcscmds.c,v 1.10 2004/04/15 01:17:27 peter Exp $
|
||
*/
|
||
|
||
#include "cvs.h"
|
||
Index: src/recurse.c
|
||
diff -u src/contrib/cvs/src/recurse.c:1.1.1.13 src/contrib/cvs/src/recurse.c:1.12
|
||
--- src/contrib/cvs/src/recurse.c:1.1.1.13 Thu Apr 15 10:01:55 2004
|
||
+++ src/recurse.c Thu Apr 15 10:17:27 2004
|
||
@@ -6,6 +6,7 @@
|
||
*
|
||
* General recursion handler
|
||
*
|
||
+ * FreeBSD: src/contrib/cvs/src/recurse.c,v 1.12 2004/04/15 01:17:27 peter Exp $
|
||
*/
|
||
|
||
#include "cvs.h"
|
||
Index: src/server.c
|
||
diff -u src/contrib/cvs/src/server.c:1.1.1.18 src/contrib/cvs/src/server.c:1.24
|
||
--- src/contrib/cvs/src/server.c:1.1.1.18 Fri Jun 11 04:05:38 2004
|
||
+++ src/server.c Fri Jun 11 04:12:50 2004
|
||
@@ -8,6 +8,10 @@
|
||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
GNU General Public License for more details. */
|
||
|
||
+/*
|
||
+ * FreeBSD: src/contrib/cvs/src/server.c,v 1.24 2004/06/10 19:12:50 peter Exp $
|
||
+ */
|
||
+
|
||
#include <assert.h>
|
||
#include "cvs.h"
|
||
#include "watch.h"
|
||
@@ -773,6 +777,9 @@
|
||
nothing. But for rsh, we need to do it now. */
|
||
parse_config (current_parsed_root->directory);
|
||
|
||
+ /* Now is a good time to read CVSROOT/options too. */
|
||
+ parseopts(current_parsed_root->directory);
|
||
+
|
||
path = xmalloc (strlen (current_parsed_root->directory)
|
||
+ sizeof (CVSROOTADM)
|
||
+ 2);
|
||
@@ -5602,7 +5609,10 @@
|
||
password file. If so, that's enough to authenticate with. If
|
||
not, we'll check /etc/passwd. */
|
||
|
||
- rc = check_repository_password (username, password, repository,
|
||
+ if (require_real_user)
|
||
+ rc = 0; /* "not found" */
|
||
+ else
|
||
+ rc = check_repository_password (username, password, repository,
|
||
&host_user);
|
||
|
||
if (rc == 2)
|
||
Index: src/tag.c
|
||
diff -u src/contrib/cvs/src/tag.c:1.1.1.12 src/contrib/cvs/src/tag.c:1.2
|
||
--- src/contrib/cvs/src/tag.c:1.1.1.12 Thu Apr 15 10:01:55 2004
|
||
+++ src/tag.c Fri Aug 6 02:47:35 2004
|
||
@@ -10,6 +10,8 @@
|
||
* Add or delete a symbolic name to an RCS file, or a collection of RCS files.
|
||
* Tag uses the checked out revision in the current directory, rtag uses
|
||
* the modules database, if necessary.
|
||
+ *
|
||
+ * FreeBSD: src/contrib/cvs/src/tag.c,v 1.2 2004/08/05 17:47:35 des Exp $
|
||
*/
|
||
|
||
#include "cvs.h"
|
||
@@ -1199,6 +1201,9 @@
|
||
|| strcmp (name, TAG_HEAD) == 0)
|
||
return;
|
||
|
||
+ if (readonlyfs)
|
||
+ return;
|
||
+
|
||
/* FIXME: This routine doesn't seem to do any locking whatsoever
|
||
(and it is called from places which don't have locks in place).
|
||
If two processes try to write val-tags at the same time, it would
|
||
Index: src/update.c
|
||
diff -u src/contrib/cvs/src/update.c:1.1.1.15 src/contrib/cvs/src/update.c:1.14
|
||
--- src/contrib/cvs/src/update.c:1.1.1.15 Fri Jun 11 04:05:38 2004
|
||
+++ src/update.c Fri Jun 11 04:12:50 2004
|
||
@@ -31,6 +31,8 @@
|
||
* versions, these are updated too. If the -d option was specified, new
|
||
* directories added to the repository are automatically created and updated
|
||
* as well.
|
||
+ *
|
||
+ * FreeBSD: src/contrib/cvs/src/update.c,v 1.14 2004/06/10 19:12:50 peter Exp $
|
||
*/
|
||
|
||
#include "cvs.h"
|
||
@@ -95,10 +97,10 @@
|
||
static int aflag = 0;
|
||
static int toss_local_changes = 0;
|
||
static int force_tag_match = 1;
|
||
+static int pull_template = 0;
|
||
static int update_build_dirs = 0;
|
||
static int update_prune_dirs = 0;
|
||
static int pipeout = 0;
|
||
-static int dotemplate = 0;
|
||
#ifdef SERVER_SUPPORT
|
||
static int patches = 0;
|
||
static int rcs_diff_patches = 0;
|
||
@@ -123,6 +125,7 @@
|
||
"\t-j rev\tMerge in changes made between current revision and rev.\n",
|
||
"\t-I ign\tMore files to ignore (! to reset).\n",
|
||
"\t-W spec\tWrappers specification line.\n",
|
||
+ "\t-T\tCreate CVS/Template.\n",
|
||
"(Specify the --help global option for a list of other help options)\n",
|
||
NULL
|
||
};
|
||
@@ -138,6 +141,7 @@
|
||
int c, err;
|
||
int local = 0; /* recursive by default */
|
||
int which; /* where to look for files and dirs */
|
||
+ int xpull_template = 0;
|
||
|
||
if (argc == -1)
|
||
usage (update_usage);
|
||
@@ -147,7 +151,7 @@
|
||
|
||
/* parse the args */
|
||
optind = 0;
|
||
- while ((c = getopt (argc, argv, "+ApCPflRQqduk:r:D:j:I:W:")) != -1)
|
||
+ while ((c = getopt (argc, argv, "+ApCPflRQTqduk:r:D:j:I:W:")) != -1)
|
||
{
|
||
switch (c)
|
||
{
|
||
@@ -185,6 +189,9 @@
|
||
"-q or -Q must be specified before \"%s\"",
|
||
cvs_cmd_name);
|
||
break;
|
||
+ case 'T':
|
||
+ xpull_template = 1;
|
||
+ break;
|
||
case 'd':
|
||
update_build_dirs = 1;
|
||
break;
|
||
@@ -413,8 +420,8 @@
|
||
/* call the command line interface */
|
||
err = do_update (argc, argv, options, tag, date, force_tag_match,
|
||
local, update_build_dirs, aflag, update_prune_dirs,
|
||
- pipeout, which, join_rev1, join_rev2, (char *) NULL, 1,
|
||
- (char *) NULL);
|
||
+ pipeout, which, join_rev1, join_rev2, (char *) NULL,
|
||
+ xpull_template, (char *) NULL);
|
||
|
||
/* free the space Make_Date allocated if necessary */
|
||
if (date != NULL)
|
||
@@ -431,7 +438,7 @@
|
||
int
|
||
do_update (argc, argv, xoptions, xtag, xdate, xforce, local, xbuild, xaflag,
|
||
xprune, xpipeout, which, xjoin_rev1, xjoin_rev2, preload_update_dir,
|
||
- xdotemplate, repository)
|
||
+ xpull_template, repository)
|
||
int argc;
|
||
char **argv;
|
||
char *xoptions;
|
||
@@ -447,7 +454,7 @@
|
||
char *xjoin_rev1;
|
||
char *xjoin_rev2;
|
||
char *preload_update_dir;
|
||
- int xdotemplate;
|
||
+ int xpull_template;
|
||
char *repository;
|
||
{
|
||
int err = 0;
|
||
@@ -462,7 +469,7 @@
|
||
aflag = xaflag;
|
||
update_prune_dirs = xprune;
|
||
pipeout = xpipeout;
|
||
- dotemplate = xdotemplate;
|
||
+ pull_template = xpull_template;
|
||
|
||
/* setup the join support */
|
||
join_rev1 = xjoin_rev1;
|
||
@@ -604,7 +611,7 @@
|
||
&& tag != NULL
|
||
&& finfo->rcs != NULL)
|
||
{
|
||
- char *rev = RCS_getversion (finfo->rcs, tag, NULL, 1, NULL);
|
||
+ char *rev = RCS_getversion (finfo->rcs, tag, date, 1, NULL);
|
||
if (rev != NULL
|
||
&& !RCS_nodeisbranch (finfo->rcs, tag))
|
||
nonbranch = 1;
|
||
@@ -950,7 +957,7 @@
|
||
via WriteTag. */
|
||
0,
|
||
0,
|
||
- dotemplate);
|
||
+ pull_template);
|
||
rewrite_tag = 1;
|
||
nonbranch = 0;
|
||
Subdir_Register (entries, (char *) NULL, dir);
|
||
@@ -1009,6 +1016,12 @@
|
||
nonbranch = 0;
|
||
}
|
||
|
||
+ /* keep the CVS/Template file current */
|
||
+ if (pull_template)
|
||
+ {
|
||
+ WriteTemplate (dir, update_dir);
|
||
+ }
|
||
+
|
||
/* initialize the ignore list for this directory */
|
||
ignlist = getlist ();
|
||
}
|
||
Index: src/update.h
|
||
diff -u src/contrib/cvs/src/update.h:1.1.1.4 src/contrib/cvs/src/update.h:1.3
|
||
--- src/contrib/cvs/src/update.h:1.1.1.4 Thu Apr 15 10:01:55 2004
|
||
+++ src/update.h Thu Apr 15 10:17:28 2004
|
||
@@ -10,10 +10,14 @@
|
||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
GNU General Public License for more details. */
|
||
|
||
+/*
|
||
+ * FreeBSD: src/contrib/cvs/src/update.h,v 1.3 2004/04/15 01:17:28 peter Exp $
|
||
+ */
|
||
+
|
||
int do_update PROTO((int argc, char *argv[], char *xoptions, char *xtag,
|
||
char *xdate, int xforce, int local, int xbuild,
|
||
int xaflag, int xprune, int xpipeout, int which,
|
||
char *xjoin_rev1, char *xjoin_rev2, char *preload_update_dir,
|
||
- int xdotemplate, char *repository));
|
||
+ int xpull_template, char *repository));
|
||
int joining PROTO((void));
|
||
extern int isemptydir PROTO ((const char *dir, int might_not_exist));
|
||
Index: src/prepend_args.c
|
||
diff -u /dev/null src/gnu/usr.bin/cvs/cvs/prepend_args.c:1.3
|
||
--- /dev/null Fri Oct 20 15:17:40 2006
|
||
+++ src/prepend_args.c Mon Sep 2 15:09:03 2002
|
||
@@ -0,0 +1,86 @@
|
||
+/* prepend_args.c - utilility programs for manpiulating argv[]
|
||
+ Copyright (C) 1999 Free Software Foundation, Inc.
|
||
+
|
||
+ This program is free software; you can redistribute it and/or modify
|
||
+ it under the terms of the GNU General Public License as published by
|
||
+ the Free Software Foundation; either version 2, or (at your option)
|
||
+ any later version.
|
||
+
|
||
+ This program is distributed in the hope that it will be useful,
|
||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
+ GNU General Public License for more details.
|
||
+
|
||
+ You should have received a copy of the GNU General Public License
|
||
+ along with this program; if not, write to the Free Software
|
||
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||
+ 02111-1307, USA. */
|
||
+
|
||
+/* FreeBSD: src/gnu/usr.bin/cvs/cvs/prepend_args.c,v 1.3 2002/09/02 06:09:03 peter Exp $ */
|
||
+
|
||
+
|
||
+#ifdef HAVE_CONFIG_H
|
||
+# include <config.h>
|
||
+#endif
|
||
+#include "cvs.h"
|
||
+#include "prepend_args.h"
|
||
+
|
||
+
|
||
+/* Find the white-space-separated options specified by OPTIONS, and
|
||
+ using BUF to store copies of these options, set ARGV[0], ARGV[1],
|
||
+ etc. to the option copies. Return the number N of options found.
|
||
+ Do not set ARGV[N] to NULL. If ARGV is NULL, do not store ARGV[0]
|
||
+ etc. Backslash can be used to escape whitespace (and backslashes). */
|
||
+static int
|
||
+prepend_args (options, buf, argv)
|
||
+ char const *options;
|
||
+ char *buf;
|
||
+ char **argv;
|
||
+{
|
||
+ char const *o = options;
|
||
+ char *b = buf;
|
||
+ int n = 0;
|
||
+
|
||
+ for (;;)
|
||
+ {
|
||
+ while (isspace ((unsigned char) *o))
|
||
+ o++;
|
||
+ if (!*o)
|
||
+ return n;
|
||
+ if (argv)
|
||
+ argv[n] = b;
|
||
+ n++;
|
||
+
|
||
+ do
|
||
+ if ((*b++ = *o++) == '\\' && *o)
|
||
+ b[-1] = *o++;
|
||
+ while (*o && ! isspace ((unsigned char) *o));
|
||
+
|
||
+ *b++ = '\0';
|
||
+ }
|
||
+}
|
||
+
|
||
+/* Prepend the whitespace-separated options in OPTIONS to the argument
|
||
+ vector of a main program with argument count *PARGC and argument
|
||
+ vector *PARGV. */
|
||
+void
|
||
+prepend_default_options (options, pargc, pargv)
|
||
+ char const *options;
|
||
+ int *pargc;
|
||
+ char ***pargv;
|
||
+{
|
||
+ if (options)
|
||
+ {
|
||
+ char *buf = xmalloc (strlen (options) + 1);
|
||
+ int prepended = prepend_args (options, buf, (char **) NULL);
|
||
+ int argc = *pargc;
|
||
+ char * const *argv = *pargv;
|
||
+ char **pp = (char **) xmalloc ((prepended + argc + 1) * sizeof *pp);
|
||
+ *pargc = prepended + argc;
|
||
+ *pargv = pp;
|
||
+ *pp++ = *argv++;
|
||
+ pp += prepend_args (options, buf, pp);
|
||
+ while ((*pp++ = *argv++))
|
||
+ continue;
|
||
+ }
|
||
+}
|
||
Index: src/prepend_args.h
|
||
diff -u /dev/null src/gnu/usr.bin/cvs/cvs/prepend_args.h:1.2
|
||
--- /dev/null Fri Oct 20 15:17:40 2006
|
||
+++ src/prepend_args.h Mon Sep 2 15:09:03 2002
|
||
@@ -0,0 +1,26 @@
|
||
+/* prepend_args.h - utilility programs for manpiulating argv[]
|
||
+ Copyright (C) 1999 Free Software Foundation, Inc.
|
||
+
|
||
+ This program is free software; you can redistribute it and/or modify
|
||
+ it under the terms of the GNU General Public License as published by
|
||
+ the Free Software Foundation; either version 2, or (at your option)
|
||
+ any later version.
|
||
+
|
||
+ This program is distributed in the hope that it will be useful,
|
||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
+ GNU General Public License for more details.
|
||
+
|
||
+ You should have received a copy of the GNU General Public License
|
||
+ along with this program; if not, write to the Free Software
|
||
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||
+ 02111-1307, USA. */
|
||
+
|
||
+/* FreeBSD: src/gnu/usr.bin/cvs/cvs/prepend_args.h,v 1.2 2002/09/02 06:09:03 peter Exp $ */
|
||
+
|
||
+/* This code, taken from GNU Grep, originally used the "PARAM" macro, as the
|
||
+ current GNU coding standards requires. Older GNU code used the "PROTO"
|
||
+ macro, before the GNU coding standards replaced it. We use the older
|
||
+ form here to keep from having to include another file in cvs/src/main.c. */
|
||
+
|
||
+void prepend_default_options PROTO ((char const *, int *, char ***));
|