Import cvs-1.11.22 onto vendor branch.

This commit is contained in:
David E. O'Brien 2008-01-13 05:49:32 +00:00
parent 83c36f7f98
commit cf9c5c1a56
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/vendor/cvs/dist/; revision=175261
140 changed files with 11725 additions and 4343 deletions

View File

@ -49,9 +49,11 @@ Jim Kingdon and others at Cygnus Support <info@cygnus.com> wrote the
remote repository access code.
Larry Jones and Derek Price <derek@ximbiot.com> have been maintaining and
enhancing CVS for some years. Mark D. Baushke <mdb@cvshome.org> came on in
enhancing CVS for some years. Mark D. Baushke <mdb@gnu.org> came on in
2003.
Conrad Pino <Conrad@Pino.com> began maintaining the Windows port in 2004.
There have been many, many contributions not listed here. Consult the
individual ChangeLog files in each directory for a more complete idea.

View File

@ -88,22 +88,6 @@ 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'.
* 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
/*-------.

View File

@ -1,3 +1,281 @@
2006-06-09 Derek Price <derek@ximbiot.com>
* NEWS: Note client/server conflict fix.
2006-05-25 Derek Price <derek@ximbiot.com>
* configure.in: Accept --with-rsh argument to set RSH_DFLT in config.h.
Prefer `remsh' to `rsh' when autodetecting and comment rationale.
2006-04-27 Derek Price <derek@ximbiot.com>
* acinclude.m4 (ACX_WITH_GSSAPI): Detect libgss for HP-UX.
* NEWS: Note that GSSAPI builds under HP-UX.
(Report from Larry Jones <lawrence.jones@ugs.com>.)
2006-03-07 Derek Price <derek@ximbiot.com>
* NEWS: Note rtag fixes.
2006-02-26 Derek Price <derek@ximbiot.com>
* NEWS: Note CVSADM fix as an efficiency improvement.
2006-02-01 Derek Price <derek@ximbiot.com>
* NEWS: Note unconditional val-tags lock removal.
* NEWS: Note history buffer overflow fix.
2006-01-30 Derek Price <derek@ximbiot.com>
* NEWS: Note nonblocking flow control pipe fix.
2005-12-09 Derek Price <derek@ximbiot.com>
* NEWS: Note misc doc & bug fixes.
2005-12-07 Derek Price <derek@ximbiot.com>
* NEWS: Note recognition of :extssh:.
2005-10-18 Derek Price <derek@ximbiot.com>
* KEYS: New file, suggested by Antoine Lexy-Lambert <antoine@gmx.de>.
* README: Mention KEYS file.
2005-09-26 Derek Price <derek@ximbiot.com>
[bug #14639]
* acinclude.m4: Find the crypto library on FreeBSD 5.x.
Patch from Serguei E. Leontiev <lse@CryptoPro.ru>.
* NEWS: Note FreeBSD 5.x GSSAPI fix.
* NEWS: Note fsync'd commits.
2005-09-24 Derek Price <derek@ximbiot.com>
* NEWS, HACKING: Standardize on Automake 1.9.6.
2005-09-22 Derek Price <derek@ximbiot.com>
* NEWS: Mention conflict fixes.
2005-09-13 Derek Price <derek@ximbiot.com>
* TESTS: Mention new $username8 & $anyusername variables.
2005-09-04 Larry Jones <lawrence.jones@ugs.com>
* NEWS: s/bug-cvs@gnu.org/bug-cvs@nongnu.org/.
* configure.in: s/info-cvs@gnu.org/info-cvs@nongnu.org/.
* configure: Regenerated.
2005-09-01 Derek Price <derek@ximbiot.com>
* AUTHORS, DEVEL-CVS, HACKING, README: Update links, email addresses,
& mailing list descriptions.
2005-09-01 Derek Price <derek@ximbiot.com>
* FAQ: Update links.
2005-09-01 Derek Price <derek@ximbiot.com>
* HACKING, INSTALL, README, README.VMS, configure.in: Update links and
email addresses.
2005-08-31 Derek Price <derek@ximbiot.com>
* www/.htaccess: Remove this file.
2005-08-31 Derek Price <derek@ximbiot.com>
* cvs.spec.in: Note last spec file change in internal ChangeLog.
2005-08-31 Derek Price <derek@ximbiot.com>
* NEWS: Note spec file repair.
2005-08-31 Derek Price <derek@ximbiot.com>
* cvs.spec.in: Update links to point to Savannah. s/Copyright/License/
for RPM 4.mumble.
2005-08-30 Larry Jones <lawrence.jones@ugs.com>
* NEWS: Note import locking fix.
2005-07-12 Derek Price <derek@ximbiot.com>
* FAQ, HACKING, INSTALL: Add copyright notices.
2005-07-11 Derek Price <derek@ximbiot.com>
* FAQ, HACKING, INSTALL: Update license notices.
2005-06-02 Derek Price <derek@ximbiot.com>
* NEWS: Note server compression hang fix.
2005-06-01 Conrad T. Pino <Conrad@Pino.com>
* makewin32.cmd: Add Windows NT command file to build CVS Project.
Imported from revision 1.2 on feature branch.
2005-05-27 Derek Price <derek@ximbiot.com>
* NEWS: Note diff space split fix.
* BUGS: Remove diff space split note.
2005-05-03 Derek Price <derek@ximbiot.com>
* INSTALL: Add footnote about compiling a CVS checkout of CVS on a
case-insensitive UNIX file system like Mac OS X.
2005-05-02 Derek Price <derek@ximbiot.com>
* TODO (231): Renumber as...
(234): ...this to match numbering on 1.12.x.
2005-05-02 Derek Price <derek@ximbiot.com>
* TODO (231): New item.
(22, 30, 31): Remove completed items.
2005-05-02 Derek Price <derek@ximbiot.com>
* NEWS: Note new val-tags locks.
2005-04-30 Derek Price <derek@ximbiot.com>
* NEWS: Note new history locks.
2005-04-20 Derek Price <derek@ximbiot.com>
* NEWS: Note log overflow fix.
2005-04-15 Derek Price <derek@ximbiot.com>
* NEWS: Note Klocwork fixes.
2005-04-14 Derek Price <derek@ximbiot.com>
* NEWS: Note contrib Perl taint vulnerability fix.
2005-03-23 Derek Price <derek@ximbiot.com>
* ylwrap: New file.
2005-03-15 Derek Price <derek@ximbiot.com>
* HACKING, NEWS: Note new Automake version.
2005-03-04 Jim Hyslop <jhyslop@ieee.org>
* NEWS: Note fix for compile errors on IRIX 5.3.
2005-02-22 Derek Price <derek@ximbiot.com>
* NEWS: Note recent watch on/off fileattr fix.
2005-01-31 Derek Price <derek@ximbiot.com>
* AUTHORS: Add Conrad Pino.
* README: Update copyright notice.
2005-01-29 Derek Price <derek@ximbiot.com>
* NEWS: Note some recent changes.
2004-11-17 Derek Price <derek@ximbiot.com>
* NEWS: Note "red file" fix source inclusion.
2004-11-05 Conrad T. Pino <Conrad@Pino.com>
* cvsnt.dep: Regenerated after complete rebuild.
* cvsnt.mak: Regenerated after complete rebuild.
2004-11-03 Derek Price <derek@ximbiot.com>
* HACKING, NEWS: Note new Autoconf & Automake versions.
2004-10-29 Derek Price <derek@ximbiot.com>
* NEWS: Note xreadlink fix.
2004-10-26 Derek Price <derek@ximbiot.com>
* NEWS: Note GSSAPI error message fix.
2004-10-19 Derek Price <derek@ximbiot.com>
* NEWS: Note resurrection fix.
2004-10-14 Derek Price <derek@ximbiot.com>
* NEWS: Note new import branch verification.
2004-09-25 Derek Price <derek@ximbiot.com>
* configure.in: Use doc/mkman.pl as source for doc/mkman.
2004-09-08 Conrad T. Pino <Conrad@Pino.com>
* cvsnt.dsp: Add "windows-NT/JmgStat.c" to project. Add
"windows-NT/JmgStat.h" to project. Add "lib/xsize.h" to project.
* cvsnt.dep: Regenerated for "cvsnt.dsp" change.
* cvsnt.mak: Regenerated for "cvsnt.dsp" change.
2004-09-07 Derek Price <derek@ximbiot.com>
* NEWS: Note Windows DST fix.
2004-09-03 Derek Price <derek@ximbiot.com>
* HACKING: Codify backwards compatibility conventions. Remove outdated
reference to very old MSVC++ releases.
2004-08-30 Derek Price <derek@ximbiot.com>
* NEWS: Note compliance of log_accum.pl with Perl 5.8.5.
2004-08-24 Derek Price <derek@ximbiot.com>
* TODO (24, 49, 92, 113): Remove completed/obsolescent items.
2004-08-24 Derek Price <derek@ximbiot.com>
* BUGS: Remove release subdir note. This was fixed with the commit on
2004-02-25, based on Matthew Ogilvie's patch.
2004-08-24 Derek Price <derek@ximbiot.com>
* NEWS: Note r* . fix.
* BUGS: Remove r* . note.
2004-08-24 Derek Price <derek@ximbiot.com>
* NEWS: Note invalid tag fix.
2004-08-24 Mark D. Baushke <mdb@cvshome.org>
* NEWS: Note that modules -a bugfix has a change in behavior.
2004-06-22 Derek Price <derek@ximbiot.com>
* NEWS: Note Conrad's Windows fix.
2004-06-21 Derek Price <derek@ximbiot.com>
* .cvsignore: Ignore GPG signature files for distributions.
2004-06-10 Derek Price <derek@ximbiot.com>
* NEWS: Note manual update.
2004-06-09 Derek Price <derek@ximbiot.com>
* NEWS: Note Stefan & Sebastian's security fixes.

View File

@ -3,37 +3,6 @@
This file, DEVEL-CVS, contains the policies by which the CVS
development group operates. Also see the HACKING file.
----------------------------------------------------------------------
Charter for the devel-cvs mailing list:
The CVS Developers' List <dev@ccvs.cvshome.org> exists to help people
with access to the CVS source repository co-ordinate changes, make
releases, and administer the repository.
Everyone who has been given checkin access to the repository for the
CVS sources should read devel-cvs. Only those with checkin access may
send messages to the list.
The devel-cvs list may be used to discuss:
- administrivia regarding the CVS source repository and release
process, and
- changes and features intended for inclusion in the official CVS
release (either source code or documentation), which someone plans
to implement, or has implemented.
The devel-cvs list should not be used to discuss:
- changes or features to packages other than the CVS release
(e.g., related packages like tkCVS, RAD/CVS, or other groups'
distributions of CVS, like RCVS, etc.),
- changes which nobody has offered to implement, or
- the philosophy of CVS (as opposed to a specific change to CVS).
These topics should either go on info-cvs, or have a new mailing list
created for them.
The topic restrictions in this charter do not reflect the development
group's future plans for CVS; rather, they reflect a topic
classification which the group finds helpful.
----------------------------------------------------------------------
Policies regarding the CVS source repository:

View File

@ -1,3 +1,24 @@
-------------------------------------------------------------------------------
CVS is Copyright (C) 1989-2005 The Free Software Foundation, Inc.
CVS 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 1, or (at your option)
any later version.
More details are available in the COPYING file but, in simplified
terms, this means that any distributed modifications you make to
this software must also be released under the GNU General Public
License.
CVS 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.
-------------------------------------------------------------------------------
This file contains a CVS FAQ. Until 1995 it was maintained by David
Grubbs. It was out of date and not being maintained, but it had a
certain following and in 1997 Pascal Molli decided to start
@ -13,13 +34,14 @@ until someone can write some code to extract data from a FAQ-O-Matic
and insert things like tables of contents).
The answers which are dated "6/13/1997" below are really from the 1995
FAQ, for the most part. Many of them are out of date. If you have
some time, you are encouraged to double-check them against other
sources like the Cederqvist manual and update the FAQ. If you don't
have such time, take them with a grain of salt or a few.
FAQ, for the most part. Many of them are out of date. The current FAQ may
be found at <http://ximbiot.com/cvs/wiki/index.php?title=CVS_FAQ>. If you have
some time, you are encouraged to export that FAQ as text and import it here.
If you don't have such time, take the answers in this file with at least a few
grains of salt.
Since Feb. 2000 CVS is being maintained by OpenAvenue, Inc. and many of
the existing resources have been centeralized on http://www.cvshome.org.
Since August, 2005, many of the existing CVS resources have been centralized on
<http://cvs.nongnu.org> & <http://ximbiot.com>.
Category: /, all questions
@ -1899,7 +1921,8 @@ You can branch a branch.
GIC is no longer being maintained and tkCVS is recommended
instead.
For more on tkCVS, see http://www.cvshome.org/dev/addontkcvs.html.
For more on tkCVS, see
<http://ximbiot.com/cvs/cvshome/dev/addontkcvs.html>.
kingdon@cyclic.com

View File

@ -1,10 +1,29 @@
How to write code for CVS
* License of CVS
CVS is Copyright (C) 1989-2005 The 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 1, or (at your option)
any later version.
More details are available in the COPYING file but, in simplified
terms, this means that any distributed modifications you make to
this software must also be released under the GNU General Public
License.
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.
* Source
Patches against the development version of CVS are most likely to be accepted:
$ cvs -d:pserver:anoncvs@cvs.cvshome.org/cvsroot co ccvs
$ CVS_RSH=ssh cvs -d:ext:anoncvs@savannah.nongnu.org:/cvsroot/cvs co ccvs
* Compiler options
@ -13,13 +32,28 @@ detect many programming errors. This is not the default because it
might cause spurious warnings, but at least on some machines, there
should be no spurious warnings. For example:
$ CFLAGS="-g -Wall" ./configure
$ CFLAGS="-g -Wall" ./configure
Configure is not very good at remembering this setting; it will get
wiped out whenever you do a ./config.status --recheck, so you'll need
to use:
$ CFLAGS="-g -Wall" ./config.status --recheck
$ CFLAGS="-g -Wall" ./config.status --recheck
* Backwards Compatibility
Only bug fixes are accepted into the stable branch. New features should be
applied to the trunk.
If it is not inextricable from a bug fix, CVS's output (to stdout/stderr)
should not be changed on the stable branch in order to best support scripts and
other tools which parse CVS's output. It is ok to change output between
feature releases (on the trunk), though such changes should be noted in the
NEWS file.
Changes in the way CVS responds to command line options, config options, etc.
should be accompanied by deprecation warnings for an entire stable series of
releases before being changed permanently, if at all possible.
* Indentation style
@ -100,10 +134,6 @@ Generally speaking the GNU coding standards are mostly used by CVS
and perhaps an exception or two we haven't mentioned). This is the
file standards.text at the GNU FTP sites.
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
@ -115,13 +145,13 @@ 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.
The CVS Makefiles and configure script were built using Automake 1.9.6 and
Autoconf 2.59, 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>.
please send a report to <bug-cvs@nongnu.org>.
* Writing patches (strategy)
@ -174,7 +204,7 @@ for each issue. Use context diffs or unidiffs for patches.
Include words like "I grant permission to distribute this patch under
the terms of the GNU Public License" with your patch. By sending a
patch to bug-cvs@gnu.org, you implicitly grant this permission.
patch to bug-cvs@nongnu.org, you implicitly grant this permission.
Submitting a patch to bug-cvs is the way to reach the people who have
signed up to receive such submissions (including CVS developers), but
@ -203,27 +233,21 @@ intentional, to avoid a last minute rush to get new features in.
* Mailing lists
Anyone can add themselves to the following mailing lists:
In addition to the mailing lists listed in the README file, developers should
take particular note of the following mailling lists:
dev. Unless you are accepted as a CVS developer as
described in the DEVEL-CVS file, you will only be able to
read this list, not send to it. The charter of the list is
also in DEVEL-CVS.
cvs. The only messages sent to this list are sent
bug-cvs: This is the list which users are requested to send bug reports
to. General CVS development and design discussions also take place on
this list.
info-cvs: This list is intended for user questions, but general CVS
development and design discussions sometimes take place on this list.
cvs-cvs: The only messages sent to this list are sent
automatically, via the CVS `loginfo' mechanism, when someone
checks something in to the master CVS repository.
test-results. The only messages sent to this list are sent
cvs-test-results: The only messages sent to this list are sent
automatically, daily, by a script which runs "make check"
and "make remotecheck" on the master CVS sources.
To subscribe to dev, cvs, or test-results, send
a message to "<list>-subscribe@ccvs.cvshome.org" or visit
http://ccvs.cvshome.org/servlets/ProjectMailingListList and follow the
instructions there.
One other list related to CVS development is bug-cvs. This is the
list which users are requested to send bug reports to. Anyone can
subscribe; to do so send mail to bug-cvs-request@gnu.org.
Other CVS discussions take place on the info-cvs mailing list
(send mail to info-cvs-request@gnu.org to subscribe) or on
the newsgroup comp.software.config-mgmt.
To subscribe to any of these lists, send mail to <list>-request@nongnu.org
or visit http://savannah.nongnu.org/mail/?group=cvs and follow the instructions
for the list you wish to subscribe to.

View File

@ -1,4 +1,24 @@
First, read the README file. If you're still happy...
-------------------------------------------------------------------------------
CVS is Copyright (C) 1989-2005 The Free Software Foundation, Inc.
CVS 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 1, 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.
-------------------------------------------------------------------------------
Now back to our regularly scheduled program:
Please read the README file before reading this INSTALL file. Then, to
install CVS:
First you need to obtain and install the CVS executables. If you got
a distribution which contains executables, consult the installation
@ -95,7 +115,7 @@ Tested platforms
CVS has been tested on the following platforms. The most recent
version of CVS reported to have been tested is indicated, but more
recent versions of CVS probably will work too. Please send updates to
this list to bug-cvs@gnu.org (doing so in the form of a diff
this list to bug-cvs@nongnu.org (doing so in the form of a diff
to this file, or at least exact suggested text, is encouraged).
"tested" means, at a minimum, that CVS compiles and appears to work on
simple (manual) testing. In many cases it also means "make check"
@ -182,7 +202,8 @@ PowerPC or RS/6000:
IBM RS/6000 running AIX 4.3 (1.10.7)
Lynx 2.3.1 120495 (1.6.86) (footnote 9)
Lynx 2.5 (1.9) (footnote 10)
MkLinux DR3 GENERIC #6 (1.10.5.1) (presumably LinuxPPC too)
Linux DR3 GENERIC #6 (1.10.5.1) (presumably LinuxPPC too)
Mac OS X ALL (footnote 14)
Mac OS X Darwin 6.6 Darwin Kernel Version 6.6 (1.11.1p1)
Mac OS X Darwin 5.5 Darwin Kernel Version 5.5 (1.11.6) (footnote 12)
Mac OS X Darwin 5.5 Darwin Kernel Version 5.5 (1.12.1) (footnote 12)
@ -253,6 +274,17 @@ VAX:
A build under HP PA-RISC 2.0 will probably not run under PA-RISC 1.1
unless "+DAportable" is added to the HP ANSI cc compiler flags.
(footnote 14)
Because of the case-insensitive file system on Mac OS X, you cannot build
CVS directly from a checkout from CVS. The name of the built executable,
`cvs', conflicts with name of the CVS administration directory, `CVS'.
The work-around is to build the executable from a build directory separate
from the source directory. i.e.:
cvs co ccvs; cd ccvs
mkdir build; cd build
../configure && make
-------------------------------------------------------------------------------
Building from source code under Unix:

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.7.9 from Makefile.am.
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -28,7 +28,6 @@
# 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.
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
@ -36,7 +35,6 @@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
@ -50,6 +48,46 @@ POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
$(srcdir)/cvs.spec.in $(top_srcdir)/configure \
$(top_srcdir)/emx/Makefile.in $(top_srcdir)/os2/Makefile.in \
$(top_srcdir)/zlib/Makefile.in AUTHORS COPYING COPYING.LIB \
ChangeLog INSTALL NEWS TODO compile depcomp install-sh \
mdate-sh missing mkinstalldirs ylwrap
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno configure.status.lineno
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES = cvs.spec emx/Makefile os2/Makefile zlib/Makefile
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-exec-recursive install-info-recursive \
install-recursive installcheck-recursive installdirs-recursive \
pdf-recursive ps-recursive uninstall-info-recursive \
uninstall-recursive
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
{ test ! -d $(distdir) \
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr $(distdir); }; }
DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
@ -119,6 +157,8 @@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
datadir = @datadir@
@ -132,6 +172,7 @@ libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
@ -139,6 +180,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
with_default_rsh = @with_default_rsh@
# Unix source subdirs, where we'll want to run lint and etags:
# This is a legacy variable from b4 Automake
@ -147,7 +189,6 @@ USOURCE_SUBDIRS = lib zlib diff src
SUBDIRS = $(USOURCE_SUBDIRS) man doc contrib tools \
windows-NT os2 emx vms
EXTRA_DIST = \
.cvsignore \
BUGS \
@ -168,43 +209,42 @@ EXTRA_DIST = \
cvs.spec \
mktemp.sh
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES = cvs.spec emx/Makefile os2/Makefile zlib/Makefile
DIST_SOURCES =
RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \
ps-recursive install-info-recursive uninstall-info-recursive \
all-recursive install-data-recursive install-exec-recursive \
installdirs-recursive install-recursive uninstall-recursive \
check-recursive installcheck-recursive
DIST_COMMON = README $(srcdir)/Makefile.in $(srcdir)/configure AUTHORS \
COPYING COPYING.LIB ChangeLog INSTALL Makefile.am NEWS TODO \
acinclude.m4 aclocal.m4 compile config.h.in configure \
configure.in cvs.spec.in depcomp install-sh mdate-sh missing \
mkinstalldirs
DIST_SUBDIRS = $(SUBDIRS)
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
am--refresh:
@:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
cd $(srcdir) && $(AUTOMAKE) --gnu \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
config.h: stamp-h1
@ -216,14 +256,14 @@ config.h: stamp-h1
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
@rm -f stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status config.h
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(top_srcdir)/configure.in $(ACLOCAL_M4)
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_srcdir) && $(AUTOHEADER)
touch $(srcdir)/config.h.in
rm -f stamp-h1
touch $@
distclean-hdr:
-rm -f config.h stamp-h1
cvs.spec: $(top_builddir)/config.status cvs.spec.in
cvs.spec: $(top_builddir)/config.status $(srcdir)/cvs.spec.in
cd $(top_builddir) && $(SHELL) ./config.status $@
emx/Makefile: $(top_builddir)/config.status $(top_srcdir)/emx/Makefile.in
cd $(top_builddir) && $(SHELL) ./config.status $@
@ -240,7 +280,13 @@ uninstall-info-am:
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@set fnord $$MAKEFLAGS; amf=$$2; \
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
@ -252,7 +298,7 @@ $(RECURSIVE_TARGETS):
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
@ -260,7 +306,13 @@ $(RECURSIVE_TARGETS):
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@set fnord $$MAKEFLAGS; amf=$$2; \
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
@ -281,7 +333,7 @@ maintainer-clean-recursive:
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
@ -292,14 +344,6 @@ ctags-recursive:
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ETAGS = etags
ETAGSFLAGS =
CTAGS = ctags
CTAGSFLAGS =
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
@ -308,19 +352,22 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
if (etags --etags-include --version) >/dev/null 2>&1; then \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -f $$subdir/TAGS && \
test ! -f $$subdir/TAGS || \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
@ -330,10 +377,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
@ -356,24 +404,11 @@ GTAGS:
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = .
distdir = $(PACKAGE)-$(VERSION)
am__remove_distdir = \
{ test ! -d $(distdir) \
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr $(distdir); }; }
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
distdir: $(DISTFILES)
$(am__remove_distdir)
mkdir $(distdir)
$(mkinstalldirs) $(distdir)/. $(distdir)/contrib $(distdir)/doc $(distdir)/emx $(distdir)/os2 $(distdir)/src $(distdir)/windows-NT $(distdir)/zlib
$(mkdir_p) $(distdir)/. $(distdir)/contrib $(distdir)/doc $(distdir)/emx $(distdir)/lib $(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 \
@ -385,7 +420,7 @@ distdir: $(DISTFILES)
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
@ -400,15 +435,17 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
list='$(SUBDIRS)'; for subdir in $$list; do \
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d $(distdir)/$$subdir \
|| mkdir $(distdir)/$$subdir \
test -d "$(distdir)/$$subdir" \
|| $(mkdir_p) "$(distdir)/$$subdir" \
|| exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$(top_distdir)" \
distdir=../$(distdir)/$$subdir \
top_distdir="$$top_distdir" \
distdir="$$distdir/$$subdir" \
distdir) \
|| exit 1; \
fi; \
@ -419,24 +456,46 @@ distdir: $(DISTFILES)
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r $(distdir)
dist-gzip: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
dist-bzip2: distdir
$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
dist-shar: distdir
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__remove_distdir)
dist dist-all: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
$(am__remove_distdir)
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
@ -456,19 +515,20 @@ distcheck: dist
distuninstallcheck \
&& chmod -R a-w "$$dc_install_base" \
&& ({ \
(cd ../.. && $(mkinstalldirs) "$$dc_destdir") \
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
} || { rm -rf "$$dc_destdir"; exit 1; }) \
&& rm -rf "$$dc_destdir" \
&& $(MAKE) $(AM_MAKEFLAGS) dist-gzip \
&& rm -f $(distdir).tar.gz \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& rm -rf $(DIST_ARCHIVES) \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
$(am__remove_distdir)
@echo "$(distdir).tar.gz is ready for distribution" | \
sed 'h;s/./=/g;p;x;p;x'
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
distuninstallcheck:
@cd $(distuninstallcheck_dir) \
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
@ -492,7 +552,6 @@ check: check-recursive
all-am: Makefile config.h
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
@ -512,7 +571,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -530,6 +589,8 @@ dvi: dvi-recursive
dvi-am:
html: html-recursive
info: info-recursive
info-am:
@ -566,22 +627,20 @@ uninstall-am: uninstall-info-am
uninstall-info: uninstall-info-recursive
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \
clean-generic clean-recursive ctags ctags-recursive dist \
dist-all dist-bzip2 dist-gzip distcheck distclean \
distclean-generic distclean-hdr distclean-recursive \
distclean-tags distcleancheck distdir distuninstallcheck dvi \
dvi-am dvi-recursive info info-am info-recursive install \
install-am install-data install-data-am install-data-recursive \
install-exec install-exec-am install-exec-recursive \
install-info install-info-am install-info-recursive install-man \
install-recursive install-strip installcheck installcheck-am \
installdirs installdirs-am installdirs-recursive \
maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-generic \
mostlyclean-recursive pdf pdf-am pdf-recursive ps ps-am \
ps-recursive tags tags-recursive uninstall uninstall-am \
uninstall-info-am uninstall-info-recursive uninstall-recursive
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
check-am clean clean-generic clean-recursive ctags \
ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \
dist-tarZ dist-zip distcheck distclean distclean-generic \
distclean-hdr distclean-recursive distclean-tags \
distcleancheck distdir distuninstallcheck dvi dvi-am html \
html-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 installdirs-am maintainer-clean \
maintainer-clean-generic maintainer-clean-recursive \
mostlyclean mostlyclean-generic mostlyclean-recursive pdf \
pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
uninstall-info-am
.PHONY: localcheck remotecheck

View File

@ -1,6 +1,208 @@
Changes since 1.11.16:
Changes since 1.11.21:
**********************
BUG FIXES
* The CVS client again correctly reports files with conflicts when using
servers running CVS 1.11.20/1.12.12, or earlier (and maybe 3rd party
servers).
* The GSSAPI server should now build under HP-UX.
* `cvs rtag' now correctly tags files that have been removed from the trunk.
* Code efficiency has been improved slightly.
* A rare race condition that could leave a lock on the val-tags file has been
avoided.
* A potential buffer overflow in the history command has been fixed.
* Thanks to a report and patch from Garrett Rooney <grooney@collab.net>, paused
trigger processes no longer cause the CVS server to consume 100% CPU.
* Thanks to a suggestion from Joseph P. Skudlarek <Jskud@Jskud.com>, an
:extssh: has been added as a synonym of the :ext: access method, as a
kindness to users of old version of Eclipse.
* Misc documentation updates and minor bug fixes.
Changes from 1.11.20 to 1.11.21:
********************************
BUG FIXES
* Thanks to Serguei E. Leontiev <lse@CryptoPro.ru>, CVS with Kerberos 5 GSSAPI
should automatically link on FreeBSD 5.x. (bug #14639).
* Thanks to Rahul Bhargava <rahul@wandisco.com>, heavily loaded systems
suffering from a disk crash or power failure will not lose data they claimed
to have committed.
* CVS server now handles conflict markers in Entry requests as documented.
* CVS now remembers that binary file merge conflicts occurred until the
timestamp of the updated binary file changes.
* CVS client now saves some bandwidth by not sending the contents of files
with conflicts to the server when it isn't needed.
* CVS now does correct locking during import.
* A problem where the server could block indefinitely waiting for an EOF from
the client when compression was enabled has been fixed.
* `cvs diff' no longer splits its arguments on spaces.
* Thanks to an old report and patch from Stewart Brodie <stewart@eh.org>, a
potential crash in response to a corrupt RCS file has been fixed.
* CVS now locks the history and val-tags files before writing to them.
Especially with large repositories, users should no longer see new warnings
about corrupt history records when using the `cvs history' command. Existing
corrupt history records will still need to be removed manually. val-tags
corruption should have had less obvious effects, but removing the
CVSROOT/val-tags file and allowing a 1.11.21 or later version of CVS to
regenerate it may eliminate a few odd behaviors and possibly cause a slight
speed up of read transactions in large repositories over time.
BUILD ISSUES
* The RPM spec file works again with the most modern versions of `rpm'.
DEVELOPER ISSUES
* We've standardized on Automake 1.9.6 to get some at new features that make
our jobs easier. See the HACKING file for more on using the autotools with
CVS.
Changes from 1.11.19 to 1.11.20:
********************************
SERVER SECURITY FIXES
* Thanks to a report from Alen Zukich <alen.zukich@klocwork.com>, several minor
security issues have been addressed. One was a buffer overflow that is
potentially serious but which may not be exploitable, assigned CAN-2005-0753
by the Common Vulnerabilities and Exposures Project
<http://www.cve.mitre.org>. Other fixes resulting from Alen's report include
repair of an arbitrary free with no known exploit and several plugged memory
leaks and potentially freed NULL pointers which may have been exploitable for
a denial of service attack.
* Thanks to a report from Craig Monson <craig@malachiarts.com>, minor
potential vulnerabilities in the contributed Perl scripts have been fixed.
The confirmed vulnerability could allow the execution of arbitrary code on
the CVS server, but only if a user already had commit access and if one of
the contrib scripts was installed improperly, a condition which should have
been quickly visible to any administrator. The complete description of the
problem is here: <https://ccvs.cvshome.org/issues/show_bug.cgi?id=224>. If
you were making use of any of the contributed trigger scripts on a CVS
server, you should probably still replace them with the new versions, to be
on the safe side.
Unfortunately, our fix is incomplete. Taint-checking has been enabled in all
the contributed Perl scripts intended to be run as trigger scripts, but no
attempt has been made to ensure that they still run in taint mode. You will
most likely have to tweak the scripts in some way to make them run. Please
send any patches you find necessary back to <bug-cvs@nongnu.org> so that we
may again ship fully enabled scripts in the future.
You should also make sure that any home-grown Perl scripts that you might
have installed as CVS triggers also have taint-checking enabled. This can be
done by adding `-T' on the scripts' #! lines. Please try running
`perldoc perlsec' if you would like more information on general Perl security
and taint-checking.
BUG FIXES
* Thanks to a report and a patch from Georg Scwharz <georg.scwarz@freenet.de>
CVS now builds without error on IRIX 5.3
DEVELOPER ISSUES
* We've standardized on Automake 1.9.5 to get some at new features that make
our jobs easier. See the HACKING file for more on using the autotools with
CVS.
Changes from 1.11.18 to 1.11.19:
********************************
BUG FIXES
* Thanks to a patch from Jim Hyslop <jhyslop@ieee.org>, issuing
'cvs watch on' or 'cvs watch off' in an empty directory no longer
clears any watchers in that directory.
* An intermittant assertion failure in checkout has been fixed.
* Thanks to a report from Chris Bohn <cbohn@rrinc.com>, all the source files
needed for the Windows "red file" fix are actually included in the
distribution.
* Misc bug and documentation fixes.
Changes from 1.11.17 to 1.11.18:
********************************
BUG FIXES
* Thanks to a report from Gottfried Ganssauge <gotti@cvshome.org>, CVS no
longer exits when it encounters links pointing to paths containing more
than 128 characters.
* Thanks to a report from Dan Peterson <dbpete@aol.com>, error messages from
GSSAPI servers are no longer truncated.
* Thanks to a report from Dan Peterson <dbpete@aol.com>, attempts to resurrect
a file on the trunk that was added on a branch no longer causes an assertion
failure.
* Thanks to a report from Dan Peterson <dbpete@aol.com>, imports to branches
like "1.1." no longer create corrupt RCS archives.
* Thanks to a report from Chris Bohn <cbohn@rrinc.com>, links from J.C. Hamlin
<jchamlin@ibsys.com>, and code posted by Jonathan Gilligan, we think we have
finally corrected the Windows "red-file" (daylight savings time) bug once and
for all.
* Thanks to a patch from Jeroen Ruigrok/asmodai <asmodai@wxs.nl>, the
log_accum.pl script should no longer elicit warnings from Perl 5.8.5.
* The r* commands (rlog, rls, etc.) can once again handle requests to run
against the entire repository (e.g. `cvs rlog .'). Thanks go to Dan Peterson
<dbpete@aol.com> for the report.
* A problem where the attempted access of files via tags beginning with spaces
could cause the CVS server to hang has been fixed. This was a particular
problem with WinCVS clients because users would sometimes accidentally
include spaces in tags pasted into a dialog box. This fix also altered some
of the error messages generated by the use of invalid tags. Thanks go to Dan
Peterson <dbpete@aol.com> for the report.
* Thanks to James E Wilson <wilson@specifixinc.com> for a bug fix to
modules processing "gcc-core -a !gcc/f gcc" will no longer exclude
gcc/fortran by mistake.
* Thanks to Conrad Pino <conrad@pino.com>, the Windows build works once again.
* Misc updates to the manual.
DEVELOPER ISSUES
* We've standardized on Automake 1.9.3 to get some at new features that make
our jobs easier. See the note below on the Autoconf upgrade for more
details.
* We've standardized on Autoconf version 2.59 to get presumed bug fixes and
features, but nothing specific. Mostly, once we decide to upgrade one of the
autotools we just figure it'll save time later to grab the most current
versions of the others too. See the HACKING file for more on using the
autotools with CVS.
Changes from 1.11.16 to 1.11.17:
********************************
SERVER SECURITY FIXES
* Thanks to Stefan Esser & Sebastian Krahmer, several potential security

View File

@ -1,12 +1,13 @@
CVS Kit
Copyright (c) 1993-1994 Brian Berliner
Copyright (c) 1992 Brian Berliner and Jeff Polk
Copyright (c) 1989-1992, Brian Berliner
Copyright (c) 1998-2004 Free Software Foundation,
Derek Price,
& Ximbiot <http://ximbiot.com>
All Rights Reserved
Copyright (C) 1986-2005 Free Software Foundation, Inc.
Portions Copyright (C) 1998-2005 Derek Price,
& Ximbiot <http://ximbiot.com>.
Portions Copyright (C) 1993-1994 Brian Berliner.
Portions Copyright (C) 1992 Brian Berliner and Jeff Polk.
Portions Copyright (C) 1989-1992 Brian Berliner.
All Rights Reserved
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
@ -74,6 +75,20 @@ compatibility problems with CVS 1.5 or later.
-------------------------------------------------------------------------------
Verifying the Integrity of Downloads:
The official CVS source and binary releases are signed by the CVS maintainer
who generated them. This does not imply any sort of warranty, but it does mean
that you can verify that the file you downloaded did, in fact, come from a CVS
maintainer.
The OpenPGP keys of the CVS maintainers who have submitted them are in the KEYS
file of the CVS distribution and are also available from many OpenPGP key
servers. It is recommended that you verify the key fingerprints against an
external source, however you obtain the key.
-------------------------------------------------------------------------------
Installation:
Please read the INSTALL file for installation instructions. Brief summary:
@ -98,19 +113,31 @@ cvs.texinfo and re-generate cvs.ps using TeX.
* How do I get up-to-date information and information about other
versions of CVS?
On the web, http://www.loria.fr/~molli/cvs-index.html.
See also
http://www.cvshome.org
http://cvs.nongnu.org
http://www.cvsnt.org
The mailing list for CVS is info-cvs@gnu.org. Send
subscription and removal requests for that list to
info-cvs-request@gnu.org.
Anyone can add themselves to the following mailing lists:
bug-cvs: This is the list which users are requested to send bug reports
to. General CVS development and design discussions also tend to take
place on this list.
info-cvs: This list is intended for user questions, including general
help requests.
cvs-announce: CVS release announcements and other major
announcements about the project are sent to this list.
cvs-announce-binaries: Announcements are made to this list
when binaries for various platforms are built and initially
posted for download.
To subscribe to any of these lists, send mail to <list>-request@nongnu.org
or visit http://savannah.nongnu.org/mail/?group=cvs and follow the instructions
for the list you wish to subscribe to.
The newsgroup for CVS (and other configuration management systems) is
comp.software.config-mgmt. There is not yet a CVS-specific newsgroup,
but perhaps if comp.software.config-mgmt gets enough CVS discussion,
then it will be possible to create one.
comp.software.config-mgmt. The gnu.cvs.help newsgroup is a 2-way mirror
of the info-cvs@nongnu.org mailing list and gnu.cvs.bug is similarly a 2-way
mirror of bug-cvs@nongnu.org.
-------------------------------------------------------------------------------

View File

@ -211,20 +211,24 @@ false when executed and are intended to be used like,
"if $remote; then ... ; else ... ; fi"
* $testdir = the directory this test is taking place in
(CVSROOT=$testdir/cvsroot or CVSROOT=:fork:$testdir/cvsroot)
* $testcvs = full path to the cvs executable we are testing
* $PLUS = expr dependant uninterpreted '+' since this can vary
* $DOTSTAR = expr dependant _interpreted_ .* since some exprs don't match
EOL
* $username = regexp to match a username
* $hostname = regexp to match a hostname
* $PROG = regexp to match progname in CVS error messages
* $remote = ':' (true) or 'false', depending on whether the script is
running with a remote CVSROOT
* $keep = ':' (true) or 'false'. When set, the first test run will
leave any files and directories it created in $testdir and
exit when complete.
* $testdir = the directory this test is taking place in
(CVSROOT=$testdir/cvsroot or
CVSROOT=:fork:$testdir/cvsroot)
* $testcvs = full path to the cvs executable we are testing
* $PLUS = expr dependant uninterpreted '+' since this can vary
* $DOTSTAR = expr dependant _interpreted_ .* since some exprs don't
match EOL
* $username = the username of the user running the tests
* $username8 = the first 8 characters of $username, output by some
system and CVS commands
* $anyusername = regexp to match any valid system or CVS username
* $hostname = regexp to match a hostname
* $PROG = regexp to match progname in CVS error messages
* $remote = ':' (true) or 'false', depending on whether the script is
running with a remote CVSROOT
* $keep = ':' (true) or 'false'. When set, the first test run will
leave any files and directories it created in $testdir and
exit when complete.
And, of course, some characters like '.' in regexps need to be '\' escaped when
you mean them literally. Some characters may be interpreted by the shell,

View File

@ -1,20 +1,5 @@
The "TODO" file! -*-Indented-Text-*-
22. Catch signals for cleanup when "add"ing files.
24. Insist on a log message.
(If done, this should be configurable via commitinfo or some new
config file -kingdon, Jun 1995).
30. Add "rdiff" & "rtag" program options to the modules database. These
commands seem hard to use since these commands deal directly with the
RCS ,v files. (perhaps should think a little harder about what this is
trying to accomplish and what the best way is -kingdon, Jul 1997).
31. Think hard about ^C recovery.
One particular issue: RCS removes the ,foo.c, file on ^C and CVS
doesn't.
38. Think hard about using RCS state information to allow one to checkin
a new vendor release without having it be accessed until it has been
integrated into the local changes.
@ -27,11 +12,6 @@ The "TODO" file! -*-Indented-Text-*-
PRCS 1.0 was particularly bad the way it handled the "invisible
state", but 1.2 is significantly better.
49. cvs xxx commands should be able to deal with files in other
directories. I want to do a cvs add foo/bar.c.
[[ most commands now use the generic recursion processor, but not all;
this note is left here to remind me to fix the others ]]
52. SCCS has a feature that I would *love* to see in CVS, as it is very
useful. One may make a private copy of SCCS suid to a particular user,
so other users in the authentication list may check files in and out of
@ -73,13 +53,6 @@ The "TODO" file! -*-Indented-Text-*-
can only support symlinks that are relative and within the scope of
the sources being controlled.
92. Look into this:
After a bit of soul searching via dbx, I realized my sin was that I'd
specified "echo" as the program to call from loginfo. The commit
procedure worked fine till it hit my echo, then silently aborted
leaving the lockfiles intact. Since I needn't use the loginfo
facility, I simply removed those commands and it all works.
93. Need to think hard about release and development environments. Think
about execsets as well.
@ -131,9 +104,6 @@ The "TODO" file! -*-Indented-Text-*-
error. I think a later cvs get sys seemed to work so perhaps
something is amiss in handling multiple arguments to cvs get?
113. The "cvs update" command should tee its output to a log file in ".".
(why? What is wrong with piping stdout to "tee"? -kingdon, Jun 1995)
119. When importing a directory tree that is under SCCS/RCS control,
consider an option to have import checkout the SCCS/RCS files if
necessary. (This is if someone wants to import something which
@ -888,3 +858,8 @@ wait interval.
230. Support for options like compression as part of the CVSROOT might be
nice. This should be fairly easy to implement now using the method options.
234. Noop commands should be logged in the history file. Information can
still be obtained with noop commands, for instance via `cvs -n up -p', and
paranoid admins might appreciate this. Similarly, perhaps diff operations
should be logged.

View File

@ -210,6 +210,11 @@ when using GSSAPI.])
#
AC_SEARCH_LIBS([__dn_expand], [resolv])
#
# crypto Need by gssapi under FreeBSD 5.4
#
AC_SEARCH_LIBS([RC4], [crypto])
#
# crypt Needed by roken under FreeBSD 4.6.
#
@ -253,6 +258,9 @@ when using GSSAPI.])
#
AC_SEARCH_LIBS([krb5_free_context], [krb5])
#
# gss This may be the only lib needed under HP-UX, so find it
# first.
#
# gssapi_krb5 Only lib needed with MIT K5 v1.2.1, so find it first in
# order to prefer MIT Kerberos. If both MIT & Heimdal
@ -260,11 +268,13 @@ when using GSSAPI.])
# some of the libraries above in LIBS unnecessarily, but
# noone would ever do that, right?
#
# gss HP-UX ???
#
# gssapi_krb5 MIT K5 v1.2.2-beta1 -lkrb5
#
# gssapi Heimdal K 0.3d -lkrb5
#
AC_SEARCH_LIBS([gss_import_name], [gssapi_krb5 gssapi])
AC_SEARCH_LIBS([gss_import_name], [gss gssapi_krb5 gssapi])
fi
])dnl

1556
contrib/cvs/aclocal.m4 vendored

File diff suppressed because it is too large Load Diff

View File

@ -402,6 +402,10 @@
/* Define as the return type of signal handlers (`int' or `void'). */
#undef RETSIGTYPE
/* The default remote shell to use, if one does not specify the CVS_RSH
environment variable. */
#undef RSH_DFLT
/* If you are working with a large remote repository and a 'cvs checkout' is
swamping your network and memory, define these to enable flow control. You
will end up with even less probability of a consistent checkout (see

552
contrib/cvs/configure vendored
View File

@ -1,8 +1,8 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.58 for Concurrent Versions System (CVS) 1.11.17.
# Generated by GNU Autoconf 2.59 for Concurrent Versions System (CVS) 1.11.22.
#
# Report bugs to <bug-cvs@gnu.org>.
# Report bugs to <bug-cvs@nongnu.org>.
#
# Copyright (C) 2003 Free Software Foundation, Inc.
# This configure script is free software; the Free Software Foundation
@ -269,9 +269,9 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='Concurrent Versions System (CVS)'
PACKAGE_TARNAME='cvs'
PACKAGE_VERSION='1.11.17'
PACKAGE_STRING='Concurrent Versions System (CVS) 1.11.17'
PACKAGE_BUGREPORT='bug-cvs@gnu.org'
PACKAGE_VERSION='1.11.22'
PACKAGE_STRING='Concurrent Versions System (CVS) 1.11.22'
PACKAGE_BUGREPORT='bug-cvs@nongnu.org'
ac_unique_file="src/cvs.h"
# Factoring default headers for most tests.
@ -311,7 +311,7 @@ ac_includes_default="\
# include <unistd.h>
#endif"
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot ac_prefix_program MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP RANLIB ac_ct_RANLIB YACC LN_S PERL CSH MKTEMP SENDMAIL PR ROFF PS2PDF TEXI2DVI MAKE_TARGETS_IN_VPATH_TRUE MAKE_TARGETS_IN_VPATH_FALSE LIBOBJS KRB4 includeopt EDITOR LTLIBOBJS'
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar ac_prefix_program MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP RANLIB ac_ct_RANLIB YACC LN_S PERL CSH MKTEMP SENDMAIL PR ROFF PS2PDF TEXI2DVI MAKE_TARGETS_IN_VPATH_TRUE MAKE_TARGETS_IN_VPATH_FALSE LIBOBJS KRB4 includeopt EDITOR with_default_rsh LTLIBOBJS'
ac_subst_files='MKTEMP_SH_FUNCTION'
# Initialize some variables set by options.
@ -784,7 +784,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures Concurrent Versions System (CVS) 1.11.17 to adapt to many kinds of systems.
\`configure' configures Concurrent Versions System (CVS) 1.11.22 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -846,17 +846,17 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of Concurrent Versions System (CVS) 1.11.17:";;
short | recursive ) echo "Configuration of Concurrent Versions System (CVS) 1.11.22:";;
esac
cat <<\_ACEOF
Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer
--disable-dependency-tracking Speeds up one-time builds
--enable-dependency-tracking Do not reject slow dependency extractors
--enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer
--disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors
--enable-cvs-ndbm Use the NDBM library distributed with CVS rather
than attempting to use a system NDBM library.
Disabling this may not work. (default)
@ -911,6 +911,8 @@ Optional Packages:
--with-gssapi GSSAPI directory (default autoselects)
--with-editor The default text editor CVS should use for log
messages (default autoselects)
--with-rsh The default remote shell CVS will use for :ext:
transport (default autodetects)
--with-tmpdir The temporary directory CVS should use as a default
(default autoselects)
--with-umask Set the umask CVS will use by default in the
@ -938,7 +940,7 @@ Some influential environment variables:
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to <bug-cvs@gnu.org>.
Report bugs to <bug-cvs@nongnu.org>.
_ACEOF
fi
@ -972,40 +974,43 @@ case $srcdir in
ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
ac_top_srcdir=$ac_top_builddir$srcdir ;;
esac
case "$ac_dir" in
.) ac_abs_builddir=$ac_builddir;;
# Do not use `cd foo && pwd` to compute absolute paths, because
# the directories may not exist.
case `pwd` in
.) ac_abs_builddir="$ac_dir";;
*)
case $ac_builddir in
.) ac_abs_builddir="$ac_dir";;
[\\/]* | ?:[\\/]* ) ac_abs_builddir=$ac_builddir;;
*) ac_abs_builddir="$ac_dir"/$ac_builddir;;
case "$ac_dir" in
.) ac_abs_builddir=`pwd`;;
[\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
*) ac_abs_builddir=`pwd`/"$ac_dir";;
esac;;
esac
case "$ac_dir" in
case $ac_abs_builddir in
.) ac_abs_top_builddir=${ac_top_builddir}.;;
*)
case ${ac_top_builddir}. in
.) ac_abs_top_builddir="$ac_dir";;
.) ac_abs_top_builddir=$ac_abs_builddir;;
[\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
*) ac_abs_top_builddir="$ac_dir"/${ac_top_builddir}.;;
*) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
esac;;
esac
case "$ac_dir" in
case $ac_abs_builddir in
.) ac_abs_srcdir=$ac_srcdir;;
*)
case $ac_srcdir in
.) ac_abs_srcdir="$ac_dir";;
.) ac_abs_srcdir=$ac_abs_builddir;;
[\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
*) ac_abs_srcdir="$ac_dir"/$ac_srcdir;;
*) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
esac;;
esac
case "$ac_dir" in
case $ac_abs_builddir in
.) ac_abs_top_srcdir=$ac_top_srcdir;;
*)
case $ac_top_srcdir in
.) ac_abs_top_srcdir="$ac_dir";;
.) ac_abs_top_srcdir=$ac_abs_builddir;;
[\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
*) ac_abs_top_srcdir="$ac_dir"/$ac_top_srcdir;;
*) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
esac;;
esac
@ -1031,8 +1036,8 @@ fi
test -n "$ac_init_help" && exit 0
if $ac_init_version; then
cat <<\_ACEOF
Concurrent Versions System (CVS) configure 1.11.17
generated by GNU Autoconf 2.58
Concurrent Versions System (CVS) configure 1.11.22
generated by GNU Autoconf 2.59
Copyright (C) 2003 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
@ -1045,8 +1050,8 @@ cat >&5 <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by Concurrent Versions System (CVS) $as_me 1.11.17, which was
generated by GNU Autoconf 2.58. Invocation command line was
It was created by Concurrent Versions System (CVS) $as_me 1.11.22, which was
generated by GNU Autoconf 2.59. Invocation command line was
$ $0 $@
@ -1382,7 +1387,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
am__api_version="1.7"
am__api_version="1.9"
ac_aux_dir=
for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
if test -f $ac_dir/install-sh; then
@ -1545,7 +1550,6 @@ _ACEOF
program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
rm conftest.sed
# expand $ac_aux_dir to an absolute path
am_aux_dir=`cd $ac_aux_dir && pwd`
@ -1559,6 +1563,39 @@ else
echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
fi
if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
# We used to keeping the `.' as first argument, in order to
# allow $(mkdir_p) to be used without argument. As in
# $(mkdir_p) $(somedir)
# where $(somedir) is conditionally defined. However this is wrong
# for two reasons:
# 1. if the package is installed by a user who cannot write `.'
# make install will fail,
# 2. the above comment should most certainly read
# $(mkdir_p) $(DESTDIR)$(somedir)
# so it does not work when $(somedir) is undefined and
# $(DESTDIR) is not.
# To support the latter case, we have to write
# test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
# so the `.' trick is pointless.
mkdir_p='mkdir -p --'
else
# On NextStep and OpenStep, the `mkdir' command does not
# recognize any option. It will interpret all options as
# directories to create, and then abort because `.' already
# exists.
for d in ./-p ./--version;
do
test -d $d && rmdir $d
done
# $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
if test -f "$ac_aux_dir/mkinstalldirs"; then
mkdir_p='$(mkinstalldirs)'
else
mkdir_p='$(install_sh) -d'
fi
fi
for ac_prog in gawk mawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
@ -1637,7 +1674,7 @@ else
fi
rmdir .tst 2>/dev/null
# test to see if srcdir already configured
# test to see if srcdir already configured
if test "`cd $srcdir && pwd`" != "`pwd`" &&
test -f $srcdir/config.status; then
{ { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
@ -1657,7 +1694,7 @@ fi
# Define the identity of the package.
PACKAGE='cvs'
VERSION='1.11.17'
VERSION='1.11.22'
# Some tools Automake needs.
@ -1676,9 +1713,6 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
AMTAR=${AMTAR-"${am_missing_run}tar"}
install_sh=${install_sh-"$am_aux_dir/install-sh"}
# Installed binaries are usually stripped using `strip' when the user
@ -1771,6 +1805,13 @@ INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
# Always define AMTAR for backward compatibility.
AMTAR=${AMTAR-"${am_missing_run}tar"}
am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
@ -2908,7 +2949,9 @@ else
: > sub/conftest.c
for i in 1 2 3 4 5 6; do
echo '#include "conftst'$i'.h"' >> sub/conftest.c
: > sub/conftst$i.h
# Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
# Solaris 8's {/usr,}/bin/sh.
touch sub/conftst$i.h
done
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
@ -2936,9 +2979,14 @@ else
grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
# icc doesn't choke on unknown options, it will just issue warnings
# (even with -Werror). So we grep stderr for any message
# that says an option was ignored.
if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
# or remarks (even with -Werror). So we grep stderr for any message
# that says an option was ignored or not supported.
# When given -MP, icc 7.0 and 7.1 complain thusly:
# icc: Command line warning: ignoring option '-M'; no argument required
# The diagnosis changed in icc 8.0:
# icc: Command line remark: option '-MP' not supported
if (grep 'ignoring option' conftest.err ||
grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
am_cv_CC_dependencies_compiler_type=$depmode
break
fi
@ -3709,9 +3757,9 @@ echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result
echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;}
(
cat <<\_ASBOX
## ------------------------------ ##
## Report this to bug-cvs@gnu.org ##
## ------------------------------ ##
## --------------------------------- ##
## Report this to bug-cvs@nongnu.org ##
## --------------------------------- ##
_ASBOX
) |
sed "s/^/$as_me: WARNING: /" >&2
@ -5177,9 +5225,9 @@ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&
echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
(
cat <<\_ASBOX
## ------------------------------ ##
## Report this to bug-cvs@gnu.org ##
## ------------------------------ ##
## --------------------------------- ##
## Report this to bug-cvs@nongnu.org ##
## --------------------------------- ##
_ASBOX
) |
sed "s/^/$as_me: WARNING: /" >&2
@ -6223,9 +6271,9 @@ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&
echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
(
cat <<\_ASBOX
## ------------------------------ ##
## Report this to bug-cvs@gnu.org ##
## ------------------------------ ##
## --------------------------------- ##
## Report this to bug-cvs@nongnu.org ##
## --------------------------------- ##
_ASBOX
) |
sed "s/^/$as_me: WARNING: /" >&2
@ -7526,9 +7574,9 @@ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&
echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
(
cat <<\_ASBOX
## ------------------------------ ##
## Report this to bug-cvs@gnu.org ##
## ------------------------------ ##
## --------------------------------- ##
## Report this to bug-cvs@nongnu.org ##
## --------------------------------- ##
_ASBOX
) |
sed "s/^/$as_me: WARNING: /" >&2
@ -7983,9 +8031,9 @@ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&
echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
(
cat <<\_ASBOX
## ------------------------------ ##
## Report this to bug-cvs@gnu.org ##
## ------------------------------ ##
## --------------------------------- ##
## Report this to bug-cvs@nongnu.org ##
## --------------------------------- ##
_ASBOX
) |
sed "s/^/$as_me: WARNING: /" >&2
@ -8862,9 +8910,9 @@ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&
echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
(
cat <<\_ASBOX
## ------------------------------ ##
## Report this to bug-cvs@gnu.org ##
## ------------------------------ ##
## --------------------------------- ##
## Report this to bug-cvs@nongnu.org ##
## --------------------------------- ##
_ASBOX
) |
sed "s/^/$as_me: WARNING: /" >&2
@ -10592,9 +10640,9 @@ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&
echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
(
cat <<\_ASBOX
## ------------------------------ ##
## Report this to bug-cvs@gnu.org ##
## ------------------------------ ##
## --------------------------------- ##
## Report this to bug-cvs@nongnu.org ##
## --------------------------------- ##
_ASBOX
) |
sed "s/^/$as_me: WARNING: /" >&2
@ -10789,9 +10837,9 @@ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&
echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
(
cat <<\_ASBOX
## ------------------------------ ##
## Report this to bug-cvs@gnu.org ##
## ------------------------------ ##
## --------------------------------- ##
## Report this to bug-cvs@nongnu.org ##
## --------------------------------- ##
_ASBOX
) |
sed "s/^/$as_me: WARNING: /" >&2
@ -11497,6 +11545,136 @@ if test "$ac_cv_search___dn_expand" != no; then
fi
#
# crypto Need by gssapi under FreeBSD 5.4
#
echo "$as_me:$LINENO: checking for library containing RC4" >&5
echo $ECHO_N "checking for library containing RC4... $ECHO_C" >&6
if test "${ac_cv_search_RC4+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_func_search_save_LIBS=$LIBS
ac_cv_search_RC4=no
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char RC4 ();
int
main ()
{
RC4 ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
{ ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_search_RC4="none required"
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
fi
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test "$ac_cv_search_RC4" = no; then
for ac_lib in crypto; do
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char RC4 ();
int
main ()
{
RC4 ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
{ ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_search_RC4="-l$ac_lib"
break
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
fi
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
done
fi
LIBS=$ac_func_search_save_LIBS
fi
echo "$as_me:$LINENO: result: $ac_cv_search_RC4" >&5
echo "${ECHO_T}$ac_cv_search_RC4" >&6
if test "$ac_cv_search_RC4" != no; then
test "$ac_cv_search_RC4" = "none required" || LIBS="$ac_cv_search_RC4 $LIBS"
fi
#
# crypt Needed by roken under FreeBSD 4.6.
#
@ -12165,6 +12343,9 @@ if test "$ac_cv_search_krb5_free_context" != no; then
fi
#
# gss This may be the only lib needed under HP-UX, so find it
# first.
#
# gssapi_krb5 Only lib needed with MIT K5 v1.2.1, so find it first in
# order to prefer MIT Kerberos. If both MIT & Heimdal
@ -12172,6 +12353,8 @@ fi
# some of the libraries above in LIBS unnecessarily, but
# noone would ever do that, right?
#
# gss HP-UX ???
#
# gssapi_krb5 MIT K5 v1.2.2-beta1 -lkrb5
#
# gssapi Heimdal K 0.3d -lkrb5
@ -12236,7 +12419,7 @@ fi
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test "$ac_cv_search_gss_import_name" = no; then
for ac_lib in gssapi_krb5 gssapi; do
for ac_lib in gss gssapi_krb5 gssapi; do
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@ -12420,6 +12603,90 @@ _ACEOF
# What remote shell transport should our client cvs default to using?
# Check whether --with-rsh or --without-rsh was given.
if test "${with_rsh+set}" = set; then
withval="$with_rsh"
else
with_rsh="remsh rsh ssh"
fi;
if test no = "$with_rsh"; then
{ echo "$as_me:$LINENO: WARNING: Failed to find usable remote shell. Using 'rsh'." >&5
echo "$as_me: WARNING: Failed to find usable remote shell. Using 'rsh'." >&2;}
with_rsh=rsh
elif test yes = "$with_rsh"; then
# Make --with-rsh mean the same thing as --with-rsh=rsh
with_rsh=rsh
fi
if echo $with_rsh |grep ^/ >/dev/null; then
# If $with_rsh is an absolute path, issue a warning if the executable
# doesn't exist or isn't usable, but then trust the user and use it
# regardless
with_default_rsh=$with_rsh
echo "$as_me:$LINENO: checking for a remote shell" >&5
echo $ECHO_N "checking for a remote shell... $ECHO_C" >&6
if ! test -f $with_rsh \
|| ! test -x $with_rsh; then
# warn the user that they may encounter problems
{ echo "$as_me:$LINENO: WARNING: $with_rsh is not a path to an executable file" >&5
echo "$as_me: WARNING: $with_rsh is not a path to an executable file" >&2;}
fi
else
# Search for a remote shell
for ac_prog in $with_rsh
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_with_default_rsh+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$with_default_rsh"; then
ac_cv_prog_with_default_rsh="$with_default_rsh" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_with_default_rsh="$ac_prog"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
fi
fi
with_default_rsh=$ac_cv_prog_with_default_rsh
if test -n "$with_default_rsh"; then
echo "$as_me:$LINENO: result: $with_default_rsh" >&5
echo "${ECHO_T}$with_default_rsh" >&6
else
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$with_default_rsh" && break
done
test -n "$with_default_rsh" || with_default_rsh=""rsh""
fi
cat >>confdefs.h <<_ACEOF
#define RSH_DFLT "$with_default_rsh"
_ACEOF
# Check whether --with-tmpdir or --without-tmpdir was given.
if test "${with_tmpdir+set}" = set; then
@ -13006,7 +13273,7 @@ fi
ac_config_files="$ac_config_files contrib/sccs2rcs"
ac_config_files="$ac_config_files doc/mkman"
ac_config_files="$ac_config_files doc/mkman:doc/mkman.pl"
ac_config_files="$ac_config_files src/cvsbug"
@ -13406,8 +13673,8 @@ _ASBOX
} >&5
cat >&5 <<_CSEOF
This file was extended by Concurrent Versions System (CVS) $as_me 1.11.17, which was
generated by GNU Autoconf 2.58. Invocation command line was
This file was extended by Concurrent Versions System (CVS) $as_me 1.11.22, which was
generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@ -13472,8 +13739,8 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
Concurrent Versions System (CVS) config.status 1.11.17
configured by $0, generated by GNU Autoconf 2.58,
Concurrent Versions System (CVS) config.status 1.11.22
configured by $0, generated by GNU Autoconf 2.59,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
Copyright (C) 2003 Free Software Foundation, Inc.
@ -13594,7 +13861,7 @@ do
"contrib/rcs2log" ) CONFIG_FILES="$CONFIG_FILES contrib/rcs2log:contrib/rcs2log.sh" ;;
"contrib/rcslock" ) CONFIG_FILES="$CONFIG_FILES contrib/rcslock" ;;
"contrib/sccs2rcs" ) CONFIG_FILES="$CONFIG_FILES contrib/sccs2rcs" ;;
"doc/mkman" ) CONFIG_FILES="$CONFIG_FILES doc/mkman" ;;
"doc/mkman" ) CONFIG_FILES="$CONFIG_FILES doc/mkman:doc/mkman.pl" ;;
"src/cvsbug" ) CONFIG_FILES="$CONFIG_FILES src/cvsbug" ;;
"windows-NT/fix-msvc-mak" ) CONFIG_FILES="$CONFIG_FILES windows-NT/fix-msvc-mak:windows-NT/fix-msvc-mak-head.pl:windows-NT/fix-msvc-mak.pl" ;;
"Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
@ -13712,14 +13979,17 @@ s,@AUTOCONF@,$AUTOCONF,;t t
s,@AUTOMAKE@,$AUTOMAKE,;t t
s,@AUTOHEADER@,$AUTOHEADER,;t t
s,@MAKEINFO@,$MAKEINFO,;t t
s,@AMTAR@,$AMTAR,;t t
s,@install_sh@,$install_sh,;t t
s,@STRIP@,$STRIP,;t t
s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
s,@mkdir_p@,$mkdir_p,;t t
s,@AWK@,$AWK,;t t
s,@SET_MAKE@,$SET_MAKE,;t t
s,@am__leading_dot@,$am__leading_dot,;t t
s,@AMTAR@,$AMTAR,;t t
s,@am__tar@,$am__tar,;t t
s,@am__untar@,$am__untar,;t t
s,@ac_prefix_program@,$ac_prefix_program,;t t
s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
@ -13760,6 +14030,7 @@ s,@LIBOBJS@,$LIBOBJS,;t t
s,@KRB4@,$KRB4,;t t
s,@includeopt@,$includeopt,;t t
s,@EDITOR@,$EDITOR,;t t
s,@with_default_rsh@,$with_default_rsh,;t t
s,@LTLIBOBJS@,$LTLIBOBJS,;t t
/@MKTEMP_SH_FUNCTION@/r $MKTEMP_SH_FUNCTION
s,@MKTEMP_SH_FUNCTION@,,;t t
@ -13883,40 +14154,43 @@ case $srcdir in
ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
ac_top_srcdir=$ac_top_builddir$srcdir ;;
esac
case "$ac_dir" in
.) ac_abs_builddir=$ac_builddir;;
# Do not use `cd foo && pwd` to compute absolute paths, because
# the directories may not exist.
case `pwd` in
.) ac_abs_builddir="$ac_dir";;
*)
case $ac_builddir in
.) ac_abs_builddir="$ac_dir";;
[\\/]* | ?:[\\/]* ) ac_abs_builddir=$ac_builddir;;
*) ac_abs_builddir="$ac_dir"/$ac_builddir;;
case "$ac_dir" in
.) ac_abs_builddir=`pwd`;;
[\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
*) ac_abs_builddir=`pwd`/"$ac_dir";;
esac;;
esac
case "$ac_dir" in
case $ac_abs_builddir in
.) ac_abs_top_builddir=${ac_top_builddir}.;;
*)
case ${ac_top_builddir}. in
.) ac_abs_top_builddir="$ac_dir";;
.) ac_abs_top_builddir=$ac_abs_builddir;;
[\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
*) ac_abs_top_builddir="$ac_dir"/${ac_top_builddir}.;;
*) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
esac;;
esac
case "$ac_dir" in
case $ac_abs_builddir in
.) ac_abs_srcdir=$ac_srcdir;;
*)
case $ac_srcdir in
.) ac_abs_srcdir="$ac_dir";;
.) ac_abs_srcdir=$ac_abs_builddir;;
[\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
*) ac_abs_srcdir="$ac_dir"/$ac_srcdir;;
*) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
esac;;
esac
case "$ac_dir" in
case $ac_abs_builddir in
.) ac_abs_top_srcdir=$ac_top_srcdir;;
*)
case $ac_top_srcdir in
.) ac_abs_top_srcdir="$ac_dir";;
.) ac_abs_top_srcdir=$ac_abs_builddir;;
[\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
*) ac_abs_top_srcdir="$ac_dir"/$ac_top_srcdir;;
*) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
esac;;
esac
@ -14344,40 +14618,43 @@ case $srcdir in
ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
ac_top_srcdir=$ac_top_builddir$srcdir ;;
esac
case "$ac_dest_dir" in
.) ac_abs_builddir=$ac_builddir;;
# Do not use `cd foo && pwd` to compute absolute paths, because
# the directories may not exist.
case `pwd` in
.) ac_abs_builddir="$ac_dest_dir";;
*)
case $ac_builddir in
.) ac_abs_builddir="$ac_dest_dir";;
[\\/]* | ?:[\\/]* ) ac_abs_builddir=$ac_builddir;;
*) ac_abs_builddir="$ac_dest_dir"/$ac_builddir;;
case "$ac_dest_dir" in
.) ac_abs_builddir=`pwd`;;
[\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dest_dir";;
*) ac_abs_builddir=`pwd`/"$ac_dest_dir";;
esac;;
esac
case "$ac_dest_dir" in
case $ac_abs_builddir in
.) ac_abs_top_builddir=${ac_top_builddir}.;;
*)
case ${ac_top_builddir}. in
.) ac_abs_top_builddir="$ac_dest_dir";;
.) ac_abs_top_builddir=$ac_abs_builddir;;
[\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
*) ac_abs_top_builddir="$ac_dest_dir"/${ac_top_builddir}.;;
*) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
esac;;
esac
case "$ac_dest_dir" in
case $ac_abs_builddir in
.) ac_abs_srcdir=$ac_srcdir;;
*)
case $ac_srcdir in
.) ac_abs_srcdir="$ac_dest_dir";;
.) ac_abs_srcdir=$ac_abs_builddir;;
[\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
*) ac_abs_srcdir="$ac_dest_dir"/$ac_srcdir;;
*) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
esac;;
esac
case "$ac_dest_dir" in
case $ac_abs_builddir in
.) ac_abs_top_srcdir=$ac_top_srcdir;;
*)
case $ac_top_srcdir in
.) ac_abs_top_srcdir="$ac_dest_dir";;
.) ac_abs_top_srcdir=$ac_abs_builddir;;
[\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
*) ac_abs_top_srcdir="$ac_dest_dir"/$ac_top_srcdir;;
*) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
esac;;
esac
@ -14466,40 +14743,43 @@ case $srcdir in
ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
ac_top_srcdir=$ac_top_builddir$srcdir ;;
esac
case "$ac_dir" in
.) ac_abs_builddir=$ac_builddir;;
# Do not use `cd foo && pwd` to compute absolute paths, because
# the directories may not exist.
case `pwd` in
.) ac_abs_builddir="$ac_dir";;
*)
case $ac_builddir in
.) ac_abs_builddir="$ac_dir";;
[\\/]* | ?:[\\/]* ) ac_abs_builddir=$ac_builddir;;
*) ac_abs_builddir="$ac_dir"/$ac_builddir;;
case "$ac_dir" in
.) ac_abs_builddir=`pwd`;;
[\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
*) ac_abs_builddir=`pwd`/"$ac_dir";;
esac;;
esac
case "$ac_dir" in
case $ac_abs_builddir in
.) ac_abs_top_builddir=${ac_top_builddir}.;;
*)
case ${ac_top_builddir}. in
.) ac_abs_top_builddir="$ac_dir";;
.) ac_abs_top_builddir=$ac_abs_builddir;;
[\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
*) ac_abs_top_builddir="$ac_dir"/${ac_top_builddir}.;;
*) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
esac;;
esac
case "$ac_dir" in
case $ac_abs_builddir in
.) ac_abs_srcdir=$ac_srcdir;;
*)
case $ac_srcdir in
.) ac_abs_srcdir="$ac_dir";;
.) ac_abs_srcdir=$ac_abs_builddir;;
[\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
*) ac_abs_srcdir="$ac_dir"/$ac_srcdir;;
*) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
esac;;
esac
case "$ac_dir" in
case $ac_abs_builddir in
.) ac_abs_top_srcdir=$ac_top_srcdir;;
*)
case $ac_top_srcdir in
.) ac_abs_top_srcdir="$ac_dir";;
.) ac_abs_top_srcdir=$ac_abs_builddir;;
[\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
*) ac_abs_top_srcdir="$ac_dir"/$ac_top_srcdir;;
*) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
esac;;
esac
@ -14532,27 +14812,21 @@ echo X"$mf" |
else
continue
fi
grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
# Extract the definition of DEP_FILES from the Makefile without
# running `make'.
DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
# Extract the definition of DEPDIR, am__include, and am__quote
# from the Makefile without running `make'.
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
test -z "$DEPDIR" && continue
am__include=`sed -n 's/^am__include = //p' < "$mf"`
test -z "am__include" && continue
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
# When using ansi2knr, U may be empty or an underscore; expand it
U=`sed -n -e '/^U = / s///p' < "$mf"`
test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
# We invoke sed twice because it is the simplest approach to
# changing $(DEPDIR) to its actual value in the expansion.
for file in `sed -n -e '
/^DEP_FILES = .*\\\\$/ {
s/^DEP_FILES = //
:loop
s/\\\\$//
p
n
/\\\\$/ b loop
p
}
/^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
U=`sed -n 's/^U = //p' < "$mf"`
# Find all dependency output files, they are included files with
# $(DEPDIR) in their names. We invoke sed twice because it is the
# simplest approach to changing $(DEPDIR) to its actual value in the
# expansion.
for file in `sed -n "
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
# Make sure the directory exists.
test -f "$dirpart/$file" && continue

View File

@ -1,5 +1,6 @@
dnl configure.in for cvs
AC_INIT([Concurrent Versions System (CVS)],[1.11.17],[bug-cvs@gnu.org],[cvs])
AC_INIT([Concurrent Versions System (CVS)],[1.11.22],
[bug-cvs@nongnu.org],[cvs])
AC_CONFIG_SRCDIR(src/cvs.h)
AM_INIT_AUTOMAKE([gnu 1.7.9 dist-bzip2 no-define])
AC_PREREQ(2.58)
@ -496,6 +497,58 @@ dnl
dnl end --with-editor
dnl
dnl
dnl begin --with-rsh
dnl
dnl Many sites no longer desire the use of "rsh" as the default
dnl remote shell program. They typically favor "ssh" as the default
# What remote shell transport should our client cvs default to using?
AC_ARG_WITH(
[rsh],
AC_HELP_STRING(
[--with-rsh],
[The default remote shell CVS will use for :ext: transport
(default autodetects)]), ,
dnl `remsh' is only useful on HP-UX, where `rsh' is the `restricted shell'
dnl and `remsh' is the remote shell, but look for it first since it
dnl probably won't exist on any platform where it shouldn't be preferred
dnl to `rsh'.
[with_rsh="remsh rsh ssh"])
if test no = "$with_rsh"; then
AC_MSG_WARN([Failed to find usable remote shell. Using 'rsh'.])
with_rsh=rsh
elif test yes = "$with_rsh"; then
# Make --with-rsh mean the same thing as --with-rsh=rsh
with_rsh=rsh
fi
if echo $with_rsh |grep ^/ >/dev/null; then
# If $with_rsh is an absolute path, issue a warning if the executable
# doesn't exist or isn't usable, but then trust the user and use it
# regardless
with_default_rsh=$with_rsh
AC_MSG_CHECKING([for a remote shell])
if ! test -f $with_rsh \
|| ! test -x $with_rsh; then
# warn the user that they may encounter problems
AC_MSG_WARN([$with_rsh is not a path to an executable file])
fi
else
# Search for a remote shell
AC_CHECK_PROGS([with_default_rsh], [$with_rsh], "rsh")
fi
AC_DEFINE_UNQUOTED(
[RSH_DFLT], ["$with_default_rsh"],
[The default remote shell to use, if one does not specify the
CVS_RSH environment variable.])
dnl done with finding a default CVS_RSH value
dnl
dnl end --with-rsh
dnl
dnl
dnl Find a temporary directory
@ -1021,7 +1074,7 @@ 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(doc/mkman:doc/mkman.pl, [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])
@ -1053,7 +1106,7 @@ m4_bmatch(m4_defn([AC_PACKAGE_VERSION]), [[0-9]*\.[0-9]*\.[0-9]*\.[0-9]],
[ cat <<EOF
You are about to use an unreleased version of CVS. Be sure to
read the relevant mailing lists, most importantly <info-cvs@gnu.org>.
read the relevant mailing lists, most importantly <info-cvs@nongnu.org>.
Below you will find information on the status of this version of CVS.

View File

@ -1,8 +1,59 @@
2005-09-01 Derek Price <derek@ximbiot.com>
* cvs_acls.html, cvs_acls.in, log_accum.in: Update links.
2005-09-01 Derek Price <derek@ximbiot.com>
* commit_prep.in, cvs_acls.in, log.in, log_accum.in, mfpipe.in,
pvcs2rcs.in, rcslock.in: Update links and email addresses.
2005-07-12 Derek Price <derek@ximbiot.com>
* clmerge.in, cln_hist.in, commit_prep.in, cvs2vendor.sh, cvs_acls.in,
cvscheck.sh, debug_check_log.sh, descend.sh, log.in, log_accum.in,
mfpipe.in, rcs-to-cvs.sh, rcs2log.sh, rcs2sccs.sh, rcslock.in,
sccs2rcs.in: Add copyright notices.
2005-07-11 Derek Price <derek@ximbiot.com>
* clmerge.in, cln_hist.in, commit_prep.in, cvs2vendor.sh, cvs_acls.in,
cvscheck.sh, debug_check_log.sh, descend.sh, log.in, log_accum.in,
mfpipe.in, rcs-to-cvs.sh, rcs2log.sh, rcs2sccs.sh, rcslock.in,
sccs2rcs.in: Update license notices.
2005-04-14 Derek Price <derek@ximbiot.com>
* commit_prep.in, cvs_acls.in, log.in, log_accum.in, mfpipe.in,
rcslock.in: Enable taint checking and comment. This closes cvshome.org
Issue #224.
2005-04-08 Derek Price <derek@ximbiot.com>
* README: Correct my email address.
2005-01-31 Derek Price <derek@ximbiot.com>
* Makefile.am: Update copyright notices.
2005-01-25 Mark D. Baushke <mdb@cvshome.org>
* cvs_acls.in: New version from
"Peter Connolly" <Peter.Connolly@cnet.com>.
* cvs_acls.html: New file from
"Peter Connolly" <Peter.Connolly@cnet.com>.
* Makefile.am (EXTRA_DIST): Add cvs_acls.html
* Makefile.in: Regenerated.
2004-08-30 Derek Price <derek@ximbiot.com>
* log_accum.in: Changes to supress warnings under Perl 5.8.5.
(Patch from Jeroen Ruigrok/asmodai <asmodai@wxs.nl>.)
2004-01-30 Derek Price <derek@ximbiot.com>
Close issue #155.
* log_accum.in: Remove unused variables.
(Patch from (Ville Skyttä <scop@cvshome.org>.)
(Patch from Ville Skyttä <scop@cvshome.org>.)
2003-10-14 Derek Price <derek@ximbiot.com>

View File

@ -1,9 +1,11 @@
## Process this file with automake to produce Makefile.in
# Makefile for GNU CVS contributed sources.
# Do not use this makefile directly, but only from `../Makefile'.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
#
# Copyright (C) 1986-2005 The Free Software Foundation, Inc.
#
# Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
# and others.
# 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
@ -52,6 +54,7 @@ EXTRA_DIST = \
cvs2vendor.sh \
cvscheck.sh \
cvshelp.man \
cvs_acls.html \
debug_check_log.sh \
descend.sh \
descend.man \

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.7.9 from Makefile.am.
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -16,9 +16,11 @@
# Makefile for GNU CVS contributed sources.
# Do not use this makefile directly, but only from `../Makefile'.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
#
# Copyright (C) 1986-2005 The Free Software Foundation, Inc.
#
# Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
# and others.
# 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
@ -30,6 +32,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
@ -37,7 +40,6 @@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
@ -51,6 +53,36 @@ POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = contrib
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(srcdir)/check_cvs.in $(srcdir)/clmerge.in \
$(srcdir)/cln_hist.in $(srcdir)/commit_prep.in \
$(srcdir)/cvs_acls.in $(srcdir)/log.in $(srcdir)/log_accum.in \
$(srcdir)/mfpipe.in $(srcdir)/pvcs2rcs.in $(srcdir)/rcs2log.sh \
$(srcdir)/rcslock.in $(srcdir)/sccs2rcs.in ChangeLog
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = check_cvs clmerge cln_hist commit_prep cvs_acls \
log log_accum mfpipe pvcs2rcs rcs2log rcslock sccs2rcs
am__installdirs = "$(DESTDIR)$(contribdir)" "$(DESTDIR)$(contribdir)"
contribSCRIPT_INSTALL = $(INSTALL_SCRIPT)
SCRIPTS = $(contrib_SCRIPTS)
SOURCES =
DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
contribDATA_INSTALL = $(INSTALL_DATA)
DATA = $(contrib_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
@ -120,6 +152,8 @@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
datadir = @datadir@
@ -133,6 +167,7 @@ libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
@ -140,9 +175,8 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
with_default_rsh = @with_default_rsh@
contribdir = $(pkgdatadir)/contrib
contrib_SCRIPTS = \
check_cvs \
clmerge \
@ -161,20 +195,16 @@ contrib_SCRIPTS = \
rcslock \
sccs2rcs
contrib_DATA = \
README \
intro.doc
contrib_MANS = \
cvscheck.man
bin_LINKS = \
rcs2log
EXTRA_DIST = \
.cvsignore \
$(contrib_DATA) \
@ -182,6 +212,7 @@ EXTRA_DIST = \
cvs2vendor.sh \
cvscheck.sh \
cvshelp.man \
cvs_acls.html \
debug_check_log.sh \
descend.sh \
descend.man \
@ -190,68 +221,74 @@ EXTRA_DIST = \
rcs2log.sh \
rcs2sccs.sh
CLEANFILES = $(bin_SCRIPTS) $(contrib_SCRIPTS)
SUFFIXES = .sh
subdir = contrib
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = check_cvs clmerge cln_hist commit_prep cvs_acls log \
log_accum mfpipe pvcs2rcs rcs2log rcslock sccs2rcs
SCRIPTS = $(contrib_SCRIPTS)
DIST_SOURCES =
DATA = $(contrib_DATA)
DIST_COMMON = README $(srcdir)/Makefile.in ChangeLog Makefile.am \
check_cvs.in clmerge.in cln_hist.in commit_prep.in cvs_acls.in \
log.in log_accum.in mfpipe.in pvcs2rcs.in rcs2log.sh rcslock.in \
sccs2rcs.in
all: all-am
.SUFFIXES:
.SUFFIXES: .sh
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu contrib/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu contrib/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
check_cvs: $(top_builddir)/config.status check_cvs.in
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
check_cvs: $(top_builddir)/config.status $(srcdir)/check_cvs.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
clmerge: $(top_builddir)/config.status clmerge.in
clmerge: $(top_builddir)/config.status $(srcdir)/clmerge.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
cln_hist: $(top_builddir)/config.status cln_hist.in
cln_hist: $(top_builddir)/config.status $(srcdir)/cln_hist.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
commit_prep: $(top_builddir)/config.status commit_prep.in
commit_prep: $(top_builddir)/config.status $(srcdir)/commit_prep.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
cvs_acls: $(top_builddir)/config.status cvs_acls.in
cvs_acls: $(top_builddir)/config.status $(srcdir)/cvs_acls.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
log: $(top_builddir)/config.status log.in
log: $(top_builddir)/config.status $(srcdir)/log.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
log_accum: $(top_builddir)/config.status log_accum.in
log_accum: $(top_builddir)/config.status $(srcdir)/log_accum.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
mfpipe: $(top_builddir)/config.status mfpipe.in
mfpipe: $(top_builddir)/config.status $(srcdir)/mfpipe.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
pvcs2rcs: $(top_builddir)/config.status pvcs2rcs.in
pvcs2rcs: $(top_builddir)/config.status $(srcdir)/pvcs2rcs.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
rcs2log: $(top_builddir)/config.status rcs2log.sh
rcs2log: $(top_builddir)/config.status $(srcdir)/rcs2log.sh
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
rcslock: $(top_builddir)/config.status rcslock.in
rcslock: $(top_builddir)/config.status $(srcdir)/rcslock.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
sccs2rcs: $(top_builddir)/config.status sccs2rcs.in
sccs2rcs: $(top_builddir)/config.status $(srcdir)/sccs2rcs.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
contribSCRIPT_INSTALL = $(INSTALL_SCRIPT)
install-contribSCRIPTS: $(contrib_SCRIPTS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(contribdir)
test -z "$(contribdir)" || $(mkdir_p) "$(DESTDIR)$(contribdir)"
@list='$(contrib_SCRIPTS)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
if test -f $$d$$p; then \
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
echo " $(contribSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(contribdir)/$$f"; \
$(contribSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(contribdir)/$$f; \
echo " $(contribSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(contribdir)/$$f'"; \
$(contribSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(contribdir)/$$f"; \
else :; fi; \
done
@ -259,27 +296,26 @@ uninstall-contribSCRIPTS:
@$(NORMAL_UNINSTALL)
@list='$(contrib_SCRIPTS)'; for p in $$list; do \
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
echo " rm -f $(DESTDIR)$(contribdir)/$$f"; \
rm -f $(DESTDIR)$(contribdir)/$$f; \
echo " rm -f '$(DESTDIR)$(contribdir)/$$f'"; \
rm -f "$(DESTDIR)$(contribdir)/$$f"; \
done
uninstall-info-am:
contribDATA_INSTALL = $(INSTALL_DATA)
install-contribDATA: $(contrib_DATA)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(contribdir)
test -z "$(contribdir)" || $(mkdir_p) "$(DESTDIR)$(contribdir)"
@list='$(contrib_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " $(contribDATA_INSTALL) $$d$$p $(DESTDIR)$(contribdir)/$$f"; \
$(contribDATA_INSTALL) $$d$$p $(DESTDIR)$(contribdir)/$$f; \
f=$(am__strip_dir) \
echo " $(contribDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(contribdir)/$$f'"; \
$(contribDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(contribdir)/$$f"; \
done
uninstall-contribDATA:
@$(NORMAL_UNINSTALL)
@list='$(contrib_DATA)'; for p in $$list; do \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " rm -f $(DESTDIR)$(contribdir)/$$f"; \
rm -f $(DESTDIR)$(contribdir)/$$f; \
f=$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(contribdir)/$$f'"; \
rm -f "$(DESTDIR)$(contribdir)/$$f"; \
done
tags: TAGS
TAGS:
@ -287,10 +323,6 @@ TAGS:
ctags: CTAGS
CTAGS:
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
@ -304,7 +336,7 @@ distdir: $(DISTFILES)
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
@ -322,9 +354,10 @@ distdir: $(DISTFILES)
check-am: all-am
check: check-am
all-am: Makefile $(SCRIPTS) $(DATA)
installdirs:
$(mkinstalldirs) $(DESTDIR)$(contribdir) $(DESTDIR)$(contribdir)
for dir in "$(DESTDIR)$(contribdir)" "$(DESTDIR)$(contribdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
@ -345,7 +378,7 @@ clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -362,6 +395,8 @@ dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
@ -397,8 +432,8 @@ uninstall-am: uninstall-contribDATA uninstall-contribSCRIPTS \
uninstall-info-am uninstall-local
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am info info-am install \
install-am install-contribDATA install-contribSCRIPTS \
distclean-generic distdir dvi dvi-am html html-am info info-am \
install install-am install-contribDATA install-contribSCRIPTS \
install-data install-data-am install-data-local install-exec \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \

View File

@ -71,8 +71,7 @@ An attempt at a table of Contents for this directory:
useful.
debug_check_log A shell script to help analyze sanity check failures.
Contributed by Derek R. Price
<derek.price@openavenue.com>
Contributed by Derek R. Price <derek@ximbiot.com>.
descend A shell script that can be used to recursively
descend.man descend through a directory. In CVS 1.2, this was

View File

@ -1,5 +1,17 @@
#! @PERL@
# Copyright (C) 1995-2005 The 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.
# Merge conflicted ChangeLogs
# tromey Mon Aug 15 1994

View File

@ -1,5 +1,17 @@
#! @PERL@
# -*-Perl-*-
# Copyright (C) 1995-2005 The 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.
#
# Contributed by David G. Grubbs <dgg@ksr.com>
#

View File

@ -1,6 +1,36 @@
#! @PERL@
#! @PERL@ -T
# -*-Perl-*-
# Copyright (C) 1994-2005 The 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.
###############################################################################
###############################################################################
###############################################################################
#
# THIS SCRIPT IS PROBABLY BROKEN. REMOVING THE -T SWITCH ON THE #! LINE ABOVE
# WOULD FIX IT, BUT THIS IS INSECURE. WE RECOMMEND FIXING THE ERRORS WHICH THE
# -T SWITCH WILL CAUSE PERL TO REPORT BEFORE RUNNING THIS SCRIPT FROM A CVS
# SERVER TRIGGER. PLEASE SEND PATCHES CONTAINING THE CHANGES YOU FIND
# NECESSARY TO RUN THIS SCRIPT WITH THE TAINT-CHECKING ENABLED BACK TO THE
# <@PACKAGE_BUGREPORT@> MAILING LIST.
#
# For more on general Perl security and taint-checking, please try running the
# `perldoc perlsec' command.
#
###############################################################################
###############################################################################
###############################################################################
# Perl filter to handle pre-commit checking of files. This program
# records the last directory where commits will be taking place for
# use by the log_accum.pl script.

View File

@ -1,5 +1,17 @@
#! /bin/sh
#
# Copyright (C) 1997-2005 The 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.
#
# cvs2vendor - move revsisions from files in A to files in B
#
# The primary reason for this script is to move deltas from a

View File

@ -0,0 +1,459 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>cvs_acls</title>
<link rev="made" href="mailto:root@localhost" />
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">Name</a></li>
<li><a href="#synopsis">Synopsis</a></li>
<li><a href="#licensing">Licensing</a></li>
<li><a href="#description">Description</a></li>
<li><a href="#enhancements">Enhancements</a></li>
<ul>
<li><a href="#fixed_bugs">Fixed Bugs</a></li>
<li><a href="#enhancements">Enhancements</a></li>
<li><a href="#todos">ToDoS</a></li>
</ul>
<li><a href="#version_information">Version Information</a></li>
<li><a href="#installation">Installation</a></li>
<li><a href="#format_of_the_cvsacl_file">Format of the cvsacl file</a></li>
<li><a href="#program_logic">Program Logic</a></li>
<ul>
<li><a href="#pseudocode">Pseudocode</a></li>
<li><a href="#sanity_check">Sanity Check</a></li>
</ul>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">Name</a></h1>
<p>cvs_acls - Access Control List for CVS</p>
<p>
</p>
<hr />
<h1><a name="synopsis">Synopsis</a></h1>
<p>In 'commitinfo':</p>
<pre>
repository/path/to/restrict $CVSROOT/CVSROOT/cvs_acls [-d][-u $USER][-f &lt;logfile&gt;]</pre>
<p>where:</p>
<pre>
-d turns on debug information
-u passes the client-side userId to the cvs_acls script
-f specifies an alternate filename for the restrict_log file</pre>
<p>In 'cvsacl':</p>
<pre>
{allow.*,deny.*} [|user,user,... [|repos,repos,... [|branch,branch,...]]]</pre>
<p>where:</p>
<pre>
allow|deny - allow: commits are allowed; deny: prohibited
user - userId to be allowed or restricted
repos - file or directory to be allowed or restricted
branch - branch to be allowed or restricted</pre>
<p>See below for examples.</p>
<p>
</p>
<hr />
<h1><a name="licensing">Licensing</a></h1>
<p>cvs_acls - provides access control list functionality for CVS
</p>
<pre>
Copyright (c) 2004 by Peter Connolly &lt;peter.connolly@cnet.com&gt;
All rights reserved.</pre>
<p>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 of the License, or
(at your option) any later version.</p>
<p>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.</p>
<p>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</p>
<p>
</p>
<hr />
<h1><a name="description">Description</a></h1>
<p>This script--cvs_acls--is invoked once for each directory within a
``cvs commit''. The set of files being committed for that directory as
well as the directory itself, are passed to this script. This script
checks its 'cvsacl' file to see if any of the files being committed
are on the 'cvsacl' file's restricted list. If any of the files are
restricted, then the cvs_acls script passes back an exit code of 1
which disallows the commits for that directory.</p>
<p>Messages are returned to the committer indicating the <a href="#item_file"><code>file(s)</code></a> that
he/she are not allowed to committ. Additionally, a site-specific
set of messages (e.g., contact information) can be included in these
messages.</p>
<p>When a commit is prohibited, log messages are written to a restrict_log
file in $CVSROOT/CVSROOT. This default file can be redirected to
another destination.</p>
<p>The script is triggered from the 'commitinfo' file in $CVSROOT/CVSROOT/.</p>
<p>
</p>
<hr />
<h1><a name="enhancements">Enhancements</a></h1>
<p>This section lists the bug fixes and enhancements added to cvs_acls
that make up the current cvs_acls.</p>
<p>
</p>
<h2><a name="fixed_bugs">Fixed Bugs</a></h2>
<p>This version attempts to get rid the following bugs from the
original version of cvs_acls:</p>
<ul>
<li><strong><a name="item_files">Multiple entries on an 'cvsacl' line will be matched individually,
instead of requiring that all commit files *exactly* match all
'cvsacl' entries. Commiting a file not in the 'cvsacl' list would
allow *all* files (including a restricted file) to be committed.</a></strong><br />
</li>
[IMO, this basically made the original script unuseable for our
situation since any arbitrary combination of committed files could
avoid matching the 'cvsacl's entries.]
<p></p>
<li><strong><a name="item_handle_specific_filename_restrictions_2e_cvs_acls_">Handle specific filename restrictions. cvs_acls didn't restrict
individual files specified in 'cvsacl'.</a></strong><br />
</li>
<li><strong><a name="item_correctly_handle_multiple_2c_specific_filename_res">Correctly handle multiple, specific filename restrictions</a></strong><br />
</li>
<li><strong><a name="item_prohibit_mix_of_dirs_and_files_on_a_single__27cvsa">Prohibit mix of dirs and files on a single 'cvsacl' line
[To simplify the logic and because this would be normal usage.]</a></strong><br />
</li>
<li><strong><a name="item_correctly_handle_a_mixture_of_branch_restrictions_">Correctly handle a mixture of branch restrictions within one work
directory</a></strong><br />
</li>
<li><strong><a name="item__24cvsroot_existence_is_checked_too_late">$CVSROOT existence is checked too late</a></strong><br />
</li>
<li><strong><a name="item_option">Correctly handle the CVSROOT=:local:/... option (useful for
interactive testing)</a></strong><br />
</li>
<li><strong><a name="item_logic">Replacing shoddy ``$universal_off'' logic
(Thanks to Karl-Konig Konigsson for pointing this out.)</a></strong><br />
</li>
</ul>
<p>
</p>
<h2><a name="enhancements">Enhancements</a></h2>
<ul>
<li><strong><a name="item_checks_modules_in_the__27cvsacl_27_file_for_valid_">Checks modules in the 'cvsacl' file for valid files and directories</a></strong><br />
</li>
<li><strong><a name="item_accurately_report_restricted_entries_and_their_mat">Accurately report restricted entries and their matching patterns</a></strong><br />
</li>
<li><strong><a name="item_simplified_and_commented_overly_complex_perl_regex">Simplified and commented overly complex PERL REGEXPs for readability
and maintainability</a></strong><br />
</li>
<li><strong><a name="item_skip_the_rest_of_processing_if_a_mismatch_on_porti">Skip the rest of processing if a mismatch on portion of the 'cvsacl' line</a></strong><br />
</li>
<li><strong><a name="item_file">Get rid of opaque ``karma'' messages in favor of user-friendly messages
that describe which user, <code>file(s)</code> and <code>branch(es)</code> were disallowed.</a></strong><br />
</li>
<li><strong><a name="item_add_optional__27restrict_msg_27_file_for_additiona">Add optional 'restrict_msg' file for additional, site-specific
restriction messages.</a></strong><br />
</li>
<li><strong><a name="item_userid">Take a ``-u'' parameter for $USER from commit_prep so that the script
can do restrictions based on the client-side userId rather than the
server-side userId (usually 'cvs').</a></strong><br />
</li>
(See discussion below on ``Admin Setup'' for more on this point.)
<p></p>
<li><strong><a name="item_added_a_lot_more_debug_trace">Added a lot more debug trace</a></strong><br />
</li>
<li><strong><a name="item_tested_these_restrictions_with_concurrent_use_of_p">Tested these restrictions with concurrent use of pserver and SSH
access to model our transition from pserver to ext access.</a></strong><br />
</li>
<li><strong><a name="item_added_logging_of_restricted_commit_attempts_2e_res">Added logging of restricted commit attempts.
Restricted commits can be sent to a default file:
$CVSROOT/CVSROOT/restrictlog or to one passed to the script
via the -f command parameter.</a></strong><br />
</li>
</ul>
<p>
</p>
<h2><a name="todos">ToDoS</a></h2>
<ul>
<li><strong><a name="item_need_to_deal_with_pserver_2fssh_transition_with_co">Need to deal with pserver/SSH transition with conflicting umasks?</a></strong><br />
</li>
<li><strong><a name="item_use_a_cpan_module_to_handle_command_parameters_2e">Use a CPAN module to handle command parameters.</a></strong><br />
</li>
<li><strong><a name="item_use_a_cpan_module_to_clone_data_structures_2e">Use a CPAN module to clone data structures.</a></strong><br />
</li>
</ul>
<p>
</p>
<hr />
<h1><a name="version_information">Version Information</a></h1>
<p>This is not offered as a fix to the original 'cvs_acls' script since it
differs substantially in goals and methods from the original and there
are probably a significant number of people out there that still require
the original version's functionality.</p>
<p>The 'cvsacl' file flags of 'allow' and 'deny' were intentionally
changed to 'allow' and 'deny' because there are enough differences
between the original script's behavior and this one's that we wanted to
make sure that users will rethink their 'cvsacl' file formats before
plugging in this newer script.</p>
<p>Please note that there has been very limited cross-platform testing of
this script!!! (We did not have the time or resources to do exhaustive
cross-platform testing.)</p>
<p>It was developed and tested under Red Hat Linux 9.0 using PERL 5.8.0.
Additionally, it was built and tested under Red Hat Linux 7.3 using
PERL 5.6.1.</p>
<p>$Id: cvs_acls.html,v 1.1.2.2 2005/09/01 13:44:49 dprice Exp $</p>
<p>This version is based on the 1.11.13 version of cvs_acls
<a href="mailto:peter.connolly@cnet.com">peter.connolly@cnet.com</a> (Peter Connolly)</p>
<pre>
Access control lists for CVS. dgg@ksr.com (David G. Grubbs)
Branch specific controls added by voisine@bytemobile.com (Aaron Voisine)</pre>
<p>
</p>
<hr />
<h1><a name="installation">Installation</a></h1>
<p>To use this program, do the following four things:</p>
<p>0. Install PERL, version 5.6.1 or 5.8.0.</p>
<p>1. Admin Setup:</p>
<pre>
There are two choices here.</pre>
<pre>
a) The first option is to use the $ENV{&quot;USER&quot;}, server-side userId
(from the third column of your pserver 'passwd' file) as the basis for
your restrictions. In this case, you will (at a minimum) want to set
up a new &quot;cvsadmin&quot; userId and group on the pserver machine.
CVS administrators will then set up their 'passwd' file entries to
run either as &quot;cvs&quot; (for regular users) or as &quot;cvsadmin&quot; (for power
users). Correspondingly, your 'cvsacl' file will only list 'cvs'
and 'cvsadmin' as the userIds in the second column.</pre>
<pre>
Commentary: A potential weakness of this is that the xinetd
cvspserver process will need to run as 'root' in order to switch
between the 'cvs' and the 'cvsadmin' userIds. Some sysadmins don't
like situations like this and may want to chroot the process.
Talk to them about this point...</pre>
<pre>
b) The second option is to use the client-side userId as the basis for
your restrictions. In this case, all the xinetd cvspserver processes
can run as userId 'cvs' and no 'root' userId is required. If you have
a 'passwd' file that lists 'cvs' as the effective run-time userId for
all your users, then no changes to this file are needed. Your 'cvsacl'
file will use the individual, client-side userIds in its 2nd column.</pre>
<pre>
As long as the userIds in pserver's 'passwd' file match those userIds
that your Linux server know about, this approach is ideal if you are
planning to move from pserver to SSH access at some later point in time.
Just by switching the CVSROOT var from CVSROOT=:pserver:&lt;userId&gt;... to
CVSROOT=:ext:&lt;userId&gt;..., users can switch over to SSH access without
any other administrative changes. When all users have switched over to
SSH, the inherently insecure xinetd cvspserver process can be disabled.
[<a href="http://ximbiot.com/cvs/manual/cvs-1.11.17/cvs_2.html#SEC32">http://ximbiot.com/cvs/manual/cvs-1.11.17/cvs_2.html#SEC32</a>]</pre>
<pre>
:TODO: The only potential glitch with the SSH approach is the possibility
that each user can have differing umasks that might interfere with one
another, especially during a transition from pserver to SSH. As noted
in the ToDo section, this needs a good strategy and set of tests for that
yet...</pre>
<p>2. Put two lines, as the *only* non-comment lines, in your commitinfo file:</p>
<pre>
ALL $CVSROOT/CVSROOT/commit_prep
ALL $CVSROOT/CVSROOT/cvs_acls [-d][-u $USER ][-f &lt;logfilename&gt;]</pre>
<pre>
where &quot;-d&quot; turns on debug trace
&quot;-u $USER&quot; passes the client-side userId to cvs_acls
&quot;-f &lt;logfilename&quot;&gt; overrides the default filename used to log
restricted commit attempts.</pre>
<pre>
(These are handled in the processArgs() subroutine.)</pre>
<p>If you are using client-side userIds to restrict access to your
repository, make sure that they are in this order since the commit_prep
script is required in order to pass the $USER parameter.</p>
<p>A final note about the repository matching pattern. The example above
uses ``ALL'' but note that this means that the cvs_acls script will run
for each and every commit in your repository. Obviously, in a large
repository this adds up to a lot of overhead that may not be necesary.
A better strategy is to use a repository pattern that is more specific
to the areas that you wish to secure.</p>
<p>3. Install this file as $CVSROOT/CVSROOT/cvs_acls and make it executable.</p>
<p>4. Create a file named CVSROOT/cvsacl and optionally add it to
CVSROOT/checkoutlist and check it in. See the CVS manual's
administrative files section about checkoutlist. Typically:</p>
<pre>
$ cvs checkout CVSROOT
$ cd CVSROOT
[ create the cvsacl file, include 'commitinfo' line ]
[ add cvsacl to checkoutlist ]
$ cvs add cvsacl
$ cvs commit -m 'Added cvsacl for use with cvs_acls.' cvsacl checkoutlist</pre>
<p>Note: The format of the 'cvsacl' file is described in detail immediately
below but here is an important set up point:</p>
<pre>
Make sure to include a line like the following:</pre>
<pre>
deny||CVSROOT/commitinfo CVSROOT/cvsacl
allow|cvsadmin|CVSROOT/commitinfo CVSROOT/cvsacl</pre>
<pre>
that restricts access to commitinfo and cvsacl since this would be one of
the easiest &quot;end runs&quot; around this ACL approach. ('commitinfo' has the
line that executes the cvs_acls script and, of course, all the
restrictions are in 'cvsacl'.)</pre>
<p>5. (Optional) Create a 'restrict_msg' file in the $CVSROOT/CVSROOT directory.
Whenever there is a restricted file or dir message, cvs_acls will look
for this file and, if it exists, print its contents as part of the
commit-denial message. This gives you a chance to print any site-specific
information (e.g., who to call, what procedures to look up,...) whenever
a commit is denied.</p>
<p>
</p>
<hr />
<h1><a name="format_of_the_cvsacl_file">Format of the cvsacl file</a></h1>
<p>The 'cvsacl' file determines whether you may commit files. It contains lines
read from top to bottom, keeping track of whether a given user, repository
and branch combination is ``allowed'' or ``denied.'' The script will assume
``allowed'' on all repository paths until 'allow' and 'deny' rules change
that default.</p>
<p>The normal pattern is to specify an 'deny' rule to turn off
access to ALL users, then follow it with a matching 'allow' rule that will
turn on access for a select set of users. In the case of multiple rules for
the same user, repository and branch, the last one takes precedence.</p>
<p>Blank lines and lines with only comments are ignored. Any other lines not
beginning with ``allow'' or ``deny'' are logged to the restrict_log file.</p>
<p>Lines beginning with ``allow'' or ``deny'' are assumed to be '|'-separated
triples: (All spaces and tabs are ignored in a line.)</p>
<pre>
{allow.*,deny.*} [|user,user,... [|repos,repos,... [|branch,branch,...]]]</pre>
<pre>
1. String starting with &quot;allow&quot; or &quot;deny&quot;.
2. Optional, comma-separated list of usernames.
3. Optional, comma-separated list of repository pathnames.
These are pathnames relative to $CVSROOT. They can be directories or
filenames. A directory name allows or restricts access to all files and
directories below it. One line can have either directories or filenames
but not both.
4. Optional, comma-separated list of branch tags.
If not specified, all branches are assumed. Use HEAD to reference the
main branch.</pre>
<p>Example: (Note: No in-line comments.)</p>
<pre>
# ----- Make whole repository unavailable.
deny</pre>
<pre>
# ----- Except for user &quot;dgg&quot;.
allow|dgg</pre>
<pre>
# ----- Except when &quot;fred&quot; or &quot;john&quot; commit to the
# module whose repository is &quot;bin/ls&quot;
allow|fred, john|bin/ls</pre>
<pre>
# ----- Except when &quot;ed&quot; commits to the &quot;stable&quot;
# branch of the &quot;bin/ls&quot; repository
allow|ed|/bin/ls|stable</pre>
<p>
</p>
<hr />
<h1><a name="program_logic">Program Logic</a></h1>
<p>CVS passes to @ARGV an absolute directory pathname (the repository
appended to your $CVSROOT variable), followed by a list of filenames
within that directory that are to be committed.</p>
<p>The script walks through the 'cvsacl' file looking for matches on
the username, repository and branch.</p>
<p>A username match is simply the user's name appearing in the second
column of the cvsacl line in a space-or-comma separate list. If
blank, then any user will match.</p>
<p>A repository match:</p>
<ul>
<li><strong><a name="item_each_entry_in_the_modules_section_of_the_current__">Each entry in the modules section of the current 'cvsacl' line is
examined to see if it is a dir or a file. The line must have
either files or dirs, but not both. (To simplify the logic.)</a></strong><br />
</li>
<li><strong><a name="item_if_neither_2c_then_assume_the__27cvsacl_27_file_wa">If neither, then assume the 'cvsacl' file was set up in error and
skip that 'allow' line.</a></strong><br />
</li>
<li><strong><a name="item_if_a_dir_2c_then_each_dir_pattern_is_matched_separ">If a dir, then each dir pattern is matched separately against the
beginning of each of the committed files in @ARGV.</a></strong><br />
</li>
<li><strong><a name="item_if_a_file_2c_then_each_file_pattern_is_matched_exa">If a file, then each file pattern is matched exactly against each
of the files to be committed in @ARGV.</a></strong><br />
</li>
<li><strong><a name="item_repository_and_branch_must_both_match_together_2e_">Repository and branch must BOTH match together. This is to cover
the use case where a user has multiple branches checked out in
a single work directory. Commit files can be from different
branches.</a></strong><br />
</li>
A branch match is either:
<ul>
<li><strong><a name="item_when_no_branches_are_listed_in_the_fourth_column_2">When no branches are listed in the fourth column. (``Match any.'')</a></strong><br />
</li>
<li><strong><a name="item_all_elements_from_the_fourth_column_are_matched_ag">All elements from the fourth column are matched against each of
the tag names for $ARGV[1..$#ARGV] found in the %branches file.</a></strong><br />
</li>
</ul>
<li><strong><a name="item__27allow_27_match_remove_that_match_from_the_tally">'allow' match remove that match from the tally map.</a></strong><br />
</li>
<li><strong><a name="item_restricted">Restricted ('deny') matches are saved in the %repository_matches
table.</a></strong><br />
</li>
<li><strong><a name="item_if_there_is_a_match_on_user_2c_repository_and_bran">If there is a match on user, repository and branch:</a></strong><br />
</li>
<pre>
If repository, branch and user match
if 'deny'
add %repository_matches entries to %restricted_entries
else if 'allow'
remove %repository_matches entries from %restricted_entries</pre>
<li><strong><a name="item_at_the_end_of_all_the__27cvsacl_27_line_checks_2c_">At the end of all the 'cvsacl' line checks, check to see if there
are any entries in the %restricted_entries. If so, then deny the
commit.</a></strong><br />
</li>
</ul>
<p>
</p>
<h2><a name="pseudocode">Pseudocode</a></h2>
<pre>
read CVS/Entries file and create branch{file}-&gt;{branch} hash table
+ for each 'allow' and 'deny' line in the 'cvsacl' file:
| user match?
| - Yes: set $user_match = 1;
| repository and branch match?
| - Yes: add to %repository_matches;
| did user, repository match?
| - Yes: if 'deny' then
| add %repository_matches -&gt; %restricted_entries
| if 'allow' then
| remove %repository_matches &lt;- %restricted_entries
+ end for loop
any saved restrictions?
no: exit,
set exit code allowing commits and exit
yes: report restrictions,
set exit code prohibiting commits and exit</pre>
<p>
</p>
<h2><a name="sanity_check">Sanity Check</a></h2>
<pre>
1) file allow trumps a dir deny
deny||java/lib
allow||java/lib/README
2) dir allow can undo a file deny
deny||java/lib/README
allow||java/lib
3) file deny trumps a dir allow
allow||java/lib
deny||java/lib/README
4) dir deny trumps a file allow
allow||java/lib/README
deny||java/lib
... so last match always takes precedence</pre>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,17 @@
#! /bin/sh
#
# Copyright (C) 1995-2005 The 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.
#
# cvscheck - identify files added, changed, or removed
# in CVS working directory
#

View File

@ -1,20 +1,23 @@
#!/bin/sh
# Copyright (C) 2000-2005 The 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.
#
# This program is intended to take a check.log file generated by a failed run of
# sanity.sh as input and run expr line by line on it. It seems a much easier
# way of spotting a single failed line in a 100 line test result.
#
#
# This script falls under the GNU General Public License and is intended to
# be distributed with CVS.
#
#
# No warranties, express or implied.
#
#
# Contributed by Derek R. Price <derek.price@openavenue.com>
#

View File

@ -1,5 +1,17 @@
#! /bin/sh
#
# Copyright (C) 1995-2005 The 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.
#
# descend - walk down a directory tree and execute a command at each node
fullname=$0

View File

@ -1,6 +1,36 @@
#! @PERL@
#! @PERL@ -T
# -*-Perl-*-
# Copyright (C) 1994-2005 The 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.
###############################################################################
###############################################################################
###############################################################################
#
# THIS SCRIPT IS PROBABLY BROKEN. REMOVING THE -T SWITCH ON THE #! LINE ABOVE
# WOULD FIX IT, BUT THIS IS INSECURE. WE RECOMMEND FIXING THE ERRORS WHICH THE
# -T SWITCH WILL CAUSE PERL TO REPORT BEFORE RUNNING THIS SCRIPT FROM A CVS
# SERVER TRIGGER. PLEASE SEND PATCHES CONTAINING THE CHANGES YOU FIND
# NECESSARY TO RUN THIS SCRIPT WITH THE TAINT-CHECKING ENABLED BACK TO THE
# <@PACKAGE_BUGREPORT@> MAILING LIST.
#
# For more on general Perl security and taint-checking, please try running the
# `perldoc perlsec' command.
#
###############################################################################
###############################################################################
###############################################################################
# XXX: FIXME: handle multiple '-f logfile' arguments
#
# XXX -- I HATE Perl! This *will* be re-written in shell/awk/sed soon!

View File

@ -1,6 +1,36 @@
#! @PERL@
#! @PERL@ -T
# -*-Perl-*-
# Copyright (C) 1994-2005 The 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.
###############################################################################
###############################################################################
###############################################################################
#
# THIS SCRIPT IS PROBABLY BROKEN. REMOVING THE -T SWITCH ON THE #! LINE ABOVE
# WOULD FIX IT, BUT THIS IS INSECURE. WE RECOMMEND FIXING THE ERRORS WHICH THE
# -T SWITCH WILL CAUSE PERL TO REPORT BEFORE RUNNING THIS SCRIPT FROM A CVS
# SERVER TRIGGER. PLEASE SEND PATCHES CONTAINING THE CHANGES YOU FIND
# NECESSARY TO RUN THIS SCRIPT WITH THE TAINT-CHECKING ENABLED BACK TO THE
# <@PACKAGE_BUGREPORT@> MAILING LIST.
#
# For more on general Perl security and taint-checking, please try running the
# `perldoc perlsec' command.
#
###############################################################################
###############################################################################
###############################################################################
# Perl filter to handle the log messages from the checkin of files in
# a directory. This script will group the lists of files by log
# message, and mail a single consolidated log message at the end of
@ -51,7 +81,7 @@ $rcsidinfo = 2;
# When set properly, this will cause links to aspects of the project to
# print in the commit emails.
#$CVSWEB_SCHEME = "http";
#$CVSWEB_DOMAIN = "cvshome.org";
#$CVSWEB_DOMAIN = "nongnu.org";
#$CVSWEB_PORT = "80";
#$CVSWEB_URI = "source/browse/";
#$SEND_URL = "true";
@ -60,7 +90,7 @@ $SEND_DIFF = "true";
# Set this to a domain to have CVS pretend that all users who make
# commits have mail accounts within that domain.
#$EMULATE_LOCAL_MAIL_USER="cvshome.org";
#$EMULATE_LOCAL_MAIL_USER="nongnu.org";
# Set this to '-c' for context diffs; defaults to '-u' for unidiff format.
$difftype = '-uN';
@ -273,7 +303,7 @@ sub change_summary {
}
$diff = "\n\n";
$vhost = @path[0];
$vhost = $path[0];
if ($CVSWEB_PORT eq "80") {
$cvsweb_base = "$CVSWEB_SCHEME://$vhost.$CVSWEB_DOMAIN/$CVSWEB_URI";
}
@ -369,7 +399,7 @@ sub build_header {
#sub mlist_map
#{
# local($path) = @_;
# my $domain = "cvshome.org";
# my $domain = "nongnu.org";
#
# if ($path =~ /^([^\/]+)/) {
# return "cvs\@$1.$domain";
@ -457,7 +487,7 @@ sub mail_notification
my $subj = &derive_subject_from_changes_file ();
if ($EMULATE_LOCAL_MAIL_USER NE "") {
if ($EMULATE_LOCAL_MAIL_USER ne "") {
$MAIL_FROM = "$cvs_user\@$EMULATE_LOCAL_MAIL_USER";
}
@ -536,7 +566,6 @@ $state = $STATE_NONE;
$cvs_user = $ENV{'USER'} || getlogin || (getpwuid($<))[0] || sprintf("uid#%d",$<);
@files = process_argv(@ARGV);
@path = split('/', $files[0]);
$repository = $path[0];
if ($#path == 0) {
$dir = ".";
} else {

View File

@ -1,6 +1,36 @@
#! @PERL@
#! @PERL@ -T
# -*-Perl-*-
# Copyright (C) 1994-2005 The 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.
###############################################################################
###############################################################################
###############################################################################
#
# THIS SCRIPT IS PROBABLY BROKEN. REMOVING THE -T SWITCH ON THE #! LINE ABOVE
# WOULD FIX IT, BUT THIS IS INSECURE. WE RECOMMEND FIXING THE ERRORS WHICH THE
# -T SWITCH WILL CAUSE PERL TO REPORT BEFORE RUNNING THIS SCRIPT FROM A CVS
# SERVER TRIGGER. PLEASE SEND PATCHES CONTAINING THE CHANGES YOU FIND
# NECESSARY TO RUN THIS SCRIPT WITH THE TAINT-CHECKING ENABLED BACK TO THE
# <@PACKAGE_BUGREPORT@> MAILING LIST.
#
# For more on general Perl security and taint-checking, please try running the
# `perldoc perlsec' command.
#
###############################################################################
###############################################################################
###############################################################################
# From: clyne@niwot.scd.ucar.EDU (John Clyne)
# Date: Fri, 28 Feb 92 09:54:21 MST
#

View File

@ -103,7 +103,7 @@
# pvcs_archives.
# * You must use the -pflat option when processing single filenames
# passed as arguments to the script. This is probably a bug.
# * questions, comments, additions can be sent to info-cvs@gnu.org
# * questions, comments, additions can be sent to info-cvs@nongnu.org
#########################################################################

View File

@ -1,13 +1,22 @@
#! /bin/sh
#
# Copyright (c) 1989-2005 The Free Software Foundation, Inc.
# Portions Copyright (c) 1989, Brian Berliner
#
# 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.
#
# Based on the CVS 1.0 checkin csh script.
# Contributed by Per Cederqvist <ceder@signum.se>.
# Rewritten in sh by David MacKenzie <djm@cygnus.com>.
#
# Copyright (c) 1989, Brian Berliner
#
# You may distribute under the terms of the GNU General Public License.
#
#############################################################################
#
# Check in sources that previously were under RCS or no source control system.

View File

@ -1,5 +1,17 @@
#! /bin/sh
# Copyright (C) 1995-2005 The 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.
# RCS to ChangeLog generator
# Generate a change log prefix from RCS files (perhaps in the CVS repository)

View File

@ -1,5 +1,16 @@
#! /bin/sh
#
# Copyright (C) 1995-2005 The 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.
#
############################################################

View File

@ -1,6 +1,36 @@
#! @PERL@
#! @PERL@ -T
# -*-Perl-*-
# Copyright (C) 1994-2005 The 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.
###############################################################################
###############################################################################
###############################################################################
#
# THIS SCRIPT IS PROBABLY BROKEN. REMOVING THE -T SWITCH ON THE #! LINE ABOVE
# WOULD FIX IT, BUT THIS IS INSECURE. WE RECOMMEND FIXING THE ERRORS WHICH THE
# -T SWITCH WILL CAUSE PERL TO REPORT BEFORE RUNNING THIS SCRIPT FROM A CVS
# SERVER TRIGGER. PLEASE SEND PATCHES CONTAINING THE CHANGES YOU FIND
# NECESSARY TO RUN THIS SCRIPT WITH THE TAINT-CHECKING ENABLED BACK TO THE
# <@PACKAGE_BUGREPORT@> MAILING LIST.
#
# For more on general Perl security and taint-checking, please try running the
# `perldoc perlsec' command.
#
###############################################################################
###############################################################################
###############################################################################
# Author: John Rouillard (rouilj@cs.umb.edu)
# Supported: Yeah right. (Well what do you expect for 2 hours work?)
# Blame-to: rouilj@cs.umb.edu

View File

@ -1,4 +1,16 @@
#! @CSH@ -f
# Copyright (C) 1995-2005 The 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.
#
# Sccs2rcs is a script to convert an existing SCCS
# history into an RCS history without losing any of

View File

@ -1,3 +1,11 @@
2005-09-04 Derek Price <derek@ximbiot.com>
* Makefile.am (EXTRA_DIST): Add .cvsignore.
2004-11-05 Conrad T. Pino <Conrad@Pino.com>
* libdiff.dep: Regenerated after complete rebuild.
2004-05-15 Derek Price <derek@ximbiot.com>
* libdiff.dsp: Header file list updated.

View File

@ -22,4 +22,4 @@ 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.dep libdiff.dsp libdiff.mak
libdiff.dep libdiff.dsp libdiff.mak .cvsignore

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.7.9 from Makefile.am.
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -21,7 +21,6 @@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
@ -35,6 +34,39 @@ POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = diff
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
LIBRARIES = $(noinst_LIBRARIES)
AR = ar
ARFLAGS = cru
libdiff_a_AR = $(AR) $(ARFLAGS)
libdiff_a_LIBADD =
am_libdiff_a_OBJECTS = diff.$(OBJEXT) diff3.$(OBJEXT) \
analyze.$(OBJEXT) cmpbuf.$(OBJEXT) io.$(OBJEXT) \
context.$(OBJEXT) ed.$(OBJEXT) normal.$(OBJEXT) \
ifdef.$(OBJEXT) util.$(OBJEXT) dir.$(OBJEXT) version.$(OBJEXT) \
side.$(OBJEXT)
libdiff_a_OBJECTS = $(am_libdiff_a_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libdiff_a_SOURCES)
DIST_SOURCES = $(libdiff_a_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
@ -104,6 +136,8 @@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
datadir = @datadir@
@ -117,6 +151,7 @@ libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
@ -124,63 +159,49 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
with_default_rsh = @with_default_rsh@
INCLUDES = -I$(top_srcdir)/lib
noinst_LIBRARIES = libdiff.a
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.dep libdiff.dsp libdiff.mak
subdir = diff
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
LIBRARIES = $(noinst_LIBRARIES)
libdiff_a_AR = $(AR) cru
libdiff_a_LIBADD =
am_libdiff_a_OBJECTS = diff.$(OBJEXT) diff3.$(OBJEXT) analyze.$(OBJEXT) \
cmpbuf.$(OBJEXT) io.$(OBJEXT) context.$(OBJEXT) ed.$(OBJEXT) \
normal.$(OBJEXT) ifdef.$(OBJEXT) util.$(OBJEXT) dir.$(OBJEXT) \
version.$(OBJEXT) side.$(OBJEXT)
libdiff_a_OBJECTS = $(am_libdiff_a_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/analyze.Po ./$(DEPDIR)/cmpbuf.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/context.Po ./$(DEPDIR)/diff.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/diff3.Po ./$(DEPDIR)/dir.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/ed.Po ./$(DEPDIR)/ifdef.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/io.Po ./$(DEPDIR)/normal.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/side.Po ./$(DEPDIR)/util.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/version.Po
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
DIST_SOURCES = $(libdiff_a_SOURCES)
DIST_COMMON = $(srcdir)/Makefile.in ChangeLog Makefile.am
SOURCES = $(libdiff_a_SOURCES)
libdiff.dep libdiff.dsp libdiff.mak .cvsignore
all: all-am
.SUFFIXES:
.SUFFIXES: .c .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu diff/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu diff/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
AR = ar
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
@ -190,7 +211,7 @@ libdiff.a: $(libdiff_a_OBJECTS) $(libdiff_a_DEPENDENCIES)
$(RANLIB) libdiff.a
mostlyclean-compile:
-rm -f *.$(OBJEXT) core *.core
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@ -210,36 +231,20 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
@am__fastdepCC_TRUE@ fi
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
@am__fastdepCC_TRUE@ fi
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
uninstall-info-am:
ETAGS = etags
ETAGSFLAGS =
CTAGS = ctags
CTAGSFLAGS =
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
@ -248,6 +253,7 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
@ -259,10 +265,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
@ -285,10 +292,6 @@ GTAGS:
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
@ -302,7 +305,7 @@ distdir: $(DISTFILES)
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
@ -320,7 +323,6 @@ distdir: $(DISTFILES)
check-am: all-am
check: check-am
all-am: Makefile $(LIBRARIES)
installdirs:
install: install-am
install-exec: install-exec-am
@ -341,7 +343,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -360,6 +362,8 @@ dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
@ -395,13 +399,14 @@ uninstall-am: uninstall-info-am
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-noinstLIBRARIES ctags distclean distclean-compile \
distclean-generic distclean-tags 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-generic \
mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
ps ps-am tags uninstall uninstall-am uninstall-info-am
distclean-generic distclean-tags distdir dvi dvi-am html \
html-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-generic mostlyclean mostlyclean-compile \
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
uninstall-am uninstall-info-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -1,3 +1,205 @@
2006-06-08 Derek Price <derek@ximbiot.com>
* cvsclient.texi (Requests): Add Empty-conflicts.
2006-03-20 Mark D. Baushke <mdb@gnu.org>
[patch #4965]
* cvs.texinfo (Sticky tags, Merging and keywords)
(checkout options, update options): The -A switch
does not reset sticky -k options on modified files.
* cvs.1, stamp-1, stamp-vti, version.texi: Regenerated.
2006-02-28 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Editing administrative files): Import changes from Wiki.
2005-12-09 Derek Price <derek@ximbiot.com>
[patch #4634]
* cvsclient.texi (Root request): Clarify.
2005-11-10 Larry Jones <lawrence.jones@ugs.com>
* cvs.texinfo (Common options): -n no longer applies to commit.
(commit): Remove reference to the defunct -n option.
* cvs.1, stamp-vti, version.texi: Regenerated
2005-10-12 Derek Price <derek@ximbiot.com>
* cvs.texinfo: Remove text that created unintentional cross-references
in generated info files.
2005-10-04 Derek Price <derek@ximbiot.com>
* cvs.texinfo: s/visa versa/vice versa/. (From Wiki.)
2005-09-26 Derek Price <derek@ximbiot.com>
* Makefile.am (cvs-paper.ps, cvs-paper.pdf): Remove implicit sources.
Add comments about why implicit rules won't work for these targets.
Make sure the distributed cvs-paper.pdf is created in $(srcdir). Make
cvs-paper.pdf directly from cvs-paper.ms to avoid building it just
because cvs-paper.ps is missing.
* Makefile.am (EXTRA_DIST): Restore PDFs.
* cvs-paper.ps: Removed.
* texinfo.tex: Update from GNULIB.
2005-09-25 Derek Price <derek@ximbiot.com>
* Makefile.am (doc): Finish removing PSs.
* Makefile.am (EXTRA_DIST): Remove PDFs too until errors go away.
* Makefile.am (EXTRA_DIST): Dist PDFs rather than PSs.
2005-09-22 Larry Jones <lawrence.jones@ugs.com>
* cvs.texinfo (rdiff options): Document -k.
* cvs.1, stamp-vti, version.texi: Regenerated.
2005-09-20 Larry Jones <lawrence.jones@ugs.com>
* cvs.texinfo: Move summary and detail contents to the front
where they belong.
2005-09-14 Derek Price <derek@ximbiot.com>
* Makefile.am: s#cvs.1#$(srcdir)/cvs.1#.
2005-09-11 Larry Jones <lawrence.jones@ugs.com>
* cvs.texinfo (Common options): Note that -r branch for a revision
means the head of the branch.
2005-09-10 Larry Jones <lawrence.jones@ugs.com>
* cvs.texinfo (Error messages): Add suggested messages.
2005-09-09 Larry Jones <lawrence.jones@ugs.com>
* cvs.texinfo (Error messages): Add signal 11 message.
2005-09-01 Derek Price <derek@ximbiot.com>
* cvs.man.footer: Update links.
2005-09-01 Derek Price <derek@ximbiot.com>
* cvs.texinfo: Update links and email addresses.
2005-08-29 Derek Price <derek@ximbiot.com>
* cvs.texinfo (From scratch): Add checkout to import example, from
wiki.
2005-08-29 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Removing directories): Correct grammar, from wiki.
2005-08-29 Derek Price <derek@ximbiot.com>
* cvs.texinfo (From scratch): Clarify note on `cvs add', inspired from
wiki.
2005-08-22 Derek Price <derek@ximbiot.com>
Address bug #13882, submitted by Fred Maranhao.
* cvs.texinfo (log options, admin options, Invoking CVS): Add cross
references for clarity about possible states.
2005-08-22 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Updating a file): Add note about update -d, inspired by
wiki.
2005-08-12 Derek Price <derek@ximbiot.com>
* cvs.texinfo (What is CVS?): Rephrase for clarity, imported from
Wiki.
2005-08-02 Derek Price <derek@ximbiot.com>
* cvs.texinfo (What is CVS?, BUGS): s/cvshome/nongnu/. Remove
obsolete Pascal Molli link.
2005-06-22 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Builds): Update Gunnar Tornblom's email at his request.
2005-05-03 Derek Price <derek@ximbiot.com>
* cvsclient.texi (Goals): Remove typo. Resolves cvshome issue #236.
2005-05-03 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Creating a repository): Provide xref to the remote
repositries section. Resolves issue #203 on cvshome.org.
2005-05-03 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Moving directories): Clarify instructions on renaming a
directory. Partially resolves issue #246 on cvshome.org.
2005-05-03 Derek Price <derek@ximbiot.com>
* cvs.texinfo (update output): Use "working directory" in place of
"source" for clarity. Closes issue #245 on cvshome.org.
2005-04-28 Derek Price <derek@ximbiot.com>
* mkman.pl: Minor changes to accomodate Perl 5.8.4. Improve
commenting.
($nk, $ret, $debug): New globals.
(debug_print): New function.
2005-04-14 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Administrative files): Add "Trigger Scripts" node to
the menu.
(Trigger Scripts, Trigger Script Security): New nodes.
(syntax): Move under Trigger scripts node.
(commit files, taginfo): Rewrite to reference Trigger Script node.
2005-04-06 Derek Price <derek@ximbiot.com>
* Makefile.am (MAINTAINERCLEANFILES): Add cvs.1.
(cvs.1): Create intermediate file so that the original isn't emptied on
error.
2005-01-31 Derek Price <derek@ximbiot.com>
* Makefile.am, cvs.man.header, cvs.texinfo: Update copyright notices.
2005-01-29 Derek Price <derek@ximbiot.com>
* cvs.texinfo (log options): Note quirky interaction of log options.
(Suggestion from Dan Peterson <dbpete@aol.com>.)
2004-10-29 Mark D. Baushke <mdb@cvshome.org>
* cvs.texinfo (Common options): The -r TAG option works with
the cvs annotate command.
(Original patch from Ville Skytta <scop@cvshome.org>.)
2004-09-25 Derek Price <derek@ximbiot.com>
* mkman.in: Move to...
* mkman.pl: ...here.
* Makefile.am (cvs.1): mkman is in build dir, not src dir.
2004-07-17 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Update imports, import): Add notes on requirement that
release tags be unique.
(Original patch from Ilya N. Golubev <gin@mo.msk.ru>.)
2004-06-10 Derek Price <derek@ximbiot.com>
* cvs.texinfo (commit files): Remove reference to the obsolete -i
module option.
2004-05-28 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Global options): Remove reference to global -l option.

View File

@ -1,8 +1,10 @@
## Process this file with automake to produce Makefile.in
# Makefile for GNU CVS documentation (excluding man pages - see ../man).
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
#
# Copyright (C) 1986-2005 The Free Software Foundation, Inc.
#
# Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
# and others.
# 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
@ -15,7 +17,7 @@
# GNU General Public License for more details.
info_TEXINFOS = cvs.texinfo cvsclient.texi
man_MANS = cvs.1
man_MANS = $(srcdir)/cvs.1
PSS = \
cvs.ps \
@ -24,7 +26,7 @@ PSS = \
PDFS = \
cvs.pdf \
cvs-paper.pdf \
$(srcdir)/cvs-paper.pdf \
cvsclient.pdf
TXTS = \
@ -32,25 +34,27 @@ TXTS = \
cvsclient.txt
EXTRA_DIST = \
$(PSS) \
.cvsignore \
ChangeLog.fsf \
RCSFILES \
mdate-sh \
cvs.1 \
$(srcdir)/cvs.1 \
cvs-paper.ms \
cvs.man.header \
cvs.man.footer
cvs.man.footer \
$(PDFS)
MOSTLYCLEANFILES = \
MOSTLYCLEANFILES =
CLEANFILES = \
$(PSS) \
$(TXTS)
# These Automake generates MOSTLYCLEAN targets for PostScripts genersted from
# TEXINFOS, but it shouldn't when those files are in EXTRA_DIST
MAINTAINERCLEANFILES = \
$(PSS)
$(PDFS) \
$(srcdir)/cvs.1
doc: info ps
doc: info pdf
.PHONY: doc
txt: $(TXTS)
@ -65,21 +69,36 @@ dvi: cvs.dvi cvsclient.dvi
cvs.txt: cvs.texinfo $(srcdir)/version.texi
cvsclient.txt: cvsclient.texi $(srcdir)/version-client.texi
# These targets need to be very specific so that the other PDFs get generated
# correctly. If they are more generic and cvs.ps is made before cvs.pdf, then
# cvs.pdf will be generated from the generic target and the PS source, which
# contains less information (hyperlinks and such) than the usual texinfo source.
# The cvs-paper.pdf target needs to be very specific so that the other PDFs get
# generated correctly. If a more generic .ps.pdf implicit target is defined,
# and cvs.ps is made before cvs.pdf, then cvs.pdf can be generated from the
# .ps.pdf target and the PS source, which contains less information (hyperlinks
# and such) than the usual texinfo source.
#
# It is possible that an implicit .ms.ps target could be safely defined. I
# don't recall looking into it.
cvs-paper.ps: cvs-paper.ms
$(ROFF) -t -p -ms -Tps $< > $@-t
mv $@-t $@
$(ROFF) -t -p -ms -Tps $(srcdir)/cvs-paper.ms >cvs-paper.ps-t
cp cvs-paper.ps-t $@
-@rm -f cvs-paper.ps-t
cvs-paper.pdf: cvs-paper.ps
ps2pdf $< $@
# This rule introduces some redundancy, but `make distcheck' requires that
# Nothing in $(srcdir) be rebuilt, and this will always be rebuilt when it
# is dependant on cvs-paper.ps and cvs-paper.ps isn't distributed.
$(srcdir)/cvs-paper.pdf: cvs-paper.ms
$(ROFF) -t -p -ms -Tps $(srcdir)/cvs-paper.ms >cvs-paper.ps-t
ps2pdf cvs-paper.ps-t cvs-paper.pdf-t
cp cvs-paper.pdf-t $@
-@rm -f cvs-paper.pdf-t cvs-paper.ps-t
MOSTLYCLEANFILES += cvs-paper.pdf-t cvs-paper.ps-t
# 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 >$@
$(srcdir)/cvs.1: @MAINTAINER_MODE_TRUE@ mkman cvs.man.header cvs.texinfo cvs.man.footer
$(PERL) ./mkman $(srcdir)/cvs.man.header $(srcdir)/cvs.texinfo \
$(srcdir)/cvs.man.footer >cvs.tmp
cp cvs.tmp $(srcdir)/cvs.1
-@rm -f cvs.tmp
# texinfo based targets automake neglects to include
SUFFIXES = .txt

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.7.9 from Makefile.am.
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -15,9 +15,11 @@
@SET_MAKE@
# Makefile for GNU CVS documentation (excluding man pages - see ../man).
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
#
# Copyright (C) 1986-2005 The Free Software Foundation, Inc.
#
# Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
# and others.
# 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
@ -28,7 +30,6 @@
# 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.
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
@ -36,7 +37,6 @@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
@ -50,6 +50,35 @@ POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = doc
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(srcdir)/mkman.pl $(srcdir)/stamp-1 $(srcdir)/stamp-vti \
$(srcdir)/version-client.texi $(srcdir)/version.texi ChangeLog \
mdate-sh texinfo.tex
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = mkman
SOURCES =
DIST_SOURCES =
INFO_DEPS = $(srcdir)/cvs.info $(srcdir)/cvsclient.info
am__TEXINFO_TEX_DIR = $(srcdir)
DVIS = cvs.dvi cvsclient.dvi
HTMLS = cvs.html cvsclient.html
TEXINFOS = cvs.texinfo cvsclient.texi
TEXI2PDF = $(TEXI2DVI) --pdf --batch
MAKEINFOHTML = $(MAKEINFO) --html
AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
DVIPS = dvips
am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"
man1dir = $(mandir)/man1
NROFF = nroff
MANS = $(man_MANS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
@ -119,6 +148,8 @@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
datadir = @datadir@
@ -132,6 +163,7 @@ libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
@ -139,167 +171,232 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
with_default_rsh = @with_default_rsh@
info_TEXINFOS = cvs.texinfo cvsclient.texi
man_MANS = cvs.1
man_MANS = $(srcdir)/cvs.1
PSS = \
cvs.ps \
cvs-paper.ps \
cvsclient.ps
PDFS = \
cvs.pdf \
cvs-paper.pdf \
$(srcdir)/cvs-paper.pdf \
cvsclient.pdf
TXTS = \
cvs.txt \
cvsclient.txt
EXTRA_DIST = \
$(PSS) \
.cvsignore \
ChangeLog.fsf \
RCSFILES \
mdate-sh \
cvs.1 \
$(srcdir)/cvs.1 \
cvs-paper.ms \
cvs.man.header \
cvs.man.footer
cvs.man.footer \
$(PDFS)
MOSTLYCLEANFILES = \
MOSTLYCLEANFILES = cvs-paper.pdf-t cvs-paper.ps-t
CLEANFILES = \
$(PSS) \
$(TXTS)
# These Automake generates MOSTLYCLEAN targets for PostScripts genersted from
# TEXINFOS, but it shouldn't when those files are in EXTRA_DIST
MAINTAINERCLEANFILES = \
$(PSS)
$(PDFS) \
$(srcdir)/cvs.1
# 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 = 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 \
mkman.in stamp-1 stamp-vti texinfo.tex version-client.texi \
version.texi
all: all-am
.SUFFIXES:
.SUFFIXES: .txt .dvi .info .pdf .ps .texi .texinfo .txi
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
.SUFFIXES: .txt .dvi .html .info .pdf .ps .texi .texinfo .txi
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
cd $(top_srcdir) && \
$(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
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
mkman: $(top_builddir)/config.status $(srcdir)/mkman.pl
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]
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $@ `test -f '$<' || echo '$(srcdir)/'`$<
restore=: && backupdir="$(am__leading_dot)am$$$$" && \
am__cwd=`pwd` && cd $(srcdir) && \
rm -rf $$backupdir && mkdir $$backupdir && \
if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
done; \
else :; fi && \
cd "$$am__cwd"; \
if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $@ $<; \
then \
rc=0; \
cd $(srcdir); \
else \
rc=$$?; \
cd $(srcdir) && \
$$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
fi; \
rm -rf $$backupdir; exit $$rc
.texinfo.dvi:
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2DVI) `test -f '$<' || echo '$(srcdir)/'`$<
$(TEXI2DVI) $<
.texinfo.pdf:
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2PDF) `test -f '$<' || echo '$(srcdir)/'`$<
cvs.info: cvs.texinfo version.texi
cvs.dvi: cvs.texinfo version.texi
cvs.pdf: cvs.texinfo version.texi
version.texi: @MAINTAINER_MODE_TRUE@ stamp-vti
stamp-vti: cvs.texinfo $(top_srcdir)/configure
$(TEXI2PDF) $<
.texinfo.html:
rm -rf $(@:.html=.htp)
if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $(@:.html=.htp) $<; \
then \
rm -rf $@; \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
else \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
exit 1; \
fi
$(srcdir)/cvs.info: cvs.texinfo $(srcdir)/version.texi
cvs.dvi: cvs.texinfo $(srcdir)/version.texi
cvs.pdf: cvs.texinfo $(srcdir)/version.texi
cvs.html: cvs.texinfo $(srcdir)/version.texi
$(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-vti
$(srcdir)/stamp-vti: cvs.texinfo $(top_srcdir)/configure
@(dir=.; test -f ./cvs.texinfo || dir=$(srcdir); \
set `$(SHELL) $(srcdir)/mdate-sh $$dir/cvs.texinfo`; \
echo "@set UPDATED $$1 $$2 $$3"; \
echo "@set UPDATED-MONTH $$2 $$3"; \
echo "@set EDITION $(VERSION)"; \
echo "@set VERSION $(VERSION)") > vti.tmp
@cmp -s vti.tmp version.texi \
|| (echo "Updating version.texi"; \
cp vti.tmp version.texi)
@cmp -s vti.tmp $(srcdir)/version.texi \
|| (echo "Updating $(srcdir)/version.texi"; \
cp vti.tmp $(srcdir)/version.texi)
-@rm -f vti.tmp
@cp version.texi $@
@cp $(srcdir)/version.texi $@
mostlyclean-vti:
-rm -f vti.tmp
maintainer-clean-vti:
@MAINTAINER_MODE_TRUE@ -rm -f stamp-vti version.texi
@MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
.texi.info:
@rm -f $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $@ `test -f '$<' || echo '$(srcdir)/'`$<
restore=: && backupdir="$(am__leading_dot)am$$$$" && \
am__cwd=`pwd` && cd $(srcdir) && \
rm -rf $$backupdir && mkdir $$backupdir && \
if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
done; \
else :; fi && \
cd "$$am__cwd"; \
if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $@ $<; \
then \
rc=0; \
cd $(srcdir); \
else \
rc=$$?; \
cd $(srcdir) && \
$$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
fi; \
rm -rf $$backupdir; exit $$rc
.texi.dvi:
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2DVI) `test -f '$<' || echo '$(srcdir)/'`$<
$(TEXI2DVI) $<
.texi.pdf:
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2PDF) `test -f '$<' || echo '$(srcdir)/'`$<
cvsclient.info: cvsclient.texi version-client.texi
cvsclient.dvi: cvsclient.texi version-client.texi
cvsclient.pdf: cvsclient.texi version-client.texi
version-client.texi: @MAINTAINER_MODE_TRUE@ stamp-1
stamp-1: cvsclient.texi $(top_srcdir)/configure
$(TEXI2PDF) $<
.texi.html:
rm -rf $(@:.html=.htp)
if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $(@:.html=.htp) $<; \
then \
rm -rf $@; \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
else \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
exit 1; \
fi
$(srcdir)/cvsclient.info: cvsclient.texi $(srcdir)/version-client.texi
cvsclient.dvi: cvsclient.texi $(srcdir)/version-client.texi
cvsclient.pdf: cvsclient.texi $(srcdir)/version-client.texi
cvsclient.html: cvsclient.texi $(srcdir)/version-client.texi
$(srcdir)/version-client.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-1
$(srcdir)/stamp-1: cvsclient.texi $(top_srcdir)/configure
@(dir=.; test -f ./cvsclient.texi || dir=$(srcdir); \
set `$(SHELL) $(srcdir)/mdate-sh $$dir/cvsclient.texi`; \
echo "@set UPDATED $$1 $$2 $$3"; \
echo "@set UPDATED-MONTH $$2 $$3"; \
echo "@set EDITION $(VERSION)"; \
echo "@set VERSION $(VERSION)") > 1.tmp
@cmp -s 1.tmp version-client.texi \
|| (echo "Updating version-client.texi"; \
cp 1.tmp version-client.texi)
@cmp -s 1.tmp $(srcdir)/version-client.texi \
|| (echo "Updating $(srcdir)/version-client.texi"; \
cp 1.tmp $(srcdir)/version-client.texi)
-@rm -f 1.tmp
@cp version-client.texi $@
@cp $(srcdir)/version-client.texi $@
mostlyclean-1:
-rm -f 1.tmp
maintainer-clean-1:
@MAINTAINER_MODE_TRUE@ -rm -f stamp-1 version-client.texi
TEXI2PDF = $(TEXI2DVI) --pdf --batch
DVIPS = dvips
@MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-1 $(srcdir)/version-client.texi
.dvi.ps:
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
$(DVIPS) -o $@ $<
uninstall-info-am:
$(PRE_UNINSTALL)
@$(PRE_UNINSTALL)
@if (install-info --version && \
install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
list='$(INFO_DEPS)'; \
for file in $$list; do \
relfile=`echo "$$file" | sed 's|^.*/||'`; \
echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$relfile"; \
install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$relfile; \
echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
done; \
else :; fi
@$(NORMAL_UNINSTALL)
@ -307,15 +404,19 @@ uninstall-info-am:
for file in $$list; do \
relfile=`echo "$$file" | sed 's|^.*/||'`; \
relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
(if cd $(DESTDIR)$(infodir); then \
echo " rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9])"; \
(if cd "$(DESTDIR)$(infodir)"; then \
echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
else :; fi); \
done
dist-info: $(INFO_DEPS)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
list='$(INFO_DEPS)'; \
for base in $$list; do \
case $$base in \
$(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
esac; \
if test -f $$base; then d=.; else d=$(srcdir); fi; \
for file in $$d/$$base*; do \
relfile=`expr "$$file" : "$$d/\(.*\)"`; \
@ -325,13 +426,14 @@ dist-info: $(INFO_DEPS)
done
mostlyclean-aminfo:
-rm -f cvs.aux cvs.cp cvs.cps cvs.fn cvs.fns cvs.ky cvs.kys cvs.log cvs.pg \
cvs.pgs cvs.tmp cvs.toc cvs.tp cvs.tps cvs.vr cvs.vrs cvs.dvi \
cvs.pdf cvs.ps cvsclient.aux cvsclient.cp cvsclient.cps \
cvsclient.fn cvsclient.fns cvsclient.ky cvsclient.kys \
cvsclient.log cvsclient.pg cvsclient.pgs cvsclient.tmp \
cvsclient.toc cvsclient.tp cvsclient.tps cvsclient.vr \
cvsclient.vrs cvsclient.dvi cvsclient.pdf cvsclient.ps
-rm -rf cvs.aux cvs.cp cvs.cps cvs.fn cvs.fns cvs.ky cvs.kys cvs.log cvs.pg \
cvs.pgs cvs.tmp cvs.toc cvs.tp cvs.tps cvs.vr cvs.vrs \
cvs.dvi cvs.pdf cvs.ps cvs.html cvsclient.aux cvsclient.cp \
cvsclient.cps cvsclient.fn cvsclient.fns cvsclient.ky \
cvsclient.kys cvsclient.log cvsclient.pg cvsclient.pgs \
cvsclient.tmp cvsclient.toc cvsclient.tp cvsclient.tps \
cvsclient.vr cvsclient.vrs cvsclient.dvi cvsclient.pdf \
cvsclient.ps cvsclient.html
maintainer-clean-aminfo:
@list='$(INFO_DEPS)'; for i in $$list; do \
@ -339,11 +441,9 @@ 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)
test -z "$(man1dir)" || $(mkdir_p) "$(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 \
@ -362,8 +462,8 @@ install-man1: $(man1_MANS) $(man_MANS)
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; \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
done
uninstall-man1:
@$(NORMAL_UNINSTALL)
@ -383,8 +483,8 @@ uninstall-man1:
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; \
echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
done
tags: TAGS
TAGS:
@ -392,12 +492,9 @@ TAGS:
ctags: CTAGS
CTAGS:
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
$(mkdir_p) $(distdir)/$(srcdir)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
@ -409,7 +506,7 @@ distdir: $(DISTFILES)
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
@ -430,9 +527,10 @@ distdir: $(DISTFILES)
check-am: all-am
check: check-am
all-am: Makefile $(INFO_DEPS) $(MANS)
installdirs:
$(mkinstalldirs) $(DESTDIR)$(infodir) $(DESTDIR)$(man1dir)
for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
@ -451,9 +549,10 @@ mostlyclean-generic:
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -467,10 +566,12 @@ distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am: $(DVIS)
html: html-am
html-am: $(HTMLS)
info: info-am
info-am: $(INFO_DEPS)
@ -483,17 +584,21 @@ install-info: install-info-am
install-info-am: $(INFO_DEPS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(infodir)
@list='$(INFO_DEPS)'; \
test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
list='$(INFO_DEPS)'; \
for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
esac; \
if test -f $$file; then d=.; else d=$(srcdir); fi; \
file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
$$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
if test -f $$ifile; then \
relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
echo " $(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile"; \
$(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile; \
echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \
$(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \
else : ; fi; \
done; \
done
@ -503,8 +608,8 @@ install-info-am: $(INFO_DEPS)
list='$(INFO_DEPS)'; \
for file in $$list; do \
relfile=`echo "$$file" | sed 's|^.*/||'`; \
echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$relfile";\
install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$relfile || :;\
echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
done; \
else : ; fi
install-man: install-man1
@ -535,19 +640,19 @@ 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-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
distclean distclean-generic distdir dvi dvi-am html html-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-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
doc: info pdf
.PHONY: doc
txt: $(TXTS)
@ -562,21 +667,34 @@ dvi: cvs.dvi cvsclient.dvi
cvs.txt: cvs.texinfo $(srcdir)/version.texi
cvsclient.txt: cvsclient.texi $(srcdir)/version-client.texi
# These targets need to be very specific so that the other PDFs get generated
# correctly. If they are more generic and cvs.ps is made before cvs.pdf, then
# cvs.pdf will be generated from the generic target and the PS source, which
# contains less information (hyperlinks and such) than the usual texinfo source.
# The cvs-paper.pdf target needs to be very specific so that the other PDFs get
# generated correctly. If a more generic .ps.pdf implicit target is defined,
# and cvs.ps is made before cvs.pdf, then cvs.pdf can be generated from the
# .ps.pdf target and the PS source, which contains less information (hyperlinks
# and such) than the usual texinfo source.
#
# It is possible that an implicit .ms.ps target could be safely defined. I
# don't recall looking into it.
cvs-paper.ps: cvs-paper.ms
$(ROFF) -t -p -ms -Tps $< > $@-t
mv $@-t $@
$(ROFF) -t -p -ms -Tps $(srcdir)/cvs-paper.ms >cvs-paper.ps-t
cp cvs-paper.ps-t $@
-@rm -f cvs-paper.ps-t
cvs-paper.pdf: cvs-paper.ps
ps2pdf $< $@
# This rule introduces some redundancy, but `make distcheck' requires that
# Nothing in $(srcdir) be rebuilt, and this will always be rebuilt when it
# is dependant on cvs-paper.ps and cvs-paper.ps isn't distributed.
$(srcdir)/cvs-paper.pdf: cvs-paper.ms
$(ROFF) -t -p -ms -Tps $(srcdir)/cvs-paper.ms >cvs-paper.ps-t
ps2pdf cvs-paper.ps-t cvs-paper.pdf-t
cp cvs-paper.pdf-t $@
-@rm -f cvs-paper.pdf-t cvs-paper.ps-t
# 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 >$@
$(srcdir)/cvs.1: @MAINTAINER_MODE_TRUE@ mkman cvs.man.header cvs.texinfo cvs.man.footer
$(PERL) ./mkman $(srcdir)/cvs.man.header $(srcdir)/cvs.texinfo \
$(srcdir)/cvs.man.footer >cvs.tmp
cp cvs.tmp $(srcdir)/cvs.1
-@rm -f cvs.tmp
.texinfo.txt:
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
--no-headers -o $@ `test -f '$<' || echo '$(srcdir)/'`$<

View File

@ -2,9 +2,9 @@
.\" 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>
.\" Man page autogeneration, including this header file, is
.\" Copyright 2004-2005 The Free Software Foundation, Inc.,
.\" 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
@ -428,7 +428,7 @@ option as in other commands. (Other command options,
which are listed with the individual commands, may have
different behavior from one \fBcvs\fR command to the other).
.SP
\fBNote: the \fBhistory\fB command is an exception; it supports
\fBThe \fBhistory\fB command is an exception; it supports
many options that conflict even with these standard options.\fR
.SP
.IX "Dates"
@ -561,7 +561,7 @@ file, and continues to use it with future update
commands on the same file until you specify otherwise.
.SP
The \fB-k\fR option is available with the \fBadd\fR,
\fBcheckout\fR, \fBdiff\fR, \fBimport\fR and
\fBcheckout\fR, \fBdiff\fR, \fBrdiff\fR, \fBimport\fR and
\fBupdate\fR commands.
.SP
.IP "" 0
@ -594,10 +594,10 @@ Do not run any tag program. (A program can be
specified to run in the modules
database (see node `modules\(aq in the CVS manual); this option bypasses it).
.SP
\fBNote: this is not the same as the \fBcvs -n\fB
\fBThis is not the same as the \fBcvs -n\fB
program option, which you can specify to the left of a cvs command!\fR
.SP
Available with the \fBcheckout\fR, \fBcommit\fR, \fBexport\fR,
Available with the \fBcheckout\fR, \fBexport\fR,
and \fBrtag\fR commands.
.SP
.IP "" 0
@ -644,17 +644,20 @@ on sticky tags/dates, see node `Sticky tags\(aq in the CVS manual).
The tag can be either a symbolic or numeric tag, as
described in see node `Tags\(aq in the CVS manual, or the name of a branch, as
described in see node `Branching and merging\(aq in the CVS manual.
When a command expects a specific revision,
the name of a branch is interpreted as the most recent
revision on that branch.
.SP
Specifying the \fB-q\fR global option along with the
\fB-r\fR command option is often useful, to suppress
the warning messages when the \fBrcs\fR file
does not contain the specified tag.
.SP
\fBNote: this is not the same as the overall \fBcvs -r\fB option,
\fBThis is not the same as the overall \fBcvs -r\fB option,
which you can specify to the left of a \fBcvs\fB command!\fR
.SP
\fB-r\fR is available with the \fBcheckout\fR, \fBcommit\fR,
\fBdiff\fR, \fBhistory\fR, \fBexport\fR, \fBrdiff\fR,
\fB-r\fR is available with the \fBannotate\fR, \fBcheckout\fR,
\fBcommit\fR, \fBdiff\fR, \fBhistory\fR, \fBexport\fR, \fBrdiff\fR,
\fBrtag\fR, and \fBupdate\fR commands.
.SP
.IP "" 0
@ -984,10 +987,10 @@ it is created. The state is visible in the output from
\fIcvs log\fR (see node `log\(aq in the CVS manual), and in the
\fB$\fP\fPLog$\fR and \fB$\fP\fPState$\fR keywords
(see node `Keyword substitution\(aq in the CVS manual). Note that \fBcvs\fR
uses the \fBdead\fR state for its own purposes; to
uses the \fBdead\fR state for its own purposes (see node `Attic\(aq in the CVS manual); to
take a file to or from the \fBdead\fR state use
commands like \fBcvs remove\fR and \fBcvs add\fR, not
\fBcvs admin -s\fR.
commands like \fBcvs remove\fR and \fBcvs add\fR
(see node `Adding and removing\(aq in the CVS manual), not \fBcvs admin -s\fR.
.SP
.IP "" 0
\fB-t[\fIfile\fB]\fR
@ -1283,6 +1286,7 @@ options with \fBcheckout\fR:
\fB-A\fR
.IP "" 2
Reset any sticky tags, dates, or \fB-k\fR options.
Does not reset sticky \fB-k\fR options on modified files.
See see node `Sticky tags\(aq in the CVS manual, for more information on sticky tags/dates.
.SP
.IP "" 0
@ -1393,7 +1397,7 @@ $ cvs checkout -D yesterday tc
.IX "commit (subcommand)"
.SP
.IP "\(bu" 2
Synopsis: commit [-lnRf] [-m \(aqlog_message\(aq |
Synopsis: commit [-lRf] [-m \(aqlog_message\(aq |
-F file] [-r revision] [files\&...]
.IP "\(bu" 2
Requires: working directory, repository.
@ -2562,7 +2566,7 @@ various formats.
Logging must be enabled by creating the file
\fB$CVSROOT/CVSROOT/history\fR.
.SP
\fBNote: \fBhistory\fB uses \fB-f\fB, \fB-l\fB,
\fB\fBhistory\fB uses \fB-f\fB, \fB-l\fB,
\fB-n\fB, and \fB-p\fB in ways that conflict with the
normal use inside \fBcvs\fB (see node `Common options\(aq in the CVS manual).\fR
.SP
@ -2807,8 +2811,10 @@ At least three arguments are required.
\fIrepository\fR is needed to identify the collection
of source. \fIvendortag\fR is a tag for the entire
branch (e.g., for 1.1.1). You must also specify at
least one \fIreleasetag\fR to identify the files at
the leaves created each time you execute \fBimport\fR.
least one \fIreleasetag\fR to uniquely identify the files at
the leaves created each time you execute \fBimport\fR. The
\fIreleasetag\fR should be new, not previously existing in the
repository file, and uniquely identify the imported release,
.SP
Note that \fBimport\fR does \fInot\fR change the
directory in which you invoke it. In particular, it
@ -2939,13 +2945,18 @@ message are printed. All times are displayed in
Coordinated Universal Time (UTC). (Other parts of
\fBcvs\fR print times in the local timezone).
.SP
\fBNote: \fBlog\fB uses \fB-R\fB in a way that conflicts
\fB\fBlog\fB uses \fB-R\fB in a way that conflicts
with the normal use inside \fBcvs\fB (see node `Common options\(aq in the CVS manual).\fR
.SP
.SH "log options"
.SP
By default, \fBlog\fR prints all information that is
available. All other options restrict the output.
available. All other options restrict the output. Note that the revision
selection options (\fB-d\fR, \fB-r\fR, \fB-s\fR, and \fB-w\fR) have no
effect, other than possibly causing a search for files in Attic directories,
when used in conjunction with the options that restrict the output to only
\fBlog\fR header fields (\fB-b\fR, \fB-h\fR, \fB-R\fR, and \fB-t\fR)
unless the \fB-S\fR option is also specified.
.SP
.IP "" 0
\fB-b\fR
@ -3103,7 +3114,10 @@ Suppress the header if no revisions are selected.
.IP "" 2
Print information about revisions whose state
attributes match one of the states given in the
comma-separated list \fIstates\fR.
comma-separated list \fIstates\fR. Individual states may
be any text string, though \fBcvs\fR commonly only uses two
states, \fBExp\fR and \fBdead\fR. See see node `admin options\(aq in the CVS manual
for more information.
.SP
.IP "" 0
\fB-t\fR
@ -3180,6 +3194,12 @@ If no matching revision is found, retrieve the most
recent revision (instead of ignoring the file).
.SP
.IP "" 0
\fB-k \fIkflag\fB\fR
.IP "" 2
Process keywords according to \fIkflag\fR. See
see node `Keyword substitution\(aq in the CVS manual.
.SP
.IP "" 0
\fB-l\fR
.IP "" 2
Local; don\(aqt descend subdirectories.
@ -3484,6 +3504,7 @@ These special options are also available with
\fB-A\fR
.IP "" 2
Reset any sticky tags, dates, or \fB-k\fR options.
Does not reset sticky \fB-k\fR options on modified files.
See see node `Sticky tags\(aq in the CVS manual, for more information on sticky tags/dates.
.SP
.IP "" 0
@ -3572,7 +3593,7 @@ by one character indicating the status of the file:
.IP "" 2
The file was brought up to date with respect to the
repository. This is done for any file that exists in
the repository but not in your source, and for files
the repository but not in your working directory, and for files
that you haven\(aqt changed but are not the most recent
versions available in the repository.
.SP
@ -3690,9 +3711,7 @@ to CVS, development of CVS, and more, see:
.SP
.PD 0
.IP "" 4
.B http://cvshome.org
.IP "" 4
.B http://www.loria.fr/~molli/cvs-index.html
.B http://cvs.nongnu.org
.in -1i
.SP
.BR ci ( 1 ),

View File

@ -42,9 +42,7 @@ to CVS, development of CVS, and more, see:
.SP
.PD 0
.IP "" 4
.B http://cvshome.org
.IP "" 4
.B http://www.loria.fr/~molli/cvs-index.html
.B http://cvs.nongnu.org
.in -1i
.SP
.BR ci ( 1 ),

View File

@ -2,9 +2,9 @@
.\" 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>
.\" Man page autogeneration, including this header file, is
.\" Copyright 2004-2005 The Free Software Foundation, Inc.,
.\" 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

View File

@ -4,13 +4,14 @@
@macro copyleftnotice
@noindent
Copyright @copyright{} 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2001, 2002, 2003, 2004 Free Software Foundation, Inc.
2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
@multitable @columnfractions .12 .88
@item Portions
@item @tab Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004
@item @tab Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005
Derek R. Price,
@item @tab Copyright @copyright{} 2002, 2003, 2004
@item @tab Copyright @copyright{} 2002, 2003, 2004, 2005
Ximbiot @url{http://ximbiot.com},
@item @tab Copyright @copyright{} 1992, 1993, 1999 Signum Support AB,
@item @tab and Copyright @copyright{} others.
@ -127,6 +128,10 @@ approved by the Free Software Foundation.
@copyleftnotice
@end titlepage
@summarycontents
@contents
@comment ================================================================
@comment The real text starts here
@comment ================================================================
@ -232,7 +237,7 @@ versions.
on the same project. It is all too easy to overwrite
each others' changes unless you are extremely careful.
Some editors, like @sc{gnu} Emacs, try to make sure that
the same file is never modified by two people at the
two people never modify the same file at the
same time. Unfortunately, if someone is using another
editor, that safeguard will not work. @sc{cvs} solves this problem
by insulating the different developers from each other. Every
@ -261,21 +266,20 @@ free download from the Internet. For more information
on downloading @sc{cvs} and other @sc{cvs} topics, see:
@example
@url{http://www.cvshome.org/}
@url{http://www.loria.fr/~molli/cvs-index.html}
@url{http://cvs.nongnu.org/}
@end example
@cindex Mailing list
@cindex List, mailing list
@cindex Newsgroups
There is a mailing list, known as @email{info-cvs@@gnu.org},
There is a mailing list, known as @email{info-cvs@@nongnu.org},
devoted to @sc{cvs}. To subscribe or
unsubscribe
write to
@email{info-cvs-request@@gnu.org}.
@email{info-cvs-request@@nongnu.org}.
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
list are usually sent to the news group, but not vice versa) of
@email{info-cvs@@nongnu.org} at @url{news:gnu.cvs.help}. The right
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
@ -290,11 +294,11 @@ if there is sufficient @sc{cvs} traffic on
@c would need to take a more comprehensive look at the
@c whole comp.software.config-mgmt.* hierarchy).
You can also subscribe to the @email{bug-cvs@@gnu.org} mailing list,
You can also subscribe to the @email{bug-cvs@@nongnu.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
send mail to @email{bug-cvs-request@@nongnu.org}. There is a two-way
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}.
vice versa) of @email{bug-cvs@@nongnu.org} named @url{news:gnu.cvs.bug}.
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@node What is CVS not?
@ -1805,7 +1809,15 @@ It is possible to commit an erroneous administrative
file. You can often fix the error and check in a new
revision, but sometimes a particularly bad error in the
administrative file makes it impossible to commit new
revisions.
revisions. If and when this happens, you can correct
the problem by temporarily copying a corrected administrative file
directly into the @code{$CVSROOT/CVSROOT} repository directory,
then committing the same correction via a checkout of the @file{CVSROOT}
module. It is important that the correction also be made via the
checked out copy, or the next checkout and commit to the
<code>CVSROOT</code> module will overwrite the correction that was
copied directly into the repository, possibly breaking things in such
a way as to prevent commits again.
@c @xref{Bad administrative files} for a hint
@c about how to solve such situations.
@c -- administrative file checking--
@ -1866,6 +1878,13 @@ and server1, to update everything else.
@cindex Creating a repository
@cindex Setting up a repository
This section describes how to set up a @sc{cvs} repository for any
sort of access method. After completing the setup described in this
section, you should be able to access your @sc{cvs} repository immediately
via the local access method and several remote access methods. For
more information on setting up remote access to the repository you create
in this section, please read the section on @xref{Remote repositories}.
To set up a @sc{cvs} repository, first choose the
machine and disk on which you want to store the
revision history of the source files. CPU and memory
@ -3178,8 +3197,13 @@ $ cvs import -m "Created directory structure" yoyodyne/@var{dir} yoyo start
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.
Use @code{checkout} to get the new project. Then, use @code{add}
to add files (and new directories) as needed.
@example
$ cd ..
$ cvs co yoyodyne/@var{dir}
@end example
Check that the permissions @sc{cvs} sets on the
directories inside @code{$CVSROOT} are reasonable.
@ -3817,7 +3841,8 @@ The sticky tags will remain on your working files until
you delete them with @samp{cvs update -A}. The
@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
dates, or options (other than sticky @samp{-k} options on locally
modified files). See @ref{update} for more on the operation
of @code{cvs update}.
@cindex Sticky date
@ -4605,6 +4630,13 @@ for this is to release the working directory after the merge has been
committed and check it out again.
@end ignore
As a result of using @samp{-kk} during the merge, each file examined by the
update will have @samp{-kk} set as sticky options. Running @code{update -A}
will clear the sticky options on unmodified files, but it will not clear
the sticky options on modified files. To get back to the default keyword
substitution for modified files, you must commit the results of the merge
and then run @code{update -A}.
@c ---------------------------------------------------------------------
@node Recursive behavior
@chapter Recursive behavior
@ -4971,7 +5003,7 @@ later merge the removals to another branch if you want
@cindex Removing directories
@cindex Directories, removing
In concept removing directories is somewhat similar to
In concept, removing directories is somewhat similar to
removing files---you want the directory to not exist in
your current working directories, but you also want to
be able to retrieve old releases in which the directory
@ -4998,7 +5030,7 @@ removing it.
@c need for -P and so that a file can be a directory in
@c one revision and a regular file in another.
Note that @samp{-P} is implied by the @samp{-r} or @samp{-D}
options of @code{checkout}. This way
options of @code{checkout}. This way,
@sc{cvs} will be able to correctly create the directory
or not depending on whether the particular version you
are checking out contains any files in that directory.
@ -5197,9 +5229,9 @@ like this:
@enumerate
@item
Inform everyone who has a checked out copy of the directory that the
directory will be renamed. They should commit all
their changes, and remove their working copies,
before you take the steps below.
directory will be renamed. They should commit all their changes in all their
copies of the project containing the directory to be removed, and remove
all their working copies of said project, before you take the steps below.
@item
Rename the directory inside the repository.
@ -5938,10 +5970,12 @@ these options, see @ref{Invoking CVS}.
@cindex Merging a file
@cindex Update, introduction
When you want to update or merge a file, use the @code{update}
When you want to update or merge a file, use the @code{cvs update -d}
command. For files that are not up to date this is roughly equivalent
to a @code{checkout} command: the newest revision of the file is
extracted from the repository and put in your working directory.
extracted from the repository and put in your working directory. The
@code{-d} option, not necessary with @code{checkout}, tells @sc{cvs}
that you wish it to create directories added by other developers.
Your modifications to a file are never lost when you
use @code{update}. If no newer revision exists,
@ -6978,8 +7012,10 @@ each working directory copy of a file also has a
substitution mode. The former is set by the @samp{-k}
option to @code{cvs add} and @code{cvs admin}; the
latter is set by the @samp{-k} or @samp{-A} options to @code{cvs
checkout} or @code{cvs update}. @code{cvs diff} also
has a @samp{-k} option. For some examples,
checkout} or @code{cvs update}.
@code{cvs diff} and @code{cvs rdiff} also
have @samp{-k} options.
For some examples,
see @ref{Binary files}, and @ref{Merging and keywords}.
@c The fact that -A is overloaded to mean both reset
@c sticky options and reset sticky tags/dates is
@ -7198,6 +7234,9 @@ $ cd wdiff-0.05
$ cvs import -m "Import of FSF v. 0.05" fsf/wdiff FSF_DIST WDIFF_0_05
@end example
@strong{WARNING: If you use a release tag that already exists in one of the
repository archives, files removed by an import may not be detected.}
For files that have not been modified locally, the newly created
revision becomes the head revision. If you have made local
changes, @code{import} will warn you that you must merge the changes
@ -7409,7 +7448,7 @@ for other files to access source files from a central
location. Many people have come up with some such a
@c two such people are paul@sander.cupertino.ca.us (for
@c a previous employer)
@c and gtornblo@senet.abb.se (spicm and related tools),
@c and gunnar.tornblom@se.abb.com (spicm and related tools),
@c but as far as I know
@c no one has nicely packaged or released such a system (or
@c instructions for constructing one).
@ -7909,7 +7948,7 @@ option as in other commands. (Other command options,
which are listed with the individual commands, may have
different behavior from one @sc{cvs} command to the other).
@strong{Note: the @samp{history} command is an exception; it supports
@strong{The @samp{history} command is an exception; it supports
many options that conflict even with these standard options.}
@table @code
@ -8131,7 +8170,7 @@ file, and continues to use it with future update
commands on the same file until you specify otherwise.
The @samp{-k} option is available with the @code{add},
@code{checkout}, @code{diff}, @code{import} and
@code{checkout}, @code{diff}, @code{rdiff}, @code{import} and
@code{update} commands.
@item -l
@ -8158,10 +8197,10 @@ Do not run any tag program. (A program can be
specified to run in the modules
database (@pxref{modules}); this option bypasses it).
@strong{Note: this is not the same as the @samp{cvs -n}
@strong{This is not the same as the @samp{cvs -n}
program option, which you can specify to the left of a cvs command!}
Available with the @code{checkout}, @code{commit}, @code{export},
Available with the @code{checkout}, @code{export},
and @code{rtag} commands.
@item -P
@ -8224,17 +8263,20 @@ on sticky tags/dates, @pxref{Sticky tags}).
The tag can be either a symbolic or numeric tag, as
described in @ref{Tags}, or the name of a branch, as
described in @ref{Branching and merging}.
When a command expects a specific revision,
the name of a branch is interpreted as the most recent
revision on that branch.
Specifying the @samp{-q} global option along with the
@samp{-r} command option is often useful, to suppress
the warning messages when the @sc{rcs} file
does not contain the specified tag.
@strong{Note: this is not the same as the overall @samp{cvs -r} option,
@strong{This is not the same as the overall @samp{cvs -r} option,
which you can specify to the left of a @sc{cvs} command!}
@samp{-r} is available with the @code{checkout}, @code{commit},
@code{diff}, @code{history}, @code{export}, @code{rdiff},
@samp{-r} is available with the @code{annotate}, @code{checkout},
@code{commit}, @code{diff}, @code{history}, @code{export}, @code{rdiff},
@code{rtag}, and @code{update} commands.
@item -W
@ -8539,10 +8581,10 @@ 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
(@pxref{Keyword substitution}). Note that @sc{cvs}
uses the @code{dead} state for its own purposes; to
uses the @code{dead} state for its own purposes (@pxref{Attic}); to
take a file to or from the @code{dead} state use
commands like @code{cvs remove} and @code{cvs add}, not
@code{cvs admin -s}.
commands like @code{cvs remove} and @code{cvs add}
(@pxref{Adding and removing}), not @code{cvs admin -s}.
@item -t[@var{file}]
Useful with @sc{cvs}. Write descriptive text from the
@ -8835,6 +8877,7 @@ options with @code{checkout}:
@table @code
@item -A
Reset any sticky tags, dates, or @samp{-k} options.
Does not reset sticky @samp{-k} options on modified files.
See @ref{Sticky tags}, for more information on sticky tags/dates.
@item -c
@ -8932,7 +8975,7 @@ $ cvs checkout -D yesterday tc
@itemize @bullet
@item
Synopsis: commit [-lnRf] [-m 'log_message' |
Synopsis: commit [-lRf] [-m 'log_message' |
-F file] [-r revision] [files@dots{}]
@item
Requires: working directory, repository.
@ -9872,7 +9915,7 @@ various formats.
Logging must be enabled by creating the file
@file{$CVSROOT/CVSROOT/history}.
@strong{Note: @code{history} uses @samp{-f}, @samp{-l},
@strong{@code{history} uses @samp{-f}, @samp{-l},
@samp{-n}, and @samp{-p} in ways that conflict with the
normal use inside @sc{cvs} (@pxref{Common options}).}
@ -10091,8 +10134,10 @@ At least three arguments are required.
@var{repository} is needed to identify the collection
of source. @var{vendortag} is a tag for the entire
branch (e.g., for 1.1.1). You must also specify at
least one @var{releasetag} to identify the files at
the leaves created each time you execute @code{import}.
least one @var{releasetag} to uniquely identify the files at
the leaves created each time you execute @code{import}. The
@var{releasetag} should be new, not previously existing in the
repository file, and uniquely identify the imported release,
@c I'm not completely sure this belongs here. But
@c we need to say it _somewhere_ reasonably obvious; it
@ -10247,7 +10292,7 @@ Coordinated Universal Time (UTC). (Other parts of
@c client then communicates to the server, is the
@c right solution.
@strong{Note: @code{log} uses @samp{-R} in a way that conflicts
@strong{@code{log} uses @samp{-R} in a way that conflicts
with the normal use inside @sc{cvs} (@pxref{Common options}).}
@menu
@ -10260,7 +10305,12 @@ with the normal use inside @sc{cvs} (@pxref{Common options}).}
@appendixsubsec log options
By default, @code{log} prints all information that is
available. All other options restrict the output.
available. All other options restrict the output. Note that the revision
selection options (@code{-d}, @code{-r}, @code{-s}, and @code{-w}) have no
effect, other than possibly causing a search for files in Attic directories,
when used in conjunction with the options that restrict the output to only
@code{log} header fields (@code{-b}, @code{-h}, @code{-R}, and @code{-t})
unless the @code{-S} option is also specified.
@table @code
@item -b
@ -10391,7 +10441,10 @@ Suppress the header if no revisions are selected.
@item -s @var{states}
Print information about revisions whose state
attributes match one of the states given in the
comma-separated list @var{states}.
comma-separated list @var{states}. Individual states may
be any text string, though @sc{cvs} commonly only uses two
states, @samp{Exp} and @samp{dead}. See @ref{admin options}
for more information.
@item -t
Print the same as @samp{-h}, plus the descriptive text.
@ -10473,6 +10526,10 @@ Use the most recent revision no later than @var{date}.
If no matching revision is found, retrieve the most
recent revision (instead of ignoring the file).
@item -k @var{kflag}
Process keywords according to @var{kflag}. See
@ref{Keyword substitution}.
@item -l
Local; don't descend subdirectories.
@ -10746,6 +10803,7 @@ These special options are also available with
@table @code
@item -A
Reset any sticky tags, dates, or @samp{-k} options.
Does not reset sticky @samp{-k} options on modified files.
See @ref{Sticky tags}, for more information on sticky tags/dates.
@item -C
@ -10826,7 +10884,7 @@ by one character indicating the status of the file:
@item U @var{file}
The file was brought up to date with respect to the
repository. This is done for any file that exists in
the repository but not in your source, and for files
the repository but not in your working directory, and for files
that you haven't changed but are not the most recent
versions available in the repository.
@ -11074,7 +11132,8 @@ Delete revisions from the repository. See
Run quietly; do not print diagnostics.
@item -s@var{state}[:@var{rev}]
Set the state.
Set the state. See @ref{admin options} for more information on possible
states.
@c Does not work for client/server CVS
@item -t
@ -11853,6 +11912,8 @@ file, which defines the modules inside the repository.
@menu
* modules:: Defining modules
* Wrappers:: Specify binary-ness based on file name
* Trigger Scripts:: Some notes on the commit support files and
taginfo, referenced below.
* commit files:: The commit support files (commitinfo,
verifymsg, editinfo, loginfo)
* taginfo:: Verifying/Logging tags
@ -12349,59 +12410,26 @@ cvs import -I ! -W "*.exe -k 'b'" first-dir vendortag reltag
@c One catch--"cvs diff" will not invoke the wrappers
@c (probably a CVS bug, although I haven't thought it out).
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@node commit files
@appendixsec The commit support files
@cindex Committing, administrative support files
@c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
@node Trigger Scripts
@appendixsec The Trigger Scripts
@cindex Info files
@cindex Trigger scripts
The @samp{-i} flag in the @file{modules} file can be
used to run a certain program whenever files are
committed (@pxref{modules}). The files described in
this section provide other, more flexible, ways to run
programs whenever something is committed.
Several of the administrative files support triggers, or the launching external
scripts or programs at specific times before or after particular events. The
individual files are discussed in the later sections, @ref{commit files} and
@ref{taginfo}, but some of the common elements are discussed here.
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
programs.
@table @file
@item commitinfo
The program is responsible for checking that the commit
is allowed. If it exits with a non-zero exit status
the commit will be aborted.
@item verifymsg
The specified program is used to evaluate the log message,
and possibly verify that it contains all required
fields. This is most useful in combination with the
@file{rcsinfo} file, which can hold a log message
template (@pxref{rcsinfo}).
@item editinfo
The specified program is used to edit the log message,
and possibly verify that it contains all required
fields. This is most useful in combination with the
@file{rcsinfo} file, which can hold a log message
template (@pxref{rcsinfo}). (obsolete)
@item loginfo
The specified program is called when the commit is
complete. It receives the log message and some
additional information and can store the log message in
a file, or mail it to appropriate persons, or maybe
post it to a local newsgroup, or@dots{} Your
imagination is the limit!
@end table
All the trigger scripts are launched in a copy of the user sandbox being
committed, on the server, in client-server mode. In local mode, the scripts
are actually launched directly from the user sandbox directory being committed.
For most intents and purposes, the same scripts can be run in both locations
without alteration.
@menu
* syntax:: The common syntax
* commitinfo:: Pre-commit checking
* verifymsg:: How are log messages evaluated?
* editinfo:: Specifying how log messages are created
(obsolete)
* loginfo:: Where should log messages be sent?
* syntax:: The common syntax
* Trigger Script Security:: Trigger script security
@end menu
@c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
@ -12466,6 +12494,78 @@ is used as a file name or command-line as appropriate.
@c unambiguous but there is nothing like an example to
@c confirm people's understanding of this sort of thing).
@c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
@node Trigger Script Security
@appendixsubsec Security and the Trigger Scripts
@cindex Info files, security
@cindex Trigger scripts, security
Security is a huge subject, and implementing a secure system is a non-trivial
task. This section will barely touch on all the issues involved, but it is
well to note that, as with any script you will be allowing an untrusted
user to run on your server, there are measures you can take to help prevent
your trigger scripts from being abused.
For instance, since the CVS trigger scripts all run in a copy of the user's
sandbox on the server, a naively coded Perl trigger script which attempts to
use a Perl module that is not installed on the system can be hijacked by any
user with commit access who is checking in a file with the correct name. Other
scripting languages may be vulnerable to similar hacks.
One way to make a script more secure, at least with Perl, is to use scripts
which invoke the @code{-T}, or "taint-check" switch on their @code{#!} line.
In the most basic terms, this causes Perl to avoid running code that may have
come from an external source. Please run the @code{perldoc perlsec} command
for more on Perl security. Again, other languages may implement other security
verification hooks which look more or less like Perl's "taint-check" mechanism.
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@node commit files
@appendixsec The commit support files
@cindex Committing, administrative support files
There are three kinds of trigger scripts (@pxref{Trigger Scripts}) that can be
run at various times during a 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 programs.
@table @file
@item commitinfo
The program is responsible for checking that the commit
is allowed. If it exits with a non-zero exit status
the commit will be aborted.
@item verifymsg
The specified program is used to evaluate the log message,
and possibly verify that it contains all required
fields. This is most useful in combination with the
@file{rcsinfo} file, which can hold a log message
template (@pxref{rcsinfo}).
@item editinfo
The specified program is used to edit the log message,
and possibly verify that it contains all required
fields. This is most useful in combination with the
@file{rcsinfo} file, which can hold a log message
template (@pxref{rcsinfo}). (obsolete)
@item loginfo
The specified program is called when the commit is
complete. It receives the log message and some
additional information and can store the log message in
a file, or mail it to appropriate persons, or maybe
post it to a local newsgroup, or@dots{} Your
imagination is the limit!
@end table
@menu
* commitinfo:: Pre-commit checking
* verifymsg:: How are log messages evaluated?
* editinfo:: Specifying how log messages are created
(obsolete)
* loginfo:: Where should log messages be sent?
@end menu
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@node commitinfo
@appendixsubsec Commitinfo
@ -12694,7 +12794,7 @@ RereadLogAfterVerify=always
@cindex Per-module editor
@cindex Log messages, editing
@strong{Note: The @file{editinfo} feature has been
@strong{The @file{editinfo} feature has been
rendered obsolete. To set a default editor for log
messages use the @code{CVSEDITOR}, @code{EDITOR} environment variables
(@pxref{Environment variables}) or the @samp{-e} global
@ -13046,9 +13146,9 @@ directory.
The @file{taginfo} file defines programs to execute
when someone executes a @code{tag} or @code{rtag}
command. The @file{taginfo} file has the standard form
for administrative files (@pxref{syntax}),
for trigger scripts (@pxref{Trigger Scripts}),
where each line is a regular expression
followed by a command to execute. The arguments passed
followed by a command to execute (@pxref{syntax}). The arguments passed
to the command are, in order, the @var{tagname},
@var{operation} (@code{add} for @code{tag},
@code{mov} for @code{tag -F}, and @code{del} for
@ -13490,7 +13590,7 @@ 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}.
@strong{Note: the `stat' mode can cause CVS to pause for up to
@strong{The `stat' mode can cause CVS to pause for up to
one extra second per directory committed. This can be less IO and
CPU intensive but is not recommended for use with large repositories}
@ -14092,6 +14192,19 @@ logged in as "root". (You can disable this option by passing the
On some systems this means editing the appropriate @file{config.h} file
before building @sc{cvs}.)
@item Terminated with fatal signal 11
This message usually indicates that @sc{cvs} (the server, if you're
using client/server mode) has run out of (virtual) memory.
Although @sc{cvs} tries to catch the error and issue a more meaningful
message, there are many circumstances where that is not possible.
If you appear to have lots of memory available to the system,
the problem is most likely that you're running into a system-wide
limit on the amount of memory a single process can use or a
similar process-specific limit.
The mechanisms for displaying and setting such limits vary from
system to system, so you'll have to consult an expert for your
particular system if you don't know how to do that.
@item Too many arguments!
This message is typically printed by the @file{log.pl}
script which is in the @file{contrib} directory in the
@ -14182,9 +14295,21 @@ vi $*
exit 0
@end example
@c "warning: foo was lost" and "no longer pertinent" (both normal).
@c Would be nice to write these up--they are
@c potentially confusing for the new user.
@item cvs update: warning: @var{file} was lost
This means that the working copy of @var{file} has been deleted
but it has not been removed from @sc{cvs}.
This is nothing to be concerned about,
the update will just recreate the local file from the repository.
(This is a convenient way to discard local changes to a file:
just delete it and then run @code{cvs update}.)
@item cvs update: warning: @var{file} is not (any longer) pertinent
This means that the working copy of @var{file} has been deleted,
it has not been removed from @sc{cvs} in the current working directory,
but it has been removed from @sc{cvs} in some other working directory.
This is nothing to be concerned about,
the update would have removed the local file anyway.
@end table
@node Connection
@ -14449,12 +14574,11 @@ distribution. It contains much more information on the
process of submitting fixes.
@item
There may be resources on the net which can help. Two
good places to start are:
There may be resources on the net which can help. A
good place to start is:
@example
@url{http://www.cvshome.org}
@url{http://www.loria.fr/~molli/cvs-index.html}
@url{http://cvs.nongnu.org/}
@end example
If you are so inspired, increasing the information
@ -14467,7 +14591,7 @@ page on mailing lists or newsgroups when the subject
came up.
@item
It is also possible to report bugs to @email{bug-cvs@@gnu.org}.
It is also possible to report bugs to @email{bug-cvs@@nongnu.org}.
Note that someone may or may not want to do anything
with your bug report---if you need a solution consider
one of the options mentioned above. People probably do
@ -14476,20 +14600,20 @@ in consequences and/or easy to fix, however. You can
also increase your odds by being as clear as possible
about the exact nature of the bug and any other
relevant information. The way to report bugs is to
send email to @email{bug-cvs@@gnu.org}. Note
that submissions to @email{bug-cvs@@gnu.org} may be distributed
send email to @email{bug-cvs@@nongnu.org}. Note
that submissions to @email{bug-cvs@@nongnu.org} may be distributed
under the terms of the @sc{gnu} Public License, so if
you don't like this, don't submit them. There is
usually no justification for sending mail directly to
one of the @sc{cvs} maintainers rather than to
@email{bug-cvs@@gnu.org}; those maintainers who want to hear
about such bug reports read @email{bug-cvs@@gnu.org}. Also note
@email{bug-cvs@@nongnu.org}; those maintainers who want to hear
about such bug reports read @email{bug-cvs@@nongnu.org}. Also note
that sending a bug report to other mailing lists or
newsgroups is @emph{not} a substitute for sending it to
@email{bug-cvs@@gnu.org}. It is fine to discuss @sc{cvs} bugs on
@email{bug-cvs@@nongnu.org}. It is fine to discuss @sc{cvs} bugs on
whatever forum you prefer, but there are not
necessarily any maintainers reading bug reports sent
anywhere except @email{bug-cvs@@gnu.org}.
anywhere except @email{bug-cvs@@nongnu.org}.
@end itemize
@cindex Known bugs in this manual or CVS
@ -14507,10 +14631,6 @@ comprehensive, detailed list of known bugs.
@printindex cp
@summarycontents
@contents
@bye
Local Variables:

View File

@ -82,7 +82,7 @@ It does not depend on NFS, rdist, etc.
@item
Providing a reliable transport is outside this protocol. The protocol
expects a reliable transport that is transparent (that is, there is no
translation of characters, including characters such as such as
translation of characters, including characters such as
linefeeds or carriage returns), and can transmit all 256 octets (for
example for proper handling of binary files, compression, and
encryption). The encoding of characters specified by the protocol (the
@ -535,12 +535,13 @@ Here are the requests:
@table @code
@item Root @var{pathname} \n
Response expected: no. Tell the server which @code{CVSROOT} to use.
Note that @var{pathname} is a local directory and @emph{not} a fully
qualified @code{CVSROOT} variable. @var{pathname} must
already exist; if creating a new root, use the @code{init} request, not
@code{Root}. @var{pathname} does not include the hostname of the
server, how to access the server, etc.; by the time the CVS protocol is
in use, connection, authentication, etc., are already taken care of.
Note that @var{pathname} is @emph{not} a fully qualified @code{CVSROOT}
variable, but only the local directory part of it. @var{pathname} must
already exist on the server; if creating a new root, use the @code{init}
request, not @code{Root}. Again, @var{pathname} @emph{does not} include
the hostname of the server, how to access the server, etc.; by the time
the CVS protocol is in use, connection, authentication, etc., are
already taken care of.
The @code{Root} request must be sent only once, and it must be sent
before any requests other than @code{Valid-responses},
@ -871,6 +872,15 @@ in this document, servers must support this request (although it need
not do anything) and clients must issue it.
The @code{Root} request need not have been previously sent.
@item Empty-conflicts \n
Response expected: yes. This request is an alias for @code{noop}. Its
presence in the list of @code{valid-requests} is intended to be used as a
placeholder to alert the client that the server does not require the contents
of files with conflicts that have not been modified since the merge, for
operations other than diff. It was a bug in pre 1.11.22 & pre 1.12.14 servers
that the contents of files with conflicts was required for the server to
acknowledge the existence of the conflicts.
@item Notify @var{filename} \n
Response expected: no.
Tell the server that an @code{edit} or @code{unedit} command has taken
@ -2014,7 +2024,7 @@ working directory, and the meaning of sending @code{Entries} without
A number of enhancements are possible. Also see the file @sc{todo} in
the @sc{cvs} source distribution, which has further ideas concerning
various aspects of @sc{cvs}, some of which impact the protocol.
Similarly, the @code{http://www.cvshome.org} site, in particular the
Similarly, the @code{http://cvs.nongnu.org} site, in particular the
@cite{Development} pages.
@itemize @bullet

369
contrib/cvs/doc/mkman.pl Normal file
View File

@ -0,0 +1,369 @@
#! @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.
my $nk; # Ditto.
my $ret; # The RE match Type, used in debug prints.
my $debug = 0; # Debug mode?
###
### FUNCTIONS
###
sub debug_print
{
print @_ if $debug;
}
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/;
# Ignore includes.
next if /^\@include\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
$nk = qr/
\@(\w+)\{
(?{ debug_print "$ret MATCHED $&\nPUSHING $1\n";
push @parent, $1; }) # Keep track of the last keyword
# keyword we encountered.
((?>
[^{}]|(?<=\@)[{}] # Non-braces...
| # ...or...
(??{ $nk }) # ...nested keywords...
)*) # ...without backtracking.
\}
(?{ debug_print "$ret MATCHED $&\nPOPPING ",
pop (@parent), "\n"; }) # Lose track of the current keyword.
/x;
$ret = "m//";
if (/\@\w+\{(?:[^{}]|(?<=\@)[{}]|(??{ $nk }))*$/)
{
# If there is an opening keyword on this line without a
# close bracket, we need to find the close bracket
# before processing the line. Set $last to append the
# next line in the next pass.
$last = $_;
next;
}
# Okay, the following works somewhat counter-intuitively. $nk
# processes the whole line, so @parent gets loaded properly,
# then, since no closing brackets have been found for the
# outermost matches, the innermost matches match and get
# replaced first.
#
# For example:
#
# Processing the line:
#
# yadda yadda @code{yadda @var{foo} yadda @var{bar} yadda}
#
# Happens something like this:
#
# 1. Ignores "yadda yadda "
# 2. Sees "@code{" and pushes "code" onto @parent.
# 3. Ignores "yadda " (backtracks and ignores "yadda yadda
# @code{yadda "?)
# 4. Sees "@var{" and pushes "var" onto @parent.
# 5. Sees "foo}", pops "var", and realizes that "@var{foo}"
# matches the overall pattern ($nk).
# 6. Replaces "@var{foo}" with the result of:
#
# do_keyword $file, $parent[$#parent], $1, $2;
#
# which would be "\Ifoo\B", in this case, because "var"
# signals a request for italics, or "\I", and "code" is
# still on the stack, which means the previous style was
# bold, or "\B".
#
# Then the while loop restarts and a similar series of events
# replaces "@var{bar}" with "\Ibar\B".
#
# Then the while loop restarts and a similar series of events
# replaces "@code{yadda \Ifoo\B yadda \Ibar\B yadda}" with
# "\Byadda \Ifoo\B yadda \Ibar\B yadda\R".
#
$ret = "s///";
@parent = ("");
while (s/$nk/do_keyword $file, $parent[$#parent], $1, $2/e)
{
# Do nothing except reset our last-replacement
# tracker - the replacement regex above is handling
# everything else.
debug_print "FINAL MATCH $&\n";
@parent = ("");
}
# 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 $_;
}
}

View File

@ -1,4 +1,4 @@
@set UPDATED 3 February 2004
@set UPDATED-MONTH February 2004
@set EDITION 1.11.17
@set VERSION 1.11.17
@set UPDATED 8 June 2006
@set UPDATED-MONTH June 2006
@set EDITION 1.11.22
@set VERSION 1.11.22

View File

@ -1,4 +1,4 @@
@set UPDATED 27 May 2004
@set UPDATED-MONTH May 2004
@set EDITION 1.11.17
@set VERSION 1.11.17
@set UPDATED 15 May 2006
@set UPDATED-MONTH May 2006
@set EDITION 1.11.22
@set VERSION 1.11.22

View File

@ -1,4 +1,4 @@
@set UPDATED 3 February 2004
@set UPDATED-MONTH February 2004
@set EDITION 1.11.17
@set VERSION 1.11.17
@set UPDATED 8 June 2006
@set UPDATED-MONTH June 2006
@set EDITION 1.11.22
@set VERSION 1.11.22

View File

@ -1,4 +1,4 @@
@set UPDATED 27 May 2004
@set UPDATED-MONTH May 2004
@set EDITION 1.11.17
@set VERSION 1.11.17
@set UPDATED 15 May 2006
@set UPDATED-MONTH May 2006
@set EDITION 1.11.22
@set VERSION 1.11.22

View File

@ -1,3 +1,57 @@
2005-11-14 Mark D. Baushke <mdb@gnu.org>
* system.h (FOLD_FN_CHAR): Distinguish OSX_ and VMS_ variations
based on USE_VMS_FILENAME macro.
2005-11-09 Mark D. Baushke <mdb@gnu.org>
* system.h (FOLD_FN_CHAR): Create a VMS alternative of this macro
(patch suggested by Piet Schuermans <pschuermans@mac.com>).
2005-07-11 Mark D. Baushke <mdb@cvshome.org>
* getpass.c (getpass): Add a K&R style function definition.
2005-04-15 Derek Price <derek@ximbiot.com>
* Makefile.am (EXTRA_DIST): Add test-getdate.sh.
2005-03-23 Derek Price <derek@ximbiot.com>
* Makefile.am (TESTS, MOSTLYCLEANFILES, check_PROGRAMS, EXTRA_DIST,
getdate_SOURCES, getdate_CPPFLAGS): Add getdate testing cruft.
* test-getdate.sh: New file.
* .cvsignore: Ignore getdate executable.
2005-03-23 Larry Jones <lawrence.jones@ugs.com>
* getdate.c: Remove absolute paths from #line directives.
2005-03-04 Jim Hyslop <jhyslop@ieee.org>
* xtime.h: added include guards to fix compile errors on IRIX 5.3
(Patch from Georg Schwarz <georg.scwarz@freenet.de>.)
2005-02-08 Derek Price <derek@ximbiot.com>
* fncase.c (OSX_filename_classes): Mac OSX doesn't need \ mapped to /.
* system.h (FOLD_FN_CASE): Clarify comment.
2005-01-31 Derek Price <derek@ximbiot.com>
* Makefile.am: Update copyright notices.
2004-10-05 Derek Price <derek@ximbiot.com>
* regex.c: Back out my change from 2004-04-07 as possibly suppressing
useful warnings.
2004-10-05 Mark D. Baushke <mdb@cvshome.org>
* regex.c (re_comp): Cast gettext return value to char * to
avoid warning in !ENABLE_NLS case. Patch imported from GNULIB.
(Problem report from Martin Neitzel <neitzel@sco.gaertner.de>.)
2004-05-28 Derek Price <derek@ximbiot.com>
* xsize.h: New file from GNULIB.

View File

@ -1,8 +1,10 @@
## Process this file with automake to produce Makefile.in
# Makefile for library files used by GNU CVS.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
#
# Copyright (C) 1986-2005 The Free Software Foundation, Inc.
#
# Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
# and others.
# 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
@ -86,7 +88,23 @@ EXTRA_DIST = \
ChangeLog.fsf \
build_lib.com \
libcvs.dep libcvs.dsp libcvs.mak \
xgssapi.h
xgssapi.h \
test-getdate.sh
TESTS =
MOSTLYCLEANFILES =
check_PROGRAMS =
# Test GNULIB getdate module.
TESTS += test-getdate.sh
MOSTLYCLEANFILES += getdate-expected getdate-got getdate.diff
# Program required by test-getdate.sh for testing getdate.y.
check_PROGRAMS += getdate
EXTRA_DIST += $(check_PROGRAMS)
getdate_SOURCES = getdate.y
getdate_CPPFLAGS = -DTEST
##getdate_LDADD = \
## $(noinst_LIBRARIES)
# For the xsize module from GNULIB.
libcvs_a_SOURCES += xsize.h

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.7.9 from Makefile.am.
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -15,9 +15,11 @@
@SET_MAKE@
# Makefile for library files used by GNU CVS.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
#
# Copyright (C) 1986-2005 The Free Software Foundation, Inc.
#
# Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
# and others.
# 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
@ -36,7 +38,6 @@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
@ -50,6 +51,49 @@ POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
check_PROGRAMS = getdate$(EXEEXT)
subdir = lib
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(srcdir)/fnmatch.h.in ChangeLog dup2.c fncase.c fnmatch.c \
fnmatch.h.in ftruncate.c getdate.c gethostname.c memmove.c \
mkdir.c rename.c strerror.c strstr.c strtoul.c valloc.c \
waitpid.c
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = fnmatch.h
LIBRARIES = $(noinst_LIBRARIES)
AR = ar
ARFLAGS = cru
libcvs_a_AR = $(AR) $(ARFLAGS)
libcvs_a_DEPENDENCIES = @LIBOBJS@
am_libcvs_a_OBJECTS = argmatch.$(OBJEXT) getdate.$(OBJEXT) \
getline.$(OBJEXT) getopt.$(OBJEXT) getopt1.$(OBJEXT) \
getpass.$(OBJEXT) md5.$(OBJEXT) regex.$(OBJEXT) \
savecwd.$(OBJEXT) sighandle.$(OBJEXT) stripslash.$(OBJEXT) \
xgetwd.$(OBJEXT) yesno.$(OBJEXT)
libcvs_a_OBJECTS = $(am_libcvs_a_OBJECTS)
am_getdate_OBJECTS = getdate-getdate.$(OBJEXT)
getdate_OBJECTS = $(am_getdate_OBJECTS)
getdate_LDADD = $(LDADD)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
YLWRAP = $(top_srcdir)/ylwrap
SOURCES = $(libcvs_a_SOURCES) $(getdate_SOURCES)
DIST_SOURCES = $(libcvs_a_SOURCES) $(getdate_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
@ -119,6 +163,8 @@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
datadir = @datadir@
@ -132,6 +178,7 @@ libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
@ -139,6 +186,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
with_default_rsh = @with_default_rsh@
# For now we need to include $(top_srcdir)/src because some systems
# (at least 'AIX rioscpu2 3 4 000030498200',
@ -153,7 +201,6 @@ target_alias = @target_alias@
#
# $(includeopt) is CVS specific and set by configure
INCLUDES = -I$(top_srcdir)/src $(includeopt)
noinst_LIBRARIES = libcvs.a
# Always use CVS's regular expression matcher regex.o, because of
@ -168,96 +215,53 @@ noinst_LIBRARIES = libcvs.a
# matching?)
# For the xsize module from GNULIB.
libcvs_a_SOURCES = \
argmatch.c \
getdate.y \
getline.c \
getopt.c \
getopt1.c \
getpass.c \
md5.c \
regex.c \
savecwd.c \
sighandle.c \
stripslash.c \
xgetwd.c \
yesno.c \
getline.h \
getopt.h \
getpagesize.h \
md5.h \
regex.h \
savecwd.h \
system.h \
wait.h \
xselect.h \
xtime.h\
xsize.h
libcvs_a_SOURCES = argmatch.c getdate.y getline.c getopt.c getopt1.c \
getpass.c md5.c regex.c savecwd.c sighandle.c stripslash.c \
xgetwd.c yesno.c getline.h getopt.h getpagesize.h md5.h \
regex.h savecwd.h system.h wait.h xselect.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 test-getdate.sh \
$(check_PROGRAMS)
EXTRA_DIST = \
.cvsignore \
ChangeLog.fsf \
build_lib.com \
libcvs.dep libcvs.dsp libcvs.mak \
xgssapi.h
subdir = lib
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
LIBRARIES = $(noinst_LIBRARIES)
libcvs_a_AR = $(AR) cru
libcvs_a_DEPENDENCIES = @LIBOBJS@
am_libcvs_a_OBJECTS = argmatch.$(OBJEXT) getdate.$(OBJEXT) \
getline.$(OBJEXT) getopt.$(OBJEXT) getopt1.$(OBJEXT) \
getpass.$(OBJEXT) md5.$(OBJEXT) regex.$(OBJEXT) \
savecwd.$(OBJEXT) sighandle.$(OBJEXT) stripslash.$(OBJEXT) \
xgetwd.$(OBJEXT) yesno.$(OBJEXT)
libcvs_a_OBJECTS = $(am_libcvs_a_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/dup2.Po $(DEPDIR)/fncase.Po \
@AMDEP_TRUE@ $(DEPDIR)/fnmatch.Po $(DEPDIR)/fnmatch.h.in \
@AMDEP_TRUE@ $(DEPDIR)/ftruncate.Po $(DEPDIR)/gethostname.Po \
@AMDEP_TRUE@ $(DEPDIR)/memmove.Po $(DEPDIR)/mkdir.Po \
@AMDEP_TRUE@ $(DEPDIR)/rename.Po $(DEPDIR)/strerror.Po \
@AMDEP_TRUE@ $(DEPDIR)/strstr.Po $(DEPDIR)/strtoul.Po \
@AMDEP_TRUE@ $(DEPDIR)/valloc.Po $(DEPDIR)/waitpid.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/argmatch.Po ./$(DEPDIR)/getdate.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/getline.Po ./$(DEPDIR)/getopt.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/getopt1.Po ./$(DEPDIR)/getpass.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/md5.Po ./$(DEPDIR)/regex.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/savecwd.Po ./$(DEPDIR)/sighandle.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/stripslash.Po ./$(DEPDIR)/xgetwd.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/yesno.Po
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
DIST_SOURCES = $(libcvs_a_SOURCES)
DIST_COMMON = $(srcdir)/Makefile.in ChangeLog Makefile.am dup2.c \
fncase.c fnmatch.c fnmatch.h.in ftruncate.c getdate.c \
gethostname.c memmove.c mkdir.c rename.c strerror.c strstr.c \
strtoul.c valloc.c waitpid.c
SOURCES = $(libcvs_a_SOURCES)
# Test GNULIB getdate module.
TESTS = test-getdate.sh
MOSTLYCLEANFILES = getdate-expected getdate-got getdate.diff
getdate_SOURCES = getdate.y
getdate_CPPFLAGS = -DTEST
all: all-am
.SUFFIXES:
.SUFFIXES: .c .o .obj .y
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu lib/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
AR = ar
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
@ -266,8 +270,14 @@ libcvs.a: $(libcvs_a_OBJECTS) $(libcvs_a_DEPENDENCIES)
$(libcvs_a_AR) libcvs.a $(libcvs_a_OBJECTS) $(libcvs_a_LIBADD)
$(RANLIB) libcvs.a
clean-checkPROGRAMS:
-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
getdate$(EXEEXT): $(getdate_OBJECTS) $(getdate_DEPENDENCIES)
@rm -f getdate$(EXEEXT)
$(LINK) $(getdate_LDFLAGS) $(getdate_OBJECTS) $(getdate_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT) core *.core
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@ -287,6 +297,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/valloc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/waitpid.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argmatch.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdate-getdate.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdate.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getline.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@
@ -301,56 +312,37 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yesno.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
@am__fastdepCC_TRUE@ fi
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
@am__fastdepCC_TRUE@ fi
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
getdate-getdate.o: getdate.c
@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdate_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getdate-getdate.o -MD -MP -MF "$(DEPDIR)/getdate-getdate.Tpo" -c -o getdate-getdate.o `test -f 'getdate.c' || echo '$(srcdir)/'`getdate.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getdate-getdate.Tpo" "$(DEPDIR)/getdate-getdate.Po"; else rm -f "$(DEPDIR)/getdate-getdate.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getdate.c' object='getdate-getdate.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdate_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getdate-getdate.o `test -f 'getdate.c' || echo '$(srcdir)/'`getdate.c
getdate-getdate.obj: getdate.c
@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdate_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getdate-getdate.obj -MD -MP -MF "$(DEPDIR)/getdate-getdate.Tpo" -c -o getdate-getdate.obj `if test -f 'getdate.c'; then $(CYGPATH_W) 'getdate.c'; else $(CYGPATH_W) '$(srcdir)/getdate.c'; fi`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getdate-getdate.Tpo" "$(DEPDIR)/getdate-getdate.Po"; else rm -f "$(DEPDIR)/getdate-getdate.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getdate.c' object='getdate-getdate.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(getdate_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getdate-getdate.obj `if test -f 'getdate.c'; then $(CYGPATH_W) 'getdate.c'; else $(CYGPATH_W) '$(srcdir)/getdate.c'; fi`
.y.c:
$(YACCCOMPILE) `test -f '$<' || echo '$(srcdir)/'`$<
if test -f y.tab.h; then \
to=`echo "$*_H" | sed \
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
-e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`; \
sed "/^#/ s/Y_TAB_H/$$to/g" y.tab.h >$*.ht; \
rm -f y.tab.h; \
if cmp -s $*.ht $*.h; then \
rm -f $*.ht ;\
else \
mv $*.ht $*.h; \
fi; \
fi
if test -f y.output; then \
mv y.output $*.output; \
fi
sed '/^#/ s|y\.tab\.c|$@|' y.tab.c >$@t && mv $@t $@
rm -f y.tab.c
$(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
uninstall-info-am:
ETAGS = etags
ETAGSFLAGS =
CTAGS = ctags
CTAGSFLAGS =
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
@ -359,6 +351,7 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
@ -370,10 +363,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
@ -396,10 +390,79 @@ GTAGS:
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
check-TESTS: $(TESTS)
@failed=0; all=0; xfail=0; xpass=0; skip=0; \
srcdir=$(srcdir); export srcdir; \
list='$(TESTS)'; \
if test -n "$$list"; then \
for tst in $$list; do \
if test -f ./$$tst; then dir=./; \
elif test -f $$tst; then dir=; \
else dir="$(srcdir)/"; fi; \
if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
all=`expr $$all + 1`; \
case " $(XFAIL_TESTS) " in \
*" $$tst "*) \
xpass=`expr $$xpass + 1`; \
failed=`expr $$failed + 1`; \
echo "XPASS: $$tst"; \
;; \
*) \
echo "PASS: $$tst"; \
;; \
esac; \
elif test $$? -ne 77; then \
all=`expr $$all + 1`; \
case " $(XFAIL_TESTS) " in \
*" $$tst "*) \
xfail=`expr $$xfail + 1`; \
echo "XFAIL: $$tst"; \
;; \
*) \
failed=`expr $$failed + 1`; \
echo "FAIL: $$tst"; \
;; \
esac; \
else \
skip=`expr $$skip + 1`; \
echo "SKIP: $$tst"; \
fi; \
done; \
if test "$$failed" -eq 0; then \
if test "$$xfail" -eq 0; then \
banner="All $$all tests passed"; \
else \
banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
fi; \
else \
if test "$$xpass" -eq 0; then \
banner="$$failed of $$all tests failed"; \
else \
banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
fi; \
fi; \
dashes="$$banner"; \
skipped=""; \
if test "$$skip" -ne 0; then \
skipped="($$skip tests were not run)"; \
test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
dashes="$$skipped"; \
fi; \
report=""; \
if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
report="Please report to $(PACKAGE_BUGREPORT)"; \
test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
dashes="$$report"; \
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
echo "$$dashes"; \
echo "$$banner"; \
test -z "$$skipped" || echo "$$skipped"; \
test -z "$$report" || echo "$$report"; \
echo "$$dashes"; \
test "$$failed" -eq 0; \
else :; fi
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
@ -413,7 +476,7 @@ distdir: $(DISTFILES)
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
@ -429,9 +492,10 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(LIBRARIES)
installdirs:
install: install-am
install-exec: install-exec-am
@ -448,11 +512,12 @@ install-strip:
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -460,7 +525,8 @@ maintainer-clean-generic:
-rm -f getdate.c
clean: clean-am
clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
clean-am: clean-checkPROGRAMS clean-generic clean-noinstLIBRARIES \
mostlyclean-am
distclean: distclean-am
-rm -rf $(DEPDIR) ./$(DEPDIR)
@ -472,6 +538,8 @@ dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
@ -505,16 +573,16 @@ ps-am:
uninstall-am: uninstall-info-am
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-noinstLIBRARIES ctags distclean distclean-compile \
distclean-generic distclean-local distclean-tags 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-generic mostlyclean mostlyclean-compile \
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
uninstall-am uninstall-info-am
.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
clean-checkPROGRAMS clean-generic clean-noinstLIBRARIES ctags \
distclean distclean-compile distclean-generic distclean-local \
distclean-tags distdir dvi dvi-am html html-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-generic mostlyclean \
mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-info-am
# Until Automake gets its act together

View File

@ -104,7 +104,7 @@ OSX_filename_classes[] =
0x40,0x61,0x62,0x63, 0x64,0x65,0x66,0x67,
0x68,0x69,0x6a,0x6b, 0x6c,0x6d,0x6e,0x6f,
0x70,0x71,0x72,0x73, 0x74,0x75,0x76,0x77,
0x78,0x79,0x7a,0x5b, 0x2f,0x5d,0x5e,0x5f,
0x78,0x79,0x7a,0x5b, 0x5c,0x5d,0x5e,0x5f,
0x60,0x61,0x62,0x63, 0x64,0x65,0x66,0x67,
0x68,0x69,0x6a,0x6b, 0x6c,0x6d,0x6e,0x6f,
0x70,0x71,0x72,0x73, 0x74,0x75,0x76,0x77,

BIN
contrib/cvs/lib/getdate Executable file

Binary file not shown.

View File

@ -37,7 +37,12 @@
#endif
char *
#if __STDC__
getpass (const char *prompt)
#else
getpass (prompt)
const char *prompt;
#endif
{
FILE *in, *out;
struct termios s, t;

View File

@ -4001,7 +4001,7 @@ static boolean alt_match_null_string_p (),
/* Free everything we malloc. */
#ifdef MATCH_MAY_ALLOCATE
#define FREE_VAR(var) if (var) { (void)REGEX_FREE ((void *)var); var = NULL; } else
#define FREE_VAR(var) if (var) { REGEX_FREE (var); var = NULL; } else
#define FREE_VARIABLES() \
do { \
REGEX_FREE_STACK (fail_stack.stack); \
@ -6084,7 +6084,7 @@ re_comp (s)
if (!s)
{
if (!re_comp_buf.buffer)
return gettext ("No previous regular expression");
return (char *) gettext ("No previous regular expression");
return 0;
}

View File

@ -491,18 +491,22 @@ extern unsigned char WNT_filename_classes[];
Windows NT, you can use either / or \. */
# 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, 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
* 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, filenames are case-insensitive.
# else /* !__CYGWIN32__ && !WOE32 */
/* As far as I know, only Macintosh OS X & VMS make it here, but any
* platform defining FILENAMES_CASE_INSENSITIVE which isn't WOE32 or
* piggy-backing the same could, in theory. Since the OS X fold just folds
* A-Z into a-z, I'm just allowing it to be used for any case insensitive
* system which we aren't yet making other specific folds or exceptions for.
* WOE32 needs its own class since \ and C:\ style absolute paths also need
* to be accounted for.
*/
# if defined(USE_VMS_FILENAMES)
# define FOLD_FN_CHAR(c) (VMS_filename_classes[(unsigned char) (c)])
extern unsigned char VMS_filename_classes[];
# else
# define FOLD_FN_CHAR(c) (OSX_filename_classes[(unsigned char) (c)])
extern unsigned char OSX_filename_classes[];
# endif
# endif /* __CYGWIN32__ || WOE32 */
/* The following need to be declared for all case insensitive filesystems.

127
contrib/cvs/lib/test-getdate.sh Executable file
View File

@ -0,0 +1,127 @@
#! /bin/sh
# Test that a getdate executable meets its specification.
#
# Copyright (C) 2004 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. */
# Why are these dates tested?
#
# February 29, 2003
# Is not a leap year - should be invalid.
#
# 2004-12-40
# Make sure get_date does not "roll" date forward to January 9th. Some
# versions have been known to do this.
#
# Dec-5-1972
# This is my birthday. :)
#
# 3/29/1974
# 1996/05/12 13:57:45
# Because.
#
# 12-05-12
# This will be my 40th birthday. Ouch. :)
#
# 05/12/96
# Because.
#
# third tuesday in March, 2078
# Wanted this to work.
#
# 1969-12-32 2:00:00 UTC
# 1970-01-01 2:00:00 UTC
# 1969-12-32 2:00:00 +0400
# 1970-01-01 2:00:00 +0400
# 1969-12-32 2:00:00 -0400
# 1970-01-01 2:00:00 -0400
# Playing near the UNIX Epoch boundry condition to make sure date rolling
# is also disabled there.
#
# 1996-12-12 1 month
# Test a relative date.
#
# Tue Jan 19 03:14:07 2038 +0000
# For machines with 31-bit time_t, any date past this date will be an
# invalid date. So, any test date with a value greater than this
# time is not portable.
#
# Feb. 29, 2096 4 years
# 4 years from this date is _not_ a leap year, so Feb. 29th does not exist.
#
# Feb. 29, 2096 8 years
# 8 years from this date is a leap year, so Feb. 29th does exist,
# but on many hosts with 32-bit time_t types time, this test will
# fail. So, this is not a portable test.
#
TZ=UTC0; export TZ
cat >getdate-expected <<EOF
Enter date, or blank line to exit.
> Bad format - couldn't convert.
> Bad format - couldn't convert.
> Bad format - couldn't convert.
> Fri Mar 29 00:00:00 1974
> Sun May 12 13:57:45 1996
> Sat May 12 00:00:00 2012
> Sun May 12 00:00:00 1996
> Bad format - couldn't convert.
> Bad format - couldn't convert.
> Thu Jan 1 02:00:00 1970
> Bad format - couldn't convert.
> Bad format - couldn't convert.
> Bad format - couldn't convert.
> Thu Jan 1 06:00:00 1970
> Sun Jan 12 00:00:00 1997
>
EOF
./getdate >getdate-got <<EOF
February 29, 2003
2004-12-40
Dec-5-1972
3/29/1974
1996/05/12 13:57:45
12-05-12
05/12/96
third tuesday in March, 2078
1969-12-32 2:00:00 UTC
1970-01-01 2:00:00 UTC
1969-12-32 2:00:00 +0400
1970-01-01 2:00:00 +0400
1969-12-32 2:00:00 -0400
1970-01-01 2:00:00 -0400
1996-12-12 1 month
EOF
echo >>getdate-got
if cmp getdate-expected getdate-got >getdate.cmp; then :; else
LOGFILE=`pwd`/getdate.log
cat getdate.cmp >${LOGFILE}
echo "** expected: " >>${LOGFILE}
cat getdate-expected >>${LOGFILE}
echo "** got: " >>${LOGFILE}
cat getdate-got >>${LOGFILE}
echo "FAIL: getdate" | tee -a ${LOGFILE}
echo "Failed! See ${LOGFILE} for more!" >&2
exit 1
fi
rm getdate-expected getdate-got getdate.cmp
exit 0

View File

@ -11,6 +11,8 @@
/* This file simply performs the include magic necessary for using time
* functions
*/
#ifndef XTIME_HEADER_INCLUDED
#define XTIME_HEADER_INCLUDED
#ifdef vms
# include <time.h>
@ -55,3 +57,5 @@ extern long timezone;
# endif /* !defined(HAVE_FTIME) && !defined(HAVE_TIMEZONE) */
#endif /* !vms */
#endif /* !XTIME_HEADER_INCLUDED */

View File

@ -1,3 +1,7 @@
2005-01-31 Derek Price <derek@ximbiot.com>
* Makefile.am: Update copyright notices.
2004-04-30 Derek Price <derek@ximbiot.com>
First pass at closing issue #3 from cvshome.org.

View File

@ -1,8 +1,10 @@
## Process this file with automake to produce Makefile.in
# Makefile.am for GNU CVS man pages.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
#
# Copyright (C) 1986-2005 The Free Software Foundation, Inc.
#
# Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
# and others.
# 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

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.7.9 from Makefile.am.
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -15,9 +15,11 @@
@SET_MAKE@
# Makefile.am for GNU CVS man pages.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
#
# Copyright (C) 1986-2005 The Free Software Foundation, Inc.
#
# Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
# and others.
# 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
@ -28,7 +30,6 @@
# 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.
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
@ -36,7 +37,6 @@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
@ -50,6 +50,24 @@ POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = man
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
man5dir = $(mandir)/man5
am__installdirs = "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"
man8dir = $(mandir)/man8
NROFF = nroff
MANS = $(man_MANS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
@ -119,6 +137,8 @@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
datadir = @datadir@
@ -132,6 +152,7 @@ libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
@ -139,36 +160,48 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
with_default_rsh = @with_default_rsh@
man_MANS = cvs.5 cvsbug.8
EXTRA_DIST = \
.cvsignore \
$(man_MANS)
subdir = man
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
DIST_SOURCES =
NROFF = nroff
MANS = $(man_MANS)
DIST_COMMON = $(srcdir)/Makefile.in ChangeLog Makefile.am
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu man/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
uninstall-info-am:
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
man5dir = $(mandir)/man5
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
uninstall-info-am:
install-man5: $(man5_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(man5dir)
test -z "$(man5dir)" || $(mkdir_p) "$(DESTDIR)$(man5dir)"
@list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
@ -187,8 +220,8 @@ install-man5: $(man5_MANS) $(man_MANS)
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)$(man5dir)/$$inst"; \
$(INSTALL_DATA) $$file $(DESTDIR)$(man5dir)/$$inst; \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
done
uninstall-man5:
@$(NORMAL_UNINSTALL)
@ -208,14 +241,12 @@ uninstall-man5:
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)$(man5dir)/$$inst"; \
rm -f $(DESTDIR)$(man5dir)/$$inst; \
echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
done
man8dir = $(mandir)/man8
install-man8: $(man8_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(man8dir)
test -z "$(man8dir)" || $(mkdir_p) "$(DESTDIR)$(man8dir)"
@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
@ -234,8 +265,8 @@ install-man8: $(man8_MANS) $(man_MANS)
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)$(man8dir)/$$inst"; \
$(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
done
uninstall-man8:
@$(NORMAL_UNINSTALL)
@ -255,8 +286,8 @@ uninstall-man8:
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)$(man8dir)/$$inst"; \
rm -f $(DESTDIR)$(man8dir)/$$inst; \
echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
done
tags: TAGS
TAGS:
@ -264,10 +295,6 @@ TAGS:
ctags: CTAGS
CTAGS:
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
@ -281,7 +308,7 @@ distdir: $(DISTFILES)
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
@ -299,9 +326,10 @@ distdir: $(DISTFILES)
check-am: all-am
check: check-am
all-am: Makefile $(MANS)
installdirs:
$(mkinstalldirs) $(DESTDIR)$(man5dir) $(DESTDIR)$(man8dir)
for dir in "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
@ -321,7 +349,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -338,6 +366,8 @@ dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
@ -373,8 +403,8 @@ uninstall-am: uninstall-info-am uninstall-man
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 \
distclean-generic distdir dvi dvi-am html html-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-man5 install-man8 install-strip installcheck \
installcheck-am installdirs maintainer-clean \

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,10 @@
## Process this file with automake to produce Makefile.in
# Makefile for GNU CVS program.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
#
# Copyright (C) 1986-2005 The Free Software Foundation, Inc.
#
# Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
# and others.
# 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

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.7.9 from Makefile.am.
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -15,9 +15,11 @@
@SET_MAKE@
# Makefile for GNU CVS program.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
#
# Copyright (C) 1986-2005 The Free Software Foundation, Inc.
#
# Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
# and others.
# 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
@ -29,6 +31,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
@ -36,7 +39,6 @@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
@ -50,6 +52,55 @@ POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
bin_PROGRAMS = cvs$(EXEEXT)
subdir = src
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(srcdir)/cvsbug.in ChangeLog
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = cvsbug
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(bin_PROGRAMS)
am_cvs_OBJECTS = add.$(OBJEXT) admin.$(OBJEXT) annotate.$(OBJEXT) \
buffer.$(OBJEXT) checkin.$(OBJEXT) checkout.$(OBJEXT) \
classify.$(OBJEXT) client.$(OBJEXT) commit.$(OBJEXT) \
create_adm.$(OBJEXT) cvsrc.$(OBJEXT) diff.$(OBJEXT) \
edit.$(OBJEXT) entries.$(OBJEXT) error.$(OBJEXT) \
expand_path.$(OBJEXT) fileattr.$(OBJEXT) filesubr.$(OBJEXT) \
find_names.$(OBJEXT) hardlink.$(OBJEXT) hash.$(OBJEXT) \
history.$(OBJEXT) ignore.$(OBJEXT) import.$(OBJEXT) \
lock.$(OBJEXT) log.$(OBJEXT) login.$(OBJEXT) logmsg.$(OBJEXT) \
main.$(OBJEXT) mkmodules.$(OBJEXT) modules.$(OBJEXT) \
myndbm.$(OBJEXT) no_diff.$(OBJEXT) parseinfo.$(OBJEXT) \
patch.$(OBJEXT) rcs.$(OBJEXT) rcscmds.$(OBJEXT) \
recurse.$(OBJEXT) release.$(OBJEXT) remove.$(OBJEXT) \
repos.$(OBJEXT) root.$(OBJEXT) run.$(OBJEXT) \
scramble.$(OBJEXT) server.$(OBJEXT) stack.$(OBJEXT) \
status.$(OBJEXT) subr.$(OBJEXT) tag.$(OBJEXT) update.$(OBJEXT) \
version.$(OBJEXT) vers_ts.$(OBJEXT) watch.$(OBJEXT) \
wrapper.$(OBJEXT) zlib.$(OBJEXT)
cvs_OBJECTS = $(am_cvs_OBJECTS)
cvs_DEPENDENCIES = ../diff/libdiff.a ../lib/libcvs.a ../zlib/libz.a
binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
SCRIPTS = $(bin_SCRIPTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(cvs_SOURCES)
DIST_SOURCES = $(cvs_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
@ -105,7 +156,6 @@ RANLIB = @RANLIB@
ROFF = @ROFF@
SENDMAIL = @SENDMAIL@
SET_MAKE = @SET_MAKE@
SHELL = /bin/sh
STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
@ -120,6 +170,8 @@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
datadir = @datadir@
@ -133,6 +185,7 @@ libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
@ -140,6 +193,7 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
with_default_rsh = @with_default_rsh@
# $(includeopt) is CVS specific and set by configure
# FIXME - This includes line is dependant on its order. This means there is
@ -147,8 +201,6 @@ target_alias = @target_alias@
# try and remove naming ocnflicts and fix Automake to allow particular includes
# to be attached only to particular object files. Short term fix is either or.
INCLUDES = -I$(top_srcdir)/lib -I$(top_srcdir)/diff -I$(top_srcdir)/zlib $(includeopt)
bin_PROGRAMS = cvs
bin_SCRIPTS = cvsbug
# The cvs executable
@ -224,7 +276,6 @@ cvs_SOURCES = \
update.h \
watch.h
cvs_LDADD = \
../diff/libdiff.a \
../lib/libcvs.a \
@ -245,99 +296,51 @@ EXTRA_DIST = \
build_src.com \
sanity.sh
subdir = src
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = cvsbug
bin_PROGRAMS = cvs$(EXEEXT)
PROGRAMS = $(bin_PROGRAMS)
am_cvs_OBJECTS = add.$(OBJEXT) admin.$(OBJEXT) annotate.$(OBJEXT) \
buffer.$(OBJEXT) checkin.$(OBJEXT) checkout.$(OBJEXT) \
classify.$(OBJEXT) client.$(OBJEXT) commit.$(OBJEXT) \
create_adm.$(OBJEXT) cvsrc.$(OBJEXT) diff.$(OBJEXT) \
edit.$(OBJEXT) entries.$(OBJEXT) error.$(OBJEXT) \
expand_path.$(OBJEXT) fileattr.$(OBJEXT) filesubr.$(OBJEXT) \
find_names.$(OBJEXT) hardlink.$(OBJEXT) hash.$(OBJEXT) \
history.$(OBJEXT) ignore.$(OBJEXT) import.$(OBJEXT) \
lock.$(OBJEXT) log.$(OBJEXT) login.$(OBJEXT) logmsg.$(OBJEXT) \
main.$(OBJEXT) mkmodules.$(OBJEXT) modules.$(OBJEXT) \
myndbm.$(OBJEXT) no_diff.$(OBJEXT) parseinfo.$(OBJEXT) \
patch.$(OBJEXT) rcs.$(OBJEXT) rcscmds.$(OBJEXT) \
recurse.$(OBJEXT) release.$(OBJEXT) remove.$(OBJEXT) \
repos.$(OBJEXT) root.$(OBJEXT) run.$(OBJEXT) scramble.$(OBJEXT) \
server.$(OBJEXT) stack.$(OBJEXT) status.$(OBJEXT) \
subr.$(OBJEXT) tag.$(OBJEXT) update.$(OBJEXT) version.$(OBJEXT) \
vers_ts.$(OBJEXT) watch.$(OBJEXT) wrapper.$(OBJEXT) \
zlib.$(OBJEXT)
cvs_OBJECTS = $(am_cvs_OBJECTS)
cvs_DEPENDENCIES = ../diff/libdiff.a ../lib/libcvs.a ../zlib/libz.a
cvs_LDFLAGS =
SCRIPTS = $(bin_SCRIPTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/add.Po ./$(DEPDIR)/admin.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/annotate.Po ./$(DEPDIR)/buffer.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/checkin.Po ./$(DEPDIR)/checkout.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/classify.Po ./$(DEPDIR)/client.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/commit.Po ./$(DEPDIR)/create_adm.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/cvsrc.Po ./$(DEPDIR)/diff.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/edit.Po ./$(DEPDIR)/entries.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/error.Po ./$(DEPDIR)/expand_path.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/fileattr.Po ./$(DEPDIR)/filesubr.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/find_names.Po ./$(DEPDIR)/hardlink.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/hash.Po ./$(DEPDIR)/history.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/ignore.Po ./$(DEPDIR)/import.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/lock.Po ./$(DEPDIR)/log.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/login.Po ./$(DEPDIR)/logmsg.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/main.Po ./$(DEPDIR)/mkmodules.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/modules.Po ./$(DEPDIR)/myndbm.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/no_diff.Po ./$(DEPDIR)/parseinfo.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/patch.Po ./$(DEPDIR)/rcs.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/rcscmds.Po ./$(DEPDIR)/recurse.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/release.Po ./$(DEPDIR)/remove.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/repos.Po ./$(DEPDIR)/root.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/run.Po ./$(DEPDIR)/scramble.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/server.Po ./$(DEPDIR)/stack.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/status.Po ./$(DEPDIR)/subr.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/tag.Po ./$(DEPDIR)/update.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/vers_ts.Po ./$(DEPDIR)/version.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/watch.Po ./$(DEPDIR)/wrapper.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/zlib.Po
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
DIST_SOURCES = $(cvs_SOURCES)
DIST_COMMON = $(srcdir)/Makefile.in ChangeLog Makefile.am cvsbug.in
SOURCES = $(cvs_SOURCES)
all: all-am
.SUFFIXES:
.SUFFIXES: .c .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu src/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
cvsbug: $(top_builddir)/config.status cvsbug.in
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
cvsbug: $(top_builddir)/config.status $(srcdir)/cvsbug.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(bindir)
test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
@list='$(bin_PROGRAMS)'; for p in $$list; do \
p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
if test -f $$p \
; then \
f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \
$(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \
echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
$(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
else :; fi; \
done
@ -345,8 +348,8 @@ uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
rm -f $(DESTDIR)$(bindir)/$$f; \
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
rm -f "$(DESTDIR)$(bindir)/$$f"; \
done
clean-binPROGRAMS:
@ -354,16 +357,15 @@ clean-binPROGRAMS:
cvs$(EXEEXT): $(cvs_OBJECTS) $(cvs_DEPENDENCIES)
@rm -f cvs$(EXEEXT)
$(LINK) $(cvs_LDFLAGS) $(cvs_OBJECTS) $(cvs_LDADD) $(LIBS)
binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
install-binSCRIPTS: $(bin_SCRIPTS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(bindir)
test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
@list='$(bin_SCRIPTS)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
if test -f $$d$$p; then \
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
echo " $(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f"; \
$(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f; \
echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
$(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
else :; fi; \
done
@ -371,12 +373,12 @@ uninstall-binSCRIPTS:
@$(NORMAL_UNINSTALL)
@list='$(bin_SCRIPTS)'; for p in $$list; do \
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
rm -f $(DESTDIR)$(bindir)/$$f; \
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
rm -f "$(DESTDIR)$(bindir)/$$f"; \
done
mostlyclean-compile:
-rm -f *.$(OBJEXT) core *.core
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@ -438,36 +440,20 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zlib.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
@am__fastdepCC_TRUE@ fi
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
@am__fastdepCC_TRUE@ fi
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
uninstall-info-am:
ETAGS = etags
ETAGSFLAGS =
CTAGS = ctags
CTAGSFLAGS =
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
@ -476,6 +462,7 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
@ -487,10 +474,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
@ -513,10 +501,6 @@ GTAGS:
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
@ -530,7 +514,7 @@ distdir: $(DISTFILES)
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
@ -549,9 +533,10 @@ check-am: all-am
$(MAKE) $(AM_MAKEFLAGS) check-local
check: check-am
all-am: Makefile $(PROGRAMS) $(SCRIPTS)
installdirs:
$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(bindir)
for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
@ -571,7 +556,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@ -591,6 +576,8 @@ dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
@ -628,14 +615,15 @@ uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
.PHONY: CTAGS GTAGS all all-am check check-am check-local clean \
clean-binPROGRAMS clean-generic ctags distclean \
distclean-compile distclean-generic distclean-tags distdir dvi \
dvi-am info info-am install install-am install-binPROGRAMS \
install-binSCRIPTS 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-generic mostlyclean \
mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-binPROGRAMS \
uninstall-binSCRIPTS uninstall-info-am
dvi-am html html-am info info-am install install-am \
install-binPROGRAMS install-binSCRIPTS 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-generic mostlyclean mostlyclean-compile \
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
uninstall-am uninstall-binPROGRAMS uninstall-binSCRIPTS \
uninstall-info-am
check-local: localcheck remotecheck

View File

@ -1,6 +1,11 @@
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (c) 1992, Brian Berliner and Jeff Polk
* Portions Copyright (c) 1989-1992, Brian Berliner
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS source distribution.
@ -37,8 +42,9 @@ static int build_entry PROTO((const char *repository, const char *user,
static const char *const add_usage[] =
{
"Usage: %s %s [-k rcs-kflag] [-m message] files...\n",
"\t-k\tUse \"rcs-kflag\" to add the file with the specified kflag.\n",
"\t-m\tUse \"message\" for the creation log.\n",
"\t-k rcs-kflag\tUse \"rcs-kflag\" to add the file with the specified\n",
"\t\t\tkflag.\n",
"\t-m message\tUse \"message\" for the creation log.\n",
"(Specify the --help global option for a list of other help options)\n",
NULL
};
@ -75,12 +81,12 @@ add (argc, argv)
switch (c)
{
case 'k':
if (options)
free (options);
if (options) free (options);
options = RCS_check_kflag (optarg);
break;
case 'm':
if (message) free (message);
message = xstrdup (optarg);
break;
case '?':
@ -155,11 +161,17 @@ add (argc, argv)
int j;
if (argc == 0)
{
/* We snipped out all the arguments in the above sanity
check. We can just forget the whole thing (and we
better, because if we fired up the server and passed it
nothing, it would spit back a usage message). */
if (options)
free (options);
if (message)
free (message);
return err;
}
start_server ();
ign_setup ();
@ -469,7 +481,25 @@ same name already exists in the repository.");
char *prev = previous_rev (vers->srcfile,
vers->vn_rcs);
int status;
assert (prev != NULL);
if (prev == NULL)
{
/* There is no previous revision. Either:
*
* * Revision 1.1 was dead, as when a file was
* inititially added on a branch,
*
* or
*
* * All previous revisions have been deleted.
* For instance, via `admin -o'.
*/
if (!really_quiet)
error (0, 0,
"File `%s' has no previous revision to resurrect.",
finfo.fullname);
free (prev);
goto skip_this_file;
}
if (!quiet)
error (0, 0,
"Resurrecting file `%s' from revision %s.",
@ -665,6 +695,8 @@ cannot resurrect %s; RCS file removed by second party", finfo.fullname);
server_checked_in (finfo.file, finfo.update_dir, repository);
#endif
}
skip_this_file:
free (repository);
Entries_Close (entries);
@ -745,11 +777,7 @@ add_directory (finfo)
error (0, errno, "cannot chdir to %s", finfo->fullname);
return 1;
}
#ifdef SERVER_SUPPORT
if (!server_active && isfile (CVSADM))
#else
if (isfile (CVSADM))
#endif
{
error (0, 0, "%s/%s already exists", finfo->fullname, CVSADM);
goto out;
@ -818,7 +846,10 @@ add_directory (finfo)
fileattr_write ();
fileattr_free ();
if (attrs != NULL)
{
free (attrs);
attrs = NULL;
}
/*
* Set up an update list with a single title node for Update_Logfile
@ -838,9 +869,7 @@ add_directory (finfo)
dellist (&ulist);
}
#ifdef SERVER_SUPPORT
if (!server_active)
#endif
Create_Admin (".", finfo->fullname, rcsdir, tag, date, nonbranch, 0, 1);
if (tag)
free (tag);
@ -858,6 +887,8 @@ add_directory (finfo)
free (rcsdir);
free (message);
if (attrs != NULL)
free (attrs);
return 0;
@ -865,6 +896,7 @@ add_directory (finfo)
if (restore_cwd (&cwd, NULL))
error_exit ();
free_cwd (&cwd);
if (message) free (message);
if (rcsdir != NULL)
free (rcsdir);
return 0;

View File

@ -1,6 +1,11 @@
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (c) 1992, Brian Berliner and Jeff Polk
* Portions Copyright (c) 1989-1992, Brian Berliner
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS source distribution.
@ -379,17 +384,13 @@ admin (argc, argv)
/* The use of `cvs admin -k' is unrestricted. However, any other
option is restricted if the group CVS_ADMIN_GROUP exists on the
server. */
if (
# ifdef CLIENT_SUPPORT
/* This is only "secure" on the server, since the user could edit the
* RCS file on a local host, but some people like this kind of
* check anyhow. The alternative would be to check only when
* (server_active) rather than when not on the client.
*/
!current_parsed_root->isremote &&
# endif /* CLIENT_SUPPORT */
!only_k_option
&& (grp = getgrnam(CVS_ADMIN_GROUP)) != NULL)
/* This is only "secure" on the server, since the user could edit the
* RCS file on a local host, but some people like this kind of
* check anyhow. The alternative would be to check only when
* (server_active) rather than when not on the client.
*/
if (!current_parsed_root->isremote && !only_k_option &&
(grp = getgrnam(CVS_ADMIN_GROUP)) != NULL)
{
#ifdef HAVE_GETGROUPS
gid_t *grps;
@ -816,6 +817,13 @@ admin_fileproc (callerdat, finfo)
{
tag = xstrdup (arg + 2);
rev = RCS_head (rcs);
if (!rev)
{
error (0, 0, "No head revision in archive file `%s'.",
rcs->path);
status = 1;
continue;
}
}
else
{

View File

@ -1,6 +1,11 @@
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (c) 1992, Brian Berliner and Jeff Polk
* Portions Copyright (c) 1989-1992, Brian Berliner
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS source distribution.
@ -222,6 +227,7 @@ rannotate_proc (argc, argv, xwhere, mwhere, mfile, shorten, local, mname, msg)
{
error (0, errno, "cannot chdir to %s", repository);
free (repository);
free (where);
return (1);
}
/* End section which is identical to patch_proc. */

View File

@ -1,3 +1,17 @@
/*
* Copyright (C) 1996-2005 The 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.
*/
/* Code for the buffer data structure. */
#include <assert.h>
@ -110,11 +124,13 @@ allocate_buffer_datas ()
/* Allocate buffer_data structures in blocks of 16. */
#define ALLOC_COUNT (16)
alc = ((struct buffer_data *)
xmalloc (ALLOC_COUNT * sizeof (struct buffer_data)));
alc = xmalloc (ALLOC_COUNT * sizeof (struct buffer_data));
space = (char *) valloc (ALLOC_COUNT * BUFFER_DATA_SIZE);
if (alc == NULL || space == NULL)
if (!space)
{
free (alc);
return;
}
for (i = 0; i < ALLOC_COUNT; i++, alc++, space += BUFFER_DATA_SIZE)
{
alc->next = free_buffer_data;
@ -1406,10 +1422,16 @@ stdio_buffer_shutdown (buf)
{
struct stdio_buffer_closure *bc = buf->closure;
struct stat s;
int closefp = 1;
int closefp, statted;
/* Must be a pipe or a socket. What could go wrong? */
assert (fstat (fileno (bc->fp), &s) != -1);
/* Must be a pipe or a socket. What could go wrong?
* Well, apparently for disconnected clients under AIX, the
* fstat() will return -1 on the server if the client has gone
* away.
*/
if (fstat(fileno(bc->fp), &s) == -1) statted = 0;
else statted = 1;
closefp = statted;
/* Flush the buffer if we can */
if (buf->flush)
@ -1432,7 +1454,7 @@ stdio_buffer_shutdown (buf)
# ifndef NO_SOCKET_TO_FD
{
/* shutdown() sockets */
if (S_ISSOCK (s.st_mode))
if (statted && S_ISSOCK (s.st_mode))
shutdown (fileno (bc->fp), 0);
}
# endif /* NO_SOCKET_TO_FD */
@ -1440,7 +1462,7 @@ stdio_buffer_shutdown (buf)
/* Can't be set with SHUTDOWN_SERVER defined */
else if (pclose (bc->fp) == EOF)
{
error (1, errno, "closing connection to %s",
error (0, errno, "closing connection to %s",
current_parsed_root->hostname);
closefp = 0;
}
@ -1460,7 +1482,7 @@ stdio_buffer_shutdown (buf)
# endif
# ifndef NO_SOCKET_TO_FD
/* shutdown() sockets */
if (S_ISSOCK (s.st_mode))
if (statted && S_ISSOCK (s.st_mode))
shutdown (fileno (bc->fp), 1);
# else
{
@ -1473,19 +1495,19 @@ stdio_buffer_shutdown (buf)
buf->output = NULL;
}
if (closefp && fclose (bc->fp) == EOF)
if (statted && closefp && fclose (bc->fp) == EOF)
{
if (0
# ifdef SERVER_SUPPORT
|| server_active
# endif /* SERVER_SUPPORT */
)
if (server_active)
{
/* Syslog this? */
}
# ifdef CLIENT_SUPPORT
/* We are already closing the connection.
* On error, print a warning and try to
* continue to avoid infinte loops.
*/
else
error (1, errno,
error (0, errno,
"closing down connection to %s",
current_parsed_root->hostname);
# endif /* CLIENT_SUPPORT */
@ -1499,8 +1521,13 @@ stdio_buffer_shutdown (buf)
do
w = waitpid (bc->child_pid, (int *) 0, 0);
while (w == -1 && errno == EINTR);
/* We are already closing the connection.
* On error, print a warning and try to
* continue to avoid infinte loops.
*/
if (w == -1)
error (1, errno, "waiting for process %d", bc->child_pid);
error (0, errno, "waiting for process %d", bc->child_pid);
}
return 0;
}
@ -1833,7 +1860,7 @@ packetizing_buffer_output (closure, data, have, wrote)
struct packetizing_buffer *pb = (struct packetizing_buffer *) closure;
char inbuf[BUFFER_DATA_SIZE + 2];
char stack_outbuf[BUFFER_DATA_SIZE + PACKET_SLOP + 4];
struct buffer_data *outdata;
struct buffer_data *outdata = NULL;
char *outbuf;
int size, status, translated;
@ -1888,6 +1915,11 @@ packetizing_buffer_output (closure, data, have, wrote)
buf_output (pb->buf, outbuf, translated + 2);
else
{
/* if ((have + PACKET_SLOP + 4) > BUFFER_DATA_SIZE), then
outdata may be NULL. */
if (outdata == NULL)
abort ();
outdata->size = translated + 2;
buf_append_data (pb->buf, outdata, outdata);
}

View File

@ -1,3 +1,17 @@
/*
* Copyright (C) 1996-2005 The 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.
*/
/* Declarations concerning the buffer data structure. */
#if defined (SERVER_SUPPORT) || defined (CLIENT_SUPPORT)

View File

@ -1,6 +1,11 @@
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
* Portions Copyright (C) 1989-1992, Brian Berliner
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS source distribution.
@ -60,7 +65,7 @@ Checkin (type, finfo, rev, tag, options, message)
*/
assert (finfo->rcs != NULL);
switch (RCS_checkin (finfo->rcs, finfo->file, message, rev,
switch (RCS_checkin (finfo->rcs, finfo->file, message, rev, 0,
RCS_FLAGS_KEEPFILE))
{
case 0: /* everything normal */
@ -74,7 +79,8 @@ Checkin (type, finfo, rev, tag, options, message)
changes is if the file contains RCS keywords. So we if
we are not expanding RCS keywords, we are done. */
if (strcmp (options, "-V4") == 0) /* upgrade to V5 now */
if (options != NULL
&& strcmp (options, "-V4") == 0) /* upgrade to V5 now */
options[0] = '\0';
/* FIXME: If PreservePermissions is on, RCS_cmp_file is

View File

@ -1,6 +1,11 @@
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
* Portions Copyright (C) 1989-1992, Brian Berliner
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS source distribution.
@ -67,13 +72,13 @@ static const char *const checkout_usage[] =
static const char *const export_usage[] =
{
"Usage: %s %s [-NRfln] [-r rev] [-D date] [-d dir] [-k kopt] module...\n",
"Usage: %s %s [-NRfln] [-r tag] [-D date] [-d dir] [-k kopt] module...\n",
"\t-N\tDon't shorten module paths if -d specified.\n",
"\t-f\tForce a head revision match if tag/date not found.\n",
"\t-l\tLocal directory only, not recursive\n",
"\t-R\tProcess directories recursively (default).\n",
"\t-n\tDo not run module program (if any).\n",
"\t-r rev\tExport revision or tag.\n",
"\t-r tag\tExport tagged revisions.\n",
"\t-D date\tExport revisions as of date.\n",
"\t-d dir\tExport into dir instead of module name.\n",
"\t-k kopt\tUse RCS kopt -k option on checkout.\n",
@ -170,11 +175,9 @@ checkout (argc, argv)
break;
case 'Q':
case 'q':
#ifdef SERVER_SUPPORT
/* The CVS 1.5 client sends these options (in addition to
Global_option requests), so we must ignore them. */
if (!server_active)
#endif
error (1, 0,
"-q or -Q must be specified before \"%s\"",
cvs_cmd_name);
@ -428,10 +431,8 @@ safe_location (where)
CLIENT_SERVER_STR,
where ? where : "(null)");
#ifdef CLIENT_SUPPORT
/* Don't compare remote CVSROOTs to our destination directory. */
if ( current_parsed_root->isremote ) return 1;
#endif /* CLIENT_SUPPORT */
if (current_parsed_root->isremote) return 1;
/* set current - even if where is set we'll need to cd back... */
current = xgetwd ();
@ -1053,7 +1054,8 @@ internal error: %s doesn't start with %s in checkout_proc",
which = W_REPOS;
if (tag != NULL && !tag_validated)
{
tag_check_valid (tag, argc - 1, argv + 1, 0, aflag, NULL);
tag_check_valid (tag, argc - 1, argv + 1, 0, aflag,
repository);
tag_validated = 1;
}
}

View File

@ -1,6 +1,11 @@
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
* Portions Copyright (C) 1989-1992, Brian Berliner
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS source distribution.
@ -279,7 +284,9 @@ Classify_File (finfo, tag, date, options, force_tag_match, aflag, versp,
error (0, 0, "warning: %s was lost", finfo->fullname);
ret = T_CHECKOUT;
}
else if (strcmp (vers->ts_user, vers->ts_rcs) == 0)
else if (!strcmp (vers->ts_user,
vers->ts_conflict
? vers->ts_conflict : vers->ts_rcs))
{
/*
@ -293,6 +300,8 @@ Classify_File (finfo, tag, date, options, force_tag_match, aflag, versp,
if (vers->entdata->options &&
strcmp (vers->entdata->options, vers->options) != 0)
ret = T_CHECKOUT;
else if (vers->ts_conflict)
ret = T_CONFLICT;
else
{
sticky_ck (finfo, aflag, vers);
@ -313,6 +322,13 @@ Classify_File (finfo, tag, date, options, force_tag_match, aflag, versp,
else
ret = T_NEEDS_MERGE;
#else
/* Files with conflict markers and new timestamps fall through
* here, but they need to. T_CONFLICT is an error in
* commit_fileproc, whereas T_CONFLICT with conflict markers
* is caught but only warned about. Similarly, update_fileproc
* currently reregisters a file that was conflicted but lost
* its markers.
*/
ret = T_MODIFIED;
sticky_ck (finfo, aflag, vers);
#endif

View File

@ -221,7 +221,8 @@ arg_should_not_be_sent_to_server (arg)
/* Try to decide whether we should send arg to the server by
checking the contents of the corresponding CVSADM directory. */
{
char *t, *this_root;
char *t, *root_string;
cvsroot_t *this_root = NULL;
/* Calculate "dirname arg" */
for (t = arg + strlen (arg) - 1; t >= arg; t--)
@ -251,25 +252,31 @@ arg_should_not_be_sent_to_server (arg)
/* Since we didn't find it in the list, check the CVSADM
files on disk. */
this_root = Name_Root (arg, (char *) NULL);
root_string = this_root->original;
*t = c;
}
else
{
/* We're at the beginning of the string. Look at the
CVSADM files in cwd. */
this_root = (CVSroot_cmdline ? xstrdup(CVSroot_cmdline)
: Name_Root ((char *) NULL, (char *) NULL));
if (CVSroot_cmdline)
root_string = CVSroot_cmdline;
else
{
this_root = Name_Root ((char *) NULL, (char *) NULL);
root_string = this_root->original;
}
}
/* Now check the value for root. */
if (this_root && current_parsed_root
&& (strcmp (this_root, current_parsed_root->original) != 0))
if (root_string && current_parsed_root
&& (strcmp (root_string, current_parsed_root->original) != 0))
{
/* Don't send this, since the CVSROOTs don't match. */
free (this_root);
if (this_root) free_cvsroot_t (this_root);
return 1;
}
free (this_root);
if (this_root) free_cvsroot_t (this_root);
}
/* OK, let's send it. */
@ -885,12 +892,6 @@ read_line (resultp)
#if defined(CLIENT_SUPPORT) || defined(SERVER_SUPPORT)
/*
* Zero if compression isn't supported or requested; non-zero to indicate
* a compression level to request from gzip.
*/
int gzip_level;
/*
* Level of compression to use when running gzip on a single file.
*/
@ -1113,6 +1114,8 @@ call_in_directory (pathname, func, data)
int reposdirname_absolute;
int newdir = 0;
assert (pathname);
reposname = NULL;
read_line (&reposname);
assert (reposname != NULL);
@ -1194,44 +1197,6 @@ call_in_directory (pathname, func, data)
if (CVS_CHDIR (toplevel_wd) < 0)
error (1, errno, "could not chdir to %s", toplevel_wd);
/* Create the CVS directory at the top level if needed. The
isdir seems like an unneeded system call, but it *does*
need to be called both if the CVS_CHDIR below succeeds
(e.g. "cvs co .") or if it fails (e.g. basicb-1a in
testsuite). We only need to do this for the "." case,
since the server takes care of forcing this directory to be
created in all other cases. If we don't create CVSADM
here, the call to Entries_Open below will fail. FIXME:
perhaps this means that we should change our algorithm
below that calls Create_Admin instead of having this code
here? */
if (/* I think the reposdirname_absolute case has to do with
things like "cvs update /foo/bar". In any event, the
code below which tries to put toplevel_repos into
CVS/Repository is almost surely unsuited to
the reposdirname_absolute case. */
!reposdirname_absolute
&& (strcmp (dir_name, ".") == 0)
&& ! isdir (CVSADM))
{
char *repo;
char *r;
newdir = 1;
repo = xmalloc (strlen (toplevel_repos)
+ 10);
strcpy (repo, toplevel_repos);
r = repo + strlen (repo);
if (r[-1] != '.' || r[-2] != '/')
strcpy (r, "/.");
Create_Admin (".", ".", repo, (char *) NULL,
(char *) NULL, 0, 1, 1);
free (repo);
}
if (CVS_CHDIR (dir_name) < 0)
{
char *dir;
@ -1492,7 +1457,44 @@ handle_copy_file (args, len)
{
call_in_directory (args, copy_a_file, (char *)NULL);
}
/* Attempt to read a file size from a string. Accepts base 8 (0N), base 16
* (0xN), or base 10. Exits on error.
*
* RETURNS
* The file size, in a size_t.
*
* FATAL ERRORS
* 1. As strtoul().
* 2. If the number read exceeds SIZE_MAX.
*/
static size_t
strto_file_size (const char *s)
{
unsigned long tmp;
char *endptr;
/* Read it. */
errno = 0;
tmp = strtoul (s, &endptr, 0);
/* Check for errors. */
if (errno || endptr == s)
error (1, errno, "Server sent invalid file size `%s'", s);
if (*endptr != '\0')
error (1, 0,
"Server sent trailing characters in file size `%s'",
endptr);
if (tmp > SIZE_MAX)
error (1, 0, "Server sent file size exceeding client max.");
/* Return it. */
return (size_t)tmp;
}
static void read_counted_file PROTO ((char *, char *));
@ -1525,9 +1527,7 @@ read_counted_file (filename, fullname)
if (size_string[0] == 'z')
error (1, 0, "\
protocol error: compressed files not supported for that operation");
/* FIXME: should be doing more error checking, probably. Like using
strtoul and making sure we used up the whole line. */
size = atoi (size_string);
size = strto_file_size (size_string);
free (size_string);
/* A more sophisticated implementation would use only a limited amount
@ -1809,11 +1809,12 @@ update_entries (data_arg, ent_list, short_pathname, filename)
{
char *size_string;
char *mode_string;
int size;
size_t size;
char *buf;
char *temp_filename;
int use_gzip;
int patch_failed;
char *s;
read_line (&mode_string);
@ -1821,13 +1822,14 @@ update_entries (data_arg, ent_list, short_pathname, filename)
if (size_string[0] == 'z')
{
use_gzip = 1;
size = atoi (size_string+1);
s = size_string + 1;
}
else
{
use_gzip = 0;
size = atoi (size_string);
s = size_string;
}
size = strto_file_size (s);
free (size_string);
/* Note that checking this separately from writing the file is
@ -1928,7 +1930,7 @@ update_entries (data_arg, ent_list, short_pathname, filename)
#ifdef USE_VMS_FILENAMES
/* A VMS rename of "blah.dat" to "foo" to implies a
destination of "foo.dat" which is unfortinate for CVS */
sprintf (temp_filename, "%s_new_", filename);
sprintf (temp_filename, "%s_new_", filename);
#else
#ifdef _POSIX_NO_TRUNC
sprintf (temp_filename, ".new.%.9s", filename);
@ -1981,6 +1983,8 @@ update_entries (data_arg, ent_list, short_pathname, filename)
entirely possible that future files will not have
the same problem. */
error (0, errno, "cannot write %s", short_pathname);
free (temp_filename);
free (buf);
goto discard_file_and_return;
}
@ -2837,7 +2841,10 @@ send_a_repository (dir, repository, update_dir_in)
const char *repository;
const char *update_dir_in;
{
char *update_dir = xstrdup (update_dir_in);
char *update_dir;
assert (update_dir_in);
update_dir = xstrdup (update_dir_in);
if (toplevel_repos == NULL && repository != NULL)
{
@ -3097,7 +3104,7 @@ handle_mbinary (args, len)
/* Get the size. */
read_line (&size_string);
size = atoi (size_string);
size = strto_file_size (size_string);
free (size_string);
/* OK, now get all the data. The algorithm here is that we read
@ -3246,7 +3253,7 @@ handle_mt (args, len)
else if (importmergecmd.seen)
{
if (strcmp (tag, "conflicts") == 0)
importmergecmd.conflicts = atoi (text);
importmergecmd.conflicts = text ? atoi (text) : -1;
else if (strcmp (tag, "mergetag1") == 0)
importmergecmd.mergetag1 = xstrdup (text);
else if (strcmp (tag, "mergetag2") == 0)
@ -3914,6 +3921,7 @@ auth_server (root, lto_server, lfrom_server, verify_only, do_gssapi, hostinfo)
/* Paranoia. */
memset (password, 0, strlen (password));
free (password);
# else /* ! AUTH_CLIENT_SUPPORT */
error (1, 0, "INTERNAL ERROR: This client does not support pserver authentication");
# endif /* AUTH_CLIENT_SUPPORT */
@ -4028,7 +4036,7 @@ connect_to_forked_server (to_server, from_server)
fprintf (stderr, " -> Forking server: %s %s\n", command[0], command[1]);
}
child_pid = piped_child (command, &tofd, &fromfd);
child_pid = piped_child (command, &tofd, &fromfd, 0);
if (child_pid < 0)
error (1, 0, "could not fork server process");
@ -4232,7 +4240,8 @@ connect_to_gserver (root, sock, hostinfo)
if (need > sizeof buf)
{
int got;
ssize_t got;
size_t total;
/* This usually means that the server sent us an error
message. Read it byte by byte and print it out.
@ -4241,13 +4250,19 @@ connect_to_gserver (root, sock, hostinfo)
want to do this to work with older servers. */
buf[0] = cbuf[0];
buf[1] = cbuf[1];
got = recv (sock, buf + 2, sizeof buf - 2, 0);
if (got < 0)
error (1, 0, "recv() from server %s: %s",
root->hostname, SOCK_STRERROR (SOCK_ERRNO));
buf[got + 2] = '\0';
if (buf[got + 1] == '\n')
buf[got + 1] = '\0';
total = 2;
while (got = recv (sock, buf + total, sizeof buf - total, 0))
{
if (got < 0)
error (1, 0, "recv() from server %s: %s",
root->hostname, SOCK_STRERROR (SOCK_ERRNO));
total += got;
if (strrchr (buf + total - got, '\n'))
break;
}
buf[total] = '\0';
if (buf[total - 1] == '\n')
buf[total - 1] = '\0';
error (1, 0, "error from server %s: %s", root->hostname,
buf);
}
@ -4328,6 +4343,7 @@ start_server ()
#endif /* HAVE_GSSAPI */
case ext_method:
case extssh_method:
#ifdef NO_EXT_METHOD
error (0, 0, ":ext: method not supported by this port of CVS");
error (1, 0, "try :server: instead");
@ -4712,27 +4728,7 @@ start_rsh_server (root, to_server, from_server)
char *rsh_argv[10];
if (!cvs_rsh)
/* People sometimes suggest or assume that this should default
to "remsh" on systems like HPUX in which that is the
system-supplied name for the rsh program. However, that
causes various problems (keep in mind that systems such as
HPUX might have non-system-supplied versions of "rsh", like
a Kerberized one, which one might want to use). If we
based the name on what is found in the PATH of the person
who runs configure, that would make it harder to
consistently produce the same result in the face of
different people producing binary distributions. If we
based it on "remsh" always being the default for HPUX
(e.g. based on uname), that might be slightly better but
would require us to keep track of what the defaults are for
each system type, and probably would cope poorly if the
existence of remsh or rsh varies from OS version to OS
version. Therefore, it seems best to have the default
remain "rsh", and tell HPUX users to specify remsh, for
example in CVS_RSH or other such mechanisms to be devised,
if that is what they want (the manual already tells them
that). */
cvs_rsh = "rsh";
cvs_rsh = RSH_DFLT;
if (!cvs_server)
cvs_server = "cvs";
@ -4837,7 +4833,7 @@ start_rsh_server (root, to_server, from_server)
fprintf (stderr, "%s ", argv[i]);
putc ('\n', stderr);
}
child_pid = piped_child (argv, &tofd, &fromfd);
child_pid = piped_child (argv, &tofd, &fromfd, 1);
if (child_pid < 0)
error (1, errno, "cannot start server via rsh");
@ -4856,10 +4852,10 @@ start_rsh_server (root, to_server, from_server)
/* Send an argument STRING. */
void
send_arg (string)
char *string;
const char *string;
{
char buf[1];
char *p = string;
const char *p = string;
send_to_server ("Argument ", 0);
@ -5151,7 +5147,10 @@ warning: ignoring -k options due to server limitations");
}
else if (vers->ts_rcs == NULL
|| args->force
|| strcmp (vers->ts_user, vers->ts_rcs) != 0)
|| strcmp (vers->ts_conflict
&& supported_request ("Empty-conflicts")
? vers->ts_conflict : vers->ts_rcs, vers->ts_user)
|| (vers->ts_conflict && !strcmp (cvs_cmd_name, "diff")))
{
if (args->no_contents
&& supported_request ("Is-modified"))
@ -5357,36 +5356,15 @@ send_dirleave_proc (callerdat, dir, err, update_dir, entries)
}
/*
* Send each option in a string to the server, one by one.
* This assumes that the options are separated by spaces, for example
* STRING might be "--foo -C5 -y".
* Send each option in an array to the server, one by one.
* argv might be "--foo=bar", "-C", "5", "-y".
*/
void
send_option_string (string)
char *string;
send_options (int argc, char *const *argv)
{
char *copy;
char *p;
copy = xstrdup (string);
p = copy;
while (1)
{
char *s;
char l;
for (s = p; *s != ' ' && *s != '\0'; s++)
;
l = *s;
*s = '\0';
if (s != p)
send_arg (p);
if (l == '\0')
break;
p = s + 1;
}
free (copy);
int i;
for (i = 0; i < argc; i++)
send_arg (argv[i]);
}

View File

@ -1,3 +1,17 @@
/*
* Copyright (C) 1994-2005 The 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.
*/
/* Interface between the client and the rest of CVS. */
/* Stuff shared with the server. */
@ -119,11 +133,10 @@ send_files PROTO((int argc, char **argv, int local, int aflag,
/* Send an argument to the remote server. */
void
send_arg PROTO((char *string));
send_arg PROTO((const char *string));
/* Send a string of single-char options to the remote server, one by one. */
void
send_option_string PROTO((char *string));
void send_options PROTO ((int argc, char * const *argv));
extern void send_a_repository PROTO ((const char *, const char *,
const char *));

View File

@ -1,6 +1,11 @@
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
* Portions Copyright (C) 1989-1992, Brian Berliner
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS source distribution.
@ -383,12 +388,8 @@ commit (argc, argv)
/* FIXME: Shouldn't this check be much more closely related to the
readonly user stuff (CVSROOT/readers, &c). That is, why should
root be able to "cvs init", "cvs import", &c, but not "cvs ci"? */
if (geteuid () == (uid_t) 0
# ifdef CLIENT_SUPPORT
/* Who we are on the client side doesn't affect logging. */
&& !current_parsed_root->isremote
# endif
)
/* Who we are on the client side doesn't affect logging. */
if (geteuid () == (uid_t) 0 && !current_parsed_root->isremote)
{
struct passwd *pw;
@ -411,6 +412,7 @@ commit (argc, argv)
/* Silently ignore -n for compatibility with old
* clients.
*/
if (!server_active) error(0, 0, "the `-n' option is obsolete");
break;
#endif /* SERVER_SUPPORT */
case 'm':
@ -641,7 +643,8 @@ commit (argc, argv)
fp = cvs_temp_file (&fname);
if (fp == NULL)
error (1, 0, "cannot create temporary file %s", fname);
error (1, 0, "cannot create temporary file %s",
fname ? fname : "(null)");
if (fwrite (saved_message, 1, strlen (saved_message), fp)
!= strlen (saved_message))
error (1, errno, "cannot write temporary file %s", fname);
@ -712,10 +715,8 @@ commit (argc, argv)
Lock_Cleanup ();
dellist (&mulist);
#ifdef SERVER_SUPPORT
if (server_active)
return err;
#endif
/* see if we need to sleep before returning to avoid time-stamp races */
if (last_register_time)
@ -870,11 +871,11 @@ check_fileproc (callerdat, finfo)
case T_CHECKOUT:
case T_PATCH:
case T_NEEDS_MERGE:
case T_CONFLICT:
case T_REMOVE_ENTRY:
error (0, 0, "Up-to-date check failed for `%s'", finfo->fullname);
freevers_ts (&vers);
return 1;
case T_CONFLICT:
case T_MODIFIED:
case T_ADDED:
case T_REMOVED:
@ -912,40 +913,30 @@ check_fileproc (callerdat, finfo)
return 1;
}
}
if (status == T_MODIFIED && !force_ci && vers->ts_conflict)
if (status == T_CONFLICT && !force_ci)
{
/*
* We found a "conflict" marker.
*
* If the timestamp on the file is the same as the
* timestamp stored in the Entries file, we block the commit.
*/
if ( file_has_conflict ( finfo, vers->ts_conflict ) )
{
error (0, 0,
"file `%s' had a conflict and has not been modified",
finfo->fullname);
freevers_ts (&vers);
return 1;
}
if (file_has_markers (finfo))
{
/* Make this a warning, not an error, because we have
no way of knowing whether the "conflict indicators"
are really from a conflict or whether they are part
of the document itself (cvs.texinfo and sanity.sh in
CVS itself, for example, tend to want to have strings
like ">>>>>>>" at the start of a line). Making people
kludge this the way they need to kludge keyword
expansion seems undesirable. And it is worse than
keyword expansion, because there is no -ko
analogue. */
error (0, 0,
"\
error (0, 0,
"file `%s' had a conflict and has not been modified",
finfo->fullname);
freevers_ts (&vers);
return 1;
}
if (status == T_MODIFIED && !force_ci && file_has_markers (finfo))
{
/* Make this a warning, not an error, because we have
no way of knowing whether the "conflict indicators"
are really from a conflict or whether they are part
of the document itself (cvs.texinfo and sanity.sh in
CVS itself, for example, tend to want to have strings
like ">>>>>>>" at the start of a line). Making people
kludge this the way they need to kludge keyword
expansion seems undesirable. And it is worse than
keyword expansion, because there is no -ko
analogue. */
error (0, 0,
"\
warning: file `%s' seems to still contain conflict indicators",
finfo->fullname);
}
finfo->fullname);
}
if (status == T_REMOVED)
@ -1284,11 +1275,7 @@ commit_fileproc (callerdat, finfo)
if (!got_message)
{
got_message = 1;
if (
#ifdef SERVER_SUPPORT
!server_active &&
#endif
use_editor)
if (!server_active && use_editor)
do_editor (finfo->update_dir, &saved_message,
finfo->repository, ulist);
do_verify (&saved_message, finfo->repository);
@ -1474,6 +1461,8 @@ commit_filesdoneproc (callerdat, err, repository, update_dir, entries)
Node *p;
List *ulist;
assert (repository);
p = findnode (mulist, update_dir);
if (p == NULL)
return err;
@ -1564,11 +1553,7 @@ commit_direntproc (callerdat, dir, repos, update_dir, entries)
/* get commit message */
real_repos = Name_Repository (dir, update_dir);
got_message = 1;
if (
#ifdef SERVER_SUPPORT
!server_active &&
#endif
use_editor)
if (!server_active && use_editor)
do_editor (update_dir, &saved_message, real_repos, ulist);
do_verify (&saved_message, real_repos);
free (real_repos);
@ -1752,18 +1737,22 @@ remove_file (finfo, tag, message)
if (corev != NULL)
free (corev);
retcode = RCS_checkin (finfo->rcs, finfo->file, message, rev,
retcode = RCS_checkin (finfo->rcs, finfo->file, message, rev, 0,
RCS_FLAGS_DEAD | RCS_FLAGS_QUIET);
if (retcode != 0)
{
if (!quiet)
error (0, retcode == -1 ? errno : 0,
"failed to commit dead revision for `%s'", finfo->fullname);
if (prev_rev != NULL)
free (prev_rev);
return 1;
}
/* At this point, the file has been committed as removed. We should
probably tell the history file about it */
history_write ('R', NULL, finfo->rcs->head, finfo->file, finfo->repository);
corev = rev ? RCS_getbranch (finfo->rcs, rev, 1) : RCS_head (finfo->rcs);
history_write ('R', NULL, corev, finfo->file, finfo->repository);
free (corev);
if (rev != NULL)
free (rev);
@ -2085,7 +2074,8 @@ checkaddfile (file, repository, tag, options, rcsnode)
/* and lock it */
if (lock_RCS (file, rcs, rev, repository))
{
error (0, 0, "cannot lock `%s'.", rcs->path);
error (0, 0, "cannot lock revision %s in `%s'.",
rev ? rev : tag ? tag : "HEAD", rcs->path);
if (rev != NULL)
free (rev);
goto out;
@ -2123,13 +2113,14 @@ checkaddfile (file, repository, tag, options, rcsnode)
/* commit a dead revision. */
(void) sprintf (tmp, "file %s was initially added on branch %s.",
file, tag);
retcode = RCS_checkin (rcs, NULL, tmp, NULL,
retcode = RCS_checkin (rcs, NULL, tmp, NULL, 0,
RCS_FLAGS_DEAD | RCS_FLAGS_QUIET);
free (tmp);
if (retcode != 0)
{
error (retcode == -1 ? 1 : 0, retcode == -1 ? errno : 0,
"could not create initial dead revision %s", rcs->path);
free (fname);
goto out;
}
@ -2142,7 +2133,7 @@ checkaddfile (file, repository, tag, options, rcsnode)
rcs = RCS_parse (file, repository);
if (rcs == NULL)
{
error (0, 0, "could not read %s", rcs->path);
error (0, 0, "could not read %s in %s", file, repository);
goto out;
}
*rcsnode = rcs;
@ -2150,7 +2141,8 @@ checkaddfile (file, repository, tag, options, rcsnode)
/* and lock it once again. */
if (lock_RCS (file, rcs, NULL, repository))
{
error (0, 0, "cannot lock `%s'.", rcs->path);
error (0, 0, "cannot lock initial revision in `%s'.",
rcs->path);
goto out;
}
}
@ -2163,12 +2155,25 @@ checkaddfile (file, repository, tag, options, rcsnode)
char *head;
char *magicrev;
int retcode;
time_t headtime = -1;
char *revnum, *tmp;
FILE *fp;
time_t t = -1;
struct tm *ct;
fixbranch (rcs, sbranch);
head = RCS_getversion (rcs, NULL, NULL, 0, (int *) NULL);
if (!head)
error (1, 0, "No head revision in archive file `%s'.",
rcs->path);
magicrev = RCS_magicrev (rcs, head);
/* If this is not a new branch, then we will want a dead
version created before this one. */
if (!newfile)
headtime = RCS_getrevtime (rcs, head, 0, 0);
retcode = RCS_settag (rcs, tag, magicrev);
RCS_rewrite (rcs, NULL, NULL);
@ -2181,13 +2186,76 @@ checkaddfile (file, repository, tag, options, rcsnode)
"could not stub branch %s for %s", tag, rcs->path);
goto out;
}
/* We need to add a dead version here to avoid -rtag -Dtime
checkout problems between when the head version was
created and now. */
if (!newfile && headtime != -1)
{
/* move the new file out of the way. */
fname = xmalloc (strlen (file) + sizeof (CVSADM)
+ sizeof (CVSPREFIX) + 10);
(void) sprintf (fname, "%s/%s%s", CVSADM, CVSPREFIX, file);
rename_file (file, fname);
/* Create empty FILE. Can't use copy_file with a DEVNULL
argument -- copy_file now ignores device files. */
fp = fopen (file, "w");
if (fp == NULL)
error (1, errno, "cannot open %s for writing", file);
if (fclose (fp) < 0)
error (0, errno, "cannot close %s", file);
/* As we will be hacking the delta date, put the time
this was added into the log message. */
t = time(NULL);
ct = gmtime(&t);
tmp = xmalloc (strlen (file) + strlen (tag) + 80);
(void) sprintf (tmp,
"file %s was added on branch %s on %d-%02d-%02d %02d:%02d:%02d +0000",
file, tag,
ct->tm_year + (ct->tm_year < 100 ? 0 : 1900),
ct->tm_mon + 1, ct->tm_mday,
ct->tm_hour, ct->tm_min, ct->tm_sec);
/* commit a dead revision. */
revnum = RCS_whatbranch (rcs, tag);
retcode = RCS_checkin (rcs, NULL, tmp, revnum, headtime,
RCS_FLAGS_DEAD |
RCS_FLAGS_QUIET |
RCS_FLAGS_USETIME);
free (revnum);
free (tmp);
if (retcode != 0)
{
error (retcode == -1 ? 1 : 0, retcode == -1 ? errno : 0,
"could not created dead stub %s for %s", tag,
rcs->path);
goto out;
}
/* put the new file back where it was */
rename_file (fname, file);
free (fname);
/* double-check that the file was written correctly */
freercsnode (&rcs);
rcs = RCS_parse (file, repository);
if (rcs == NULL)
{
error (0, 0, "could not read %s", rcs->path);
goto out;
}
*rcsnode = rcs;
}
}
else
{
/* lock the branch. (stubbed branches need not be locked.) */
if (lock_RCS (file, rcs, NULL, repository))
{
error (0, 0, "cannot lock `%s'.", rcs->path);
error (0, 0, "cannot lock head revision in `%s'.", rcs->path);
goto out;
}
}

View File

@ -1,6 +1,11 @@
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
* Portions Copyright (C) 1989-1992, Brian Berliner
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS source distribution.

View File

@ -1,6 +1,11 @@
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
* Portions Copyright (C) 1989-1992, Brian Berliner
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS kit.
@ -207,6 +212,8 @@ extern int errno;
#define CVSATTIC "Attic"
#define CVSLCK "#cvs.lock"
#define CVSHISTORYLCK "#cvs.history.lock"
#define CVSVALTAGSLCK "#cvs.val-tags.lock"
#define CVSRFL "#cvs.rfl"
#define CVSWFL "#cvs.wfl"
#define CVSRFLPAT "#cvs.rfl.*" /* wildcard expr to match read locks */
@ -270,7 +277,10 @@ extern int errno;
#define EDITOR3_ENV "EDITOR" /* which editor to use */
#define CVSROOT_ENV "CVSROOT" /* source directory root */
#define CVSROOT_DFLT NULL /* No dflt; must set for checkout */
/* Define CVSROOT_DFLT to a fallback value for CVSROOT.
*
#undef CVSROOT_DFL
*/
#define IGNORE_ENV "CVSIGNORE" /* More files to ignore */
#define WRAPPER_ENV "CVSWRAPPERS" /* name of the wrapper file */
@ -419,15 +429,18 @@ int RCS_merge PROTO((RCSNode *, const char *, const char *, const char *,
#define RCS_FLAGS_QUIET 4
#define RCS_FLAGS_MODTIME 8
#define RCS_FLAGS_KEEPFILE 16
#define RCS_FLAGS_USETIME 32
extern int RCS_exec_rcsdiff PROTO ((RCSNode *rcsfile,
const char *opts, const char *options,
extern int RCS_exec_rcsdiff PROTO ((RCSNode *rcsfile, int diff_argc,
char *const *diff_argv,
const char *options,
const char *rev1, const char *rev1_cache,
const char *rev2, const char *label1,
const char *label2, const char *workfile));
extern int diff_exec PROTO ((const char *file1, const char *file2,
const char *label1, const char *label2,
const char *options, const char *out));
int diff_argc, char *const *diff_argv,
const char *out));
#include "error.h"
@ -451,15 +464,6 @@ char *Name_Repository PROTO((const char *dir, const char *update_dir));
const char *Short_Repository PROTO((const char *repository));
void Sanitize_Repository_Name PROTO((char *repository));
char *Name_Root PROTO((char *dir, char *update_dir));
void free_cvsroot_t PROTO((cvsroot_t *root_in));
cvsroot_t *parse_cvsroot PROTO((const char *root));
cvsroot_t *local_cvsroot PROTO((const char *dir));
void Create_Root PROTO((const char *dir, const char *rootdir));
void root_allow_add PROTO ((char *));
void root_allow_free PROTO ((void));
int root_allow_ok PROTO ((char *));
char *previous_rev PROTO ((RCSNode *rcs, const char *rev));
char *gca PROTO ((const char *rev1, const char *rev2));
extern void check_numeric PROTO ((const char *, int, char **));
@ -568,6 +572,14 @@ void lock_tree_for_write PROTO ((int argc, char **argv, int local, int which,
/* See lock.c for description. */
extern void lock_dir_for_write PROTO ((char *));
/* Get a write lock for the history file. */
int history_lock PROTO ((const char *));
void clear_history_lock PROTO ((void));
/* Get a write lock for the val-tags file. */
int val_tags_lock PROTO ((const char *));
void clear_val_tags_lock PROTO ((void));
/* LockDir setting from CVSROOT/config. */
extern char *lock_dir;
@ -667,8 +679,6 @@ int SIG_inCrSect PROTO((void));
void read_cvsrc PROTO((int *argc, char ***argv, const char *cmdname));
char *make_message_rcslegal PROTO((const char *message));
extern int file_has_conflict PROTO ((const struct file_info *,
const char *ts_conflict));
extern int file_has_markers PROTO ((const struct file_info *));
extern void get_file PROTO ((const char *, const char *, const char *,
char **, size_t *, size_t *));
@ -686,6 +696,8 @@ void sleep_past PROTO ((time_t desttime));
#define RUN_SIGIGNORE 0x0010 /* ignore interrupts for command */
#define RUN_TTY (char *)0 /* for the benefit of lint */
void run_add_arg_p PROTO ((int *, size_t *, char ***, const char *s));
void run_arg_free_p PROTO ((int, char **));
void run_arg PROTO((const char *s));
void run_print PROTO((FILE * fp));
void run_setup PROTO ((const char *prog));
@ -694,7 +706,7 @@ int run_exec PROTO((const char *stin, const char *stout, const char *sterr,
/* other similar-minded stuff from run.c. */
FILE *run_popen PROTO((const char *, const char *));
int piped_child PROTO((const char **, int *, int *));
int piped_child PROTO((const char **, int *, int *, int));
void close_on_exec PROTO((int));
pid_t waitpid PROTO((pid_t, int *, int));

View File

@ -1,5 +1,10 @@
/*
* Copyright (c) 1993 david d zuhn
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1993 david d zuhn
*
* Written by david d `zoo' zuhn while at Cygnus Support
*
@ -120,9 +125,9 @@ read_cvsrc (argc, argv, cmdname)
if (found)
{
/* skip over command in the options line */
for (optstart = strtok (line + command_len, "\t \n");
for (optstart = strtok (line + command_len, "\t \n\r");
optstart;
optstart = strtok (NULL, "\t \n"))
optstart = strtok (NULL, "\t \n\r"))
{
new_argv [new_argc++] = xstrdup (optstart);

View File

@ -1,6 +1,11 @@
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
* Portions Copyright (C) 1989-1992, Brian Berliner
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS source distribution.
@ -60,8 +65,9 @@ static int have_rev1_label, have_rev2_label;
static char *user_file_rev;
static char *options;
static char *opts;
static size_t opts_allocated = 1;
static char **diff_argv;
static int diff_argc;
static size_t diff_arg_allocated;
static int diff_errors;
static int empty_files = 0;
@ -206,6 +212,54 @@ static struct option const longopts[] =
{0, 0, 0, 0}
};
/* Add one of OPT or LONGOPT, and ARGUMENT, when present, to global DIFF_ARGV.
*
* INPUTS
* opt A character option representation.
* longopt A long option name.
* argument Optional option argument.
*
* GLOBALS
* diff_argc The number of arguments in DIFF_ARGV.
* diff_argv Array of argument strings.
* diff_arg_allocated Allocated length of DIFF_ARGV.
*
* NOTES
* Behavior when both OPT & LONGOPT are provided is undefined.
*
* RETURNS
* Nothing.
*/
static void
add_diff_args (char opt, const char *longopt, const char *argument)
{
char *tmp;
/* Add opt or longopt to diff_arv. */
assert (opt || (longopt && *longopt));
assert (!(opt && (longopt && *longopt)));
if (opt)
{
tmp = xmalloc (3);
sprintf (tmp, "-%c", opt);
}
else
{
tmp = xmalloc (3 + strlen (longopt));
sprintf (tmp, "--%s", longopt);
}
run_add_arg_p (&diff_argc, &diff_arg_allocated, &diff_argv, tmp);
free (tmp);
/* When present, add ARGUMENT to DIFF_ARGV. */
if (argument)
run_add_arg_p (&diff_argc, &diff_arg_allocated, &diff_argv, argument);
}
/* CVS 1.9 and similar versions seemed to have pretty weird handling
of -y and -T. In the cases where it called rcsdiff,
they would have the meanings mentioned below. In the cases where it
@ -242,7 +296,6 @@ diff (argc, argv)
int argc;
char **argv;
{
char tmp[50];
int c, err = 0;
int local = 0;
int which;
@ -262,12 +315,11 @@ diff (argc, argv)
/* Clean out our global variables (multiroot can call us multiple
times and the server can too, if the client sends several
diff commands). */
if (opts == NULL)
if (diff_argc)
{
opts_allocated = 1;
opts = xmalloc (opts_allocated);
run_arg_free_p (diff_argc, diff_argv);
diff_argc = 0;
}
opts[0] = '\0';
diff_rev1 = NULL;
diff_rev2 = NULL;
diff_date1 = NULL;
@ -288,7 +340,7 @@ diff (argc, argv)
switch (c)
{
case 'y':
xrealloc_and_strcat (&opts, &opts_allocated, " --side-by-side");
add_diff_args (0, "side-by-side", NULL);
break;
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
case 'h': case 'i': case 'n': case 'p': case 's': case 't':
@ -296,8 +348,7 @@ diff (argc, argv)
case '0': case '1': case '2': case '3': case '4': case '5':
case '6': case '7': case '8': case '9':
case 'B': case 'H': case 'T':
(void) sprintf (tmp, " -%c", (char) c);
xrealloc_and_strcat (&opts, &opts_allocated, tmp);
add_diff_args (c, NULL, NULL);
break;
case 'L':
if (have_rev1_label++)
@ -306,33 +357,15 @@ diff (argc, argv)
error (0, 0, "extra -L arguments ignored");
break;
}
xrealloc_and_strcat (&opts, &opts_allocated, " -L");
xrealloc_and_strcat (&opts, &opts_allocated, optarg);
break;
/* Fall through. */
case 'C': case 'F': case 'I': case 'U': case 'W':
(void) sprintf (tmp, " -%c", (char) c);
xrealloc_and_strcat (&opts, &opts_allocated, tmp);
xrealloc_and_strcat (&opts, &opts_allocated, optarg);
add_diff_args (c, NULL, optarg);
break;
case 131:
/* --ifdef. */
xrealloc_and_strcat (&opts, &opts_allocated, " --ifdef=");
xrealloc_and_strcat (&opts, &opts_allocated, optarg);
break;
case 129: case 130: case 132: case 133: case 134:
case 129: case 130: case 131: case 132: case 133: case 134:
case 135: case 136: case 137: case 138: case 139: case 140:
case 141: case 142: case 143: case 145: case 146:
xrealloc_and_strcat (&opts, &opts_allocated, " --");
xrealloc_and_strcat (&opts, &opts_allocated,
longopts[option_index].name);
if (longopts[option_index].has_arg == 1
|| (longopts[option_index].has_arg == 2
&& optarg != NULL))
{
xrealloc_and_strcat (&opts, &opts_allocated, "=");
xrealloc_and_strcat (&opts, &opts_allocated, optarg);
}
add_diff_args (0, longopts[option_index].name,
longopts[option_index].has_arg ? optarg : NULL);
break;
case 'R':
local = 0;
@ -390,7 +423,7 @@ diff (argc, argv)
send_arg("-l");
if (empty_files)
send_arg("-N");
send_option_string (opts);
send_options (diff_argc, diff_argv);
if (options[0] != '\0')
send_arg (options);
if (diff_rev1)
@ -700,8 +733,8 @@ RCS file: ", 0);
if (empty_file == DIFF_ADDED)
{
if (use_rev2 == NULL)
status = diff_exec (DEVNULL, finfo->file, label1, label2, opts,
RUN_TTY);
status = diff_exec (DEVNULL, finfo->file, label1, label2,
diff_argc, diff_argv, RUN_TTY);
else
{
int retcode;
@ -717,7 +750,8 @@ RCS file: ", 0);
if( retcode != 0 )
goto out;
status = diff_exec (DEVNULL, tmp, label1, label2, opts, RUN_TTY);
status = diff_exec (DEVNULL, tmp, label1, label2,
diff_argc, diff_argv, RUN_TTY);
}
}
else
@ -733,16 +767,16 @@ RCS file: ", 0);
if (retcode != 0)
goto out;
status = diff_exec (tmp, DEVNULL, label1, label2, opts, RUN_TTY);
status = diff_exec (tmp, DEVNULL, label1, label2,
diff_argc, diff_argv, RUN_TTY);
}
}
else
{
status = RCS_exec_rcsdiff(vers->srcfile, opts,
*options ? options : vers->options,
use_rev1, rev1_cache, use_rev2,
label1, label2,
finfo->file);
status = RCS_exec_rcsdiff (vers->srcfile, diff_argc, diff_argv,
*options ? options : vers->options,
use_rev1, rev1_cache, use_rev2,
label1, label2, finfo->file);
}

View File

@ -32,7 +32,10 @@ onoff_fileproc (callerdat, finfo)
void *callerdat;
struct file_info *finfo;
{
char *watched = fileattr_get0 (finfo->file, "_watched");
fileattr_set (finfo->file, "_watched", turning_on ? "" : NULL);
if (watched != NULL)
free (watched);
return 0;
}
@ -50,7 +53,12 @@ onoff_filesdoneproc (callerdat, err, repository, update_dir, entries)
List *entries;
{
if (setting_default)
{
char *watched = fileattr_get0 (NULL, "_watched");
fileattr_set (NULL, "_watched", turning_on ? "" : NULL);
if (watched != NULL)
free (watched);
}
return err;
}
@ -357,12 +365,12 @@ edit_fileproc (callerdat, finfo)
static const char *const edit_usage[] =
{
"Usage: %s %s [-lR] [files...]\n",
"-l: Local directory only, not recursive\n",
"-R: Process directories recursively\n",
"-a: Specify what actions for temporary watch, one of\n",
" edit,unedit,commit,all,none\n",
"(Specify the --help global option for a list of other help options)\n",
"Usage: %s %s [-lR] [-a <action>]... [<file>]...\n",
"-l\tLocal directory only, not recursive.\n",
"-R\tProcess directories recursively (default).\n",
"-a\tSpecify action to register for temporary watch, one of:\n",
" \t`edit', `unedit', `commit', `all', or `none' (defaults to `all').\n",
"(Specify the --help global option for a list of other help options.)\n",
NULL
};
@ -572,10 +580,10 @@ unedit_fileproc (callerdat, finfo)
static const char *const unedit_usage[] =
{
"Usage: %s %s [-lR] [files...]\n",
"-l: Local directory only, not recursive\n",
"-R: Process directories recursively\n",
"(Specify the --help global option for a list of other help options)\n",
"Usage: %s %s [-lR] [<file>]...\n",
"-l\tLocal directory only, not recursive.\n",
"-R\tProcess directories recursively (default).\n",
"(Specify the --help global option for a list of other help options.)\n",
NULL
};
@ -1041,10 +1049,10 @@ notify_check (repository, update_dir)
static const char *const editors_usage[] =
{
"Usage: %s %s [-lR] [files...]\n",
"\t-l\tProcess this directory only (not recursive).\n",
"\t-R\tProcess directories recursively.\n",
"(Specify the --help global option for a list of other help options)\n",
"Usage: %s %s [-lR] [<file>]...\n",
"-l\tProcess this directory only (not recursive).\n",
"-R\tProcess directories recursively (default).\n",
"(Specify the --help global option for a list of other help options.)\n",
NULL
};

View File

@ -1,6 +1,11 @@
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
* Portions Copyright (C) 1989-1992, Brian Berliner
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS source distribution.
@ -537,6 +542,7 @@ Entries_Open (aflag, update_dir)
break;
default:
/* Ignore unrecognized commands. */
Entnode_Destroy (ent);
break;
}
}

View File

@ -1,4 +1,16 @@
/* expand_path.c -- expand environmental variables in passed in string
*
* Copyright (C) 1995-2005 The 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.
*
* The main routine is expand_path(), it is the routine that handles
* the '~' character in four forms:
@ -97,16 +109,14 @@ expand_path (name, file, line)
const char *file;
int line;
{
const char *s;
char *d;
size_t s, d, p;
char *e;
char *mybuf = NULL;
size_t mybuf_size = 0;
char *buf = NULL;
size_t buf_size = 0;
size_t doff;
char *result;
/* Sorry this routine is so ugly; it is a head-on collision
@ -117,82 +127,74 @@ expand_path (name, file, line)
thusly. */
/* First copy from NAME to MYBUF, expanding $<foo> as we go. */
s = name;
d = mybuf;
doff = d - mybuf;
expand_string (&mybuf, &mybuf_size, doff + 1);
d = mybuf + doff;
while ((*d++ = *s))
s = d = 0;
while (name[s] != '\0')
{
if (*s++ == '$')
if (name[s] == '$')
{
char *p = d;
char *e;
int flag = (*s == '{');
doff = d - mybuf;
expand_string (&mybuf, &mybuf_size, doff + 1);
d = mybuf + doff;
for (; (*d++ = *s); s++)
p = d;
if (name[++s] == '{')
{
if (flag
? *s =='}'
: isalnum ((unsigned char) *s) == 0 && *s != '_')
break;
doff = d - mybuf;
expand_string (&mybuf, &mybuf_size, doff + 1);
d = mybuf + doff;
while (name[++s] != '}' && name[s] != '\0')
{
expand_string (&mybuf, &mybuf_size, p + 1);
mybuf[p++] = name[s];
}
if (name[s] != '\0') ++s;
}
*--d = '\0';
e = expand_variable (&p[flag], file, line);
else
{
while (isalnum ((unsigned char) name[s]) || name[s] == '_')
{
expand_string (&mybuf, &mybuf_size, p + 1);
mybuf[p++] = name[s++];
}
}
expand_string (&mybuf, &mybuf_size, p + 1);
mybuf[p] = '\0';
e = expand_variable (mybuf + d, file, line);
if (e)
{
doff = d - mybuf;
expand_string (&mybuf, &mybuf_size, doff + 1);
d = mybuf + doff;
for (d = &p[-1]; (*d++ = *e++);)
{
doff = d - mybuf;
expand_string (&mybuf, &mybuf_size, doff + 1);
d = mybuf + doff;
}
--d;
if (flag && *s)
s++;
p = strlen(e);
expand_string (&mybuf, &mybuf_size, d + p);
memcpy(mybuf + d, e, p);
d += p;
}
else
/* expand_variable has already printed an error message. */
goto error_exit;
}
doff = d - mybuf;
expand_string (&mybuf, &mybuf_size, doff + 1);
d = mybuf + doff;
else
{
expand_string (&mybuf, &mybuf_size, d + 1);
mybuf[d++] = name[s++];
}
}
doff = d - mybuf;
expand_string (&mybuf, &mybuf_size, doff + 1);
d = mybuf + doff;
*d = '\0';
expand_string (&mybuf, &mybuf_size, d + 1);
mybuf[d++] = '\0';
/* Then copy from MYBUF to BUF, expanding ~. */
s = mybuf;
d = buf;
s = d = 0;
/* If you don't want ~username ~/ to be expanded simply remove
* This entire if statement including the else portion
*/
if (*s++ == '~')
if (mybuf[s] == '~')
{
char *t;
char *p, *pstart;
pstart = p = xstrdup (s);
if (*pstart=='/' || *pstart==0)
t = get_homedir ();
p = d;
while (mybuf[++s] != '/' && mybuf[s] != '\0')
{
expand_string (&buf, &buf_size, p + 1);
buf[p++] = name[s];
}
expand_string (&buf, &buf_size, p + 1);
buf[p] = '\0';
if (p == d)
e = get_homedir ();
else
{
#ifdef GETPWNAM_MISSING
for (; *p!='/' && *p; p++)
;
*p = 0;
if (line != 0)
error (0, 0,
"%s:%d:tilde expansion not supported on this system",
@ -200,57 +202,34 @@ expand_path (name, file, line)
else
error (0, 0, "%s:tilde expansion not supported on this system",
file);
return NULL;
goto error_exit;
#else
struct passwd *ps;
for (; *p!='/' && *p; p++)
;
*p = 0;
ps = getpwnam (pstart);
if (ps == 0)
ps = getpwnam (buf + d);
if (ps == NULL)
{
if (line != 0)
error (0, 0, "%s:%d: no such user %s",
file, line, pstart);
file, line, buf + d);
else
error (0, 0, "%s: no such user %s", file, pstart);
return NULL;
error (0, 0, "%s: no such user %s", file, buf + d);
goto error_exit;
}
t = ps->pw_dir;
e = ps->pw_dir;
#endif
}
if (t == NULL)
if (e == NULL)
error (1, 0, "cannot find home directory");
doff = d - buf;
expand_string (&buf, &buf_size, doff + 1);
d = buf + doff;
while ((*d++ = *t++))
{
doff = d - buf;
expand_string (&buf, &buf_size, doff + 1);
d = buf + doff;
}
--d;
s+=p-pstart;
free (pstart);
p = strlen(e);
expand_string (&buf, &buf_size, d + p);
memcpy(buf + d, e, p);
d += p;
}
else
--s;
/* Kill up to here */
doff = d - buf;
expand_string (&buf, &buf_size, doff + 1);
d = buf + doff;
while ((*d++ = *s++))
{
doff = d - buf;
expand_string (&buf, &buf_size, doff + 1);
d = buf + doff;
}
doff = d - buf;
expand_string (&buf, &buf_size, doff + 1);
d = buf + doff;
*d = '\0';
/* Kill up to here */
p = strlen(mybuf + s) + 1;
expand_string (&buf, &buf_size, d + p);
memcpy(buf + d, mybuf + s, p);
/* OK, buf contains the value we want to return. Clean up and return
it. */

View File

@ -139,6 +139,7 @@ fileattr_read ()
"file attribute database corruption: tab missing in %s",
fname);
++p;
if (fileattr_default_attrs) free (fileattr_default_attrs);
fileattr_default_attrs = xstrdup (p);
}
else
@ -589,6 +590,7 @@ fileattr_write ()
{
error (0, errno, "cannot make directory %s", repname);
(void) umask (omask);
free (fname);
free (repname);
return;
}
@ -600,6 +602,7 @@ fileattr_write ()
{
error (0, errno, "cannot write %s", fname);
(void) umask (omask);
free (fname);
return;
}
}

View File

@ -20,6 +20,8 @@
#include <assert.h>
#include "cvs.h"
#include "xsize.h"
static int deep_remove_dir PROTO((const char *path));
/*
@ -105,7 +107,7 @@ copy_file (from, to)
error (1, errno, "cannot close %s", to);
}
/* now, set the times for the copied file to match those of the original */
/* preserve last access & modification times */
memset ((char *) &t, 0, sizeof (t));
t.actime = sb.st_atime;
t.modtime = sb.st_mtime;
@ -433,14 +435,10 @@ unlink_file_dir (f)
{
struct stat sb;
if (trace
#ifdef SERVER_SUPPORT
/* This is called by the server parent process in contexts where
it is not OK to send output (e.g. after we sent "ok" to the
client). */
&& !server_active
#endif
)
/* This is called by the server parent process in contexts where
it is not OK to send output (e.g. after we sent "ok" to the
client). */
if (trace && !server_active)
(void) fprintf (stderr, "-> unlink_file_dir(%s)\n", f);
if (noexec)
@ -704,7 +702,8 @@ cvs_temp_name ()
fp = cvs_temp_file (&fn);
if (fp == NULL)
error (1, errno, "Failed to create temporary file");
error (1, errno, "Failed to create temporary file %s",
fn ? fn : "(null)");
if (fclose (fp) == EOF)
error (0, errno, "Failed to close temporary file %s", fn);
return fn;
@ -741,7 +740,8 @@ cvs_temp_name ()
* NFS locking thing, but until I hear of more problems, I'm not going to
* bother.
*/
FILE *cvs_temp_file (filename)
FILE *
cvs_temp_file (filename)
char **filename;
{
char *fn;
@ -780,7 +780,11 @@ FILE *cvs_temp_file (filename)
errno = save_errno;
}
if (fp == NULL) free (fn);
if (fp == NULL)
{
free (fn);
fn = NULL;
}
/* mkstemp is defined to open mode 0600 using glibc 2.0.7+ */
/* FIXME - configure can probably tell us which version of glibc we are
* linking to and not chmod for 2.0.7+
@ -795,7 +799,11 @@ FILE *cvs_temp_file (filename)
fn = tempnam (Tmpdir, "cvs");
if (fn == NULL) fp = NULL;
else if ((fp = CVS_FOPEN (fn, "w+")) == NULL) free (fn);
else if ((fp = CVS_FOPEN (fn, "w+")) == NULL)
{
free (fn);
fn = NULL;
}
else chmod (fn, 0600);
/* tempnam returns a pointer to a newly malloc'd string, so there's
@ -845,6 +853,11 @@ FILE *cvs_temp_file (filename)
#endif
*filename = fn;
if (fn == NULL && fp != NULL)
{
fclose (fp);
fp = NULL;
}
return fp;
}
@ -867,31 +880,48 @@ FILE *cvs_temp_file (filename)
* This function exits with a fatal error if it fails to read the link for
* any reason.
*/
#define MAXSIZE (SIZE_MAX < SSIZE_MAX ? SIZE_MAX : SSIZE_MAX)
char *
xreadlink (link)
const char *link;
{
char *file = NULL;
int buflen = 128;
int link_name_len;
size_t buflen = 128;
/* Get the name of the file to which `from' is linked.
FIXME: what portability issues arise here? Are readlink &
ENAMETOOLONG defined on all systems? -twp */
do
/* Get the name of the file to which `from' is linked. */
while (1)
{
ssize_t r;
size_t link_name_len;
file = xrealloc (file, buflen);
link_name_len = readlink (link, file, buflen - 1);
buflen *= 2;
r = readlink (link, file, buflen);
link_name_len = r;
if (r < 0
#ifdef ERANGE
/* AIX 4 and HP-UX report ERANGE if the buffer is too small. */
&& errno != ERANGE
#endif
)
error (1, errno, "cannot readlink %s", link);
/* If there is space for the NUL byte, set it and return. */
if (r >= 0 && link_name_len < buflen)
{
file[link_name_len] = '\0';
return file;
}
if (buflen <= MAXSIZE / 2)
buflen *= 2;
else if (buflen < MAXSIZE)
buflen = MAXSIZE;
else
/* Our buffer cannot grow any bigger. */
error (1, ENAMETOOLONG, "cannot readlink %s", link);
}
while (link_name_len < 0 && errno == ENAMETOOLONG);
if (link_name_len < 0)
error (1, errno, "cannot readlink %s", link);
file[link_name_len] = '\0';
return file;
}
#endif /* HAVE_READLINK */
@ -944,7 +974,8 @@ last_component (path)
const char *path;
{
const char *last = strrchr (path, '/');
assert (path);
if (last && (last != path))
return last + 1;
else
@ -984,11 +1015,7 @@ get_homedir ()
if (home != NULL)
return home;
if (
#ifdef SERVER_SUPPORT
!server_active &&
#endif
(env = getenv ("HOME")) != NULL)
if (!server_active && (env = getenv ("HOME")) != NULL)
home = env;
else if ((pw = (struct passwd *) getpwuid (getuid ()))
&& pw->pw_dir)
@ -1029,6 +1056,7 @@ expand_wild (argc, argv, pargc, pargv)
char ***pargv;
{
int i;
assert (argv || !argc);
if (size_overflow_p (xtimes (argc, sizeof (char *)))) {
*pargc = 0;
*pargv = NULL;

View File

@ -1,6 +1,11 @@
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
* Portions Copyright (C) 1989-1992, Brian Berliner
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS source distribution.

View File

@ -11,7 +11,9 @@
/* Collect and manage hardlink info associated with a particular file. */
#include "cvs.h"
#include "hardlink.h"
#ifdef PRESERVE_PERMISSIONS_SUPPORT
# include "hardlink.h"
/* The structure currently used to manage hardlink info is a list.
Therefore, most of the functions which manipulate hardlink data
@ -302,4 +304,4 @@ find_checkedout_proc (node, data)
return 0;
}
#endif /* PRESERVE_PERMISSIONS_SUPPORT */

View File

@ -17,6 +17,7 @@
when files are being checked out or updated. It is used only when
hardlinked files are being checked out. */
#ifdef PRESERVE_PERMISSIONS_SUPPORT
struct hardlink_info
{
Ctype status; /* as returned from Classify_File() */
@ -31,3 +32,4 @@ void update_hardlink_info PROTO ((const char *));
List *list_linked_files_on_disk PROTO ((char *));
int compare_linkage_lists PROTO ((List *, List *));
int find_checkedout_proc PROTO ((Node *, void *));
#endif /* PRESERVE_PERMISSIONS_SUPPORT */

View File

@ -1,5 +1,10 @@
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS source distribution.

View File

@ -1,5 +1,10 @@
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS source distribution.

View File

@ -1,9 +1,18 @@
/*
* Copyright (C) 1994-2005 The Free Software Foundation, Inc.
*
* You may distribute under the terms of the GNU General Public License
* as specified in the README file that comes with the CVS 1.0 kit.
* 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.
*
* **************** History of Users and Module ****************
* 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.
*/
/* **************** History of Users and Module ****************
*
* LOGGING: Append record to "${CVSROOT}/CVSROOTADM/CVSROOTADM_HISTORY".
*
@ -236,7 +245,7 @@ static short tz_local;
static time_t tz_seconds_east_of_GMT;
static char *tz_name = "+0000";
char *logHistory = ALL_HISTORY_REC_TYPES;
char *logHistory;
/* -r, -t, or -b options, malloc'd. These are "" if the option in
question is not specified or is overridden by another option. The
@ -257,24 +266,24 @@ static struct hrec *last_backto;
we do. */
static char *rec_types;
static int hrec_count;
static int hrec_max;
static size_t hrec_count;
static size_t hrec_max;
static char **user_list; /* Ptr to array of ptrs to user names */
static int user_max; /* Number of elements allocated */
static int user_count; /* Number of elements used */
static size_t user_max; /* Number of elements allocated */
static size_t user_count; /* Number of elements used */
static struct file_list_str
{
char *l_file;
char *l_module;
} *file_list; /* Ptr to array file name structs */
static int file_max; /* Number of elements allocated */
static int file_count; /* Number of elements used */
static size_t file_max; /* Number of elements allocated */
static size_t file_count; /* Number of elements used */
static char **mod_list; /* Ptr to array of ptrs to module names */
static int mod_max; /* Number of elements allocated */
static int mod_count; /* Number of elements used */
static size_t mod_max; /* Number of elements allocated */
static size_t mod_count; /* Number of elements used */
static char *histfile; /* Ptr to the history file name */
@ -442,7 +451,7 @@ history (argc, argv)
backto = xstrdup (optarg);
break;
case 'f': /* For specified file */
save_file ("", optarg, (char *) NULL);
save_file (NULL, optarg, NULL);
break;
case 'm': /* Full module report */
if (!module_report++) report_count++;
@ -451,7 +460,7 @@ history (argc, argv)
save_module (optarg);
break;
case 'p': /* For specified directory */
save_file (optarg, "", (char *) NULL);
save_file (optarg, NULL, NULL);
break;
case 'r': /* Since specified Tag/Rev */
if (since_date || *since_tag || *backto)
@ -534,7 +543,7 @@ history (argc, argv)
argc -= optind;
argv += optind;
for (i = 0; i < argc; i++)
save_file ("", argv[i], (char *) NULL);
save_file (NULL, argv[i], NULL);
/* ================ Now analyze the arguments a bit */
@ -724,9 +733,10 @@ history_write (type, update_dir, revs, name, repository)
* readonlyfs.
*/
return;
if ( strchr(logHistory, type) == NULL )
if (strchr (logHistory, type) == NULL)
return;
fname = xmalloc (strlen (current_parsed_root->directory) + sizeof (CVSROOTADM)
fname = xmalloc (strlen (current_parsed_root->directory)
+ sizeof (CVSROOTADM)
+ sizeof (CVSROOTADM_HISTORY) + 3);
(void) sprintf (fname, "%s/%s/%s", current_parsed_root->directory,
CVSROOTADM, CVSROOTADM_HISTORY);
@ -752,6 +762,11 @@ history_write (type, update_dir, revs, name, repository)
CLIENT_SERVER_STR, fname);
if (noexec)
goto out;
if (!history_lock (current_parsed_root->directory))
/* history_lock() will already have printed an error on failure. */
goto out;
fd = CVS_OPEN (fname, O_WRONLY | O_APPEND | OPEN_BINARY, 0666);
if (fd < 0)
{
@ -789,7 +804,7 @@ history_write (type, update_dir, revs, name, repository)
if (save_cwd (&cwd))
error_exit ();
if ( CVS_CHDIR (pwdir) < 0 || (homedir = xgetwd ()) == NULL)
if (CVS_CHDIR (pwdir) < 0 || (homedir = xgetwd ()) == NULL)
homedir = pwdir;
if (restore_cwd (&cwd, NULL))
@ -896,6 +911,7 @@ history_write (type, update_dir, revs, name, repository)
error (1, errno, "cannot close history file: %s", fname);
free (workdir);
out:
clear_history_lock ();
free (fname);
}
@ -910,7 +926,8 @@ save_user (name)
if (user_count == user_max)
{
user_max = xsum (user_max, USER_INCREMENT);
if (size_overflow_p (xtimes (user_max, sizeof (char *))))
if (user_count == user_max
|| size_overflow_p (xtimes (user_max, sizeof (char *))))
{
error (0, 0, "save_user: too many users");
return;
@ -944,7 +961,8 @@ save_file (dir, name, module)
if (file_count == file_max)
{
file_max = xsum (file_max, FILE_INCREMENT);
if (size_overflow_p (xtimes (file_max, sizeof (*fl))))
if (file_count == file_max
|| size_overflow_p (xtimes (file_max, sizeof (*fl))))
{
error (0, 0, "save_file: too many files");
return;
@ -952,7 +970,9 @@ save_file (dir, name, module)
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);
fl->l_file = cp = xmalloc (dir ? strlen (dir) : 0
+ name ? strlen (name) : 0
+ 2);
fl->l_module = module;
if (dir && *dir)
@ -989,7 +1009,8 @@ save_module (module)
if (mod_count == mod_max)
{
mod_max = xsum (mod_max, MODULE_INCREMENT);
if (size_overflow_p (xtimes (mod_max, sizeof (char *))))
if (mod_count == mod_max
|| size_overflow_p (xtimes (mod_max, sizeof (char *))))
{
error (0, 0, "save_module: too many modules");
return;
@ -1142,9 +1163,13 @@ read_hrecs (fname)
{
struct hrec *old_head = hrec_head;
hrec_max += HREC_INCREMENT;
hrec_head = xrealloc ((char *) hrec_head,
hrec_max * sizeof (struct hrec));
hrec_max = xsum (hrec_max, HREC_INCREMENT);
if (hrec_count == hrec_max
|| size_overflow_p (xtimes (hrec_max, sizeof (struct hrec))))
error (1, 0, "Too many history records in history file.");
hrec_head = xrealloc (hrec_head,
xtimes (hrec_max, sizeof (struct hrec)));
if (last_since_tag)
last_since_tag = hrec_head + (last_since_tag - old_head);
if (last_backto)
@ -1393,6 +1418,8 @@ select_hrec (hr)
if (within (cp, cp2))
{
hr->mod = fl->l_module;
if (cmpfile != NULL)
free (cmpfile);
break;
}
if (cmpfile != NULL)

View File

@ -1,6 +1,8 @@
/*
* Copyright (c) 2003, Derek Price, Ximbiot <http://ximbiot.com>,
* and the Free Software Foundation
* Copyright (C) 2003-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 2003-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* You may distribute under the terms of the GNU General Public License
* as specified in the README file that comes with the CVS source

View File

@ -65,13 +65,11 @@ ign_setup ()
ign_add (tmp, 0);
free (tmp);
#ifdef CLIENT_SUPPORT
/* The client handles another way, by (after it does its own ignore file
processing, and only if !ign_inhibit_server), letting the server
know about the files and letting it decide whether to ignore
them based on CVSROOOTADM_IGNORE. */
if (!current_parsed_root->isremote)
#endif
{
char *file = xmalloc (strlen (current_parsed_root->directory) + sizeof (CVSROOTADM)
+ sizeof (CVSROOTADM_IGNORE) + 10);
@ -237,10 +235,25 @@ ign_add (ign, hold)
free (ign_list[i]);
ign_hold = -1;
}
s_ign_list = (char **) xmalloc (ign_count * sizeof (char *));
for (i = 0; i < ign_count; i++)
s_ign_list[i] = ign_list[i];
s_ign_count = ign_count;
if (s_ign_list)
{
/* Don't save the ignore list twice - if there are two
* bangs in a local .cvsignore file then we don't want to
* save the new list the first bang created.
*
* We still need to free the "new" ignore list.
*/
for (i = 0; i < ign_count; i++)
free (ign_list[i]);
}
else
{
/* Save the ignore list for later. */
s_ign_list = xmalloc (ign_count * sizeof (char *));
for (i = 0; i < ign_count; i++)
s_ign_list[i] = ign_list[i];
s_ign_count = ign_count;
}
ign_count = 1;
/* Always ignore the "CVS" directory. */
ign_list[0] = xstrdup ("CVS");
@ -331,7 +344,7 @@ ignore_directory (name)
i = dir_ign_current;
while (i--)
{
if (strncmp (name, dir_ign_list[i], strlen (dir_ign_list[i])) == 0)
if (strncmp (name, dir_ign_list[i], strlen (dir_ign_list[i])+1) == 0)
return 1;
}

View File

@ -1,6 +1,11 @@
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
*
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
* and others.
*
* Portions Copyright (C) 1992, Brian Berliner and Jeff Polk
* Portions Copyright (C) 1989-1992, Brian Berliner
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS source distribution.
@ -84,17 +89,14 @@ import (argc, argv)
{
case 'Q':
case 'q':
#ifdef SERVER_SUPPORT
/* The CVS 1.5 client sends these options (in addition to
Global_option requests), so we must ignore them. */
if (!server_active)
#endif
error (1, 0,
"-q or -Q must be specified before \"%s\"",
cvs_cmd_name);
break;
case 'd':
#ifdef SERVER_SUPPORT
if (server_active)
{
/* CVS 1.10 and older clients will send this, but it
@ -104,7 +106,6 @@ import (argc, argv)
"warning: not setting the time of import from the file");
error (0, 0, "due to client limitations");
}
#endif
use_file_modtime = 1;
break;
case 'b':
@ -117,6 +118,7 @@ import (argc, argv)
#else
use_editor = 0;
#endif
if (message) free (message);
message = xstrdup(optarg);
break;
case 'I':
@ -143,7 +145,6 @@ import (argc, argv)
if (argc < 3)
usage (import_usage);
#ifdef SERVER_SUPPORT
/* This is for handling the Checkin-time request. It might seem a
bit odd to enable the use_file_modtime code even in the case
where Checkin-time was not sent for a particular file. The
@ -155,7 +156,6 @@ import (argc, argv)
if (server_active)
use_file_modtime = 1;
#endif
/* Don't allow "CVS" as any directory in module path.
*
@ -212,11 +212,22 @@ import (argc, argv)
* support branching to a single level, so the specified vendor branch
* must only have two dots in it (like "1.1.1").
*/
for (cp = vbranch; *cp != '\0'; cp++)
if (!isdigit ((unsigned char) *cp) && *cp != '.')
error (1, 0, "%s is not a numeric branch", vbranch);
if (numdots (vbranch) != 2)
error (1, 0, "Only branches with two dots are supported: %s", vbranch);
{
regex_t pat;
int ret = regcomp (&pat, "^[1-9][0-9]*\\.[1-9][0-9]*\\.[1-9][0-9]*$",
REG_EXTENDED);
assert (!ret);
if (regexec (&pat, vbranch, 0, NULL, 0))
{
error (1, 0,
"Only numeric branch specifications with two dots are\n"
"supported by import, not `%s'. For example: `1.1.1'.",
vbranch);
}
regfree (&pat);
}
/* Set vhead to the branch's parent. */
vhead = xstrdup (vbranch);
cp = strrchr (vhead, '.');
*cp = '\0';
@ -230,17 +241,10 @@ import (argc, argv)
}
#endif
if (
#ifdef SERVER_SUPPORT
!server_active &&
#endif
use_editor)
if (!server_active && use_editor)
{
do_editor ((char *) NULL, &message,
#ifdef CLIENT_SUPPORT
current_parsed_root->isremote ? (char *) NULL :
#endif
repository,
current_parsed_root->isremote ? (char *) NULL : repository,
(List *) NULL);
}
do_verify (&message, repository);
@ -313,7 +317,8 @@ import (argc, argv)
/* Create the logfile that will be logged upon completion */
if ((logfp = cvs_temp_file (&tmpfile)) == NULL)
error (1, errno, "cannot create temporary file `%s'", tmpfile);
error (1, errno, "cannot create temporary file `%s'",
tmpfile ? tmpfile : "(null)");
/* On systems where we can unlink an open file, do so, so it will go
away no matter how we exit. FIXME-maybe: Should be checking for
errors but I'm not sure which error(s) we get if we are on a system
@ -434,6 +439,9 @@ import_descend (message, vtag, targc, targv)
ign_add_file (CVSDOTIGNORE, 1);
wrap_add_file (CVSDOTWRAPPER, 1);
if (!current_parsed_root->isremote)
lock_dir_for_write (repository);
if ((dirp = CVS_OPENDIR (".")) == NULL)
{
error (0, errno, "cannot open directory");
@ -446,13 +454,13 @@ import_descend (message, vtag, targc, targv)
{
if (strcmp (dp->d_name, ".") == 0 || strcmp (dp->d_name, "..") == 0)
goto one_more_time_boys;
#ifdef SERVER_SUPPORT
/* CVS directories are created in the temp directory by
server.c because it doesn't special-case import. So
don't print a message about them, regardless of -I!. */
if (server_active && strcmp (dp->d_name, CVSADM) == 0)
goto one_more_time_boys;
#endif
if (ign_name (dp->d_name))
{
add_log ('I', dp->d_name);
@ -516,6 +524,9 @@ import_descend (message, vtag, targc, targv)
(void) CVS_CLOSEDIR (dirp);
}
if (!current_parsed_root->isremote)
Lock_Cleanup ();
if (dirlist != NULL)
{
Node *head, *p;
@ -748,7 +759,7 @@ add_rev (message, rcs, vfile, vers)
tocvsPath = wrap_tocvs_process_file (vfile);
status = RCS_checkin (rcs, tocvsPath == NULL ? vfile : tocvsPath,
message, vbranch,
message, vbranch, 0,
(RCS_FLAGS_QUIET | RCS_FLAGS_KEEPFILE
| (use_file_modtime ? RCS_FLAGS_MODTIME : 0)));
ierrno = errno;
@ -1584,11 +1595,7 @@ import_descend_dir (message, dir, vtag, targc, targv)
repository = new;
}
#ifdef CLIENT_SUPPORT
if (!quiet && !current_parsed_root->isremote)
#else
if (!quiet)
#endif
error (0, 0, "Importing %s", repository);
if ( CVS_CHDIR (dir) < 0)
@ -1599,11 +1606,7 @@ import_descend_dir (message, dir, vtag, targc, targv)
err = 1;
goto out;
}
#ifdef CLIENT_SUPPORT
if (!current_parsed_root->isremote && !isdir (repository))
#else
if (!isdir (repository))
#endif
{
rcs = xmalloc (strlen (repository) + sizeof (RCSEXT) + 5);
(void) sprintf (rcs, "%s%s", repository, RCSEXT);

Some files were not shown because too many files have changed in this diff Show More