mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-11 09:50:12 +00:00
This commit was generated by cvs2svn to compensate for changes in r130303,
which included commits to RCS files with non-trunk default branches.
This commit is contained in:
commit
1df53a9a3f
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=130304
131
contrib/cvs/BUGS
131
contrib/cvs/BUGS
@ -47,12 +47,6 @@ writing files. If your repository does not allow any write access, symlinks
|
||||
are never a problem, whether or not LockDir is in use.
|
||||
|
||||
|
||||
* "make remotecheck" sometimes fails on test 187a3 with
|
||||
cvs server: in directory .:
|
||||
cvs [server aborted]: *PANIC* administration files missing
|
||||
This does not happen every time. (-kingdon, Nov 96, Red Hat linux 3.0.3).
|
||||
|
||||
|
||||
* The -m option to "cvs add" does not work with client/server CVS.
|
||||
CVS will accept the option, but it won't actually set the
|
||||
file's description.
|
||||
@ -84,121 +78,6 @@ file's description.
|
||||
P.S. Is anyone working on fixing these bugs?
|
||||
|
||||
|
||||
* From: Roland McGrath <roland@gnu.ai.mit.edu>
|
||||
To: Cyclic CVS Hackers <info-cvs@prep.ai.mit.edu>
|
||||
Subject: weird bug
|
||||
Date: Sat, 25 Mar 1995 16:41:41 -0500
|
||||
X-Windows: Even your dog won't like it.
|
||||
|
||||
I just noticed some droppings on my disk from what must be a pretty weird
|
||||
bug in remote CVS.
|
||||
|
||||
In my home directory on a repository machine I use, I find:
|
||||
|
||||
drwxr-xr-x 4 roland staff 512 Mar 7 14:08 cvs-serv28962
|
||||
drwxr-xr-x 4 roland staff 512 Mar 7 14:11 cvs-serv28978
|
||||
drwxr-xr-x 4 roland staff 512 Mar 7 15:13 cvs-serv29141
|
||||
|
||||
OK, so these are leftover cruft from some cvs run that got aborted.
|
||||
Well, it should clean up after itself, but so what.
|
||||
|
||||
The last one is pretty dull; the real weirdness is the contents of the
|
||||
first two directories.
|
||||
|
||||
duality 77 # ls -RF cvs-serv28978/
|
||||
CVS/ cvs-serv28978/
|
||||
|
||||
cvs-serv28978/CVS:
|
||||
Entries Repository
|
||||
|
||||
cvs-serv28978/cvs-serv28978:
|
||||
arpa/
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa:
|
||||
CVS/ cvs-serv28978/
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/CVS:
|
||||
Entries Repository
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978:
|
||||
assert/
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert:
|
||||
CVS/ cvs-serv28978/
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/CVS:
|
||||
Entries Repository
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978:
|
||||
bare/
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978/bare:
|
||||
CVS/ cvs-serv28978/
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978/bare/CVS:
|
||||
Entries Repository
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978/bare/cvs-serv28978:
|
||||
conf/
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978/bare/cvs-serv28978/conf:
|
||||
CVS/ cvs-serv28978/
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978/bare/cvs-serv28978/conf/CVS:
|
||||
Entries Repository
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978/bare/cvs-serv28978/conf/cvs-serv28978:
|
||||
crypt/
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978/bare/cvs-serv28978/conf/cvs-serv28978/crypt:
|
||||
CVS/ cvs-serv28978/
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978/bare/cvs-serv28978/conf/cvs-serv28978/crypt/CVS:
|
||||
Entries Repository
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978/bare/cvs-serv28978/conf/cvs-serv28978/crypt/cvs-serv28978:
|
||||
csu/
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978/bare/cvs-serv28978/conf/cvs-serv28978/crypt/cvs-serv28978/csu:
|
||||
CVS/ cvs-serv28978/
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978/bare/cvs-serv28978/conf/cvs-serv28978/crypt/cvs-serv28978/csu/CVS:
|
||||
Entries Repository
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978/bare/cvs-serv28978/conf/cvs-serv28978/crypt/cvs-serv28978/csu/cvs-serv28978:
|
||||
ctype/
|
||||
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978/bare/cvs-serv28978/conf/cvs-serv28978/crypt/cvs-serv28978/csu/cvs-serv28978/ctype:
|
||||
CVS/ cvs-serv28978/
|
||||
|
||||
[...]
|
||||
|
||||
ls: cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978/bare/cvs-serv28978/conf/cvs-serv28978/crypt/cvs-serv28978/csu/cvs-serv28978/ctype/cvs-serv28978/dirent/cvs-serv28978/elf/cvs-serv28978/gnu/cvs-serv28978/gnulib/cvs-serv28978/grp/cvs-serv28978/hurd/cvs-serv28978/hurd/hurd/cvs-serv28978/inet/cvs-serv28978/inet/arpa/cvs-serv28978/inet/netinet[...]/cvs-serv28978/posix/cvs-serv28978/posix/glob/cvs-serv28978/posix/gnu/cvs-serv28978/posix/sys/cvs-serv28978/protocols/cvs-serv28978/pwd/cvs-serv28978/resolv/cvs-serv28978/resolv/arpa/cvs-serv28978/resolv/sys/cvs-serv28978/resource/cvs-serv28978/resource/sys/cvs-serv28978/rpc/cvs-serv28978/setjmp/cvs-serv28978/signal/cvs-serv28978/signal/sys/cvs-serv28978/socket/cvs-serv28978/socket: File name too long
|
||||
cvs-serv28978/cvs-serv28978/arpa/cvs-serv28978/assert/cvs-serv28978/bare/cvs-serv28978/conf/cvs-serv28978/crypt/cvs-serv28978/csu/cvs-serv28978/ctype/cvs-serv28978/dirent/cvs-serv28978/elf/cvs-serv28978/gnu/cvs-serv28978/gnulib/cvs-serv28978/grp/cvs-serv28978/hurd/cvs-serv28978/hurd/hurd/cvs-serv28978/inet/cvs-serv28978/inet/arpa/cvs-serv28978/inet/netinet[...]/cvs-serv28978/posix/glob/cvs-serv28978/posix/gnu/cvs-serv28978/posix/sys/cvs-serv28978/protocols/cvs-serv28978/pwd/cvs-serv28978/resolv/cvs-serv28978/resolv/arpa/cvs-serv28978/resolv/sys/cvs-serv28978/resource/cvs-serv28978/resource/sys/cvs-serv28978/rpc/cvs-serv28978/setjmp/cvs-serv28978/signal/cvs-serv28978/signal/sys/cvs-serv28978/socket/cvs-serv28978:
|
||||
|
||||
* From: Roland McGrath <roland@gnu.ai.mit.edu>
|
||||
To: Cyclic CVS Hackers <info-cvs@prep.ai.mit.edu>
|
||||
Subject: bizarre failure mode
|
||||
Date: Tue, 7 Mar 95 14:17:28 -0500
|
||||
|
||||
This is pretty weird:
|
||||
|
||||
CVS_SERVER='TMPDIR=. /usr/local/bin/cvs' ../cvs-build/src/cvs update -q
|
||||
cvs [server aborted]: could not get working directory: Result too large
|
||||
[Exit 1]
|
||||
asylum 29 % grep 'Result too large' /usr/include/sys/errno.h
|
||||
#define ERANGE 34 /* Result too large */
|
||||
|
||||
Now, getcwd fails with ERANGE when the buffer is too small. But I don't
|
||||
know why that would be the case; I don't think there are exceptionally long
|
||||
directory names involved. It would be robust to notice ERANGE and use a
|
||||
bigger buffer. But I suspect something weirder is going on.
|
||||
|
||||
The repository in question in duality.gnu.ai.mit.edu:/gd4/gnu/cvsroot/libc.
|
||||
|
||||
Send me a PGP-signed message if you want the password to use the machine
|
||||
where the problem showed up.
|
||||
|
||||
* CVS does not always seem to be waiting to the next filesystem timestamp
|
||||
quanta after commits. So far this has only shown up in testing under the BSDI
|
||||
OS. The symptoms are that ocassionally CVS will not notice that modified files
|
||||
@ -208,18 +87,22 @@ suspected cause is that one of the calls to sleep_past() is being called with
|
||||
an incorrect value, though this does not explain why symptoms have only been
|
||||
noticed under BSDI.
|
||||
|
||||
|
||||
* Spaces in arguments to `cvs diff' are currently split on spaces and tabs
|
||||
before being passed to diff. This can often cause diff to abort since it can
|
||||
no longer interpret its options string and if it can, coincidentally,
|
||||
interpret its option string, then the problem may be output in unexpected
|
||||
formats.
|
||||
|
||||
|
||||
* `release' of a project subdir does not remove the `subdir' entry from
|
||||
`./CVS/Entries'.
|
||||
|
||||
* The Windows Microsoft Visual C++ project files are out of date, but the
|
||||
project can still be built under Windows using `nmake'. See the INSTALL
|
||||
file for more.
|
||||
|
||||
* Most of the remote commands are encountering assertion failures when listing
|
||||
the toplevel of the repository (e.g. `cvs rlog .'). This appears to be
|
||||
related to the symlinked CVS root fix.
|
||||
|
||||
|
||||
* Status
|
||||
|
||||
|
@ -1,3 +1,83 @@
|
||||
2004-06-09 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* NEWS: Note Stefan & Sebastian's security fixes.
|
||||
* acinclude.m4 (gl_SIZE_MAX, gl_XSIZE): Import from GNULIB.
|
||||
* configure.in: Call gl_XSIZE.
|
||||
|
||||
2004-06-09 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* NEWS: Note CAN-2004-0414 fix.
|
||||
|
||||
2004-05-19 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* NEWS: Note CAN-2004-0396 fix.
|
||||
|
||||
2004-05-17 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* BUGS: Note assertion failure of r* commands.
|
||||
|
||||
2004-05-17 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* BUGS: Remove out of date comment about out of date Windows build
|
||||
files and several bug reports that are so old, without similar recent
|
||||
reports, that I'm assuming that the problems have been fixed.
|
||||
|
||||
2004-05-15 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* cvsnt.dsp: Header file list updated.
|
||||
* cvsnt.dep: Regenerated for "cvsnt.dsp" change.
|
||||
* cvsnt.mak: Regenerated for "cvsnt.dsp" change.
|
||||
(Patch from Conrad Pino <conrad@pino.com>.)
|
||||
|
||||
2004-05-13 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* NEWS: Note MSVC++ project file regeneration.
|
||||
|
||||
2004-05-13 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* cvsnt.dsw: Rename "zlib/zlib.*" to "zlib/libz.*".
|
||||
Add project "lib/libcvs".
|
||||
* cvsnt.dsp: Revised for "cvsnt.dsw" changes. Move "lib/*.c" to
|
||||
project "lib/libcvs". Upgraded to Visual C++ 6.0 format.
|
||||
* cvsnt.dep: Added for "cvsnt.dsp" change.
|
||||
* cvsnt.mak: Regenerated for "cvsnt.dsp" change.
|
||||
(Patch from Conrad Pino <conrad@pino.com>.)
|
||||
|
||||
* configure.in: Generate windows-NT/fix-msvc-mak.
|
||||
|
||||
2004-04-30 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* NEWS: Note that man page is generated from cvs.texinfo now.
|
||||
* configure.in: Build doc/mkman.
|
||||
* configure, Makefile.in: Regenerated.
|
||||
|
||||
2004-04-26 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* NEWS: Note that :ext: no longer relies on an external transport with
|
||||
a GNU argument processor.
|
||||
|
||||
2004-04-20 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* NEWS: Note XP directory deletion fix.
|
||||
|
||||
2004-04-16 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* NEWS: Correct CVS name for piped checkout issue now that we have one.
|
||||
|
||||
2004-04-15 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* NEWS: Retroactively add CVE issue name for the piped etc issue.
|
||||
|
||||
2004-04-15 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* NEWS: Retroactively add CVE issue name for the trojan server issue.
|
||||
|
||||
2004-04-14 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* INSTALL (Building from source code under Unix): Move Autoconf &
|
||||
Automake notes...
|
||||
* HACKING (Regenerating Build Files): ...here.
|
||||
|
||||
2004-04-13 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* NEWS: Note validation of paths passed to the client.
|
||||
|
@ -104,6 +104,25 @@ Filenames for .c and .h files may contain _ but should not contain -
|
||||
(the latter causes Visual C++ 2.1 to create makefiles which Visual C++
|
||||
4.0 cannot use).
|
||||
|
||||
* Regenerating Build Files
|
||||
|
||||
On UNIX, if you wish to change the Build files, you will need Autoconf and
|
||||
Automake.
|
||||
|
||||
Some combinations of Automake and Autoconf versions may break the
|
||||
CVS build if file timestamps aren't set correctly and people don't
|
||||
have the same versions the developers do, so the rules to run them
|
||||
automatically aren't included in the generated Makefiles unless you run
|
||||
configure with the --enable-maintainer-mode option.
|
||||
|
||||
The CVS Makefiles and configure script were built using Automake 1.7.9 and
|
||||
Autoconf 2.58, respectively.
|
||||
|
||||
There is a known bug in Autoconf 2.57 that will prevent the configure
|
||||
scripts it generates from working on some platforms. Other combinations of
|
||||
autotool versions may or may not work. If you get other versions to work,
|
||||
please send a report to <bug-cvs@gnu.org>.
|
||||
|
||||
* Writing patches (strategy)
|
||||
|
||||
Only some kinds of changes are suitable for inclusion in the
|
||||
|
@ -257,21 +257,7 @@ VAX:
|
||||
|
||||
Building from source code under Unix:
|
||||
|
||||
1) Some combinations of Automake and Autoconf versions may break the
|
||||
CVS build if file timestamps aren't set correctly and people don't
|
||||
have the same versions the developers do, so the rules to run them
|
||||
automatically aren't included in the generated Makefiles unless you run
|
||||
configure with --enable-maintainer-mode.
|
||||
|
||||
The CVS Makefiles and configure script were built using Automake 1.7.9 and
|
||||
Autoconf 2.58, respectively.
|
||||
|
||||
There is a known bug in Autoconf 2.57 that will prevent the configure
|
||||
scripts it generates from working on some platforms. Other combinations of
|
||||
autotool versions may or may not work. If you get other versions to work,
|
||||
please send a report to <bug-cvs@gnu.org>.
|
||||
|
||||
2) Run "configure":
|
||||
1) Run "configure":
|
||||
|
||||
$ ./configure
|
||||
|
||||
@ -385,7 +371,7 @@ Building from source code under Unix:
|
||||
|
||||
END OF NOTE FOR NDBM GUNK.
|
||||
|
||||
3) Try to build it:
|
||||
2) Try to build it:
|
||||
|
||||
$ make
|
||||
|
||||
@ -396,7 +382,7 @@ Building from source code under Unix:
|
||||
compiler information, make output, and anything else you think
|
||||
will be helpful.
|
||||
|
||||
3a) Run the regression tests (optional).
|
||||
3) Run the regression tests (optional).
|
||||
|
||||
You may also wish to validate the correctness of the new binary by
|
||||
running the regression tests. If they succeed, that is nice to
|
||||
|
@ -35,6 +35,7 @@ EXTRA_DIST = \
|
||||
TESTS \
|
||||
build.com \
|
||||
cvs-format.el \
|
||||
cvsnt.dep \
|
||||
cvsnt.dsp \
|
||||
cvsnt.dsw \
|
||||
cvsnt.mak \
|
||||
|
@ -161,6 +161,7 @@ EXTRA_DIST = \
|
||||
TESTS \
|
||||
build.com \
|
||||
cvs-format.el \
|
||||
cvsnt.dep \
|
||||
cvsnt.dsp \
|
||||
cvsnt.dsw \
|
||||
cvsnt.mak \
|
||||
@ -372,7 +373,7 @@ distcleancheck_listfiles = find . -type f -print
|
||||
distdir: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
mkdir $(distdir)
|
||||
$(mkinstalldirs) $(distdir)/. $(distdir)/contrib $(distdir)/emx $(distdir)/os2 $(distdir)/src $(distdir)/zlib
|
||||
$(mkinstalldirs) $(distdir)/. $(distdir)/contrib $(distdir)/doc $(distdir)/emx $(distdir)/os2 $(distdir)/src $(distdir)/windows-NT $(distdir)/zlib
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
|
@ -1,18 +1,62 @@
|
||||
Changes since 1.11.14:
|
||||
Changes since 1.11.16:
|
||||
**********************
|
||||
|
||||
SERVER SECURITY FIXES
|
||||
|
||||
* Thanks to Stefan Esser & Sebastian Krahmer, several potential security
|
||||
problems have been fixed. The ones which were considered dangerous enough
|
||||
to catalogue were assigned issue numbers CAN-2004-0416, CAN-2004-0417, &
|
||||
CAN-2004-0418 by the Common Vulnerabilities and Exposures Project. Please
|
||||
see <http://www.cve.mitre.org> for more information.
|
||||
|
||||
* A potential buffer overflow vulnerability in the server has been fixed.
|
||||
This addresses the Common Vulnerabilities and Exposures Project's issue
|
||||
#CAN-2004-0414. Please see <http://www.cve.mitre.org> for more information.
|
||||
|
||||
Changes from 1.11.15 to 1.11.16:
|
||||
********************************
|
||||
|
||||
SERVER SECURITY FIXES
|
||||
|
||||
* A potential buffer overflow vulnerability in the server has been fixed.
|
||||
Prior to this patch, a malicious client could potentially use carefully
|
||||
crafted server requests to run arbitrary programs on the CVS server machine.
|
||||
This addresses the Common Vulnerabilities and Exposures Project's issue
|
||||
#CAN-2004-0396. Please see <http://www.cve.mitre.org> for more information.
|
||||
|
||||
BUG FIXES
|
||||
|
||||
* The Microsoft Visual C++ workspace and project files have been repaired and
|
||||
regenerated with MSVC++ 6.0.
|
||||
|
||||
* The cvs.1 man page is now generated automatically from a section of the CVS
|
||||
Manual.
|
||||
|
||||
* Thanks to a report from Mark Andrews at the Internet Systems Consortium, the
|
||||
:ext: connection method no longer relies on a transparent transport that uses
|
||||
an argument processor that can handle arbitrary ordering of options and other
|
||||
arguments when using a username other than the caller's.
|
||||
|
||||
* Thanks to Ken Raeburn at MIT, directory deletion, whether via `cvs release'
|
||||
or empty directory pruning, now works on network shares under Windows XP.
|
||||
|
||||
Changes from 1.11.14 to 1.11.15:
|
||||
********************************
|
||||
|
||||
SERVER SECURITY ISSUES
|
||||
|
||||
* Piped checkouts of paths above $CVSROOT no longer work. Previously, clients
|
||||
could have requested the contents of RCS archive files anywhere on a CVS
|
||||
server.
|
||||
server. This addresses CVE issue CAN-2004-0405. Please see
|
||||
<http://www.cve.mitre.org> for more information.
|
||||
|
||||
CLIENT SECURITY ISSUES
|
||||
|
||||
* Clients now check paths from the server to verify that they are within one of
|
||||
the sandboxes the user requested be updated. Previously, a trojan server
|
||||
could have written or overwritten files anywhere the user had access,
|
||||
presenting a serious security risk.
|
||||
presenting a serious security risk. This addresses CVE issue CAN-2004-1080.
|
||||
Please see <http://www.cve.mitre.org> for more information.
|
||||
|
||||
GENERAL USER ISSUES
|
||||
|
||||
|
@ -267,3 +267,85 @@ when using GSSAPI.])
|
||||
AC_SEARCH_LIBS([gss_import_name], [gssapi_krb5 gssapi])
|
||||
fi
|
||||
])dnl
|
||||
|
||||
|
||||
|
||||
# size_max.m4 serial 2
|
||||
dnl Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
dnl This file is free software, distributed under the terms of the GNU
|
||||
dnl General Public License. As a special exception to the GNU General
|
||||
dnl Public License, this file may be distributed as part of a program
|
||||
dnl that contains a configuration script generated by Autoconf, under
|
||||
dnl the same distribution terms as the rest of that program.
|
||||
|
||||
dnl From Bruno Haible.
|
||||
|
||||
AC_DEFUN([gl_SIZE_MAX],
|
||||
[
|
||||
AC_CHECK_HEADERS(stdint.h)
|
||||
dnl First test whether the system already has SIZE_MAX.
|
||||
AC_MSG_CHECKING([for SIZE_MAX])
|
||||
result=
|
||||
AC_EGREP_CPP([Found it], [
|
||||
#include <limits.h>
|
||||
#if HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#ifdef SIZE_MAX
|
||||
Found it
|
||||
#endif
|
||||
], result=yes)
|
||||
if test -z "$result"; then
|
||||
dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
|
||||
dnl than the type 'unsigned long'.
|
||||
dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr',
|
||||
dnl which is guaranteed to work from LONG_MIN to LONG_MAX.
|
||||
_AC_COMPUTE_INT([~(size_t)0 / 10], res_hi,
|
||||
[#include <stddef.h>], result=?)
|
||||
_AC_COMPUTE_INT([~(size_t)0 % 10], res_lo,
|
||||
[#include <stddef.h>], result=?)
|
||||
_AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint,
|
||||
[#include <stddef.h>], result=?)
|
||||
if test "$fits_in_uint" = 1; then
|
||||
dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
|
||||
dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
|
||||
AC_TRY_COMPILE([#include <stddef.h>
|
||||
extern size_t foo;
|
||||
extern unsigned long foo;
|
||||
], [], fits_in_uint=0)
|
||||
fi
|
||||
if test -z "$result"; then
|
||||
if test "$fits_in_uint" = 1; then
|
||||
result="$res_hi$res_lo"U
|
||||
else
|
||||
result="$res_hi$res_lo"UL
|
||||
fi
|
||||
else
|
||||
dnl Shouldn't happen, but who knows...
|
||||
result='~(size_t)0'
|
||||
fi
|
||||
fi
|
||||
AC_MSG_RESULT([$result])
|
||||
if test "$result" != yes; then
|
||||
AC_DEFINE_UNQUOTED([SIZE_MAX], [$result],
|
||||
[Define as the maximum value of type 'size_t', if the system doesn't define it.])
|
||||
fi
|
||||
])
|
||||
|
||||
|
||||
|
||||
# xsize.m4 serial 3
|
||||
dnl Copyright (C) 2003-2004 Free Software Foundation, Inc.
|
||||
dnl This file is free software, distributed under the terms of the GNU
|
||||
dnl General Public License. As a special exception to the GNU General
|
||||
dnl Public License, this file may be distributed as part of a program
|
||||
dnl that contains a configuration script generated by Autoconf, under
|
||||
dnl the same distribution terms as the rest of that program.
|
||||
|
||||
AC_DEFUN([gl_XSIZE],
|
||||
[
|
||||
dnl Prerequisites of lib/xsize.h.
|
||||
AC_REQUIRE([gl_SIZE_MAX])
|
||||
AC_REQUIRE([AC_C_INLINE])
|
||||
AC_CHECK_HEADERS(stdint.h)
|
||||
])
|
||||
|
82
contrib/cvs/aclocal.m4
vendored
82
contrib/cvs/aclocal.m4
vendored
@ -281,6 +281,88 @@ when using GSSAPI.])
|
||||
fi
|
||||
])dnl
|
||||
|
||||
|
||||
|
||||
# size_max.m4 serial 2
|
||||
dnl Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
dnl This file is free software, distributed under the terms of the GNU
|
||||
dnl General Public License. As a special exception to the GNU General
|
||||
dnl Public License, this file may be distributed as part of a program
|
||||
dnl that contains a configuration script generated by Autoconf, under
|
||||
dnl the same distribution terms as the rest of that program.
|
||||
|
||||
dnl From Bruno Haible.
|
||||
|
||||
AC_DEFUN([gl_SIZE_MAX],
|
||||
[
|
||||
AC_CHECK_HEADERS(stdint.h)
|
||||
dnl First test whether the system already has SIZE_MAX.
|
||||
AC_MSG_CHECKING([for SIZE_MAX])
|
||||
result=
|
||||
AC_EGREP_CPP([Found it], [
|
||||
#include <limits.h>
|
||||
#if HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#ifdef SIZE_MAX
|
||||
Found it
|
||||
#endif
|
||||
], result=yes)
|
||||
if test -z "$result"; then
|
||||
dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
|
||||
dnl than the type 'unsigned long'.
|
||||
dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr',
|
||||
dnl which is guaranteed to work from LONG_MIN to LONG_MAX.
|
||||
_AC_COMPUTE_INT([~(size_t)0 / 10], res_hi,
|
||||
[#include <stddef.h>], result=?)
|
||||
_AC_COMPUTE_INT([~(size_t)0 % 10], res_lo,
|
||||
[#include <stddef.h>], result=?)
|
||||
_AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint,
|
||||
[#include <stddef.h>], result=?)
|
||||
if test "$fits_in_uint" = 1; then
|
||||
dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
|
||||
dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
|
||||
AC_TRY_COMPILE([#include <stddef.h>
|
||||
extern size_t foo;
|
||||
extern unsigned long foo;
|
||||
], [], fits_in_uint=0)
|
||||
fi
|
||||
if test -z "$result"; then
|
||||
if test "$fits_in_uint" = 1; then
|
||||
result="$res_hi$res_lo"U
|
||||
else
|
||||
result="$res_hi$res_lo"UL
|
||||
fi
|
||||
else
|
||||
dnl Shouldn't happen, but who knows...
|
||||
result='~(size_t)0'
|
||||
fi
|
||||
fi
|
||||
AC_MSG_RESULT([$result])
|
||||
if test "$result" != yes; then
|
||||
AC_DEFINE_UNQUOTED([SIZE_MAX], [$result],
|
||||
[Define as the maximum value of type 'size_t', if the system doesn't define it.])
|
||||
fi
|
||||
])
|
||||
|
||||
|
||||
|
||||
# xsize.m4 serial 3
|
||||
dnl Copyright (C) 2003-2004 Free Software Foundation, Inc.
|
||||
dnl This file is free software, distributed under the terms of the GNU
|
||||
dnl General Public License. As a special exception to the GNU General
|
||||
dnl Public License, this file may be distributed as part of a program
|
||||
dnl that contains a configuration script generated by Autoconf, under
|
||||
dnl the same distribution terms as the rest of that program.
|
||||
|
||||
AC_DEFUN([gl_XSIZE],
|
||||
[
|
||||
dnl Prerequisites of lib/xsize.h.
|
||||
AC_REQUIRE([gl_SIZE_MAX])
|
||||
AC_REQUIRE([AC_C_INLINE])
|
||||
AC_CHECK_HEADERS(stdint.h)
|
||||
])
|
||||
|
||||
# Do all the work for Automake. -*- Autoconf -*-
|
||||
|
||||
# This macro actually does too much some checks are only needed if
|
||||
|
@ -425,6 +425,10 @@
|
||||
*/
|
||||
#undef SERVER_SUPPORT
|
||||
|
||||
/* Define as the maximum value of type 'size_t', if the system doesn't define
|
||||
it. */
|
||||
#undef SIZE_MAX
|
||||
|
||||
/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
|
||||
#undef STAT_MACROS_BROKEN
|
||||
|
||||
@ -486,6 +490,12 @@
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#undef gid_t
|
||||
|
||||
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||
#ifndef __cplusplus
|
||||
#undef inline
|
||||
#endif
|
||||
|
||||
/* Define to `int' if <sys/types.h> does not define. */
|
||||
#undef mode_t
|
||||
|
||||
|
1483
contrib/cvs/configure
vendored
1483
contrib/cvs/configure
vendored
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
dnl configure.in for cvs
|
||||
AC_INIT([Concurrent Versions System (CVS)],[1.11.15],[bug-cvs@gnu.org],[cvs])
|
||||
AC_INIT([Concurrent Versions System (CVS)],[1.11.17],[bug-cvs@gnu.org],[cvs])
|
||||
AC_CONFIG_SRCDIR(src/cvs.h)
|
||||
AM_INIT_AUTOMAKE([gnu 1.7.9 dist-bzip2 no-define])
|
||||
AC_PREREQ(2.58)
|
||||
@ -191,6 +191,7 @@ AC_REPLACE_FUNCS(\
|
||||
dnl
|
||||
dnl Begin GNULIB stuff.
|
||||
dnl
|
||||
gl_XSIZE
|
||||
|
||||
dnl We always want to use the GNULIB getpass, so define its name to something
|
||||
dnl that won't conflict with system declarations.
|
||||
@ -1020,7 +1021,10 @@ AC_CONFIG_FILES(contrib/pvcs2rcs, [chmod +x contrib/pvcs2rcs])
|
||||
AC_CONFIG_FILES(contrib/rcs2log:contrib/rcs2log.sh, [chmod +x contrib/rcs2log])
|
||||
AC_CONFIG_FILES(contrib/rcslock, [chmod +x contrib/rcslock])
|
||||
AC_CONFIG_FILES(contrib/sccs2rcs, [chmod +x contrib/sccs2rcs])
|
||||
AC_CONFIG_FILES(doc/mkman, [chmod +x doc/mkman])
|
||||
AC_CONFIG_FILES(src/cvsbug, [chmod +x src/cvsbug])
|
||||
AC_CONFIG_FILES(windows-NT/fix-msvc-mak:windows-NT/fix-msvc-mak-head.pl:windows-NT/fix-msvc-mak.pl,
|
||||
[chmod +x windows-NT/fix-msvc-mak])
|
||||
|
||||
dnl the bulk files
|
||||
AC_CONFIG_FILES([Makefile \
|
||||
|
@ -1,3 +1,18 @@
|
||||
2004-05-15 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* libdiff.dsp: Header file list updated.
|
||||
* libdiff.dep: Regenerated for "libdiff.dsp" changes.
|
||||
* libdiff.mak: Regenerated for "libdiff.dsp" changes.
|
||||
(Patch from Conrad Pino <conrad@pino.com>.)
|
||||
|
||||
2004-05-13 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* .cvsignore: Changed for "libdiff.dsp" changes.
|
||||
* libdiff.dep: Added for "../cvsnt.dsw" changes.
|
||||
* libdiff.dsp: Changed for "../cvsnt.dsw" changes.
|
||||
* libdiff.mak: Regenerated for "../cvsnt.dsw" changes.
|
||||
(Patch from Conrad Pino <conrad@pino.com>.)
|
||||
|
||||
2004-03-20 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* diff.c (diff_run): Update string arg to const.
|
||||
|
@ -21,4 +21,5 @@ libdiff_a_SOURCES = diff.c diff3.c analyze.c cmpbuf.c cmpbuf.h io.c \
|
||||
context.c ed.c normal.c ifdef.c util.c dir.c version.c diff.h \
|
||||
side.c system.h diffrun.h
|
||||
|
||||
EXTRA_DIST = ChangeLog build_diff.com diagmeet.note libdiff.dsp
|
||||
EXTRA_DIST = ChangeLog build_diff.com diagmeet.note \
|
||||
libdiff.dep libdiff.dsp libdiff.mak
|
||||
|
@ -134,7 +134,9 @@ libdiff_a_SOURCES = diff.c diff3.c analyze.c cmpbuf.c cmpbuf.h io.c \
|
||||
side.c system.h diffrun.h
|
||||
|
||||
|
||||
EXTRA_DIST = ChangeLog build_diff.com diagmeet.note libdiff.dsp
|
||||
EXTRA_DIST = ChangeLog build_diff.com diagmeet.note \
|
||||
libdiff.dep libdiff.dsp libdiff.mak
|
||||
|
||||
subdir = diff
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
|
@ -1,3 +1,129 @@
|
||||
2004-05-28 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* cvs.texinfo (Global options): Remove reference to global -l option.
|
||||
(Report from Kevin Bulgrien <Kevin.Bulgrien@TriPointGlobal.com>.)
|
||||
|
||||
2004-05-14 Mark D. Baushke <mdb@cvshome.org>
|
||||
|
||||
* cvs.texinfo: Fix makeinfo error.
|
||||
|
||||
* cvs.texinfo (Adding files): Minor cleanup.
|
||||
(Using keywords): Minor cleanup.
|
||||
(annotate): Move into the manual section, split into three nodes.
|
||||
(annotate options): New node.
|
||||
(annotate example): New node.
|
||||
(based on patch from Steve McIntyre <steve@einval.com>.)
|
||||
(Locks, GSSAPI authenticated): Minor cleanup.
|
||||
(Sticky tags): Clarify operation.
|
||||
(Locks): Spelling fix.
|
||||
(Merging adds and removals): Ditto.
|
||||
(Invoking CVS): Ditto
|
||||
(Builds): Grammar fix.
|
||||
(Line group formats): Ditto
|
||||
(Line group formats, Line formats): Ditto
|
||||
(commit files): Ditto.
|
||||
* cvs.1, stamp-vti, version.texi: Regenerated
|
||||
|
||||
2004-05-12 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* mkman.in: Clarify status messages.
|
||||
|
||||
2004-05-10 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* mkman.in: Organize & tidy comments. Check for unprocessed texinfo
|
||||
commands. Output better error messages on finding unprocessed texinfo
|
||||
commands.
|
||||
(do_keyword, keyword_mode): Accept $file argument for error messages.
|
||||
|
||||
2004-05-06 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* mkman.in: Require Perl 5.005. Add comments. Remove duplicate s///.
|
||||
Handle @:.
|
||||
|
||||
2004-05-06 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* cvs.man.header: Minor text correction.
|
||||
* mkman.in: Ignore @need keyword. Restore previous font for nested
|
||||
keywords.
|
||||
(do_keyword): Ditto on fonts. Move some functionality to...
|
||||
(keyword_mode): ...this new function.
|
||||
|
||||
2004-05-06 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* mkman.in: Handle keywords that cross multiple lines.
|
||||
(do_keyword): New function.
|
||||
|
||||
2004-05-04 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* cvs.man.header, cvs.man.footer: Reference `info CVS' rather than
|
||||
`info cvs' to send users to the top node.
|
||||
|
||||
2004-05-03 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* Makefile.am: mkman is built in the build dir, not $(srcdir).
|
||||
(Report from Mark D. Baushke <mdb@cvshome.org>.)
|
||||
|
||||
2004-05-03 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* HACKING.DOCS: Fix spelling error. Add reference for @strong.
|
||||
(Report from Mark D. Baushke <mdb@cvshome.org>.)
|
||||
|
||||
* HACKING.DOCS: Note dependency on `makeinfo' 3.11 & greater.
|
||||
|
||||
2004-04-30 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* mkman.in: Handle single quotes better. Parse out some redundancy
|
||||
from node and section names.
|
||||
* cvs.man.footer: Replace some quotes with the usual bold font.
|
||||
Reformat links in the SEE ALSO section.
|
||||
* cvs.1: Regenerated.
|
||||
|
||||
2004-04-30 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* mkman.in: Handle examples better. Protect a few more characters.
|
||||
* cvs.1, stamp-vti, version.texi: Regenerated.
|
||||
|
||||
2004-04-30 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* cvs.man.header: Add copyright notice.
|
||||
* cvs.1: Regenerated.
|
||||
|
||||
2004-04-30 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* mkman.in: Add copyright and license notice.
|
||||
|
||||
2004-04-30 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* mkman.in: Handle @@.
|
||||
* cvs.1: Regenerated.
|
||||
|
||||
2004-04-30 Derek Price <derek@ximbiot.com>
|
||||
|
||||
First pass at closing issue #3 on cvshome.org.
|
||||
* .cvsignore: Ignore mkman.
|
||||
* cvs.1, mkman.in, cvs.man.header, cvs.man.footer: New files.
|
||||
* cvs.texinfo: Add cut tags for mkman.
|
||||
* Makefile.in (man_MANS): Add cvs.1.
|
||||
(EXTRA_DIST): Add cvs.man.header & cvs.man.footer.
|
||||
(cvs.1, mkman): New targets.
|
||||
* Makefile.in: Regenerated.
|
||||
|
||||
2004-04-23 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* cvs.texinfo: Update years in Copyright.
|
||||
* stamp-vti, version.texi: Regenerated.
|
||||
|
||||
2004-04-21 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* cvs.texinfo: Use splitrcskeyword macro consistently in a failed
|
||||
attempt to avoid a warning during PDF generation.
|
||||
* stamp-vti, version.texi: Regenerated.
|
||||
|
||||
2004-04-18 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* cvs.texinfo: Various spelling, typo, and capitalization fixes.
|
||||
(Patch from Ville Skyttä <scop@cvshome.org>.)
|
||||
|
||||
2004-04-06 Larry Jones <lawrence.jones@ugsplm.com>
|
||||
|
||||
* cvs.texinfo (Assigning revisions): Note that client/server mode
|
||||
|
@ -15,6 +15,7 @@
|
||||
# GNU General Public License for more details.
|
||||
|
||||
info_TEXINFOS = cvs.texinfo cvsclient.texi
|
||||
man_MANS = cvs.1
|
||||
|
||||
PSS = \
|
||||
cvs.ps \
|
||||
@ -36,7 +37,10 @@ EXTRA_DIST = \
|
||||
ChangeLog.fsf \
|
||||
RCSFILES \
|
||||
mdate-sh \
|
||||
cvs-paper.ms
|
||||
cvs.1 \
|
||||
cvs-paper.ms \
|
||||
cvs.man.header \
|
||||
cvs.man.footer
|
||||
|
||||
MOSTLYCLEANFILES = \
|
||||
$(TXTS)
|
||||
@ -72,9 +76,13 @@ cvs-paper.ps: cvs-paper.ms
|
||||
cvs-paper.pdf: cvs-paper.ps
|
||||
ps2pdf $< $@
|
||||
|
||||
SUFFIXES = .txt
|
||||
# Targets to build a man page from cvs.texinfo.
|
||||
cvs.1: @MAINTAINER_MODE_TRUE@ mkman cvs.man.header cvs.texinfo cvs.man.footer
|
||||
./mkman $(srcdir)/cvs.man.header $(srcdir)/cvs.texinfo \
|
||||
$(srcdir)/cvs.man.footer >$@
|
||||
|
||||
# texinfo based targets automake neglects to include
|
||||
SUFFIXES = .txt
|
||||
.texinfo.txt:
|
||||
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
|
||||
--no-headers -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
|
||||
|
@ -141,6 +141,7 @@ sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
|
||||
info_TEXINFOS = cvs.texinfo cvsclient.texi
|
||||
man_MANS = cvs.1
|
||||
|
||||
PSS = \
|
||||
cvs.ps \
|
||||
@ -165,7 +166,10 @@ EXTRA_DIST = \
|
||||
ChangeLog.fsf \
|
||||
RCSFILES \
|
||||
mdate-sh \
|
||||
cvs-paper.ms
|
||||
cvs.1 \
|
||||
cvs-paper.ms \
|
||||
cvs.man.header \
|
||||
cvs.man.footer
|
||||
|
||||
|
||||
MOSTLYCLEANFILES = \
|
||||
@ -178,19 +182,24 @@ MAINTAINERCLEANFILES = \
|
||||
$(PSS)
|
||||
|
||||
|
||||
# texinfo based targets automake neglects to include
|
||||
SUFFIXES = .txt
|
||||
subdir = doc
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_FILES = mkman
|
||||
DIST_SOURCES =
|
||||
am__TEXINFO_TEX_DIR = $(srcdir)
|
||||
INFO_DEPS = cvs.info cvsclient.info
|
||||
DVIS = cvs.dvi cvsclient.dvi
|
||||
TEXINFOS = cvs.texinfo cvsclient.texi
|
||||
|
||||
NROFF = nroff
|
||||
MANS = $(man_MANS)
|
||||
DIST_COMMON = $(srcdir)/Makefile.in ChangeLog Makefile.am mdate-sh \
|
||||
stamp-1 stamp-vti texinfo.tex version-client.texi version.texi
|
||||
mkman.in stamp-1 stamp-vti texinfo.tex version-client.texi \
|
||||
version.texi
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
@ -200,6 +209,8 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configu
|
||||
$(AUTOMAKE) --gnu doc/Makefile
|
||||
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
|
||||
mkman: $(top_builddir)/config.status mkman.in
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
|
||||
|
||||
.texinfo.info:
|
||||
@rm -f $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]
|
||||
@ -328,6 +339,53 @@ maintainer-clean-aminfo:
|
||||
echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
|
||||
rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
|
||||
done
|
||||
|
||||
man1dir = $(mandir)/man1
|
||||
install-man1: $(man1_MANS) $(man_MANS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(man1dir)
|
||||
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.1*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
|
||||
else file=$$i; fi; \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
case "$$ext" in \
|
||||
1*) ;; \
|
||||
*) ext='1' ;; \
|
||||
esac; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
|
||||
$(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
|
||||
done
|
||||
uninstall-man1:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.1*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
case "$$ext" in \
|
||||
1*) ;; \
|
||||
*) ext='1' ;; \
|
||||
esac; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
|
||||
rm -f $(DESTDIR)$(man1dir)/$$inst; \
|
||||
done
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
@ -371,10 +429,10 @@ distdir: $(DISTFILES)
|
||||
dist-info
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(INFO_DEPS)
|
||||
all-am: Makefile $(INFO_DEPS) $(MANS)
|
||||
|
||||
installdirs:
|
||||
$(mkinstalldirs) $(DESTDIR)$(infodir)
|
||||
$(mkinstalldirs) $(DESTDIR)$(infodir) $(DESTDIR)$(man1dir)
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
@ -417,7 +475,7 @@ info: info-am
|
||||
|
||||
info-am: $(INFO_DEPS)
|
||||
|
||||
install-data-am: install-info-am
|
||||
install-data-am: install-info-am install-man
|
||||
|
||||
install-exec-am:
|
||||
|
||||
@ -449,7 +507,7 @@ install-info-am: $(INFO_DEPS)
|
||||
install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$relfile || :;\
|
||||
done; \
|
||||
else : ; fi
|
||||
install-man:
|
||||
install-man: install-man1
|
||||
|
||||
installcheck-am:
|
||||
|
||||
@ -472,18 +530,21 @@ ps: ps-am
|
||||
|
||||
ps-am: $(PSS)
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
uninstall-am: uninstall-info-am uninstall-man
|
||||
|
||||
uninstall-man: uninstall-man1
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic dist-info \
|
||||
distclean distclean-generic distdir dvi dvi-am info info-am \
|
||||
install install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-1 maintainer-clean-aminfo \
|
||||
maintainer-clean-generic maintainer-clean-vti mostlyclean \
|
||||
mostlyclean-1 mostlyclean-aminfo mostlyclean-generic \
|
||||
mostlyclean-vti pdf pdf-am ps ps-am uninstall uninstall-am \
|
||||
uninstall-info-am
|
||||
install-man1 install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-1 \
|
||||
maintainer-clean-aminfo maintainer-clean-generic \
|
||||
maintainer-clean-vti mostlyclean mostlyclean-1 \
|
||||
mostlyclean-aminfo mostlyclean-generic mostlyclean-vti pdf \
|
||||
pdf-am ps ps-am uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-man uninstall-man1
|
||||
|
||||
|
||||
doc: info ps
|
||||
@ -512,7 +573,10 @@ cvs-paper.ps: cvs-paper.ms
|
||||
cvs-paper.pdf: cvs-paper.ps
|
||||
ps2pdf $< $@
|
||||
|
||||
# texinfo based targets automake neglects to include
|
||||
# Targets to build a man page from cvs.texinfo.
|
||||
cvs.1: @MAINTAINER_MODE_TRUE@ mkman cvs.man.header cvs.texinfo cvs.man.footer
|
||||
./mkman $(srcdir)/cvs.man.header $(srcdir)/cvs.texinfo \
|
||||
$(srcdir)/cvs.man.footer >$@
|
||||
.texinfo.txt:
|
||||
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
|
||||
--no-headers -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
|
||||
|
3708
contrib/cvs/doc/cvs.1
Normal file
3708
contrib/cvs/doc/cvs.1
Normal file
File diff suppressed because it is too large
Load Diff
60
contrib/cvs/doc/cvs.man.footer
Normal file
60
contrib/cvs/doc/cvs.man.footer
Normal file
@ -0,0 +1,60 @@
|
||||
.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 \fBcvs import\fP).
|
||||
.TP
|
||||
Larry Jones, Derek R. Price, and Mark D. Baushke
|
||||
Have helped maintain
|
||||
.B cvs
|
||||
for many years.
|
||||
.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.pdf (Portable Document Format),
|
||||
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
|
||||
.SP
|
||||
.PD 0
|
||||
.IP "" 4
|
||||
.B http://cvshome.org
|
||||
.IP "" 4
|
||||
.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 ).
|
61
contrib/cvs/doc/cvs.man.header
Normal file
61
contrib/cvs/doc/cvs.man.header
Normal file
@ -0,0 +1,61 @@
|
||||
.\" This is the man page for CVS. It is auto-generated from the
|
||||
.\" cvs.man.header, cvs.texinfo, & cvs.man.footer files. Please make changes
|
||||
.\" there. A full copyright & license notice may also be found in cvs.texinfo.
|
||||
.\"
|
||||
.\" Copyright 2004 The Free Software Foundation,
|
||||
.\" Derek R. Price,
|
||||
.\" & Ximbiot <http://ximbiot.com>
|
||||
.\"
|
||||
.\" This documentation 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 documentation 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 documentation; if not, write to the Free Software
|
||||
.\" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
.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"
|
||||
.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"
|
||||
This manpage is a summary of some of the features of
|
||||
\fBcvs\fP. It is auto-generated from an appendix of the CVS manual.
|
||||
For more 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). Cross-references
|
||||
in this man page refer to nodes in the same.
|
@ -4,12 +4,14 @@
|
||||
@macro copyleftnotice
|
||||
@noindent
|
||||
Copyright @copyright{} 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
||||
2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
|
||||
@multitable @columnfractions .12 .88
|
||||
@item Portions
|
||||
@item @tab Copyright @copyright{} 1999, 2000, 2001, 2002, 2003 Derek R. Price,
|
||||
@item @tab Copyright @copyright{} 2002, 2003 Ximbiot @url{http://ximbiot.com},
|
||||
@item @tab Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004
|
||||
Derek R. Price,
|
||||
@item @tab Copyright @copyright{} 2002, 2003, 2004
|
||||
Ximbiot @url{http://ximbiot.com},
|
||||
@item @tab Copyright @copyright{} 1992, 1993, 1999 Signum Support AB,
|
||||
@item @tab and Copyright @copyright{} others.
|
||||
@end multitable
|
||||
@ -255,7 +257,7 @@ module and vendor branch support.
|
||||
|
||||
@cindex Source, getting CVS source
|
||||
You can get @sc{cvs} in a variety of ways, including
|
||||
free download from the internet. For more information
|
||||
free download from the Internet. For more information
|
||||
on downloading @sc{cvs} and other @sc{cvs} topics, see:
|
||||
|
||||
@example
|
||||
@ -271,10 +273,10 @@ devoted to @sc{cvs}. To subscribe or
|
||||
unsubscribe
|
||||
write to
|
||||
@email{info-cvs-request@@gnu.org}.
|
||||
If you prefer a usenet group, there is a one-way mirror (posts to the email
|
||||
If you prefer a Usenet group, there is a one-way mirror (posts to the email
|
||||
list are usually sent to the news group, but not visa versa) of
|
||||
@email{info-cvs@@gnu.org} at @url{news:gnu.cvs.help}. The right
|
||||
usenet group for posts is @url{news:comp.software.config-mgmt} which is for
|
||||
Usenet group for posts is @url{news:comp.software.config-mgmt} which is for
|
||||
@sc{cvs} discussions (along with other configuration
|
||||
management systems). In the future, it might be
|
||||
possible to create a
|
||||
@ -291,7 +293,7 @@ if there is sufficient @sc{cvs} traffic on
|
||||
You can also subscribe to the @email{bug-cvs@@gnu.org} mailing list,
|
||||
described in more detail in @ref{BUGS}. To subscribe
|
||||
send mail to @email{bug-cvs-request@@gnu.org}. There is a two-way
|
||||
usenet mirror (posts to the usenet group are usually sent to the email list and
|
||||
Usenet mirror (posts to the Usenet group are usually sent to the email list and
|
||||
visa versa) of @email{bug-cvs@@gnu.org} named @url{news:gnu.cvs.bug}.
|
||||
|
||||
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@ -421,11 +423,11 @@ nothing falls through the cracks.
|
||||
@item @sc{cvs} is not an automated testing program
|
||||
|
||||
It should be possible to enforce mandatory use of a
|
||||
testsuite using the @code{commitinfo} file. I haven't
|
||||
test suite using the @code{commitinfo} file. I haven't
|
||||
heard a lot about projects trying to do that or whether
|
||||
there are subtle gotchas, however.
|
||||
|
||||
@item @sc{cvs} does not have a builtin process model
|
||||
@item @sc{cvs} does not have a built-in process model
|
||||
|
||||
Some systems provide ways to ensure that changes or
|
||||
releases go through various steps, with various
|
||||
@ -1002,7 +1004,7 @@ rules see @ref{Tags}.
|
||||
@c FIXME: we need to somehow reflect "permissions in
|
||||
@c repository" versus "permissions in working
|
||||
@c directory" in the index entries.
|
||||
@cindex Group, UNIX file premissions, in repository
|
||||
@cindex Group, UNIX file permissions, in repository
|
||||
@cindex Read-only files, in repository
|
||||
All @samp{,v} files are created read-only, and you
|
||||
should not change the permission of those files. The
|
||||
@ -1211,7 +1213,7 @@ files.
|
||||
This behavior is implemented only by @sc{cvs} 1.7 and
|
||||
later; for details see @ref{Watches Compatibility}.
|
||||
|
||||
The format of the fileattr file is a series of entries
|
||||
The format of the @file{fileattr} file is a series of entries
|
||||
of the following form (where @samp{@{} and @samp{@}}
|
||||
means the text between the braces can be repeated zero
|
||||
or more times):
|
||||
@ -1234,7 +1236,7 @@ Note that the order of the lines is not significant;
|
||||
a program writing the fileattr file may
|
||||
rearrange them at its convenience.
|
||||
|
||||
There is currently no way of quoting tabs or linefeeds in the
|
||||
There is currently no way of quoting tabs or line feeds in the
|
||||
filename, @samp{=} in @var{attrname},
|
||||
@samp{;} in @var{attrval}, etc. Note: some implementations also
|
||||
don't handle a NUL character in any of the fields, but
|
||||
@ -1244,7 +1246,7 @@ By convention, @var{attrname} starting with @samp{_} is for an attribute given
|
||||
special meaning by @sc{cvs}; other @var{attrname}s are for user-defined attributes
|
||||
(or will be, once implementations start supporting user-defined attributes).
|
||||
|
||||
Builtin attributes:
|
||||
Built-in attributes:
|
||||
|
||||
@table @code
|
||||
@item _watched
|
||||
@ -1303,7 +1305,7 @@ For an introduction to @sc{cvs} locks focusing on
|
||||
user-visible behavior, see @ref{Concurrency}. The
|
||||
following section is aimed at people who are writing
|
||||
tools which want to access a @sc{cvs} repository without
|
||||
interfering with other tools acessing the same
|
||||
interfering with other tools accessing the same
|
||||
repository. If you find yourself confused by concepts
|
||||
described here, like @dfn{read lock}, @dfn{write lock},
|
||||
and @dfn{deadlock}, you might consult the literature on
|
||||
@ -1320,7 +1322,7 @@ The directory @file{#cvs.lock} serves as a master
|
||||
lock. That is, one must obtain this lock first before
|
||||
creating any of the other locks.
|
||||
|
||||
To obtain a readlock, first create the @file{#cvs.lock}
|
||||
To obtain a read lock, first create the @file{#cvs.lock}
|
||||
directory. This operation must be atomic (which should
|
||||
be true for creating a directory under most operating
|
||||
systems). If it fails because the directory already
|
||||
@ -1334,8 +1336,8 @@ Then proceed with reading the repository. When you are
|
||||
done, remove the @file{#cvs.rfl} file to release the
|
||||
read lock.
|
||||
|
||||
To obtain a writelock, first create the
|
||||
@file{#cvs.lock} directory, as with a readlock. Then
|
||||
To obtain a write lock, first create the
|
||||
@file{#cvs.lock} directory, as with read locks. Then
|
||||
check that there are no files whose names start with
|
||||
@file{#cvs.rfl.}. If there are, remove
|
||||
@file{#cvs.lock}, wait for a while, and try again. If
|
||||
@ -1351,7 +1353,7 @@ informational; it has no effect on the locking operation
|
||||
beyond what is provided by holding on to the
|
||||
@file{#cvs.lock} lock itself.
|
||||
|
||||
Note that each lock (writelock or readlock) only locks
|
||||
Note that each lock (write lock or read lock) only locks
|
||||
a single directory in the repository, including
|
||||
@file{Attic} and @file{CVS} but not including
|
||||
subdirectories which represent other directories under
|
||||
@ -1360,11 +1362,11 @@ lock each directory (note that if you fail to obtain
|
||||
any lock you need, you must release the whole tree
|
||||
before waiting and trying again, to avoid deadlocks).
|
||||
|
||||
Note also that @sc{cvs} expects writelocks to control
|
||||
Note also that @sc{cvs} expects write locks to control
|
||||
access to individual @file{foo,v} files. @sc{rcs} has
|
||||
a scheme where the @file{,foo,} file serves as a lock,
|
||||
but @sc{cvs} does not implement it and so taking out a
|
||||
@sc{cvs} writelock is recommended. See the comments at
|
||||
@sc{cvs} write lock is recommended. See the comments at
|
||||
rcs_internal_lockfile in the @sc{cvs} source code for
|
||||
further discussion/rationale.
|
||||
|
||||
@ -2068,7 +2070,7 @@ described in @ref{Connecting via rsh}.
|
||||
* Connecting via rsh:: Using the @code{rsh} program to connect
|
||||
* Password authenticated:: Direct connections using passwords
|
||||
* GSSAPI authenticated:: Direct connections using GSSAPI
|
||||
* Kerberos authenticated:: Direct connections with kerberos
|
||||
* Kerberos authenticated:: Direct connections with Kerberos
|
||||
* Connecting via fork:: Using a forked @code{cvs server} to connect
|
||||
@end menu
|
||||
|
||||
@ -2688,7 +2690,7 @@ authenticating with GSSAPI.
|
||||
|
||||
To do this, @sc{cvs} needs to be compiled with GSSAPI
|
||||
support; when configuring @sc{cvs} it tries to detect
|
||||
whether GSSAPI libraries using kerberos version 5 are
|
||||
whether GSSAPI libraries using Kerberos version 5 are
|
||||
present. You can also use the @file{--with-gssapi}
|
||||
flag to configure.
|
||||
|
||||
@ -2720,7 +2722,7 @@ cvs/@var{hostname}, where @var{hostname} is the
|
||||
canonical name of the server host. You will have to
|
||||
set this up as required by your GSSAPI mechanism.
|
||||
|
||||
To connect using GSSAPI, use @samp{:gserver:}. For
|
||||
To connect using GSSAPI, use the @samp{:gserver:} method. For
|
||||
example,
|
||||
|
||||
@example
|
||||
@ -2728,27 +2730,27 @@ cvs -d :gserver:faun.example.org:/usr/local/cvsroot checkout foo
|
||||
@end example
|
||||
|
||||
@node Kerberos authenticated
|
||||
@subsection Direct connection with kerberos
|
||||
@subsection Direct connection with Kerberos
|
||||
|
||||
@cindex Kerberos, using :kserver:
|
||||
@cindex Security, kerberos
|
||||
@cindex Security, Kerberos
|
||||
@cindex :kserver:, setting up
|
||||
The easiest way to use kerberos is to use the kerberos
|
||||
The easiest way to use Kerberos is to use the Kerberos
|
||||
@code{rsh}, as described in @ref{Connecting via rsh}.
|
||||
The main disadvantage of using rsh is that all the data
|
||||
needs to pass through additional programs, so it may be
|
||||
slower. So if you have kerberos installed you can
|
||||
slower. So if you have Kerberos installed you can
|
||||
connect via a direct @sc{tcp} connection,
|
||||
authenticating with kerberos.
|
||||
authenticating with Kerberos.
|
||||
|
||||
This section concerns the kerberos network security
|
||||
This section concerns the Kerberos network security
|
||||
system, version 4. Kerberos version 5 is supported via
|
||||
the GSSAPI generic network security interface, as
|
||||
described in the previous section.
|
||||
|
||||
To do this, @sc{cvs} needs to be compiled with kerberos
|
||||
To do this, @sc{cvs} needs to be compiled with Kerberos
|
||||
support; when configuring @sc{cvs} it tries to detect
|
||||
whether kerberos is present or you can use the
|
||||
whether Kerberos is present or you can use the
|
||||
@file{--with-krb4} flag to configure.
|
||||
|
||||
The data transmitted is @emph{not} encrypted by
|
||||
@ -3173,6 +3175,9 @@ $ cd tc
|
||||
$ cvs import -m "Created directory structure" yoyodyne/@var{dir} yoyo start
|
||||
@end example
|
||||
|
||||
This will add yoyodyne/@var{dir} as a directory under
|
||||
@code{$CVSROOT}.
|
||||
|
||||
Then, use @code{add} to add files (and new directories)
|
||||
as they appear.
|
||||
|
||||
@ -3810,8 +3815,8 @@ File: driver.c Status: Up-to-date
|
||||
@cindex Deleting sticky tags
|
||||
The sticky tags will remain on your working files until
|
||||
you delete them with @samp{cvs update -A}. The
|
||||
@samp{-A} option retrieves the version of the file from
|
||||
the head of the trunk, removing any sticky tags,
|
||||
@samp{-A} option merges local changes into the version of the
|
||||
file from the head of the trunk, removing any sticky tags,
|
||||
dates, or options. See @ref{update} for more on the operation
|
||||
of @code{cvs update}.
|
||||
|
||||
@ -3916,7 +3921,7 @@ out release 1.0 (@pxref{Tags}) and find the bug
|
||||
(which turns out to have a trivial fix). However, the current revision
|
||||
of the sources are in a state of flux and are not expected to be stable
|
||||
for at least another month. There is no way to make a
|
||||
bugfix release based on the newest sources.
|
||||
bug fix release based on the newest sources.
|
||||
|
||||
The thing to do in a situation like this is to create a @dfn{branch} on
|
||||
the revision trees for all the files that make up
|
||||
@ -4461,7 +4466,7 @@ branch since @sc{cvs} does not automatically add static tags to dead revisions.
|
||||
The exception to this rule occurs when
|
||||
a static tag has been attached to a dead revision manually. Use the branch tag
|
||||
to merge all changes from the branch or use two static tags as merge endpoints
|
||||
to be sure that all intended changes are propogated in the merge.
|
||||
to be sure that all intended changes are propagated in the merge.
|
||||
|
||||
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@node Merging and keywords
|
||||
@ -4505,7 +4510,7 @@ results from a merge:
|
||||
|
||||
@example
|
||||
$ cat file1
|
||||
key $@splitrcskeyword{}Revision: 1.2 $
|
||||
key $@splitrcskeyword{Revision}: 1.2 $
|
||||
. . .
|
||||
$ cvs update -j br1
|
||||
U file1
|
||||
@ -4516,9 +4521,9 @@ Merging differences between 1.1 and 1.1.2.1 into file1
|
||||
rcsmerge: warning: conflicts during merge
|
||||
$ cat file1
|
||||
@asis{}<<<<<<< file1
|
||||
key $@splitrcskeyword{}Revision: 1.2 $
|
||||
key $@splitrcskeyword{Revision}: 1.2 $
|
||||
@asis{}=======
|
||||
key $@splitrcskeyword{}Revision: 1.1.2.1 $
|
||||
key $@splitrcskeyword{Revision}: 1.1.2.1 $
|
||||
@asis{}>>>>>>> 1.1.2.1
|
||||
. . .
|
||||
@end example
|
||||
@ -4535,7 +4540,7 @@ Here is what happens if you had used @samp{-kk}:
|
||||
|
||||
@example
|
||||
$ cat file1
|
||||
key $@splitrcskeyword{}Revision: 1.2 $
|
||||
key $@splitrcskeyword{Revision}: 1.2 $
|
||||
. . .
|
||||
$ cvs update -kk -j br1
|
||||
U file1
|
||||
@ -4544,7 +4549,7 @@ retrieving revision 1.1
|
||||
retrieving revision 1.1.2.1
|
||||
Merging differences between 1.1 and 1.1.2.1 into file1
|
||||
$ cat file1
|
||||
key $@splitrcskeyword{}Revision$
|
||||
key $@splitrcskeyword{Revision}$
|
||||
. . .
|
||||
@end example
|
||||
|
||||
@ -4731,15 +4736,17 @@ directory.
|
||||
@c changing right away.
|
||||
|
||||
Unlike most other commands, the @code{add} command is
|
||||
not recursive. You cannot even type @samp{cvs add
|
||||
foo/bar}! Instead, you have to
|
||||
@c FIXCVS: This is, of course, not a feature. It is
|
||||
@c just that no one has gotten around to fixing "cvs add
|
||||
@c foo/bar".
|
||||
not recursive. You have to expcicitly name files and
|
||||
directories that you wish to add to the repository.
|
||||
However, each directory will need to be added
|
||||
separately before you will be able to add new files
|
||||
to those directories.
|
||||
|
||||
@example
|
||||
$ cd foo
|
||||
$ cvs add bar
|
||||
$ mkdir -p foo/bar
|
||||
$ cp ~/myfile foo/bar/myfile
|
||||
$ cvs add foo foo/bar
|
||||
$ cvs add foo/bar/myfile
|
||||
@end example
|
||||
|
||||
@cindex add (subcommand)
|
||||
@ -5294,7 +5301,6 @@ through the history.
|
||||
* log messages:: Log messages
|
||||
* history database:: The history database
|
||||
* user-defined logging:: User-defined logging
|
||||
* annotate:: What revision modified each line of a file?
|
||||
@end menu
|
||||
|
||||
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@ -5390,10 +5396,6 @@ Note: you can control what is logged to this file by using the
|
||||
@node user-defined logging
|
||||
@section User-defined logging
|
||||
|
||||
@c FIXME: should probably also mention the fact the -l
|
||||
@c global option can disable most of the mechanisms
|
||||
@c discussed here (why? What is the -l global option for?).
|
||||
@c
|
||||
@c FIXME: probably should centralize this information
|
||||
@c here, at least to some extent. Maybe by moving the
|
||||
@c loginfo, etc., nodes here and replacing
|
||||
@ -5421,45 +5423,6 @@ the @code{cvs watch add} command (@pxref{Getting
|
||||
Notified}); this command is useful even if you are not
|
||||
using @code{cvs watch on}.
|
||||
|
||||
@node annotate
|
||||
@section Annotate command
|
||||
@cindex annotate (subcommand)
|
||||
|
||||
@deffn Command {cvs annotate} [@code{-FflR}] [@code{-r rev}|@code{-D date}] files @dots{}
|
||||
|
||||
For each file in @var{files}, print the head revision
|
||||
of the trunk, together with information on the last
|
||||
modification for each line. For example:
|
||||
|
||||
@example
|
||||
$ cvs annotate ssfile
|
||||
Annotations for ssfile
|
||||
***************
|
||||
1.1 (mary 27-Mar-96): ssfile line 1
|
||||
1.2 (joe 28-Mar-96): ssfile line 2
|
||||
@end example
|
||||
|
||||
The file @file{ssfile} currently contains two lines.
|
||||
The @code{ssfile line 1} line was checked in by
|
||||
@code{mary} on March 27. Then, on March 28, @code{joe}
|
||||
added a line @code{ssfile line 2}, without modifying
|
||||
the @code{ssfile line 1} line. This report doesn't
|
||||
tell you anything about lines which have been deleted
|
||||
or replaced; you need to use @code{cvs diff} for that
|
||||
(@pxref{diff}).
|
||||
|
||||
@end deffn
|
||||
|
||||
The options to @code{cvs annotate} are listed in
|
||||
@ref{Invoking CVS}, and can be used to select the files
|
||||
and revisions to annotate. The options are described
|
||||
in more detail there and in @ref{Common options}.
|
||||
|
||||
@c FIXME: maybe an example using the options? Just
|
||||
@c what it means to select a revision might be worth a
|
||||
@c few words of explanation ("you want to see who
|
||||
@c changed this line *before* 1.4"...).
|
||||
|
||||
@c ---------------------------------------------------------------------
|
||||
@node Binary files
|
||||
@chapter Handling binary files
|
||||
@ -5558,7 +5521,7 @@ Here is an example of how you can create a new file
|
||||
using the @samp{-kb} flag:
|
||||
|
||||
@example
|
||||
$ echo '$@splitrcskeyword{}Id$' > kotest
|
||||
$ echo '$@splitrcskeyword{Id}$' > kotest
|
||||
$ cvs add -kb -m"A test file" kotest
|
||||
$ cvs ci -m"First checkin; contains a keyword" kotest
|
||||
@end example
|
||||
@ -5568,7 +5531,7 @@ one can use the @code{cvs admin} command to recover.
|
||||
For example:
|
||||
|
||||
@example
|
||||
$ echo '$@splitrcskeyword{}Id$' > kotest
|
||||
$ echo '$@splitrcskeyword{Id}$' > kotest
|
||||
$ cvs add -m"A test file" kotest
|
||||
$ cvs ci -m"First checkin; contains a keyword" kotest
|
||||
$ cvs admin -kb kotest
|
||||
@ -5747,7 +5710,7 @@ to RCS wouldn't think to use chmod anyway).
|
||||
|
||||
Implementation: use file attributes or use RCS
|
||||
locking. The former avoids more dependence on RCS
|
||||
behaviors we will need to reimplement as we librarify
|
||||
behaviors we will need to re-implement as we librarify
|
||||
RCS, and makes it easier to import/export RCS files (in
|
||||
that context, want to ignore the locker field). But
|
||||
note that RCS locks are per-branch, which is the
|
||||
@ -6820,7 +6783,7 @@ a new revision of the file.
|
||||
* Using keywords:: Using keywords
|
||||
* Avoiding substitution:: Avoiding substitution
|
||||
* Substitution modes:: Substitution modes
|
||||
* Log keyword:: Problems with the $@splitrcskeyword{}Log$ keyword.
|
||||
* Log keyword:: Problems with the $@splitrcskeyword{Log}$ keyword.
|
||||
@end menu
|
||||
|
||||
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@ -6876,7 +6839,7 @@ The log message supplied during commit, preceded by a
|
||||
header containing the @sc{rcs} filename, the revision
|
||||
number, the author, and the date (UTC). Existing log
|
||||
messages are @emph{not} replaced. Instead, the new log
|
||||
message is inserted after @code{$@splitrcskeyword{Log:@dots{}}$}.
|
||||
message is inserted after @code{$@splitrcskeyword{Log}:@dots{}$}.
|
||||
Each new line is prefixed with the same string which
|
||||
precedes the @code{$Log} keyword. For example, if the
|
||||
file contains:
|
||||
@ -6884,7 +6847,7 @@ file contains:
|
||||
@example
|
||||
/* Here is what people have been up to:
|
||||
*
|
||||
* $@splitrcskeyword{}Log: frob.c,v $
|
||||
* $@splitrcskeyword{Log}: frob.c,v $
|
||||
* Revision 1.1 1997/01/03 14:23:51 joe
|
||||
* Add the superfrobnicate option
|
||||
*
|
||||
@ -6926,10 +6889,12 @@ assigned with @code{cvs admin -s}---see @ref{admin options}.
|
||||
|
||||
To include a keyword string you simply include the
|
||||
relevant text string, such as @code{$@splitrcskeyword{Id}$}, inside the
|
||||
file, and commit the file. @sc{cvs} will automatically
|
||||
file, and commit the file. @sc{cvs} will automatically (Or,
|
||||
more accurately, as part of the update run that
|
||||
automatically happens after a commit.)
|
||||
expand the string as part of the commit operation.
|
||||
|
||||
It is common to embed the @code{$@splitrcskeyword{}Id$} string in
|
||||
It is common to embed the @code{$@splitrcskeyword{Id}$} string in
|
||||
the source files so that it gets passed through to
|
||||
generated files. For example, if you are managing
|
||||
computer program source code, you might include a
|
||||
@ -6955,11 +6920,11 @@ binary files.
|
||||
@example
|
||||
$ ident samp.c
|
||||
samp.c:
|
||||
$@splitrcskeyword{}Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $
|
||||
$@splitrcskeyword{Id}: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $
|
||||
$ gcc samp.c
|
||||
$ ident a.out
|
||||
a.out:
|
||||
$@splitrcskeyword{}Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $
|
||||
$@splitrcskeyword{Id}: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $
|
||||
@end example
|
||||
|
||||
@cindex What (shell command)
|
||||
@ -6973,7 +6938,7 @@ command. Simply prefix the keyword with the
|
||||
magic @sc{sccs} phrase, like this:
|
||||
|
||||
@example
|
||||
static char *id="@@(#) $@splitrcskeyword{}Id: ab.c,v 1.5 1993/10/19 14:57:32 ceder Exp $";
|
||||
static char *id="@@(#) $@splitrcskeyword{Id}: ab.c,v 1.5 1993/10/19 14:57:32 ceder Exp $";
|
||||
@end example
|
||||
|
||||
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@ -6982,9 +6947,9 @@ static char *id="@@(#) $@splitrcskeyword{}Id: ab.c,v 1.5 1993/10/19 14:57:32 ced
|
||||
|
||||
Keyword substitution has its disadvantages. Sometimes
|
||||
you might want the literal text string
|
||||
@samp{$@splitrcskeyword{}Author$} to appear inside a file without
|
||||
@samp{$@splitrcskeyword{Author}$} to appear inside a file without
|
||||
@sc{cvs} interpreting it as a keyword and expanding it
|
||||
into something like @samp{$@splitrcskeyword{}Author: ceder $}.
|
||||
into something like @samp{$@splitrcskeyword{Author}: ceder $}.
|
||||
|
||||
There is unfortunately no way to selectively turn off
|
||||
keyword substitution. You can use @samp{-ko}
|
||||
@ -6995,7 +6960,7 @@ In many cases you can avoid using keywords in
|
||||
the source, even though they appear in the final
|
||||
product. For example, the source for this manual
|
||||
contains @samp{$@@asis@{@}Author$} whenever the text
|
||||
@samp{$@splitrcskeyword{}Author$} should appear. In @code{nroff}
|
||||
@samp{$@splitrcskeyword{Author}$} should appear. In @code{nroff}
|
||||
and @code{troff} you can embed the null-character
|
||||
@code{\&} inside the keyword for a similar effect.
|
||||
|
||||
@ -7035,7 +7000,7 @@ The modes available are:
|
||||
@table @samp
|
||||
@item -kkv
|
||||
Generate keyword strings using the default form, e.g.
|
||||
@code{$@splitrcskeyword{}Revision: 5.7 $} for the @code{Revision}
|
||||
@code{$@splitrcskeyword{Revision}: 5.7 $} for the @code{Revision}
|
||||
keyword.
|
||||
|
||||
@item -kkvl
|
||||
@ -7047,8 +7012,8 @@ The locker's name is only relevant if @code{cvs admin
|
||||
@item -kk
|
||||
Generate only keyword names in keyword strings; omit
|
||||
their values. For example, for the @code{Revision}
|
||||
keyword, generate the string @code{$@splitrcskeyword{}Revision$}
|
||||
instead of @code{$@splitrcskeyword{}Revision: 5.7 $}. This option
|
||||
keyword, generate the string @code{$@splitrcskeyword{Revision}$}
|
||||
instead of @code{$@splitrcskeyword{Revision}: 5.7 $}. This option
|
||||
is useful to ignore differences due to keyword
|
||||
substitution when comparing different revisions of a
|
||||
file (@pxref{Merging and keywords}).
|
||||
@ -7057,8 +7022,8 @@ file (@pxref{Merging and keywords}).
|
||||
Generate the old keyword string, present in the working
|
||||
file just before it was checked in. For example, for
|
||||
the @code{Revision} keyword, generate the string
|
||||
@code{$@splitrcskeyword{}Revision: 1.1 $} instead of
|
||||
@code{$@splitrcskeyword{}Revision: 5.7 $} if that is how the
|
||||
@code{$@splitrcskeyword{Revision}: 1.1 $} instead of
|
||||
@code{$@splitrcskeyword{Revision}: 5.7 $} if that is how the
|
||||
string appeared when the file was checked in.
|
||||
|
||||
@item -kb
|
||||
@ -7074,10 +7039,10 @@ only to terminate lines, this is the same as
|
||||
@item -kv
|
||||
Generate only keyword values for keyword strings. For
|
||||
example, for the @code{Revision} keyword, generate the string
|
||||
@code{5.7} instead of @code{$@splitrcskeyword{}Revision: 5.7 $}.
|
||||
@code{5.7} instead of @code{$@splitrcskeyword{Revision}: 5.7 $}.
|
||||
This can help generate files in programming languages
|
||||
where it is hard to strip keyword delimiters like
|
||||
@code{$@splitrcskeyword{}Revision: $} from a string. However,
|
||||
@code{$@splitrcskeyword{Revision}: $} from a string. However,
|
||||
further keyword substitution cannot be performed once
|
||||
the keyword names are removed, so this option should be
|
||||
used with care.
|
||||
@ -7090,18 +7055,18 @@ handle an export containing binary files correctly.
|
||||
|
||||
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@node Log keyword
|
||||
@section Problems with the $@splitrcskeyword{}Log$ keyword.
|
||||
@section Problems with the $@splitrcskeyword{Log}$ keyword.
|
||||
|
||||
The @code{$@splitrcskeyword{}Log$} keyword is somewhat
|
||||
The @code{$@splitrcskeyword{Log}$} keyword is somewhat
|
||||
controversial. As long as you are working on your
|
||||
development system the information is easily accessible
|
||||
even if you do not use the @code{$@splitrcskeyword{}Log$}
|
||||
even if you do not use the @code{$@splitrcskeyword{Log}$}
|
||||
keyword---just do a @code{cvs log}. Once you export
|
||||
the file the history information might be useless
|
||||
anyhow.
|
||||
|
||||
A more serious concern is that @sc{cvs} is not good at
|
||||
handling @code{$@splitrcskeyword{}Log$} entries when a branch is
|
||||
handling @code{$@splitrcskeyword{Log}$} entries when a branch is
|
||||
merged onto the main trunk. Conflicts often result
|
||||
from the merging operation.
|
||||
@c Might want to check whether the CVS implementation
|
||||
@ -7115,7 +7080,7 @@ errors). If that is done the information from
|
||||
information inside the file. This may or may not be a
|
||||
problem in real life.
|
||||
|
||||
It has been suggested that the @code{$@splitrcskeyword{}Log$}
|
||||
It has been suggested that the @code{$@splitrcskeyword{Log}$}
|
||||
keyword should be inserted @emph{last} in the file, and
|
||||
not in the files header, if it is to be used at all.
|
||||
That way the long list of change messages will not
|
||||
@ -7435,7 +7400,7 @@ to break a project down into smaller
|
||||
@c may not use the modules file.
|
||||
separately-compiled subsystems, and arrange a way of
|
||||
releasing them internally so that each developer need
|
||||
check out only those subsystems which are they are
|
||||
check out only those subsystems which they are
|
||||
actively working on.
|
||||
|
||||
Another approach is to set up a structure which allows
|
||||
@ -7575,6 +7540,7 @@ supported.
|
||||
@end ignore
|
||||
|
||||
@c ---------------------------------------------------------------------
|
||||
@c ----- START MAN 1 -----
|
||||
@node CVS commands
|
||||
@appendix Guide to CVS commands
|
||||
|
||||
@ -7604,6 +7570,7 @@ reference to @sc{cvs} commands, @pxref{Invoking CVS}).
|
||||
* Global options:: Options you give to the left of cvs_command
|
||||
* Common options:: Options you give to the right of cvs_command
|
||||
* admin:: Administration
|
||||
* annotate:: What revision modified each line of a file?
|
||||
* checkout:: Checkout sources for editing
|
||||
* commit:: Check files into the repository
|
||||
* diff:: Show differences between revisions
|
||||
@ -7655,10 +7622,10 @@ Arguments to the commands.
|
||||
|
||||
There is unfortunately some confusion between
|
||||
@code{cvs_options} and @code{command_options}.
|
||||
@samp{-l}, when given as a @code{cvs_option}, only
|
||||
affects some of the commands. When it is given as a
|
||||
@code{command_option} is has a different meaning, and
|
||||
is accepted by more commands. In other words, do not
|
||||
When given as a @code{cvs_option}, some options only
|
||||
affect some of the commands. When given as a
|
||||
@code{command_option} it may have a different meaning, and
|
||||
be accepted by more commands. In other words, do not
|
||||
take the above categorization too seriously. Look at
|
||||
the documentation instead.
|
||||
|
||||
@ -7844,10 +7811,6 @@ a command name, @samp{cvs -H} displays overall help for
|
||||
@c every time that we add a --help-foo option. But
|
||||
@c perhaps that is confusing...
|
||||
|
||||
@item -l
|
||||
Do not log the @samp{cvs_command} in the command history (but execute it
|
||||
anyway). @xref{history}, for information on command history.
|
||||
|
||||
@cindex Read-only mode
|
||||
@item -n
|
||||
Do not change any files. Attempt to execute the
|
||||
@ -8574,7 +8537,7 @@ stable), and @samp{Rel} (for released). By default,
|
||||
the state of a new revision is set to @samp{Exp} when
|
||||
it is created. The state is visible in the output from
|
||||
@var{cvs log} (@pxref{log}), and in the
|
||||
@samp{$@splitrcskeyword{}Log$} and @samp{$@splitrcskeyword{}State$} keywords
|
||||
@samp{$@splitrcskeyword{Log}$} and @samp{$@splitrcskeyword{State}$} keywords
|
||||
(@pxref{Keyword substitution}). Note that @sc{cvs}
|
||||
uses the @code{dead} state for its own purposes; to
|
||||
take a file to or from the @code{dead} state use
|
||||
@ -8644,6 +8607,91 @@ this option has never done anything useful.
|
||||
@end table
|
||||
|
||||
|
||||
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@node annotate
|
||||
@appendixsec annotate---What revision modified each line of a file?
|
||||
@cindex annotate (subcommand)
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Synopsis: annotate [options] files@dots{}
|
||||
@item
|
||||
Requires: repository.
|
||||
@item
|
||||
Changes: nothing.
|
||||
@end itemize
|
||||
|
||||
For each file in @var{files}, print the head revision
|
||||
of the trunk, together with information on the last
|
||||
modification for each line.
|
||||
|
||||
@menu
|
||||
* annotate options:: annotate options
|
||||
* annotate example:: annotate example
|
||||
@end menu
|
||||
|
||||
@c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
||||
@node annotate options
|
||||
@appendixsubsec annotate options
|
||||
|
||||
These standard options are supported by @code{annotate}
|
||||
(@pxref{Common options}, for a complete description of
|
||||
them):
|
||||
|
||||
@table @code
|
||||
@item -l
|
||||
Local directory only, no recursion.
|
||||
|
||||
@item -R
|
||||
Process directories recursively.
|
||||
|
||||
@item -f
|
||||
Use head revision if tag/date not found.
|
||||
|
||||
@item -F
|
||||
Annotate binary files.
|
||||
|
||||
@item -r @var{revision}
|
||||
Annotate file as of specified revision/tag.
|
||||
|
||||
@item -D @var{date}
|
||||
Annotate file as of specified date.
|
||||
@end table
|
||||
|
||||
@c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
||||
@node annotate example
|
||||
@appendixsubsec annotate example
|
||||
|
||||
For example:
|
||||
|
||||
@example
|
||||
$ cvs annotate ssfile
|
||||
Annotations for ssfile
|
||||
***************
|
||||
1.1 (mary 27-Mar-96): ssfile line 1
|
||||
1.2 (joe 28-Mar-96): ssfile line 2
|
||||
@end example
|
||||
|
||||
The file @file{ssfile} currently contains two lines.
|
||||
The @code{ssfile line 1} line was checked in by
|
||||
@code{mary} on March 27. Then, on March 28, @code{joe}
|
||||
added a line @code{ssfile line 2}, without modifying
|
||||
the @code{ssfile line 1} line. This report doesn't
|
||||
tell you anything about lines which have been deleted
|
||||
or replaced; you need to use @code{cvs diff} for that
|
||||
(@pxref{diff}).
|
||||
|
||||
The options to @code{cvs annotate} are listed in
|
||||
@ref{Invoking CVS}, and can be used to select the files
|
||||
and revisions to annotate. The options are described
|
||||
in more detail there and in @ref{Common options}.
|
||||
|
||||
@c FIXME: maybe an example using the options? Just
|
||||
@c what it means to select a revision might be worth a
|
||||
@c few words of explanation ("you want to see who
|
||||
@c changed this line *before* 1.4"...).
|
||||
|
||||
|
||||
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
@node checkout
|
||||
@appendixsec checkout---Check out sources for editing
|
||||
@ -9464,7 +9512,7 @@ it is specified; otherwise it is a format that outputs the line group as-is.
|
||||
|
||||
@item --new-group-format=@var{format}
|
||||
These line groups are hunks containing only lines from the second
|
||||
file. The default new group format is same as the the changed group
|
||||
file. The default new group format is same as the changed group
|
||||
format if it is specified; otherwise it is a format that outputs the
|
||||
line group as-is.
|
||||
|
||||
@ -9555,7 +9603,7 @@ This format spec is equivalent to @var{T} if
|
||||
@var{A}'s value equals @var{B}'s; otherwise it is equivalent to @var{E}.
|
||||
|
||||
For example, @samp{%(N=0?no:%dN) line%(N=1?:s)} is equivalent to
|
||||
@samp{no lines} if @var{N} (the number of lines in the group in the the
|
||||
@samp{no lines} if @var{N} (the number of lines in the group in the
|
||||
new file) is 0, to @samp{1 line} if @var{N} is 1, and to @samp{%dN lines}
|
||||
otherwise.
|
||||
@end table
|
||||
@ -9607,11 +9655,11 @@ following forms.
|
||||
|
||||
@table @samp
|
||||
@item %l
|
||||
stands for the the contents of the line, not counting its trailing
|
||||
stands for the contents of the line, not counting its trailing
|
||||
newline (if any). This format ignores whether the line is incomplete.
|
||||
|
||||
@item %L
|
||||
stands for the the contents of the line, including its trailing newline
|
||||
stands for the contents of the line, including its trailing newline
|
||||
(if any). If a line is incomplete, this format preserves its
|
||||
incompleteness.
|
||||
|
||||
@ -10484,7 +10532,7 @@ $$ Mail -s 'The patches you asked for' foo@@example.net
|
||||
@end example
|
||||
|
||||
Suppose you have made release 1.3, and forked a branch
|
||||
called @samp{R_1_3fix} for bugfixes. @samp{R_1_3_1}
|
||||
called @samp{R_1_3fix} for bug fixes. @samp{R_1_3_1}
|
||||
corresponds to release 1.3.1, which was made some time
|
||||
ago. Now, you want to see how much development has been
|
||||
done on the branch. This command can be used:
|
||||
@ -10849,6 +10897,8 @@ description of the @samp{-I} option, and
|
||||
@pxref{cvsignore}).
|
||||
@end table
|
||||
|
||||
@c ----- END MAN 1 -----
|
||||
@c ---------------------------------------------------------------------
|
||||
@node Invoking CVS
|
||||
@appendix Quick reference to CVS commands
|
||||
@cindex Command reference
|
||||
@ -10897,10 +10947,6 @@ options}.
|
||||
@itemx --help
|
||||
Print a help message. See @ref{Global options}.
|
||||
|
||||
@item -l
|
||||
Do not log in @file{$CVSROOT/CVSROOT/history} file. See @ref{Global
|
||||
options}.
|
||||
|
||||
@item -n
|
||||
Do not change any files. See @ref{Global options}.
|
||||
|
||||
@ -10945,9 +10991,9 @@ See @ref{Global options}.
|
||||
Keyword expansion modes (@pxref{Substitution modes}):
|
||||
|
||||
@example
|
||||
-kkv $@splitrcskeyword{}Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp $
|
||||
-kkvl $@splitrcskeyword{}Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
|
||||
-kk $@splitrcskeyword{}Id$
|
||||
-kkv $@splitrcskeyword{Id}: file1,v 1.1 1993/12/09 03:21:13 joe Exp $
|
||||
-kkvl $@splitrcskeyword{Id}: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
|
||||
-kk $@splitrcskeyword{Id}$
|
||||
-kv file1,v 1.1 1993/12/09 03:21:13 joe Exp
|
||||
-ko @i{no expansion}
|
||||
-kb @i{no expansion, file is binary}
|
||||
@ -10956,17 +11002,17 @@ Keyword expansion modes (@pxref{Substitution modes}):
|
||||
Keywords (@pxref{Keyword list}):
|
||||
|
||||
@example
|
||||
$@splitrcskeyword{}Author: joe $
|
||||
$@splitrcskeyword{}Date: 1993/12/09 03:21:13 $
|
||||
$@splitrcskeyword{}Header: /home/files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
|
||||
$@splitrcskeyword{}Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
|
||||
$@splitrcskeyword{}Locker: harry $
|
||||
$@splitrcskeyword{}Name: snapshot_1_14 $
|
||||
$@splitrcskeyword{}RCSfile: file1,v $
|
||||
$@splitrcskeyword{}Revision: 1.1 $
|
||||
$@splitrcskeyword{}Source: /home/files/file1,v $
|
||||
$@splitrcskeyword{}State: Exp $
|
||||
$@splitrcskeyword{}Log: file1,v $
|
||||
$@splitrcskeyword{Author}: joe $
|
||||
$@splitrcskeyword{Date}: 1993/12/09 03:21:13 $
|
||||
$@splitrcskeyword{Header}: /home/files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
|
||||
$@splitrcskeyword{Id}: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
|
||||
$@splitrcskeyword{Locker}: harry $
|
||||
$@splitrcskeyword{Name}: snapshot_1_14 $
|
||||
$@splitrcskeyword{RCSfile}: file1,v $
|
||||
$@splitrcskeyword{Revision}: 1.1 $
|
||||
$@splitrcskeyword{Source}: /home/files/file1,v $
|
||||
$@splitrcskeyword{State}: Exp $
|
||||
$@splitrcskeyword{Log}: file1,v $
|
||||
Revision 1.1 1993/12/09 03:30:17 joe
|
||||
Initial revision
|
||||
|
||||
@ -11572,7 +11618,7 @@ be tagged. See @ref{Tagging add/remove}.
|
||||
Create a branch named @var{tag}. See @ref{Branching and merging}.
|
||||
|
||||
@item -B
|
||||
Used in conjuntion with -F or -d, enables movement and deletion of
|
||||
Used in conjunction with -F or -d, enables movement and deletion of
|
||||
branch tags. Use with extreme caution.
|
||||
|
||||
@item -D @var{date}
|
||||
@ -12314,7 +12360,7 @@ committed (@pxref{modules}). The files described in
|
||||
this section provide other, more flexible, ways to run
|
||||
programs whenever something is committed.
|
||||
|
||||
There are three kind of programs that can be run on
|
||||
There are three kinds of programs that can be run on
|
||||
commit. They are specified in files in the repository,
|
||||
as described below. The following table summarizes the
|
||||
file names and the purpose of the corresponding
|
||||
@ -13440,7 +13486,7 @@ log message after running the program specified by @file{verifymsg}.
|
||||
the log message should always be reread; @samp{no}
|
||||
or @samp{never}, indicating that it should never be
|
||||
reread; or @var{value} may be @samp{stat}, indicating
|
||||
that the file should be checked with the filesystem
|
||||
that the file should be checked with the file system
|
||||
@samp{stat()} function to see if it has changed (see warning below)
|
||||
before rereading. The default value is @samp{always}.
|
||||
|
||||
@ -13686,7 +13732,7 @@ The remote protocol is interoperable going back to @sc{cvs} 1.5, but no
|
||||
further (1.5 was the first official release with the remote protocol,
|
||||
but some older versions might still be floating around). In many
|
||||
cases you need to upgrade both the client and the server to take
|
||||
advantage of new features and bugfixes, however.
|
||||
advantage of new features and bug fixes, however.
|
||||
|
||||
@c Perhaps should be saying something here about the
|
||||
@c "D" lines in Entries (written by CVS 1.9; 1.8 and
|
||||
@ -13787,7 +13833,7 @@ This message has been happening in a non-reproducible,
|
||||
occasional way when we run the client/server testsuite,
|
||||
both on Red Hat Linux 3.0.3 and 4.1. We haven't been
|
||||
able to figure out what causes it, nor is it known
|
||||
whether it is specific to linux (or even to this
|
||||
whether it is specific to Linux (or even to this
|
||||
particular machine!). If the problem does occur on
|
||||
other unices, @samp{Operation not permitted} would be
|
||||
likely to read @samp{Not owner} or whatever the system
|
||||
@ -14056,9 +14102,9 @@ called from the @file{loginfo} administrative file.
|
||||
Check that the arguments passed in @file{loginfo} match
|
||||
what your version of @file{log.pl} expects. In
|
||||
particular, the @file{log.pl} from @sc{cvs} 1.3 and
|
||||
older expects the logfile as an argument whereas the
|
||||
older expects the log file as an argument whereas the
|
||||
@file{log.pl} from @sc{cvs} 1.5 and newer expects the
|
||||
logfile to be specified with a @samp{-f} option. Of
|
||||
log file to be specified with a @samp{-f} option. Of
|
||||
course, if you don't need @file{log.pl} you can just
|
||||
comment it out of @file{loginfo}.
|
||||
|
||||
|
314
contrib/cvs/doc/mkman.in
Executable file
314
contrib/cvs/doc/mkman.in
Executable file
@ -0,0 +1,314 @@
|
||||
#! @PERL@
|
||||
#
|
||||
# Generate a man page from sections of a Texinfo manual.
|
||||
#
|
||||
# Copyright 2004 The Free Software Foundation,
|
||||
# Derek R. Price,
|
||||
# & Ximbiot <http://ximbiot.com>
|
||||
#
|
||||
# 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.
|
||||
|
||||
|
||||
|
||||
# Need Perl 5.005 or greater for re 'eval'.
|
||||
require 5.005;
|
||||
|
||||
# The usual.
|
||||
use strict;
|
||||
use IO::File;
|
||||
|
||||
|
||||
|
||||
###
|
||||
### GLOBALS
|
||||
###
|
||||
my $texi_num = 0; # Keep track of how many texinfo files have been encountered.
|
||||
my @parent; # This needs to be global to be used inside of a regex later.
|
||||
|
||||
|
||||
|
||||
###
|
||||
### FUNCTIONS
|
||||
###
|
||||
sub keyword_mode
|
||||
{
|
||||
my ($keyword, $file) = @_;
|
||||
|
||||
return "\\fR"
|
||||
if $keyword =~ /^(|r|t)$/;
|
||||
return "\\fB"
|
||||
if $keyword =~ /^(strong|sc|code|file|samp)$/;
|
||||
return "\\fI"
|
||||
if $keyword =~ /^(emph|var|dfn)$/;
|
||||
die "no handler for keyword \`$keyword', found at line $. of file \`$file'\n";
|
||||
}
|
||||
|
||||
|
||||
|
||||
# Return replacement for \@$keyword{$content}.
|
||||
sub do_keyword
|
||||
{
|
||||
my ($file, $parent, $keyword, $content) = @_;
|
||||
|
||||
return "see node \`$content\\(aq in the CVS manual"
|
||||
if $keyword =~ /^(p?x)?ref$/;
|
||||
return "\\fP\\fP$content"
|
||||
if $keyword =~ /^splitrcskeyword$/;
|
||||
|
||||
my $endmode = keyword_mode $parent;
|
||||
my $startmode = keyword_mode $keyword, $file;
|
||||
|
||||
return "$startmode$content$endmode";
|
||||
}
|
||||
|
||||
|
||||
|
||||
###
|
||||
### MAIN
|
||||
###
|
||||
for my $file (@ARGV)
|
||||
{
|
||||
my $fh = new IO::File "< $file"
|
||||
or die "Failed to open file \`$file': $!";
|
||||
|
||||
if ($file !~ /\.(texinfo|texi|txi)$/)
|
||||
{
|
||||
print stderr "Passing \`$file' through unprocessed.\n";
|
||||
# Just cat any file that doesn't look like a Texinfo source.
|
||||
while (my $line = $fh->getline)
|
||||
{
|
||||
print $line;
|
||||
}
|
||||
next;
|
||||
}
|
||||
|
||||
print stderr "Processing \`$file'.\n";
|
||||
$texi_num++;
|
||||
my $gotone = 0;
|
||||
my $inblank = 0;
|
||||
my $indent = 0;
|
||||
my $inexample = 0;
|
||||
my $inmenu = 0;
|
||||
my $intable = 0;
|
||||
my $last_header = "";
|
||||
my @table_headers;
|
||||
my @table_footers;
|
||||
my $table_header = "";
|
||||
my $table_footer = "";
|
||||
my $last;
|
||||
while ($_ = $fh->getline)
|
||||
{
|
||||
if (!$gotone && /^\@c ----- START MAN $texi_num -----$/)
|
||||
{
|
||||
$gotone = 1;
|
||||
next;
|
||||
}
|
||||
|
||||
# Skip ahead until our man section.
|
||||
next unless $gotone;
|
||||
|
||||
# If we find the end tag we are done.
|
||||
last if /^\@c ----- END MAN $texi_num -----$/;
|
||||
|
||||
# Need to do this everywhere. i.e., before we print example
|
||||
# lines, since literal back slashes can appear there too.
|
||||
s/\\/\\\\/g;
|
||||
s/^\./\\&./;
|
||||
s/([\s])\./$1\\&./;
|
||||
s/'/\\(aq/g;
|
||||
s/`/\\`/g;
|
||||
s/(?<!-)---(?!-)/\\(em/g;
|
||||
s/\@bullet({}|\b)/\\(bu/g;
|
||||
s/\@dots({}|\b)/\\&.../g;
|
||||
|
||||
# Examples should be indented and otherwise untouched
|
||||
if (/^\@example$/)
|
||||
{
|
||||
$indent += 2;
|
||||
print qq{.SP\n.PD 0\n};
|
||||
$inexample = 1;
|
||||
next;
|
||||
}
|
||||
if ($inexample)
|
||||
{
|
||||
if (/^\@end example$/)
|
||||
{
|
||||
$indent -= 2;
|
||||
print qq{\n.PD\n.IP "" $indent\n};
|
||||
$inexample = 0;
|
||||
next;
|
||||
}
|
||||
if (/^[ ]*$/)
|
||||
{
|
||||
print ".SP\n";
|
||||
next;
|
||||
}
|
||||
|
||||
# Preserve the newline.
|
||||
$_ = qq{.IP "" $indent\n} . $_;
|
||||
}
|
||||
|
||||
# Compress blank lines into a single line. This and its
|
||||
# corresponding skip purposely bracket the @menu and comment
|
||||
# removal so that blanks on either side of a menu are
|
||||
# compressed after the menu is removed.
|
||||
if (/^[ ]*$/)
|
||||
{
|
||||
$inblank = 1;
|
||||
next;
|
||||
}
|
||||
|
||||
# Not used
|
||||
if (/^\@(ignore|menu)$/)
|
||||
{
|
||||
$inmenu++;
|
||||
next;
|
||||
}
|
||||
# Delete menu contents.
|
||||
if ($inmenu)
|
||||
{
|
||||
next unless /^\@end (ignore|menu)$/;
|
||||
$inmenu--;
|
||||
next;
|
||||
}
|
||||
|
||||
# Remove comments
|
||||
next if /^\@c(omment)?\b/;
|
||||
|
||||
# It's okay to ignore this keyword - we're not using any
|
||||
# first-line indent commands at all.
|
||||
next if s/^\@noindent\s*$//;
|
||||
|
||||
# @need is only significant in printed manuals.
|
||||
next if s/^\@need\s+.*$//;
|
||||
|
||||
# If we didn't hit the previous check and $inblank is set, then
|
||||
# we just finished with some number of blanks. Print the man
|
||||
# page blank symbol before continuing processing of this line.
|
||||
if ($inblank)
|
||||
{
|
||||
print ".SP\n";
|
||||
$inblank = 0;
|
||||
}
|
||||
|
||||
# Chapter headers.
|
||||
$last_header = $1 if s/^\@node\s+(.*)$/.SH "$1"/;
|
||||
if (/^\@appendix\w*\s+(.*)$/)
|
||||
{
|
||||
my $content = $1;
|
||||
$content =~ s/^$last_header(\\\(em|\s+)?//;
|
||||
next if $content =~ /^\s*$/;
|
||||
s/^\@appendix\w*\s+.*$/.SS "$content"/;
|
||||
}
|
||||
|
||||
# Tables are similar to examples, except we need to handle the
|
||||
# keywords.
|
||||
if (/^\@(itemize|table)(\s+(.*))?$/)
|
||||
{
|
||||
$indent += 2;
|
||||
push @table_headers, $table_header;
|
||||
push @table_footers, $table_footer;
|
||||
my $content = $3;
|
||||
if (/^\@itemize/)
|
||||
{
|
||||
my $bullet = $content;
|
||||
$table_header = qq{.IP "$bullet" $indent\n};
|
||||
$table_footer = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
my $hi = $indent - 2;
|
||||
$table_header = qq{.IP "" $hi\n};
|
||||
$table_footer = qq{\n.IP "" $indent};
|
||||
if ($content)
|
||||
{
|
||||
$table_header .= "$content\{";
|
||||
$table_footer = "\}$table_footer";
|
||||
}
|
||||
}
|
||||
$intable++;
|
||||
next;
|
||||
}
|
||||
|
||||
if ($intable)
|
||||
{
|
||||
if (/^\@end (itemize|table)$/)
|
||||
{
|
||||
$table_header = pop @table_headers;
|
||||
$table_footer = pop @table_footers;
|
||||
$indent -= 2;
|
||||
$intable--;
|
||||
next;
|
||||
}
|
||||
s/^\@itemx?(\s+(.*))?$/$table_header$2$table_footer/;
|
||||
# Fall through so the rest of the table lines are
|
||||
# processed normally.
|
||||
}
|
||||
|
||||
# Index entries.
|
||||
s/^\@cindex\s+(.*)$/.IX "$1"/;
|
||||
|
||||
$_ = "$last$_" if $last;
|
||||
undef $last;
|
||||
|
||||
# Trap keywords
|
||||
my $nk = qr/
|
||||
\@(\w+)\{
|
||||
(?{ push @parent, $1 }) # Keep track of the last keyword
|
||||
# keyword we encountered.
|
||||
((?:
|
||||
(?> (?:[^{}]|(?<=\@)[{}])*) # Non-braces without backtracking
|
||||
|
|
||||
(??{ $nk }) # Nested keywords
|
||||
)*)
|
||||
\}
|
||||
(?{ pop (@parent) }) # Lose track of the current keyword.
|
||||
/x;
|
||||
|
||||
@parent = ("");
|
||||
while (s/$nk/do_keyword $file, $parent[$#parent], $1, $2/e)
|
||||
{
|
||||
# Do nothing except replace our last-replacement
|
||||
# tracker - the replacement regex above is handling
|
||||
# everything else.
|
||||
@parent = ("");
|
||||
}
|
||||
s/$nk/do_keyword $file, $parent[$#parent], $1, $2/ge;
|
||||
|
||||
if (/\@\w+\{/)
|
||||
{
|
||||
# If there is still an opening keyword left, we need to
|
||||
# find the close bracket. Set $last to append the next
|
||||
# line in the next pass.
|
||||
$last = $_;
|
||||
next;
|
||||
}
|
||||
|
||||
# Finally, unprotect texinfo special characters.
|
||||
s/\@://g;
|
||||
s/\@([{}])/$1/g;
|
||||
|
||||
# Verify we haven't left commands unprocessed.
|
||||
die "Unprocessed command at line $. of file \`$file': "
|
||||
. ($1 ? "$1\n" : "<EOL>\n")
|
||||
if /^(?>(?:[^\@]|\@\@)*)\@(\w+|.|$)/;
|
||||
|
||||
# Unprotect @@.
|
||||
s/\@\@/\@/g;
|
||||
|
||||
# And print whatever's left.
|
||||
print $_;
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
@set UPDATED 3 February 2004
|
||||
@set UPDATED-MONTH February 2004
|
||||
@set EDITION 1.11.15
|
||||
@set VERSION 1.11.15
|
||||
@set EDITION 1.11.17
|
||||
@set VERSION 1.11.17
|
||||
|
@ -1,4 +1,4 @@
|
||||
@set UPDATED 6 April 2004
|
||||
@set UPDATED-MONTH April 2004
|
||||
@set EDITION 1.11.15
|
||||
@set VERSION 1.11.15
|
||||
@set UPDATED 27 May 2004
|
||||
@set UPDATED-MONTH May 2004
|
||||
@set EDITION 1.11.17
|
||||
@set VERSION 1.11.17
|
||||
|
@ -1,4 +1,4 @@
|
||||
@set UPDATED 3 February 2004
|
||||
@set UPDATED-MONTH February 2004
|
||||
@set EDITION 1.11.15
|
||||
@set VERSION 1.11.15
|
||||
@set EDITION 1.11.17
|
||||
@set VERSION 1.11.17
|
||||
|
@ -1,4 +1,4 @@
|
||||
@set UPDATED 6 April 2004
|
||||
@set UPDATED-MONTH April 2004
|
||||
@set EDITION 1.11.15
|
||||
@set VERSION 1.11.15
|
||||
@set UPDATED 27 May 2004
|
||||
@set UPDATED-MONTH May 2004
|
||||
@set EDITION 1.11.17
|
||||
@set VERSION 1.11.17
|
||||
|
@ -1,3 +1,31 @@
|
||||
2004-05-28 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* xsize.h: New file from GNULIB.
|
||||
* Makefile.am (libcvs_a_SOURCES): Add xsize.h.
|
||||
|
||||
2004-05-15 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* libcvs.dsp: Header file list updated.
|
||||
* libcvs.dep: Regenerated for "libcvs.dsp" changes.
|
||||
* libcvs.mak: Regenerated for "libcvs.dsp" changes.
|
||||
(Patch from Conrad Pino <conrad@pino.com>.)
|
||||
|
||||
2004-05-13 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* .cvsignore: Changed for "libcvs.dsp" changes.
|
||||
* libcvs.dsp: Added for "../cvsnt.dsw" changes.
|
||||
* libcvs.dep: Added for "libcvs.dsp" addition.
|
||||
* libcvs.mak: Added for "libcvs.dsp" addition.
|
||||
(Patch from Conrad Pino <conrad@pino.com>.)
|
||||
|
||||
2004-04-20 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* system.h: Correct comments.
|
||||
|
||||
2004-04-19 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* system.h: Gratuitous reformatting.
|
||||
|
||||
2004-04-07 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* regex.c: Revise "FREE_VAR" macro to eliminate C4090/C4022 warnings
|
||||
|
@ -85,8 +85,12 @@ EXTRA_DIST = \
|
||||
.cvsignore \
|
||||
ChangeLog.fsf \
|
||||
build_lib.com \
|
||||
libcvs.dep libcvs.dsp libcvs.mak \
|
||||
xgssapi.h
|
||||
|
||||
# For the xsize module from GNULIB.
|
||||
libcvs_a_SOURCES += xsize.h
|
||||
|
||||
# Until Automake gets its act together
|
||||
distclean-local:
|
||||
rm -f fnmatch.h
|
||||
|
@ -166,6 +166,8 @@ noinst_LIBRARIES = libcvs.a
|
||||
# Also should look into unifying regular expression matching in CVS
|
||||
# with the diff library (perhaps to have the caller, CVS, do the
|
||||
# matching?)
|
||||
|
||||
# For the xsize module from GNULIB.
|
||||
libcvs_a_SOURCES = \
|
||||
argmatch.c \
|
||||
getdate.y \
|
||||
@ -189,14 +191,15 @@ libcvs_a_SOURCES = \
|
||||
system.h \
|
||||
wait.h \
|
||||
xselect.h \
|
||||
xtime.h
|
||||
|
||||
xtime.h\
|
||||
xsize.h
|
||||
libcvs_a_LIBADD = @LIBOBJS@
|
||||
|
||||
EXTRA_DIST = \
|
||||
.cvsignore \
|
||||
ChangeLog.fsf \
|
||||
build_lib.com \
|
||||
libcvs.dep libcvs.dsp libcvs.mak \
|
||||
xgssapi.h
|
||||
|
||||
subdir = lib
|
||||
|
@ -289,7 +289,7 @@ int utime ();
|
||||
|
||||
|
||||
#ifdef STDC_HEADERS
|
||||
#include <stdlib.h>
|
||||
# include <stdlib.h>
|
||||
#else
|
||||
char *getenv ();
|
||||
char *malloc ();
|
||||
@ -300,7 +300,7 @@ extern int errno;
|
||||
|
||||
/* SunOS4 apparently does not define this in stdlib.h. */
|
||||
#ifndef EXIT_FAILURE
|
||||
#define EXIT_FAILURE 1
|
||||
# define EXIT_FAILURE 1
|
||||
#endif
|
||||
|
||||
/* check for POSIX signals */
|
||||
@ -323,26 +323,26 @@ extern int errno;
|
||||
/* Under OS/2, this must be included _after_ stdio.h; that's why we do
|
||||
it here. */
|
||||
#ifdef USE_OWN_TCPIP_H
|
||||
#include "tcpip.h"
|
||||
# include "tcpip.h"
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
# include <fcntl.h>
|
||||
#else
|
||||
#include <sys/file.h>
|
||||
# include <sys/file.h>
|
||||
#endif
|
||||
|
||||
#ifndef SEEK_SET
|
||||
#define SEEK_SET 0
|
||||
#define SEEK_CUR 1
|
||||
#define SEEK_END 2
|
||||
# define SEEK_SET 0
|
||||
# define SEEK_CUR 1
|
||||
# define SEEK_END 2
|
||||
#endif
|
||||
|
||||
#ifndef F_OK
|
||||
#define F_OK 0
|
||||
#define X_OK 1
|
||||
#define W_OK 2
|
||||
#define R_OK 4
|
||||
# define F_OK 0
|
||||
# define X_OK 1
|
||||
# define W_OK 2
|
||||
# define R_OK 4
|
||||
#endif
|
||||
|
||||
#if HAVE_DIRENT_H
|
||||
@ -367,7 +367,7 @@ extern int errno;
|
||||
#define convert_blocks(b, k) ((k) ? ((b) + 1) / 2 : (b))
|
||||
|
||||
#ifndef S_ISLNK
|
||||
#define lstat stat
|
||||
# define lstat stat
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -375,13 +375,13 @@ extern int errno;
|
||||
* because "config.h" is always included last.
|
||||
*/
|
||||
#ifndef S_IWRITE
|
||||
#define S_IWRITE 0000200 /* write permission, owner */
|
||||
# define S_IWRITE 0000200 /* write permission, owner */
|
||||
#endif
|
||||
#ifndef S_IWGRP
|
||||
#define S_IWGRP 0000020 /* write permission, grougroup */
|
||||
# define S_IWGRP 0000020 /* write permission, grougroup */
|
||||
#endif
|
||||
#ifndef S_IWOTH
|
||||
#define S_IWOTH 0000002 /* write permission, other */
|
||||
# define S_IWOTH 0000002 /* write permission, other */
|
||||
#endif
|
||||
|
||||
/* Under non-UNIX operating systems (MS-DOS, WinNT, MacOS), many filesystem
|
||||
@ -390,71 +390,71 @@ extern int errno;
|
||||
can hang their own definitions. */
|
||||
|
||||
#ifndef CVS_ACCESS
|
||||
#define CVS_ACCESS access
|
||||
# define CVS_ACCESS access
|
||||
#endif
|
||||
|
||||
#ifndef CVS_CHDIR
|
||||
#define CVS_CHDIR chdir
|
||||
# define CVS_CHDIR chdir
|
||||
#endif
|
||||
|
||||
#ifndef CVS_CREAT
|
||||
#define CVS_CREAT creat
|
||||
# define CVS_CREAT creat
|
||||
#endif
|
||||
|
||||
#ifndef CVS_FOPEN
|
||||
#define CVS_FOPEN fopen
|
||||
# define CVS_FOPEN fopen
|
||||
#endif
|
||||
|
||||
#ifndef CVS_FDOPEN
|
||||
#define CVS_FDOPEN fdopen
|
||||
# define CVS_FDOPEN fdopen
|
||||
#endif
|
||||
|
||||
#ifndef CVS_MKDIR
|
||||
#define CVS_MKDIR mkdir
|
||||
# define CVS_MKDIR mkdir
|
||||
#endif
|
||||
|
||||
#ifndef CVS_OPEN
|
||||
#define CVS_OPEN open
|
||||
# define CVS_OPEN open
|
||||
#endif
|
||||
|
||||
#ifndef CVS_READDIR
|
||||
#define CVS_READDIR readdir
|
||||
# define CVS_READDIR readdir
|
||||
#endif
|
||||
|
||||
#ifndef CVS_CLOSEDIR
|
||||
#define CVS_CLOSEDIR closedir
|
||||
# define CVS_CLOSEDIR closedir
|
||||
#endif
|
||||
|
||||
#ifndef CVS_OPENDIR
|
||||
#define CVS_OPENDIR opendir
|
||||
# define CVS_OPENDIR opendir
|
||||
#endif
|
||||
|
||||
#ifndef CVS_RENAME
|
||||
#define CVS_RENAME rename
|
||||
# define CVS_RENAME rename
|
||||
#endif
|
||||
|
||||
#ifndef CVS_RMDIR
|
||||
#define CVS_RMDIR rmdir
|
||||
# define CVS_RMDIR rmdir
|
||||
#endif
|
||||
|
||||
#ifndef CVS_STAT
|
||||
#define CVS_STAT stat
|
||||
# define CVS_STAT stat
|
||||
#endif
|
||||
|
||||
/* Open question: should CVS_STAT be lstat by default? We need
|
||||
to use lstat in order to handle symbolic links correctly with
|
||||
the PreservePermissions option. -twp */
|
||||
#ifndef CVS_LSTAT
|
||||
#define CVS_LSTAT lstat
|
||||
# define CVS_LSTAT lstat
|
||||
#endif
|
||||
|
||||
#ifndef CVS_UNLINK
|
||||
#define CVS_UNLINK unlink
|
||||
# define CVS_UNLINK unlink
|
||||
#endif
|
||||
|
||||
/* Wildcard matcher. Should be case-insensitive if the system is. */
|
||||
#ifndef CVS_FNMATCH
|
||||
#define CVS_FNMATCH fnmatch
|
||||
# define CVS_FNMATCH fnmatch
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
@ -483,7 +483,7 @@ extern int errno;
|
||||
#ifdef FILENAMES_CASE_INSENSITIVE
|
||||
|
||||
# if defined (__CYGWIN32__) || defined (WOE32)
|
||||
/* Under Windows NT, filenames are case-insensitive, and both / and \
|
||||
/* Under Windows, filenames are case-insensitive, and both / and \
|
||||
are path component separators. */
|
||||
# define FOLD_FN_CHAR(c) (WNT_filename_classes[(unsigned char) (c)])
|
||||
extern unsigned char WNT_filename_classes[];
|
||||
@ -492,12 +492,14 @@ extern unsigned char WNT_filename_classes[];
|
||||
# define ISDIRSEP(c) (FOLD_FN_CHAR(c) == '/')
|
||||
# define ISABSOLUTE(s) (ISDIRSEP(s[0]) || FOLD_FN_CHAR(s[0]) >= 'a' && FOLD_FN_CHAR(s[0]) <= 'z' && s[1] == ':' && ISDIRSEP(s[2]))
|
||||
# else /* ! WOE32 */
|
||||
/* As far as I know, both Cygwin and Macintosh OS X can make it here,
|
||||
/* As far as I know, just Macintosh OS X can make it here,
|
||||
* but since the OS X fold just folds a-z into A-Z or visa-versa, I'm just
|
||||
* using it for Cygwin too. The var name below could probably use a
|
||||
* rename.
|
||||
* allowing it to be used for any case insensitive system which we aren't
|
||||
* yet making other specific folds or exceptions for (basically, anything
|
||||
* case insensitive other than Windows, where \ and C:\ style absolute paths
|
||||
* also need to be accounted for).
|
||||
*
|
||||
* Under Mac OS X & Cygwin, filenames are case-insensitive.
|
||||
* Under Mac OS X, filenames are case-insensitive.
|
||||
*/
|
||||
# define FOLD_FN_CHAR(c) (OSX_filename_classes[(unsigned char) (c)])
|
||||
extern unsigned char OSX_filename_classes[];
|
||||
|
108
contrib/cvs/lib/xsize.h
Normal file
108
contrib/cvs/lib/xsize.h
Normal file
@ -0,0 +1,108 @@
|
||||
/* xsize.h -- Checked size_t computations.
|
||||
|
||||
Copyright (C) 2003 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. */
|
||||
|
||||
#ifndef _XSIZE_H
|
||||
#define _XSIZE_H
|
||||
|
||||
/* Get size_t. */
|
||||
#include <stddef.h>
|
||||
|
||||
/* Get SIZE_MAX. */
|
||||
#include <limits.h>
|
||||
#if HAVE_STDINT_H
|
||||
# include <stdint.h>
|
||||
#endif
|
||||
|
||||
/* The size of memory objects is often computed through expressions of
|
||||
type size_t. Example:
|
||||
void* p = malloc (header_size + n * element_size).
|
||||
These computations can lead to overflow. When this happens, malloc()
|
||||
returns a piece of memory that is way too small, and the program then
|
||||
crashes while attempting to fill the memory.
|
||||
To avoid this, the functions and macros in this file check for overflow.
|
||||
The convention is that SIZE_MAX represents overflow.
|
||||
malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
|
||||
implementation that uses mmap --, it's recommended to use size_overflow_p()
|
||||
or size_in_bounds_p() before invoking malloc().
|
||||
The example thus becomes:
|
||||
size_t size = xsum (header_size, xtimes (n, element_size));
|
||||
void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
|
||||
*/
|
||||
|
||||
/* Convert an arbitrary value >= 0 to type size_t. */
|
||||
#define xcast_size_t(N) \
|
||||
((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
|
||||
|
||||
/* Sum of two sizes, with overflow check. */
|
||||
static inline size_t
|
||||
#if __GNUC__ >= 3
|
||||
__attribute__ ((__pure__))
|
||||
#endif
|
||||
xsum (size_t size1, size_t size2)
|
||||
{
|
||||
size_t sum = size1 + size2;
|
||||
return (sum >= size1 ? sum : SIZE_MAX);
|
||||
}
|
||||
|
||||
/* Sum of three sizes, with overflow check. */
|
||||
static inline size_t
|
||||
#if __GNUC__ >= 3
|
||||
__attribute__ ((__pure__))
|
||||
#endif
|
||||
xsum3 (size_t size1, size_t size2, size_t size3)
|
||||
{
|
||||
return xsum (xsum (size1, size2), size3);
|
||||
}
|
||||
|
||||
/* Sum of four sizes, with overflow check. */
|
||||
static inline size_t
|
||||
#if __GNUC__ >= 3
|
||||
__attribute__ ((__pure__))
|
||||
#endif
|
||||
xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
|
||||
{
|
||||
return xsum (xsum (xsum (size1, size2), size3), size4);
|
||||
}
|
||||
|
||||
/* Maximum of two sizes, with overflow check. */
|
||||
static inline size_t
|
||||
#if __GNUC__ >= 3
|
||||
__attribute__ ((__pure__))
|
||||
#endif
|
||||
xmax (size_t size1, size_t size2)
|
||||
{
|
||||
/* No explicit check is needed here, because for any n:
|
||||
max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */
|
||||
return (size1 >= size2 ? size1 : size2);
|
||||
}
|
||||
|
||||
/* Multiplication of a count with an element size, with overflow check.
|
||||
The count must be >= 0 and the element size must be > 0.
|
||||
This is a macro, not an inline function, so that it works correctly even
|
||||
when N is of a wider tupe and N > SIZE_MAX. */
|
||||
#define xtimes(N, ELSIZE) \
|
||||
((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
|
||||
|
||||
/* Check for overflow. */
|
||||
#define size_overflow_p(SIZE) \
|
||||
((SIZE) == SIZE_MAX)
|
||||
/* Check against overflow. */
|
||||
#define size_in_bounds_p(SIZE) \
|
||||
((SIZE) != SIZE_MAX)
|
||||
|
||||
#endif /* _XSIZE_H */
|
@ -1,3 +1,10 @@
|
||||
2004-04-30 Derek Price <derek@ximbiot.com>
|
||||
|
||||
First pass at closing issue #3 from cvshome.org.
|
||||
* Makefile.am (man_MANS): Remove cvs.1.
|
||||
* cvs.1: Removed.
|
||||
* Makefile.in: Regenerated.
|
||||
|
||||
2004-02-12 Derek Price <derek@ximbiot.com>
|
||||
|
||||
Close issue #162.
|
||||
|
@ -14,7 +14,7 @@
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
man_MANS = cvs.1 cvs.5 cvsbug.8
|
||||
man_MANS = cvs.5 cvsbug.8
|
||||
EXTRA_DIST = \
|
||||
.cvsignore \
|
||||
$(man_MANS)
|
||||
|
@ -140,7 +140,7 @@ sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
|
||||
man_MANS = cvs.1 cvs.5 cvsbug.8
|
||||
man_MANS = cvs.5 cvsbug.8
|
||||
EXTRA_DIST = \
|
||||
.cvsignore \
|
||||
$(man_MANS)
|
||||
@ -165,53 +165,6 @@ Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.s
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
|
||||
uninstall-info-am:
|
||||
|
||||
man1dir = $(mandir)/man1
|
||||
install-man1: $(man1_MANS) $(man_MANS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(man1dir)
|
||||
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.1*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
|
||||
else file=$$i; fi; \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
case "$$ext" in \
|
||||
1*) ;; \
|
||||
*) ext='1' ;; \
|
||||
esac; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
|
||||
$(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
|
||||
done
|
||||
uninstall-man1:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.1*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
case "$$ext" in \
|
||||
1*) ;; \
|
||||
*) ext='1' ;; \
|
||||
esac; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
|
||||
rm -f $(DESTDIR)$(man1dir)/$$inst; \
|
||||
done
|
||||
|
||||
man5dir = $(mandir)/man5
|
||||
install-man5: $(man5_MANS) $(man_MANS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@ -348,7 +301,7 @@ check: check-am
|
||||
all-am: Makefile $(MANS)
|
||||
|
||||
installdirs:
|
||||
$(mkinstalldirs) $(DESTDIR)$(man1dir) $(DESTDIR)$(man5dir) $(DESTDIR)$(man8dir)
|
||||
$(mkinstalldirs) $(DESTDIR)$(man5dir) $(DESTDIR)$(man8dir)
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
@ -395,7 +348,7 @@ install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man: install-man1 install-man5 install-man8
|
||||
install-man: install-man5 install-man8
|
||||
|
||||
installcheck-am:
|
||||
|
||||
@ -417,17 +370,17 @@ ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-man
|
||||
|
||||
uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
|
||||
uninstall-man: uninstall-man5 uninstall-man8
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic distclean \
|
||||
distclean-generic distdir dvi dvi-am info info-am install \
|
||||
install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-man1 install-man5 install-man8 install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
install-man5 install-man8 install-strip installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
|
||||
pdf-am ps ps-am uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-man uninstall-man1 uninstall-man5 uninstall-man8
|
||||
uninstall-man uninstall-man5 uninstall-man8
|
||||
|
||||
|
||||
# for backwards compatibility with the old makefiles
|
||||
|
@ -1,3 +1,111 @@
|
||||
2004-06-09 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* commit.c, filesubr.c, history.c, server.c, wrapper.c: Various
|
||||
security fixes.
|
||||
(Original patch from Stefan Essler <s.esser@e-matters.de> & Sebastian
|
||||
Krahmer <krahmer@suse.de>.)
|
||||
|
||||
* cvs.h: Include xsize.h.
|
||||
|
||||
2004-06-09 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* server.c (serve_entry, serve_is_modified, serve_unchanged): Protect
|
||||
against malformed entries.
|
||||
* sanity.sh (server): Tests for same.
|
||||
|
||||
2004-06-07 Larry Jones <lawrence.jones@ugsplm.com>
|
||||
|
||||
* sanity.sh (basica): More tests for string-based revision inc.
|
||||
|
||||
2004-06-04 Larry Jones <lawrence.jones@ugsplm.com>
|
||||
|
||||
* subr.c (increment_revnum): Rewrite ala RCS to work directly on
|
||||
the string rather than converting to int to avoid overflow.
|
||||
* sanity.sh (basica): New tests for above, update others to match.
|
||||
|
||||
2004-05-19 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* server.c (serve_unchanged, serve_is_modified): Overwrite existing
|
||||
data in timefields. Fixes CAN-2004-0396.
|
||||
|
||||
2004-05-14 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* subr.c (file_has_conflict), vers_ts.c (time_stamp_server): Don't
|
||||
require '=' to be the only character here, as this is potentially
|
||||
destabilizing.
|
||||
|
||||
2004-05-14 Mark D. Baushke <mdb@cvshome.org>
|
||||
|
||||
* sanity.sh (trailingslashes): During cleanup remove topfile,v to
|
||||
avoid problems in later tests (editor-1).
|
||||
|
||||
2004-05-13 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* sanity.sh (trailingslashes): Note TODO item #205 in the comment.
|
||||
|
||||
2004-05-13 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* sanity.sh (trailingslashes): New tests to expose a bug in CVS when
|
||||
paths are specified with trailing slashes. This relates to TODO #205.
|
||||
|
||||
2004-05-12 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* subr.c (file_has_conflict), vers_ts.c (time_stamp_server): Only
|
||||
special case "=" when it is the only character in a timestamp field.
|
||||
Gratuitous reformatting.
|
||||
* vers_ts.c (time_stamp_server): Check for NULL in a consistent manner.
|
||||
Gratuitous reformatting.
|
||||
|
||||
2004-05-10 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* sanity.sh (top-level): Rename to...
|
||||
(rstar-toplevel): ...this for clarity.
|
||||
|
||||
2004-05-10 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* sanity.sh (dirs2-10ar): Remove unnecessary empty argument.
|
||||
|
||||
2004-05-02 Larry Jones <lawrence.jones@ugsplm.com>
|
||||
|
||||
* log.c (log_expand_revlist): Suppress warnings if really_quiet.
|
||||
|
||||
2004-05-07 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* sanity.sh (basica): Remove unnecessary empty arguments.
|
||||
|
||||
2004-05-07 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* cvs.h (fopen_case): Remove obsolescent prototype.
|
||||
|
||||
2004-05-05 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* sanity.sh: Wait a second and retry if cvs-serv* directories are
|
||||
discovered to avoid race conditions on some systems.
|
||||
(Patch from Pavel Roskin <proski@gnu.org>.)
|
||||
|
||||
2004-05-05 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* commit.c: Some gratuitous reformatting.
|
||||
|
||||
2004-05-04 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* update.c: Some gratuitous reformatting.
|
||||
|
||||
2004-05-04 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* add.c (add): Remove obsolete FIXME comment.
|
||||
(*): Some gratuitous reformatting.
|
||||
|
||||
2004-04-26 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* client.c (start_rsh_server): Don't rely on GNU argument processing
|
||||
capabilities in the RSH command.
|
||||
(Report from Mark Andrews <Mark_Andrews@isc.org>.)
|
||||
|
||||
2004-04-19 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* ignore.c: Gratuitous reformatting.
|
||||
|
||||
2004-04-11 Derek Price <derek@ximbiot.com>
|
||||
|
||||
* client.c (call_in_directory): Check paths the server sends us to make
|
||||
|
@ -187,16 +187,6 @@ add (argc, argv)
|
||||
/* FIXME: Does this erroneously call Create_Admin in error
|
||||
conditions which are only detected once the server gets its
|
||||
hands on things? */
|
||||
/* FIXME-also: if filenames are case-insensitive on the
|
||||
client, and the directory in the repository already
|
||||
exists and is named "foo", and the command is "cvs add
|
||||
FOO", this call to Create_Admin puts the wrong thing in
|
||||
CVS/Repository and so a subsequent "cvs update" will
|
||||
give an error. The fix will be to have the server report
|
||||
back what it actually did (e.g. use tagged text for the
|
||||
"Directory %s added" message), and then Create_Admin,
|
||||
which should also fix the error handling concerns. */
|
||||
|
||||
if (isdir (argv[j]))
|
||||
{
|
||||
char *tag;
|
||||
@ -698,9 +688,11 @@ cannot resurrect %s; RCS file removed by second party", finfo.fullname);
|
||||
if (options)
|
||||
free (options);
|
||||
|
||||
return (err);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* The specified user file is really a directory. So, let's make sure that
|
||||
* it is created in the RCS source repository, and that the user's directory
|
||||
@ -728,12 +720,12 @@ add_directory (finfo)
|
||||
/* "Can't happen". */
|
||||
error (0, 0,
|
||||
"directory %s not added; must be a direct sub-directory", dir);
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
if (fncmp (dir, CVSADM) == 0)
|
||||
{
|
||||
error (0, 0, "cannot add a `%s' directory", CVSADM);
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* before we do anything else, see if we have any per-directory tags */
|
||||
@ -875,7 +867,7 @@ add_directory (finfo)
|
||||
free_cwd (&cwd);
|
||||
if (rcsdir != NULL)
|
||||
free (rcsdir);
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -898,7 +890,7 @@ build_entry (repository, user, options, message, entries, tag)
|
||||
FILE *fp;
|
||||
|
||||
if (noexec)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* The requested log is read directly from the user and stored in the
|
||||
@ -923,5 +915,5 @@ build_entry (repository, user, options, message, entries, tag)
|
||||
(void) sprintf (line, "Initial %s", user);
|
||||
Register (entries, user, "0", line, options, tag, (char *) 0, (char *) 0);
|
||||
free (line);
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
@ -416,8 +416,11 @@ history (argc, argv)
|
||||
working = 1;
|
||||
break;
|
||||
case 'X': /* Undocumented debugging flag */
|
||||
#ifdef DEBUG
|
||||
histfile = optarg;
|
||||
#endif
|
||||
break;
|
||||
|
||||
case 'D': /* Since specified date */
|
||||
if (*since_rev || *since_tag || *backto)
|
||||
{
|
||||
@ -906,9 +909,13 @@ save_user (name)
|
||||
{
|
||||
if (user_count == user_max)
|
||||
{
|
||||
user_max += USER_INCREMENT;
|
||||
user_list = (char **) xrealloc ((char *) user_list,
|
||||
(int) user_max * sizeof (char *));
|
||||
user_max = xsum (user_max, USER_INCREMENT);
|
||||
if (size_overflow_p (xtimes (user_max, sizeof (char *))))
|
||||
{
|
||||
error (0, 0, "save_user: too many users");
|
||||
return;
|
||||
}
|
||||
user_list = xrealloc (user_list, xtimes (user_max, sizeof (char *)));
|
||||
}
|
||||
user_list[user_count++] = xstrdup (name);
|
||||
}
|
||||
@ -936,9 +943,13 @@ save_file (dir, name, module)
|
||||
|
||||
if (file_count == file_max)
|
||||
{
|
||||
file_max += FILE_INCREMENT;
|
||||
file_list = (struct file_list_str *) xrealloc ((char *) file_list,
|
||||
file_max * sizeof (*fl));
|
||||
file_max = xsum (file_max, FILE_INCREMENT);
|
||||
if (size_overflow_p (xtimes (file_max, sizeof (*fl))))
|
||||
{
|
||||
error (0, 0, "save_file: too many files");
|
||||
return;
|
||||
}
|
||||
file_list = xrealloc (file_list, xtimes (file_max, sizeof (*fl)));
|
||||
}
|
||||
fl = &file_list[file_count++];
|
||||
fl->l_file = cp = xmalloc (strlen (dir) + strlen (name) + 2);
|
||||
@ -977,9 +988,13 @@ save_module (module)
|
||||
{
|
||||
if (mod_count == mod_max)
|
||||
{
|
||||
mod_max += MODULE_INCREMENT;
|
||||
mod_list = (char **) xrealloc ((char *) mod_list,
|
||||
mod_max * sizeof (char *));
|
||||
mod_max = xsum (mod_max, MODULE_INCREMENT);
|
||||
if (size_overflow_p (xtimes (mod_max, sizeof (char *))))
|
||||
{
|
||||
error (0, 0, "save_module: too many modules");
|
||||
return;
|
||||
}
|
||||
mod_list = xrealloc (mod_list, xtimes (mod_max, sizeof (char *)));
|
||||
}
|
||||
mod_list[mod_count++] = xstrdup (module);
|
||||
}
|
||||
|
@ -44,6 +44,8 @@ const char *ign_default = ". .. core RCSLOG tags TAGS RCS SCCS .make.state\
|
||||
no longer ask the server about what is in CVSROOTADM_IGNORE. */
|
||||
int ign_inhibit_server;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* To the "ignore list", add the hard-coded default ignored wildcards above,
|
||||
* the wildcards found in $CVSROOT/CVSROOT/cvsignore, the wildcards found in
|
||||
@ -100,6 +102,8 @@ ign_setup ()
|
||||
/* Later, add ignore entries found in -I arguments */
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Open a file and read lines, feeding each line to a line parser. Arrange
|
||||
* for keeping a temporary list of wildcards at the end, if the "hold"
|
||||
|
@ -1078,7 +1078,7 @@ log_expand_revlist (rcs, revlist, default_branch)
|
||||
free (branch);
|
||||
}
|
||||
}
|
||||
if (nr->first == NULL)
|
||||
if (nr->first == NULL && !really_quiet)
|
||||
{
|
||||
error (0, 0, "warning: no branch `%s' in `%s'",
|
||||
r->first, rcs->path);
|
||||
@ -1101,7 +1101,7 @@ log_expand_revlist (rcs, revlist, default_branch)
|
||||
nr->first = RCS_whatbranch (rcs, r->first);
|
||||
else
|
||||
nr->first = RCS_gettag (rcs, r->first, 1, (int *) NULL);
|
||||
if (nr->first == NULL)
|
||||
if (nr->first == NULL && !really_quiet)
|
||||
{
|
||||
error (0, 0, "warning: no revision `%s' in `%s'",
|
||||
r->first, rcs->path);
|
||||
@ -1119,7 +1119,7 @@ log_expand_revlist (rcs, revlist, default_branch)
|
||||
nr->last = RCS_whatbranch (rcs, r->last);
|
||||
else
|
||||
nr->last = RCS_gettag (rcs, r->last, 1, (int *) NULL);
|
||||
if (nr->last == NULL)
|
||||
if (nr->last == NULL && !really_quiet)
|
||||
{
|
||||
error (0, 0, "warning: no revision `%s' in `%s'",
|
||||
r->last, rcs->path);
|
||||
|
@ -792,7 +792,7 @@ if test x"$*" = x; then
|
||||
tests="${tests} modules modules2 modules3 modules4 modules5 modules6"
|
||||
tests="${tests} mkmodules co-d"
|
||||
tests="${tests} cvsadm emptydir abspath abspath2 toplevel toplevel2"
|
||||
tests="${tests} top-level checkout_repository"
|
||||
tests="${tests} rstar-toplevel trailingslashes checkout_repository"
|
||||
# Log messages, error messages.
|
||||
tests="${tests} mflag editor errmsg1 errmsg2 adderrmsg opterrmsg"
|
||||
# Watches, binary files, history browsing, &c.
|
||||
@ -1919,13 +1919,46 @@ done"
|
||||
"Checking in ssfile;
|
||||
${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile
|
||||
new revision: 2\.0; previous revision: 1\.3
|
||||
done"
|
||||
dotest basica-8a1a "${testcvs} -q ci -m bump-it -r 2.9" \
|
||||
"Checking in ssfile;
|
||||
${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile
|
||||
new revision: 2\.9; previous revision: 2\.0
|
||||
done"
|
||||
# Test string-based revion number increment rollover
|
||||
dotest basica-8a1b "${testcvs} -q ci -m bump-it -f -r 2" \
|
||||
"Checking in ssfile;
|
||||
${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile
|
||||
new revision: 2\.10; previous revision: 2\.9
|
||||
done"
|
||||
dotest basica-8a1c "${testcvs} -q ci -m bump-it -r 2.99" \
|
||||
"Checking in ssfile;
|
||||
${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile
|
||||
new revision: 2\.99; previous revision: 2\.10
|
||||
done"
|
||||
# Test string-based revion number increment rollover
|
||||
dotest basica-8a1d "${testcvs} -q ci -m bump-it -f -r 2" \
|
||||
"Checking in ssfile;
|
||||
${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile
|
||||
new revision: 2\.100; previous revision: 2\.99
|
||||
done"
|
||||
dotest basica-8a1e "${testcvs} -q ci -m bump-it -r 2.1099" \
|
||||
"Checking in ssfile;
|
||||
${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile
|
||||
new revision: 2\.1099; previous revision: 2\.100
|
||||
done"
|
||||
# Test string-based revion number increment rollover
|
||||
dotest basica-8a1f "${testcvs} -q ci -m bump-it -f -r 2" \
|
||||
"Checking in ssfile;
|
||||
${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile
|
||||
new revision: 2\.1100; previous revision: 2\.1099
|
||||
done"
|
||||
# -f should not be necessary, but it should be harmless.
|
||||
# Also test the "-r 3" (rather than "-r 3.0") usage.
|
||||
dotest basica-8a2 "${testcvs} -q ci -m bump-it -f -r 3" \
|
||||
"Checking in ssfile;
|
||||
${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile
|
||||
new revision: 3\.1; previous revision: 2\.0
|
||||
new revision: 3\.1; previous revision: 2\.1100
|
||||
done"
|
||||
|
||||
# Test using -r to create a branch
|
||||
@ -1943,9 +1976,8 @@ done"
|
||||
dotest basica-8a5 "${testcvs} -q up -A ./" "[UP] ssfile"
|
||||
|
||||
cd ../..
|
||||
dotest basica-8b "${testcvs} -q diff -r1.2 -r1.3" ''
|
||||
dotest basica-8b1 "${testcvs} -q diff -r1.2 -r1.3 -C 3isacrowd" \
|
||||
''
|
||||
dotest basica-8b "${testcvs} -q diff -r1.2 -r1.3"
|
||||
dotest basica-8b1 "${testcvs} -q diff -r1.2 -r1.3 -C 3isacrowd"
|
||||
|
||||
# The .* here will normally be "No such file or directory",
|
||||
# but if memory serves some systems (AIX?) have a different message.
|
||||
@ -2013,11 +2045,23 @@ done"
|
||||
done"
|
||||
dotest basica-o5a "${testcvs} -n admin -o 1.2::3.1 ssfile" \
|
||||
"RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v
|
||||
deleting revision 2\.1100
|
||||
deleting revision 2\.1099
|
||||
deleting revision 2\.100
|
||||
deleting revision 2\.99
|
||||
deleting revision 2\.10
|
||||
deleting revision 2\.9
|
||||
deleting revision 2\.0
|
||||
deleting revision 1\.3
|
||||
done"
|
||||
dotest basica-o6 "${testcvs} admin -o 1.2::3.1 ssfile" \
|
||||
"RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v
|
||||
deleting revision 2\.1100
|
||||
deleting revision 2\.1099
|
||||
deleting revision 2\.100
|
||||
deleting revision 2\.99
|
||||
deleting revision 2\.10
|
||||
deleting revision 2\.9
|
||||
deleting revision 2\.0
|
||||
deleting revision 1\.3
|
||||
done"
|
||||
@ -6018,8 +6062,7 @@ ${QUESTION} sdir"
|
||||
"${QUESTION} sdir
|
||||
${PROG} \[update aborted\]: no such tag br"
|
||||
dotest dirs2-10ar \
|
||||
"${testcvs} -q rdiff -u -r 1.1 -r br first-dir/sdir/file1" \
|
||||
""
|
||||
"${testcvs} -q rdiff -u -r 1.1 -r br first-dir/sdir/file1"
|
||||
dotest_fail dirs2-10-again "${testcvs} update -d -r br" \
|
||||
"${QUESTION} sdir
|
||||
${PROG} update: Updating \.
|
||||
@ -13849,14 +13892,14 @@ ${PROG} commit: Rebuilding administrative file database"
|
||||
|
||||
|
||||
|
||||
top-level)
|
||||
rstar-toplevel)
|
||||
# FIXCVS:
|
||||
# This test confirms a bug that exists in the r* commands currently
|
||||
# when run against the top-level project.
|
||||
#
|
||||
# The assertion failure is something like:
|
||||
# do_recursion: Assertion \`strstr (repository, \"/\./\") == ((void \*)0)' failed\..*"
|
||||
dotest_fail top-level-1 "$testcvs rlog ." \
|
||||
dotest_fail rstar-toplevel-1 "$testcvs rlog ." \
|
||||
"${DOTSTAR}ssertion.*failed${DOTSTAR}" "${DOTSTAR}failed assertion${DOTSTAR}"
|
||||
|
||||
if $keep; then
|
||||
@ -13867,6 +13910,52 @@ ${PROG} commit: Rebuilding administrative file database"
|
||||
|
||||
|
||||
|
||||
trailingslashes)
|
||||
# Some tests of CVS's reactions to path specifications containing
|
||||
# trailing slashes.
|
||||
mkdir trailingslashes; cd trailingslashes
|
||||
dotest trailingslashes-init-1 "$testcvs -Q co -ldt ."
|
||||
dotest trailingslashes-init-2 "$testcvs -Q co -dt2 ."
|
||||
cd t
|
||||
echo "Ahh'll be baaack." >topfile
|
||||
dotest trailingslashes-init-3 "$testcvs -Q add topfile"
|
||||
dotest trailingslashes-init-4 "$testcvs -Q ci -mto-top" \
|
||||
"RCS file: $CVSROOT_DIRNAME/topfile,v
|
||||
done
|
||||
Checking in topfile;
|
||||
$CVSROOT_DIRNAME/topfile,v <-- topfile
|
||||
initial revision: 1\.1
|
||||
done"
|
||||
|
||||
# First, demonstrate the usual case.
|
||||
cd ../t2
|
||||
dotest trailingslashes-1 "$testcvs -q up CVSROOT"
|
||||
dotest_fail trailingslashes-1a "test -f topfile"
|
||||
|
||||
# FIXCVS:
|
||||
# Now the one that fails in remote mode.
|
||||
# This highlights one of the failure cases mentioned in TODO item
|
||||
# #205.
|
||||
if $remote; then
|
||||
dotest trailingslashes-2 "$testcvs -q up CVSROOT/" \
|
||||
"U topfile"
|
||||
dotest trailingslashes-2a "test -f topfile"
|
||||
else
|
||||
dotest trailingslashes-2 "$testcvs -q up CVSROOT/"
|
||||
dotest_fail trailingslashes-2a "test -f topfile"
|
||||
fi
|
||||
|
||||
if $keep; then
|
||||
echo Keeping $TESTDIR and exiting due to --keep
|
||||
exit 0
|
||||
fi
|
||||
|
||||
cd ../..
|
||||
rm -rf trailingslashes $CVSROOT_DIRNAME/topfile,v
|
||||
;;
|
||||
|
||||
|
||||
|
||||
checkout_repository)
|
||||
dotest_fail checkout_repository-1 \
|
||||
"${testcvs} co -d ${CVSROOT_DIRNAME} CVSROOT" \
|
||||
@ -26971,6 +27060,27 @@ EOF
|
||||
ok" <<EOF
|
||||
Global_option -l
|
||||
noop
|
||||
EOF
|
||||
|
||||
# There used to be some exploits based on malformed Entry requests
|
||||
dotest server-17 "$testcvs server" \
|
||||
"E protocol error: Malformed Entry
|
||||
error " <<EOF
|
||||
Root $TESTDIR/crerepos
|
||||
Directory .
|
||||
$TESTDIR/crerepos/dir1
|
||||
Entry X/file1/1.1////
|
||||
noop
|
||||
EOF
|
||||
|
||||
dotest server-18 "$testcvs server" \
|
||||
"E protocol error: Malformed Entry
|
||||
error " <<EOF
|
||||
Root $TESTDIR/crerepos
|
||||
Directory .
|
||||
$TESTDIR/crerepos/dir1
|
||||
Entry /CC/CC/CC
|
||||
noop
|
||||
EOF
|
||||
|
||||
if $keep; then
|
||||
@ -27494,7 +27604,11 @@ done"
|
||||
# files. We would like to not leave any behind.
|
||||
if $remote && ls $TMPDIR/cvs-serv* >/dev/null 2>&1; then
|
||||
# A true value means ls found files/directories with these names.
|
||||
fail "Found cvs-serv* directories in $TMPDIR."
|
||||
# Give the server some time to finish, then retry.
|
||||
sleep 1
|
||||
if ls $TMPDIR/cvs-serv* >/dev/null 2>&1; then
|
||||
fail "Found cvs-serv* directories in $TMPDIR."
|
||||
fi
|
||||
fi
|
||||
if ls $TMPDIR/cvs?????? >/dev/null 2>&1; then
|
||||
# A true value means ls found files/directories with these names.
|
||||
|
@ -311,6 +311,9 @@ compare_revnums (rev1, rev2)
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Increment a revision number. Working on the string is a bit awkward,
|
||||
but it avoid problems with integer overflow should the revision numbers
|
||||
get really big. */
|
||||
char *
|
||||
increment_revnum (rev)
|
||||
const char *rev;
|
||||
@ -319,17 +322,29 @@ increment_revnum (rev)
|
||||
int lastfield;
|
||||
size_t len = strlen (rev);
|
||||
|
||||
newrev = (char *) xmalloc (len + 2);
|
||||
newrev = xmalloc (len + 2);
|
||||
memcpy (newrev, rev, len + 1);
|
||||
p = strrchr (newrev, '.');
|
||||
if (p == NULL)
|
||||
for (p = newrev + len; p != newrev; )
|
||||
{
|
||||
free (newrev);
|
||||
return NULL;
|
||||
--p;
|
||||
if (!isdigit(*p))
|
||||
{
|
||||
++p;
|
||||
break;
|
||||
}
|
||||
if (*p != '9')
|
||||
{
|
||||
++*p;
|
||||
return newrev;
|
||||
}
|
||||
*p = '0';
|
||||
}
|
||||
lastfield = atoi (++p);
|
||||
sprintf (p, "%d", lastfield + 1);
|
||||
|
||||
/* The number was all 9s, so change the first character to 1 and add
|
||||
a 0 to the end. */
|
||||
*p = '1';
|
||||
p = newrev + len;
|
||||
*p++ = '0';
|
||||
*p = '\0';
|
||||
return newrev;
|
||||
}
|
||||
|
||||
@ -659,7 +674,7 @@ file_has_conflict (finfo, ts_conflict)
|
||||
/* If ts_conflict is NULL, there was no merge since the last
|
||||
* commit and there can be no conflict.
|
||||
*/
|
||||
assert ( ts_conflict );
|
||||
assert (ts_conflict);
|
||||
|
||||
/*
|
||||
* If the timestamp has changed and no
|
||||
@ -668,14 +683,14 @@ file_has_conflict (finfo, ts_conflict)
|
||||
*/
|
||||
|
||||
#ifdef SERVER_SUPPORT
|
||||
if ( server_active )
|
||||
if (server_active)
|
||||
retcode = ts_conflict[0] == '=';
|
||||
else
|
||||
#endif /* SERVER_SUPPORT */
|
||||
{
|
||||
filestamp = time_stamp ( finfo->file );
|
||||
retcode = !strcmp ( ts_conflict, filestamp );
|
||||
free ( filestamp );
|
||||
filestamp = time_stamp (finfo->file);
|
||||
retcode = !strcmp (ts_conflict, filestamp);
|
||||
free (filestamp);
|
||||
}
|
||||
|
||||
return retcode;
|
||||
|
@ -287,7 +287,7 @@ time_stamp_server (file, vers_ts, entdata)
|
||||
else if (entdata->timestamp
|
||||
&& entdata->timestamp[0] == '=')
|
||||
mark_unchanged (vers_ts);
|
||||
else if (entdata->timestamp != NULL
|
||||
else if (entdata->timestamp
|
||||
&& (entdata->timestamp[0] == 'M'
|
||||
|| entdata->timestamp[0] == 'D')
|
||||
&& entdata->timestamp[1] == '\0')
|
||||
|
@ -236,6 +236,30 @@ wrap_unparse_rcs_options (line, first_call_p)
|
||||
}
|
||||
#endif /* SERVER_SUPPORT || CLIENT_SUPPORT */
|
||||
|
||||
/*
|
||||
* Remove fmt str specifier other than %% or %s. And allow
|
||||
* only max_s %s specifiers
|
||||
*/
|
||||
wrap_clean_fmt_str(char *fmt, int max_s)
|
||||
{
|
||||
while (*fmt) {
|
||||
if (fmt[0] == '%' && fmt[1])
|
||||
{
|
||||
if (fmt[1] == '%')
|
||||
fmt++;
|
||||
else
|
||||
if (fmt[1] == 's' && max_s > 0)
|
||||
{
|
||||
max_s--;
|
||||
fmt++;
|
||||
} else
|
||||
*fmt = ' ';
|
||||
}
|
||||
fmt++;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Open a file and read lines, feeding each line to a line parser. Arrange
|
||||
* for keeping a temporary list of wrappers at the end, if the "temp"
|
||||
@ -556,9 +580,8 @@ wrap_tocvs_process_file(fileName)
|
||||
args = xmalloc (strlen (e->tocvsFilter)
|
||||
+ strlen (fileName)
|
||||
+ strlen (buf));
|
||||
/* FIXME: sprintf will blow up if the format string contains items other
|
||||
than %s, or contains too many %s's. We should instead be parsing
|
||||
e->tocvsFilter ourselves and giving a real error. */
|
||||
|
||||
wrap_clean_fmt_str(e->tocvsFilter, 2);
|
||||
sprintf (args, e->tocvsFilter, fileName, buf);
|
||||
run_setup (args);
|
||||
run_exec(RUN_TTY, RUN_TTY, RUN_TTY, RUN_NORMAL|RUN_REALLY );
|
||||
@ -590,9 +613,8 @@ wrap_fromcvs_process_file(fileName)
|
||||
|
||||
args = xmalloc (strlen (e->fromcvsFilter)
|
||||
+ strlen (fileName));
|
||||
/* FIXME: sprintf will blow up if the format string contains items other
|
||||
than %s, or contains too many %s's. We should instead be parsing
|
||||
e->fromcvsFilter ourselves and giving a real error. */
|
||||
|
||||
wrap_clean_fmt_str(e->fromcvsFilter, 1);
|
||||
sprintf (args, e->fromcvsFilter, fileName);
|
||||
run_setup (args);
|
||||
run_exec(RUN_TTY, RUN_TTY, RUN_TTY, RUN_NORMAL );
|
||||
|
Loading…
Reference in New Issue
Block a user