This commit was generated by cvs2svn to compensate for changes in r128266,

which included commits to RCS files with non-trunk default branches.
This commit is contained in:
Peter Wemm 2004-04-15 01:01:56 +00:00
commit edc4a449d1
109 changed files with 17777 additions and 6587 deletions

View File

@ -1,4 +1,88 @@
Authors of GNU CVS
Um, yeah. There were lots of 'em. See the "Credits" section of the
README file and the individual ChangeLog files for more.
The conflict-resolution algorithms and much of the administrative file
definitions of CVS were based on the original package written by Dick Grune
at Vrije Universiteit in Amsterdam <dick@cs.vu.nl>, and posted to
comp.sources.unix in the volume 6 release sometime in 1986. This original
version was a collection of shell scripts. I am thankful that Dick made
his work available.
Brian Berliner from Prisma, Inc. (now at Sun Microsystems, Inc.)
<berliner@sun.com> converted the original CVS shell scripts into reasonably
fast C and added many, many features to support software release control
functions. See the manual page in the "man" directory. A copy of the
USENIX article presented at the Winter 1990 USENIX Conference, Washington
D.C., is included in the "doc" directory.
Jeff Polk from BSDI <polk@bsdi.com> converted the CVS 1.2
sources into much more readable and maintainable C code. He also added a
whole lot of functionality and modularity to the code in the process.
See the bottom of the NEWS file (from about 1992).
david d `zoo' zuhn <zoo@armadillo.com> contributed the working base code
for CVS 1.4 Alpha. His work carries on from work done by K. Richard Pixley
and others at Cygnus Support. The CVS 1.4 upgrade is due in large part to
Zoo's efforts.
David G. Grubbs <dgg@odi.com> contributed the CVS "history" and "release"
commands. As well as the ever-so-useful "-n" option of CVS which tells CVS
to show what it would do, without actually doing it. He also contributed
support for the .cvsignore file.
The Free Software Foundation (GNU) contributed most of the portability
framework that CVS now uses. This can be found in the "configure" script,
the Makefile's, and basically most of the "lib" directory.
K. Richard Pixley, Cygnus Support <rich@cygnus.com> contributed many bug
fixes/enhancement as well as completing early reviews of the CVS 1.3 manual
pages.
Roland Pesch, then of Cygnus Support <roland@wrs.com> contributed
brand new cvs(1) and cvs(5) manual pages. Thanks to him for saving us
from poor use of our language!
Paul Sander, HaL Computer Systems, Inc. <paul@hal.com> wrote and
contributed the code in lib/sighandle.c. I added support for POSIX, BSD,
and non-POSIX/non-BSD systems.
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
2003.
There have been many, many contributions not listed here. Consult the
individual ChangeLog files in each directory for a more complete idea.
In addition to the above contributors, the following Beta testers
deserve special mention for their support. This is only a partial
list; if you have helped in this way and would like to be listed, let
bug-cvs know (as described in the Cederqvist manual).
Mark D. Baushke <mdb@cisco.com>
Per Cederqvist <ceder@signum.se>
J.T. Conklin <jtc@cygnus.com>
Vince DeMarco <vdemarco@fdcsrvr.cs.mci.com>
Paul Eggert <eggert@twinsun.com>
Lal George <george@research.att.com>
Dean E. Hardi <Dean.E.Hardi@ccmail.jpl.nasa.gov>
Mike Heath <mike@pencom.com>
Jim Kingdon <kingdon@cygnus.com>
Bernd Leibing <bernd.leibing@rz.uni-ulm.de>
Benedict Lofstedt <benedict@tusc.com.au>
Dave Love <d.love@dl.ac.uk>
Robert Lupton the Good <rhl@astro.princeton.edu>
Tom McAliney <tom@hilco.com>
Eberhard Mattes <mattes@azu.informatik.uni-stuttgart.de>
Jim Meyering <meyering@comco.com>
Thomas Mohr <mohr@lts.sel.alcatel.de>
Thomas Nilsson <thoni@softlab.se>
Raye Raskin <raye.raskin@lia.com>
Harlan Stenn <harlan@landmark.com>
Gunnar Tornblom <gunnar.tornblom@senet.abb.se>
Greg A. Woods <woods@planix.com>
Many contributors have added code to the "contrib" directory. See the
README file there for a list of what is available. There is also a
contributed GNU Emacs CVS-mode in tools/pcl-cvs.

View File

@ -15,16 +15,6 @@ similar file for the unix-like operating systems (not yet, at least).
This file also might contain some platform-specific bugs.
* Need more work on the procedure for fixing it if a binary file is
accidentally added in text mode (sanity.sh test cases, better
documentation, probably update and/or admin -kb should update
the -k setting in CVS/Entries).
* Wrappers (-t/-f) do not work client/server, and there are a variety of other
bugs and annoyances with wrappers.
* If your login name contains a space or various other characters
(particularly an issue on Windows), CVS will have trouble (it will
write invalid RCS files, probably). The fix would be to have CVS
@ -42,6 +32,21 @@ provide a "Option-read-write" request which sends -w, in addition to
"Global_option -r" which sends -r.
* Symbolic links to files will not work with or without LockDir. In the
repository, you should avoid using symbolic links to files since this issue
can cause data loss. Symlinks are only a problem when writing files. If your
repository does not allow any write access, symlinks are not a problem.
* Symbolic links to directories will not work with LockDir. In the
repository, you should avoid using symbolic links to directories if
you intend to use LockDir as the correct directory will NOT be locked
by CVS during write. Directory symlinks are not recommended, but should work
as long as LockDir is not being used. Symlinks are only a problem when
writing files. If your repository does not allow any write access, symlinks
are never a problem, whether or not LockDir is in use.
* "make remotecheck" sometimes fails on test 187a3 with
cvs server: in directory .:
cvs [server aborted]: *PANIC* administration files missing
@ -59,49 +64,13 @@ file's description.
users who try to add the same directory at nearly the same time.
* 'cvs admin' dumped core when files were missing from working directory
(and from the repository)?
* The following bug was reported against CVS 1.9:
Create a module named test with a file named test in it.
cactus:sfavor> cvs get test
cvs checkout: Updating test
U test/test
cactus:sfavor> cd test
cactus:sfavor> cvs get test
cvs checkout: cannot chdir to test: Not a directory
cvs checkout: ignoring module test
Exit 1
cactus:sfavor> cvs update
cvs update: Updating .
rcs.c:2139: failed assertion `rev == NULL || isdigit (*rev)'
Abort (core dumped)
Exit 134
* pcl-cvs doesn't like it when you try to check in a file which isn't
up-to-date. The messages produced by the server perhaps don't match
what pcl-cvs is looking for.
* From: billr@mpd.tandem.com (Bill Robertson)
Subject: Problem with rtag and the -D option
Date: Fri, 17 Mar 1995 10:53:29 -0600 (CST)
I have been trying to use the -D option to specify a date for tagging, but
rtag does not recognize the -D option. It is documented to do so and I've
tested the use of -D with cvs update and cvs diff and it works fine there.
* From: "Charles M. Hannum" <mycroft@ai.mit.edu>
To: info-cvs@prep.ai.mit.edu
Subject: Still one more bug
Date: Sat, 25 Feb 1995 17:01:15 -0500
mycroft@duality [1]; cd /usr/src/lib/libc
mycroft@duality [1]; cvs diff -c2 '-D1 day ago' -Dnow
mycroft@duality [1]; cvs diff -C2 '-D1 day ago' -Dnow
cvs server: Diffing .
cvs server: Diffing DB
cvs [server aborted]: could not chdir to DB: No such file or directory
@ -229,3 +198,36 @@ file's description.
Send me a PGP-signed message if you want the password to use the machine
where the problem showed up.
* CVS does not always seem to be waiting to the next filesystem timestamp
quanta after commits. So far this has only shown up in testing under the BSDI
OS. The symptoms are that ocassionally CVS will not notice that modified files
are modified, though the file must be modified within a short time after the
commit, probably milliseconds or seconds, for this symptom to be noticed. One
suspected cause is that one of the calls to sleep_past() is being called with
an incorrect value, though this does not explain why symptoms have only been
noticed under BSDI.
* Spaces in arguments to `cvs diff' are currently split on spaces and tabs
before being passed to diff. This can often cause diff to abort since it can
no longer interpret its options string and if it can, coincidentally,
interpret its option string, then the problem may be output in unexpected
formats.
* `release' of a project subdir does not remove the `subdir' entry from
`./CVS/Entries'.
* The Windows Microsoft Visual C++ project files are out of date, but the
project can still be built under Windows using `nmake'. See the INSTALL
file for more.
* Status
/*-------.
| Stable |
`-------*/
/*-------------------------.
| Sane for full scale use. |
`-------------------------*/

View File

@ -1,3 +1,825 @@
2004-04-13 Derek Price <derek@ximbiot.com>
* NEWS: Note validation of paths passed to the client.
2004-04-07 Derek Price <derek@ximbiot.com>
* NEWS: Clarify relative-path up-reference article.
2004-04-07 Derek Price <derek@ximbiot.com>
* NEWS: Note ignoring of method options in CVSROOTs.
2004-04-06 Derek Price <derek@ximbiot.com>
* TODO (196, 217, 219, 220, 222, 226): Remove completed items.
(230): New item.
2004-04-06 Derek Price <derek@ximbiot.com>
* NEWS: Note this change.
* configure.in: Do not try and use TMP, TEMP, or TMPDIR as default
temporary directories.
* configure: Regenerated.
2004-04-04 Derek Price <derek@ximbiot.com>
* NEWS: Note Cygwin handles paths like X:\.
2004-04-02 Derek Price <derek@ximbiot.com>
* NEWS: Note Windows ISDIRSEP fix.
2004-04-02 Derek Price <derek@ximbiot.com>
* INSTALL: Instruct users to use the Workspace file and not the project
file for MSVC++.
(Patch from Conrad T. Pino <conrad@pino.com>.)
2004-04-02 Derek Price <derek@ximbiot.com>
* NEWS: Make some notes as to client/serverness of changes.
2004-04-02 Derek Price <derek@ximbiot.com>
* NEWS: Note relative path fix.
2004-04-01 Derek Price <derek@ximbiot.com>
* NEWS: Record run race removal.
2004-03-31 Mark D. Baushke <mdb@cvshome.org>
* cvs.spec.in (BuildRequires): Do not fail if info DIR file does
not exist. (Not everyone has an install-info that generates the
dir file that we want deleted.)
(Report from Geoff Beier <geoff@caradas.com>.)
2004-03-25 Derek Price <derek@ximbiot.com>
* NEWS: Note failure of Cygwin to convert back slashes to slashes.
2004-03-25 Derek Price <derek@ximbiot.com>
* cvs.spec.in (BuildRoot): Use a more unique directory name.
2004-03-22 Derek Price <derek@ximbiot.com>
* INSTALL: Note compilation & --without-gssapi requirement for HPPA
with HP-UX 11.11.
(Report from Nicolas Vervelle <nicolas.vervelle@steria.com>.)
2004-03-20 Derek Price <derek@ximbiot.com>
* NEWS: Note resurrection fixes.
2004-03-18 Derek Price <derek@ximbiot.com>
* NEWS: Back out previous NEWS change at Larry Jones' suggestion.
2004-03-17 Derek Price <derek@ximbiot.com>
* configure.in (--enable-password-authentication-client): Correct
error message text.
* NEWS: Note this change.
* configure: Regenerated.
2004-03-15 Derek Price <derek@ximbiot.com>
* NEWS: Note cvs release + Kerberos fix.
2004-03-15 Derek Price <derek@ximbiot.com>
* configure.in: Correct grammar in help text.
* configure: Regenerated.
2004-03-15 Derek Price <derek@ximbiot.com>
* macintosh/.cvsignore: Complete pruning of directory started in 1999.
2004-03-14 Derek Price <derek@ximbiot.com>
* NEWS: Note resurrection fix.
2004-03-14 Derek Price <derek@ximbiot.com>
* NEWS: Note error & status message corrections.
2004-03-14 Derek Price <derek@ximbiot.com>
* NEWS: Note diff of added files against arbitrary revisions fix.
2004-03-12 Derek Price <derek@ximbiot.com>
* NEWS: Note Larry's recent documentation fixes.
2004-03-03 Derek Price <derek@ximbiot.com>
* NEWS: Note that directories and files named `CVS' are now also
rejected by import.
2004-02-25 Derek Price <derek@ximbiot.com>
* NEWS: Update dying gasp note.
2004-02-25 Derek Price <derek@ximbiot.com>
* NEWS: Note `cvs release' Entries corruption fix.
2004-02-20 Derek Price <derek@ximbiot.com>
* NEWS: Note that the dying gasp check has now been completely removed.
2004-02-17 Derek Price <derek@ximbiot.com>
* NEWS: Note spec file fix.
* cvs.spec: Update to avoid the error checking algorithm's of more
recent version of RPM.
2004-02-17 Derek Price <derek@ximbiot.com>
* NEWS: Note recent commenting of src/checkout.c and Mark's leak fixes.
2004-02-12 Derek Price <derek@ximbiot.com>
* NEWS: Note Mark D. Baushke's recent memory leak plugs.
2004-02-12 Derek Price <derek@ximbiot.com>
* NEWS: Note Ville Skyttä's other recent man page patch.
2004-02-12 Derek Price <derek@ximbiot.com>
* NEWS: Note Ville Skyttä's recent man page patch.
2004-02-11 Derek Price <derek@ximbiot.com>
* NEWS: Note :fork: segfault avoidance.
2004-02-11 Derek Price <derek@ximbiot.com>
* NEWS: Note readability improvements.
2004-02-10 Derek Price <derek@ximbiot.com>
* NEWS: Note dying gasp check.
2004-02-10 Derek Price <derek@ximbiot.com>
* NEWS: Note flow control pipe race fix.
2004-02-10 Derek Price <derek@ximbiot.com>
* BUGS: Note problems building with MSVC++ under Windows and
workaround.
* INSTALL: Ditto.
2004-02-10 Derek Price <derek@ximbiot.com>
* cvsnt.mak: Add stack.c and stack.h in order to compile under Windows.
* NEWS: Note Windows fixes.
* README: Update copyright notice.
2004-02-09 Derek Price <derek@ximbiot.com>
* NEWS: Note new tests in sanity.sh.
2004-02-06 Derek Price <derek@ximbiot.com>
* README: Undo accidental overwrite.
2004-02-04 Derek Price <derek@ximbiot.com>
* NEWS: Note that alias module recursion is now more comprehensive.
2004-02-03 Derek Price <derek@ximbiot.com>
* NEWS: Note case insensitive client directory case preservation.
2004-02-02 Derek Price <derek@ximbiot.com>
* NEWS: Note new join-rm tests.
2004-02-02 Derek Price <derek@ximbiot.com>
* NEWS: Note removal from the server of support for case insensitive
clients.
2004-01-30 Derek Price <derek@ximbiot.com>
* NEWS: Note man page fix.
2004-01-30 Derek Price <derek@ximbiot.com>
* NEWS: Note contrib/log_accum tidy.
2004-01-25 Derek Price <derek@ximbiot.com>
* NEWS: Note Kerberos 4 fix.
2004-01-22 Derek Price <derek@ximbiot.com>
* NEWS: Note recent infinite alias loop fix.
2004-01-22 Derek Price <derek@ximbiot.com>
* INSTALL: Remove a note about an Automake bug that has been fixed for
quite awhile.
2004-01-22 Derek Price <derek@ximbiot.com>
* INSTALL: s/Automake 1.7.5/Automake 1.7.9/.
2004-01-14 Derek Price <derek@ximbiot.com>
* NEWS: Note Larrys recent mktemp.sh inclusion, documentation reorg,
and zlib code fix.
2003-12-23 Larry Jones <lawrence.jones@ugsplm.com>
* Makefile.am: Add mktemp.sh to EXTRA_DIST.
* Makefile.in: Regenerated.
* configure.in: Get mktemp.sh from $srcdir.
* configure: Regenerated.
(Reported by Matt Selsky <selsky@columbia.edu>.)
2003-12-18 Derek Price <derek@ximbiot.com>
* NEWS: Add since 1.11.11 section.
* configure.in: Update for dev 1.11.11.1.
* configure: Regenerated.
2003-12-18 Derek Price <derek@ximbiot.com>
* configure.in: Update for release 1.11.11.
* configure: Regenerated.
2003-12-18 Derek Price <derek@ximbiot.com>
* NEWS: Note syslog of root attempts.
2003-12-18 Derek Price <derek@ximbiot.com>
* NEWS: Note that pserver can no longer run as root.
2003-12-07 Mark D. Baushke <mdb@cvshome.org>
* configure.in (AC_SYS_LARGEFILE): Remove. More work is needed
before AC_SYS_LARGEFILE will work on all platforms.
* configure, config.h.in: Regenerated.
* NEWS: Remove last note.
* configure.in (AC_SYS_LARGEFILE): Add. The history file on
Solaris boxes can grow beyond 2GB.
* configure, config.h.in: Regenerated.
* NEWS: Note addition of --disable-largefiles option.
2003-12-05 Derek Price <derek@ximbiot.com>
* configure.in: Update to require Automake 1.7.9.
2003-12-04 Derek Price <derek@ximbiot.com>
* configure.in: Update for dev version 1.11.10.1.
* NEWS: Add Changes since 1.11.10 section.
* configure: Regenerated.
2003-12-04 Derek Price <derek@ximbiot.com>
* configure.in: Update for release 1.11.10.
* configure: Regenerated.
2003-12-03 Derek Price <derek@ximbiot.com>
* configure.in: Always AC_LIBOBJ(fncase) when filenames are found to be
case insensitive.
* configure: Regenerated.
2003-11-26 Derek Price <derek@ximbiot.com>
* NEWS: Note recase tests.
2003-11-26 Derek Price <derek@ximbiot.com>
* NEWS: Note new test suite functionality.
2003-11-25 Derek Price <derek@ximbiot.com>
* NEWS: Note latest case insensitivity fix.
2003-11-19 Derek Price <derek@ximbiot.com>
* NEWS: Rename "OTHER ISSUES" to "GENERAL USER ISSUES" and move the
note about the Autoconf upgrade to a new "DEVELOPER ISSUES" section.
Add a note about upgrading Automake.
* aclocal.m4, configure, **/Makefile.in: Regenerated with Automake
1.7.9.
2003-11-18 Derek Price <derek@ximbiot.com>
* NEWS: Subdivide Changes section into "SERVER SECURITY ISSUES" and
"OTHER ISSUES". Note module abspath issue in security section.
2003-11-10 Derek Price <derek@ximbiot.com>
* BUGS: Add some detail to the last two notes Mark added.
2003-11-10 Mark D. Baushke <mdb@cvshome.org>
* BUGS: Note that symlinks to files will not work with or without
LockDir. Note that symlinks to directories will not work with
LockDir.
* NEWS (Changes since 1.11.9): Note symlinked CVSROOT now works.
2003-11-10 Derek Price <derek@ximbiot.com>
* configure.in: Require Autoconf 2.58.
* INSTALL, NEWS: Note new Autoconf requirements.
* configure: Regenerated.
2003-11-04 Derek Price <derek@ximbiot.com>
* configure.in: Add some more help text for --enable-case-sensitivity.
* configure: Regenerated.
2003-11-03 Derek Price <derek@ximbiot.com>
* configure.in: Require Automake 1.7.5.
2003-11-03 Derek Price <derek@ximbiot.com>
* INSTALL: Add some notes on Autoconf requirements.
2003-10-31 Derek Price <derek@ximbiot.com>
* INSTALL: Note Cygwin as an option for building CVS under Windows.
2003-10-31 Derek Price <derek@ximbiot.com>
* INSTALL: s/cvsgui/wincvs/.
2003-10-27 Derek Price <derek@ximbiot.com>
* configure.in: Move case sensitivity test to the enable-* section and
allow override via command line switch.
* NEWS: Update last news item to reflect new command line switch.
* configure, config.h.in: Regenerated.
2003-10-27 Derek Price <derek@ximbiot.com>
* configure.in: Add new test for a case insensitive file system.
* configure, config.h.in: Regenerated.
* NEWS: Note the above change.
2003-10-24 Derek Price <derek@ximbiot.com>
* NEWS: Update recent text about joins to reflect new behavior.
2003-10-24 Derek Price <derek@ximbiot.com>
* BUGS: Note that release of a project subdir does not remove the entry
from `./CVS/Entries'.
2003-10-24 Derek Price <derek@ximbiot.com>
* BUGS: Remove obsolete bug report.
(Patch from Paul Edwards <somewhere in Australia>.)
2003-10-24 Derek Price <derek@ximbiot.com>
* BUGS: Remove obsolete bug report.
(Patch from Paul Edwards <somewhere in Australia>.)
2003-10-23 Mark D. Baushke <mdb@cvshome.org>
* NEWS: Note behavior change for cvs update -jrev1 -jrev2.
2003-10-21 Derek Price <derek@ximbiot.com>
* NEWS: Note Mark's recent admin -m fix.
2003-10-21 Derek Price <derek@ximbiot.com>
* NEWS: Note the @email{} and @url{} fixes as misc documentation fixes.
2003-10-14 Derek Price <derek@ximbiot.com>
* NEWS: Note POSIX 1003.1-2001 compatibility of docs and scripts.
2003-10-14 Derek Price <derek@ximbiot.com>
Port to pedantic POSIX 1003.1-2001 hosts, such as Debian GNU/Linux
testing with _POSIX2_VERSION=200112 in the environment.
* BUGS: Suggest 'diff -C2', not 'diff -c2'.
* FAQ: Suggest 'sort -k 1.2', not 'sort +0.1'.
* depcomp: Sync to the depcomp shipped with Automake 1.7.8, as
it has the bug fixed and that's better than maintaining our
own depcomp.
(Patch from Paul Eggert <eggert@twinsun.com>.)
2003-10-14 Derek Price <derek@ximbiot.com>
* INSTALL: Add HPPA 2.0 running HP-UX 10.20 for CVS 1.11.9.
(Report from Tom Kuiper <kuiper@DSNra.JPL.NASA.gov>.)
2003-10-10 Derek Price <derek@ximbiot.com>
* NEWS (Changes since 1.11.9): New section.
* configure.in: Update package version to 1.11.9.1.
* configure: Regenerated.
2003-10-10 Derek Price <derek@ximbiot.com>
* configure.in: Update package version to 1.11.9.
* configure: Regenerated.
2003-10-08 Derek Price <derek@ximbiot.com>
* NEWS: Note history reporting fix.
2003-10-08 Derek Price <derek@ximbiot.com>
* NEWS: Improve syntax and punctuation of my last entry.
2003-10-08 Derek Price <derek@ximbiot.com>
* NEWS: Note history fix for clients requesting `P' records.
2003-10-07 Derek Price <derek@ximbiot.com>
* NEWS: Note case insensitive file lookup fix.
2003-10-03 Derek Price <derek@ximbiot.com>
* NEWS: Note server ignoring `-l' with a warning.
2003-10-02 Derek Price <derek@ximbiot.com>
* NEWS (Changes since 1.11.8): Add empty section.
* configure.in: Update package version to 1.11.8.1.
* configure: Regenerated.
2003-10-02 Derek Price <derek@ximbiot.com>
* configure.in: Update package version to 1.11.8.
* configure: Regenerated.
2003-10-02 Derek Price <derek@ximbiot.com>
* NEWS: Note getpass fix.
2003-09-29 Derek Price <derek@ximbiot.com>
* NEWS (Changes since 1.11.7): Insert empty entry.
* configure.in: Update to 1.11.7.1.
* configure: Regenerated.
2003-09-29 Derek Price <derek@ximbiot.com>
* configure.in: Update package version to 1.11.7.
* configure: Regenerated.
2003-09-29 Derek Price <derek@ximbiot.com>
* NEWS: Note recent fix of the potential segfault during a diff.
2003-09-26 Derek Price <derek@ximbiot.com>
* BUGS: Note bug in options passed to diff via `cvs diff'.
2003-09-12 Derek Price <derek@ximbiot.com>
* NEWS: Note checkoutlist error message handling fix.
2003-08-27 Larry Jones <lawrence.jones@eds.com>
* NEWS: Note client/server messages have real command name, client/
server updates get logged in history file, history file has "P"
record type.
2003-07-29 Derek Price <derek@ximbiot.com>
* configure.in: Replace my recent misuse of AH_VERBATIM with a call to
AC_DEFINE.
* config.h.in, configure: Regenerated.
2003-07-29 Derek Price <derek@ximbiot.com>
* configure.in: Do not check for getpassphrase. Define `getpass' to
`cvs_getpass' in config.h to avoid conflicts with system decls.
* NEWS: Note use of GNULIB getpass.
* config.h.in, configure: Regenerated.
2003-07-25 Derek Price <derek@ximbiot.com>
* INSTALL: Note --without-gssapi required to configure on OS X.
2003-07-18 Derek Price <derek@ximbiot.com>
* BUGS: Remove mention of wrappers -t/-f since they are no longer
supported.
2003-07-18 Derek Price <derek@ximbiot.com>
* Makefile.am (EXTRA_DIST): Add cvs.spec so that RPMs can be built
directly from tarballs.
* Makefile.in: Regenerated.
2003-07-18 Derek Price <derek@ximbiot.com>
* TODO (72): Remove mention of the -i/-o in the modules file since they
have been removed.
2003-06-27 Larry Jones <lawrence.jones@eds.com>
* NEWS: Note LockDir fix.
2003-06-23 Derek Price <derek@ximbiot.com>
* configure.in: Debian Woody has -lkrb4, so check for that.
(Patch from Alexey Mahotkin <alexm@hsys.msk.ru>.)
* config.h.in: Regenerated.
* configure: Ditto.
2003-06-20 Derek Price <derek@ximbiot.com>
* INSTALL: Add some OS X platforms to the compile list. Correct link to
cvsgui.org -> wincvs.org.
2003-06-09 Derek Price <derek@ximbiot.com>
* cvsnt.mak: Rename win32.c to woe32.c in accordance with the GNU
convention to avoid implying that we consider the Microsoft Windows
Operating Environment any sort of "win".
2003-06-09 Derek Price <derek@ximbiot.com>
* NEWS: Note short patch fix.
2003-06-09 Derek Price <derek@ximbiot.com>
* TODO (45): Combine this with...
(30): ...this item (as #30). Remove reference to diff since the
modules file is only consulted for the r* commands.
2003-06-02 Derek Price <derek@ximbiot.com>
* NEWS: Note empty diff change text fix.
2003-05-29 Derek Price <derek@ximbiot.com>
* NEWS: Note removal of global -l option.
2003-05-27 Derek Price <derek@ximbiot.com>
* AUTHORS: Give Mark an email address.
2003-05-27 Derek Price <derek@ximbiot.com>
* cvs.spec.in: Add some files to doc. Remove redundant %defattr.
2003-05-27 Derek Price <derek@ximbiot.com>
* NEWS (Changes since 1.11.5): Add missing entry.
2003-05-27 Derek Price <derek@ximbiot.com>
* README (Credits): Move...
* AUTHORS: ...here and update.
2003-05-26 Derek Price <derek@ximbiot.com>
* configure.in: Update CVS version to 1.11.6.1.
* configure: Regenerated.
2003-05-25 Derek Price <derek@ximbiot.com>
* configure.in: Update CVS version to 1.11.6.
* configure: Regenerated.
2003-05-25 Derek Price <derek@ximbiot.com>
* BUGS: Note current intermittant BSDI failures.
2003-05-22 Larry Jones <lawrence.jones@eds.com>
* NEWS: Note recent administrative file changes.
2003-05-21 Derek Price <derek@ximbiot.com>
* INSTALL: Mention new Automake version.
* NEWS: Ditto.
* Makefile.in: Regenerated.
* aclocal.m4: Ditto.
* config.h.in: Ditto.
* configure: Ditto.
2003-05-20 Derek Price <derek@ximbiot.com>
* INSTALL: Using Autoconf version 2.57.
* NEWS: Ditto. Reorder NEWS items to put the stuff which it is likely
that only developers care about last.
* configure: Regenerated with Autoconf 2.57.
2003-05-09 Derek Price <derek@ximbiot.com>
* configure.in: Back out all the S_ISSOCK changes I just made and move
the equivalent to lib/system.h.
* configure.in: Regenerated.
* config.h.in: Ditto.
2003-05-09 Derek Price <derek@ximbiot.com>
* configure.in: Try again, with AC_TRY_LINK this time.
* configure: Regenerated.
2003-05-09 Derek Price <derek@ximbiot.com>
* configure.in: Correct a typo in my last patch.
* configure: Regenerated.
2003-05-09 Derek Price <derek@ximbiot.com>
* configure.in: Add some checks for S_ISSOCK to avoid a problem on
SCO OpenServer 5.0.6a.
(Reported by Boyd Lynn Gerber <gerberb@zenez.com>.)
* config.h.in: Regenerated.
* configure: Ditto.
2003-05-01 Derek Price <derek@ximbiot.com>
* TODO (149): Remove reference to defunct RELATIVE_REPOS macro.
2003-04-30 Derek Price <derek@ximbiot.com>
* acinclude.m4 (ACX_WITH_GSSAPI): Fix typo in broken conditional.
(Thanks to Alexey Mahotkin <alexm@hsys.msk.ru>.)
* configure: Regenerated.
* aclocal.m4: Ditto.
2003-04-28 Derek Price <derek@ximbiot.com>
* NEWS (Changes since 1.11.5): Note removal of Checkin.prog and
Update.prog functionality.
2003-04-10 Larry Jones <lawrence.jones@eds.com>
* aclocal.m4 (AM_MAINTAINER_MODE): New macro to support
--enable-maintainer-mode.
* configure.in: Use it.
* configure: Regenerated.
* Makefile.in: Regenerated.
* noautomake.sh: Removed; no longer needed.
* INSTALL: Remove reference to noautomake.sh, add reference to
--enable-maintainer-mode.
* Makefile.am: Remove noautomake.sh.
* NEWS: Add note about --enable-maintainer-mode and noautomake.sh.
* README: Remove noautomake.sh.
2003-04-01 Derek Price <derek@ximbiot.com>
* BUGS: Remove a pcl-cvs bug. pcl-cvs is no longer part of the CVS
source distribution.
2003-04-01 Derek Price <derek@ximbiot.com>
* BUGS: Remove reference to cvs admin SEGV bug Larry Jones fixed
on 2003-02-19.
2003-04-01 Derek Price <derek@ximbiot.com>
* BUGS: Remove obsolete bug.
* configure.in: Tail the BUGS file for status.
* configure: Regenerated.
2003-03-28 Derek Price <derek@ximbiot.com>
* configure.in (--with-editor): Quit with an error message when no
editor is found. Allow --with-editor to override $EDITOR from the
user's environment. Add vim to the list of defaults.
* configure: Regenerated.
2003-03-26 Derek Price <derek@ximbiot.com>
* configure.in (--with-editor): Quit with an error message when
--without-editor is specified.
(Report from Jim Salter <jsalterjim@earthlink.net>.)
* configure: Regenerated.
2003-03-24 Derek Price <derek@ximbiot.com>
* configure.in: Add copyright notice.
* Makefile.am: Update copyright notice.
* Makefile.in: Regenerated.
* configure: Ditto.
2003-03-07 Derek Price <derek@ximbiot.com>
* TESTS: Document some more global variables.
2003-03-05 Mark D Baushke <mdb@cvshome.org>
* NEWS (Changes since 1.11.5): Backout CVS_LOCAL_BRANCH_NUM feature.
* NEWS (Changes since 1.11.5): Mention CVS_LOCAL_BRANCH_NUM
environment varaible.
2003-02-25 Derek Price <derek@ximbiot.com>
* configure.in (WITH_KRB4): Import KRB4 patch from Redhat 8.0's CVS
1.11.2-5 SRPM. It's not the right fix, but it will work until I get
around to merging some of the code with WITH_GSSAPI and seperating the
bits into separate M4 files.
* configure: Regenerated.
* config.h.in: Ditto.
2003-02-28 Derek Price <derek@ximbiot.com>
* acinclude.m4 (ACX_WITH_GSSAPI): Move the checkin from 1/23 to
aclocal.m4 to the source, here.
* aclocal.m4: Regenerated.
* configure: Regenerated.
2003-02-28 Larry Jones <lawrence.jones@eds.com>
* TODO (206): Done in 1.11.3.
(226): Add comment about deadlock.
(228, 229): New items.
2003-02-26 Derek Price <derek@ximbiot.com>
* mktemp.sh: Actually add file this time.
* mktemp.sh: Add copyright notice, some comments, and attempt to return
success and error codes.
2003-02-25 Derek Price <derek@ximbiot.com>
* configure.in: Add checks for mktemp and sendmail.
* mktemp.sh: New file.
* Makefile.in: Regenerated.
* configure: Ditto.
2003-02-06 Derek Price <derek@ximbiot.com>
* NEWS (Changes since 1.11.5): Note error message corrections.
2003-01-30 Larry Jones <lawrence.jones@eds.com>
* FAQ: Update URL for tkCVS info.
* NEWS (Changes from 1.11.2 to 1.11.3): Add note about fixing watch
in server mode.
2003-01-28 Derek Price <derek@ximbiot.com>
* INSTALL: Remove a reference to options.h.
(Thanks to Jenn Vesperman <jenn@anthill.echidna.id.au> for the report.)
2003-01-28 Larry Jones <lawrence.jones@eds.com>
* NEWS: Update for 1.11.5, add notes about bug fixes in older
versions.
2003-01-23 Derek Price <derek@ximbiot.com>
* aclocal.m4 (WITH_GSSAPI): Check for libcrypt before libroken to
satisfy a FreeBSD 4.6 dependency.
(Thanks to Jan Ruzicka <jan.ruzicka@comtechmobile.com> for the bug
report and a partial fix.)
* configure: regenerated.
2003-01-20 Derek Price <derek@ximbiot.com>
* NEWS: Update the news for the last release to mention that client
builds are not affected by the security vulnerability.
2003-01-20 Derek Price <derek@ximbiot.com>
* configure.in: Update to dev version 1.11.5.1.
* configure: Regenerated.
2003-01-16 Derek Price <derek@ximbiot.com>
* NEWS: Add 1.11.4 entry in regards to
@ -8,6 +830,13 @@
* configure: Regenerated.
2002-01-16 Derek Price <derek@ximbiot.com>
* configure.in (--with-editor): Look for nano, the GNU GPL pico clone.
(Reported by Robin Cook <rcook@wyrms.net>.)
* configure: Regenerated.
2002-01-16 Derek Price <derek@ximbiot.com>
* configure.in: Update to dev version (1.11.4.1).

View File

@ -1897,7 +1897,9 @@ You can branch a branch.
Note that according to the official GIC page at
http://www.cpsc.ucalgary.ca/redirect/grouplab/projects/gic/
GIC is no longer being maintained and tkCVS is recommended
instead. For more on tkCVS, see http://www.cyclic.com/tkcvs/
instead.
For more on tkCVS, see http://www.cvshome.org/dev/addontkcvs.html.
kingdon@cyclic.com
@ -4330,7 +4332,7 @@ kingdon@cyclic.com
You should be able to run:
sort +0.1 ${dir1}/history ${dir2}/history > history
sort -k 1.2 ${dir1}/history ${dir2}/history > history
If you "diff" a standard history file before and after such a sort,
you might see other differences caused by garbage (split lines, nulls,

View File

@ -123,6 +123,8 @@ HPPA:
HPPA running HP-UX 9.05 (1.9)
HPPA running HP-UX 10.01 (1.7)
HPPA running HP-UX 10.20 (1.10.7)
HPPA running HP-UX 11.11 (1.11.13) (footnote 12)
HPPA 2.0 running HP-UX 10.20 (1.10.9) (footnote 13)
NextSTEP 3.3 (1.7)
i386 family:
Solaris 2.4 using gcc (about 1.4A2)
@ -181,6 +183,9 @@ PowerPC or RS/6000:
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)
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)
SPARC:
Sun SPARC running SunOS 4.1.x (1.10)
Sun SPARCstation 10 running Solaris 2.3 using gcc and cc (about 1.4A2)
@ -238,21 +243,33 @@ VAX:
ci: RCS/loginfo,v: Invalid argument
cvs [init aborted]: failed to checkin n:/safe/CVSROOT/loginfo
(footnote 12)
Need to `configure --without-gssapi' unless you have installed Kerberos 5
libraries on the system yourself. For some reason Apple ships OS X with
the Kerberos 5 headers installed and not the libraries, which confuses the
current configure script. Some HP, BSD, & Sun boxes have similar problems.
(footnote 13)
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.
-------------------------------------------------------------------------------
Building from source code under Unix:
1) Some combinations of Automake and Autoconf versions may break the CVS build
if file timestamps aren't set correctly, so you may wish to run
noautomake.sh to set the timestamps and avoid attempting to run the
autotools on your system, especially if you are building from source
checked out from CVS:
1) Some combinations of Automake and Autoconf versions may break the
CVS build if file timestamps aren't set correctly and people don't
have the same versions the developers do, so the rules to run them
automatically aren't included in the generated Makefiles unless you run
configure with --enable-maintainer-mode.
$ ./noautomake.sh --noautoconf
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.6.3 and
Autoconf 2.53, respectively. Other combinations of autotool versions may
or may not work.
There is a known bug in Autoconf 2.57 that will prevent the configure
scripts it generates from working on some platforms. Other combinations of
autotool versions may or may not work. If you get other versions to work,
please send a report to <bug-cvs@gnu.org>.
2) Run "configure":
@ -368,10 +385,7 @@ Building from source code under Unix:
END OF NOTE FOR NDBM GUNK.
3) Edit src/options.h. The defaults should be reasonable, and in fact
if you are lazy you can safely skip this step.
4) Try to build it:
3) Try to build it:
$ make
@ -382,7 +396,7 @@ Building from source code under Unix:
compiler information, make output, and anything else you think
will be helpful.
4a) Run the regression tests (optional).
3a) Run the regression tests (optional).
You may also wish to validate the correctness of the new binary by
running the regression tests. If they succeed, that is nice to
@ -394,7 +408,7 @@ Building from source code under Unix:
If you want to run the tests, see the file TESTS for more information.
5) Install the binaries/documentation:
4) Install the binaries/documentation:
$ make install
@ -442,7 +456,11 @@ Building from source code under Windows NT/95/98/2000:
You may find interesting information in windows-NT/README.
1) Using Microsoft Visual C++ 5.x, open the project `cvsnt.dsp',
* Using Microsoft Visual C++ 5.x (this is currently broken - someone with
MVC++ 5.x needs to regenerate the project files, but the builds using `nmake'
below will work).
1) Using Microsoft Visual C++ 5.x, open the project `cvsnt.dsw',
in the top directory of the CVS distribution. If you have an older
version of Visual C++, take a look at windows-NT/README.
2) Choose "Build cvs.exe" from the "Project" menu.
@ -455,7 +473,12 @@ following also works:
C:\> vcvars32
C:\> nmake /f cvsnt.mak CFG="cvsnt - Win32 Debug"
* You might also try http://cvsgui.org & http://www.cvsnt.org
* Using the Cygwin development environment <http://cygwin.com>, Windows clients
and servers can be built using the instructions for building on UNIX. For
deploying the CVS server on Windows NT, see the `cygrunsrv' executable that
comes with Cygwin.
* You might also try <http://wincvs.org> & <http://www.cvsnt.org>.
-------------------------------------------------------------------------------
@ -467,24 +490,10 @@ For VMS, see README.VMS
Mac OS X: Builds fine, just like UNIX.
For older versions of Mac OS, you might try http://cvsgui.org .
For older versions of Mac OS, you might try <http://wincvs.org>.
For a Java client, see jCVS (which is a separate package from CVS
itself, but which might be preferable to the Macintosh port mentioned
above, for example).
**** ****
Builds are breaking on some systems (notably,
BSD/OS thor.sdrc.com 4.0.1 BSDI BSD/OS 4.0.1 Kernel #3: Thu Mar 9 11:29:16 EST 2000
) due to Automake's dependency tracking code. The work around for this is to
comile without it by passing the '--disable-dependency-tracking' option to
configure:
$ ./configure --disable-dependency-tracking
This will allow a compile but make will no longer be tracking header
dependencies. This means that if you make any changes to header files you may
have to run 'make clean' before running a 'make' to get everything to compile.
-------------------------------------------------------------------------------

View File

@ -1,6 +1,8 @@
## Process this file with automake to produce Makefile.in
# Master Makefile for the GNU Concurrent Versions System.
# Copyright (C) 1986, 1988-1992, 1994, 2000 Free Software Foundation, Inc.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -36,8 +38,8 @@ EXTRA_DIST = \
cvsnt.dsp \
cvsnt.dsw \
cvsnt.mak \
noautomake.sh
cvs.spec \
mktemp.sh
## MAINTAINER Targets

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# Makefile.in generated by automake 1.7.9 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -15,7 +15,9 @@
@SET_MAKE@
# Master Makefile for the GNU Concurrent Versions System.
# Copyright (C) 1986, 1988-1992, 1994, 2000 Free Software Foundation, Inc.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -26,79 +28,117 @@
# 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.
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSH = @CSH@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EDITOR = @EDITOR@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
KRB4 = @KRB4@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MAKE_TARGETS_IN_VPATH_FALSE = @MAKE_TARGETS_IN_VPATH_FALSE@
MAKE_TARGETS_IN_VPATH_TRUE = @MAKE_TARGETS_IN_VPATH_TRUE@
MKTEMP = @MKTEMP@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PR = @PR@
PS2PDF = @PS2PDF@
RANLIB = @RANLIB@
ROFF = @ROFF@
SENDMAIL = @SENDMAIL@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
YACC = @YACC@
ac_ct_CC = @ac_ct_CC@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
ac_prefix_program = @ac_prefix_program@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
bindir = @bindir@
build_alias = @build_alias@
datadir = @datadir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
includedir = @includedir@
includeopt = @includeopt@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
# Unix source subdirs, where we'll want to run lint and etags:
# This is a legacy variable from b4 Automake
@ -124,7 +164,8 @@ EXTRA_DIST = \
cvsnt.dsp \
cvsnt.dsw \
cvsnt.mak \
noautomake.sh
cvs.spec \
mktemp.sh
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@ -133,14 +174,16 @@ CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES = cvs.spec emx/Makefile os2/Makefile zlib/Makefile
DIST_SOURCES =
RECURSIVE_TARGETS = info-recursive dvi-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 AUTHORS COPYING COPYING.LIB ChangeLog INSTALL \
Makefile.am Makefile.in NEWS TODO acinclude.m4 aclocal.m4 \
compile config.h.in configure configure.in cvs.spec.in depcomp \
install-sh mdate-sh missing mkinstalldirs
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
@ -149,18 +192,18 @@ all: config.h
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
$(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): configure.in acinclude.m4
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
config.h: stamp-h1
@ -173,7 +216,7 @@ 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: $(top_srcdir)/configure.in $(ACLOCAL_M4)
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOHEADER)
touch $(srcdir)/config.h.in
@ -243,10 +286,17 @@ tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ETAGS = etags
ETAGSFLAGS =
CTAGS = ctags
CTAGSFLAGS =
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@ -262,9 +312,15 @@ 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 \
include_option=--etags-include; \
else \
include_option=--include; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
test -f $$subdir/TAGS && \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
@ -277,13 +333,28 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = .
@ -295,13 +366,20 @@ am__remove_distdir = \
&& 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)/emx $(distdir)/os2 $(distdir)/src $(distdir)/zlib
@list='$(DISTFILES)'; for file in $$list; do \
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
@ -359,12 +437,13 @@ distcheck: dist
$(am__remove_distdir)
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/=build
mkdir $(distdir)/=inst
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
dc_install_base=`$(am__cd) $(distdir)/=inst && pwd` \
&& cd $(distdir)/=build \
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& cd $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
@ -372,23 +451,39 @@ distcheck: dist
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& (test `find $$dc_install_base -type f -print | wc -l` -le 1 \
|| { echo "ERROR: files left after uninstall:" ; \
find $$dc_install_base -type f -print ; \
exit 1; } >&2 ) \
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
distuninstallcheck \
&& chmod -R a-w "$$dc_install_base" \
&& ({ \
(cd ../.. && $(mkinstalldirs) "$$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) distcleancheck
$(am__remove_distdir)
@echo "$(distdir).tar.gz is ready for distribution" | \
sed 'h;s/./=/g;p;x;p;x'
distuninstallcheck:
@cd $(distuninstallcheck_dir) \
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|| { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \
echo " (check DESTDIR support)"; \
fi ; \
$(distuninstallcheck_listfiles) ; \
exit 1; } >&2
distcleancheck: distclean
if test '$(srcdir)' = . ; then \
@if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left after distclean:" ; \
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left in build directory after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
@ -408,7 +503,7 @@ install-am: all-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
@ -416,7 +511,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -427,6 +522,7 @@ clean-am: clean-generic mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
dvi: dvi-recursive
@ -449,21 +545,31 @@ installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf autom4te.cache
-rm -rf $(top_srcdir)/autom4te.cache
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am: uninstall-info-am
uninstall-info: uninstall-info-recursive
.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
clean-generic clean-recursive dist dist-all dist-bzip2 \
dist-gzip distcheck distclean distclean-generic distclean-hdr \
distclean-recursive distclean-tags distcleancheck distdir dvi \
.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 \
@ -472,9 +578,9 @@ uninstall-info: uninstall-info-recursive
installdirs installdirs-am installdirs-recursive \
maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-generic \
mostlyclean-recursive tags tags-recursive uninstall \
uninstall-am uninstall-info-am uninstall-info-recursive \
uninstall-recursive
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: localcheck remotecheck

View File

@ -1,17 +1,359 @@
Changes since 1.11.4:
Changes since 1.11.14:
**********************
* Fixed a security hole by which users with read only access could gain
write access. The Common Vulnerabilities and Exposures project (cve.mitre.org)
has assigned the name CAN-2003-0015 to this issue. See
SERVER SECURITY ISSUES
* Piped checkouts of paths above $CVSROOT no longer work. Previously, clients
could have requested the contents of RCS archive files anywhere on a CVS
server.
CLIENT SECURITY ISSUES
* Clients now check paths from the server to verify that they are within one of
the sandboxes the user requested be updated. Previously, a trojan server
could have written or overwritten files anywhere the user had access,
presenting a serious security risk.
GENERAL USER ISSUES
* Method options (used by WinCVS & CVS 1.12.7+) in CVSROOTs are ignored.
* Configure no longer checks the $TMPDIR, $TMP, & $TEMP variables to set the
default temporary directory.
* CVS on Cygwin correctly handles X:\ style paths.
* Import now uses backslash rather than slash on Windows when checking for
"CVS" directories to ignore in import commands.
* Relative paths containing up-references (`..') should now work in
client/server mode (client fix).
* A race condition between the ordering of messages from CVS and messages from
called scripts in client/server mode has been removed (server fix).
* Resurrected files now get their modes and timestamps set correctly and a
longstanding bug involving resurrection of an uncommitted removal has been
fixed (server fix).
* Some resurrection (cvs add) status messages have changed slightly.
* `cvs release' now works with Kerberos or GSSAPI encryption enabled (server
fix).
* File resurrection from a previously existing revision no longer just reports
that it works (server fix).
* Misc error & status message corrections.
* Diffing of locally added files against arbitrary revisions in an RCS archive
is now allowed when a file of the same name exists or used to exist on some
branch (server fix).
* Misc documentation fixes.
Changes from 1.11.13 to 1.11.14:
********************************
GENERAL USER ISSUES
* Imports will now always ignore directories and files named `CVS' to avoid
violating assumptions made by other parts of CVS.
* A problem with `cvs release' of subdirs that could corrupt CVS/Entries files
has been fixed (client/server).
* The CVS server's protocol check for unused data from the client is no longer
called automatically at program exit in order to avoid potential recursive
calls to error when the first close is due to memory allocation or similar
problems that cause calls to error() to fail. The check is still made when
the server program exits normally.
* The spec file has been updated to work with more recent versions of RPM.
* Several memory leaks have been plugged (client/server).
DEVELOPER ISSUES
* Misc cosmetic, readability, and commenting fixes.
Changes from 1.11.12 to 1.11.13:
********************************
GENERAL USER ISSUES
* Several memory leaks have been plugged.
* Thanks to Ville Skyttä the man page has a few less spelling errors and is
slightly more accurate.
* An unlikely potential segfault when using the :fork: connection method has
been fixed.
* The CVS server has had the protocol check for unused data from the client
partially restored.
* A fix has been included that should avoid a very rare race condition that
could cause a CVS server to exit with a "broken pipe" message.
* A minor problem with the nmake build file that was preventing the source from
compiling under Windows has been fixed.
* Tests have been added to the test suite.
DEVELOPER ISSUES
* Misc cosmetic, readability, and commenting fixes.
Changes from 1.11.11 to 1.11.12:
********************************
GENERAL USER ISSUES
* Infinite alias loops in the modules file are now checked for and avoided.
* Clients on case insensitive systems now preserve the case of directories in
CVS/Entries, in addition to files, for use in communications with the CVS
server.
* Some previously untested behavior is now being tested.
* Server support for case insensitive clients has been removed in favor of the
server relying on the client to preserve the case of checked out files, as
per the CVS client/server protocol spec. This is not as drastic as it may
sound, as all of the current tests still pass without modification when run
from a case insensitive client to a case sensitive server. This change
disables little previous functionality, enables access to more of the
possible namespace to users on systems with case insensitive file systems,
fixes a few bugs, and in the end this should provide a major stability
improvement.
* Thanks to Ville Skyttä the man page is a bit more accurate.
* Thanks to Ville Skyttä some unused variables were removed from the log_accum
Perl script in contrib.
* Thanks to Alexey Mahotkin, a bug that prevented CVS from being compiled with
Kerberos 4 authentication enabled has been fixed.
* A minor bug that caused CVS to fail to report an inifinte alias loop in the
modules file when portions of the alias definition contained trailing slashes
has been fixed.
* A bug in the gzip code that could cause heap corruption and segfaults in CVS
servers talking to clients less than 1.8 and some modern third-party CVS
clients has been fixed.
* mktemp.sh is now included with the source distribution so that the rcs2log
and cvsbug executables may be run on systems which do not contain an
implementation of mktemp.
* Misc documentation fixes.
Changes from 1.11.10 to 1.11.11:
********************************
SERVER SECURITY ISSUES
* pserver can no longer be configured to run as root via the
$CVSROOT/CVSROOT/passwd file, so if your passwd file is compromised, it no
longer leads directly to a root hack. Attempts to root will also be logged
via the syslog.
Changes from 1.11.9 to 1.11.10:
*******************************
SERVER SECURITY ISSUES
* Malformed module requests could cause the CVS server to attempt to create
directories and possibly files at the root of the filesystem holding the CVS
repository. Filesystem permissions usually prevent the creation of these
misplaced directories, but nevertheless, the CVS server now rejects the
malformed requests.
GENERAL USER ISSUES
* Case insensitive clients using a case sensitive server can now use a
`cvs rm -f file; cvs add FILE' command sequence to add a file with the same
name in a new case.
* CVSROOTs which contain a symlink to a real repository should work.
* The configure script now tests whether it is building CVS on a case
insensitive file system. If it is, CVS assumes that all file systems on this
platform will be case insensitive. This is useful for getting the case
insensitivity flag set correctly when compiling on Mac OS X and under Cygwin
on Windows. Autodetection can be overridden using the
--disable-case-sensitivity and --enable-case-sensitivity arguments to
configure.
* A behavior change in `cvs up -jrev1 -jrev2' for modified files with a base
revision of rev2 (ie, checked-out version matches rev2 and file has been
modified). The operation is no longer ignored and instead is passed to
diff3. This will potentially re-apply the diffs between the two revisions to
a modified local file. Status messages like from a standard merge have also
been added when the file would not or does not change due to this merge
request ("[file] already contains the changes between [revisions]...").
* A bug which could stop `cvs admin -mTAG:message' from recursing has been
fixed.
* Misc documentation cleanup and fixes.
* Some of the contrib scripts, some of the documentation, and sanity.sh were
modified to use and recommend more portable commands rather than using and
recommending commands which were not compatible with the POSIX 1003.1-2001
specification.
DEVELOPER ISSUES
* A new set of tests to test issues specific to case insensitive clients and
servers has also been added.
* Support has been added to the test suite to support testing over a :ext: link
to another machine, subject to some stringent requirements. This support can
be used, for instance, to test the operation of a case insensitive client
against a case sensitive server. Please see the comments in TEST and the
src/sanity.sh test script itself for more.
* We've standardized on Automake 1.7.9 to get a bug fix. See the note below
on the Autoconf upgrade for more details.
* We've standardized on Autoconf version 2.58 to avoid a bug and get at a few
new macros. Again, this should only really affect developers, though it is
possible that CVS will now compile on a few new platforms. Please see the
section of the INSTALL file about using the autotools if you are compiling
CVS yourself.
Changes from 1.11.8 to 1.11.9:
* CVS now knows how to report, as well as record, `P' record types.
* When running the `cvs history' command, clients will now send the
long-accepted `-e' option, for all records, rather than explicitly requesting
`P' record types, a request which servers prior to 1.11.7 will reject with a
fatal error message.
* A problem with locating files requested by case insensitive clients which was
accidentally introduced in 1.11.6 as part of a fix for a data loss problem
involving `cvs add's from case insensitive clients has been fixed. The
relevant error message was `cvs [<command> aborted]: filE,v is ambiguous;
could mean FILE,v or file,v'.
* Attempts to use the global `-l' option, removed from both client and server
as of version 1.11.6, will now elicit a warning rather than a fatal error
from the server.
Changes from 1.11.7 to 1.11.8:
* A problem in the CVS getpass library that could cause passwords to echo on
some systems has been fixed.
Changes from 1.11.6 to 1.11.7:
* A segfault that could occur in very rare cases where the stat of a file
failed during a diff has been fixed.
* Any user with write privleges to the CVSROOT/checkoutlist file could pass
arbitrary format strings directly through to a printf function. This was
probably bad and has been fixed. White space at the beginning of error strings
in checkoutlist is now ignored properly.
* In client/server mode, most messages from CVS now contain the actual
command name rather than the generic "server".
* A long-standing bug that prevented most client/server updates from being
logged in the history file has been fixed.
* Updates done via a patch ("P" status) are now logged in the history file
by default and the corresponding "P" history record type is now documented.
If you're setting the LogHistory option in your CVSROOT/config file, you may
want to add "P" to the list of record types.
* CVS now will always compile and its own getpass() function (originally from
GNULIB) in favor of any system one that may exist. This avoids some problems
with long passwords on some systems and updates us to POSIX.2 compliance, since
getpass() was removed from the POSIX.2 specification.
* A bug that allowed a write lock to be created in a directory despite
there being existing read locks when using LockDir in CVSROOT/config has
been fixed.
* A bug with short patches (`rdiff -s') which caused rdiff to sometimes report
differences that did not exist has been fixed.
* Some minor corrections were made to the diff code to keep diff & rdiff from
printing diff headers with empty change texts when two files have different
revision numbers but the same content.
* The global '-l' option, which suppressed history logging, has been removed
from both client and server.
Changes from 1.11.5 to 1.11.6:
* A warning message is now issued if an administrative file contains
more than one DEFAULT entry.
* An error running a verifymsg script (such as referencing an unset user
variable or the script not existing) now causes the verification to
fail.
* Errors in administrative files commands (like unset user variables)
are no longer reported unless the command is actually executed.
* When a file is initially checked out, its last access time is now set
to the current time rather than being set to the time the file was last
checked in like the modification time is.
* The Checkin.prog and Update.prog functionality has been removed. This
fuctionality previously allowed executables to be specified in the modules file
to be run at update and checkin time, but users could edit these files on a per
workspace basis, creating a security hole.
* contrib/rcs2log and src/cvsbug now use the BSD mktemp program to create
their temp files and directories on systems which provide it.
* Corrected the path in a failed write error message.
* Autoconf and Automake are no longer run automatically unless you run
configure with --enable-maintainer-mode. Accordingly, noautomake.sh is
no longer needed and has been removed.
* We've standardized on Automake version 1.7.5 and Autoconf version 2.57 to get
at a few new macros. Again, this should only really affect developers. See
the section of the INSTALL file about using the autotools if you are compiling
CVS yourself.
Changes from 1.11.4 to 1.11.5:
* Fixed a security hole in the CVS server by which users with read only access
could gain write access. This issue does not affect client builds. The
Common Vulnerabilities and Exposures project (cve.mitre.org) has assigned the
name CAN-2003-0015 to this issue. See
<http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2003-0015> for more
information.
* Fixed some bugs where revision numbers starting with 0 (like 0.3)
weren't correctly handled. (CVS doesn't normally use such revision
numbers, but users may be able to force it to do so and old RCS files
might.)
Changes from 1.11.3 to 1.11.4:
* Some minor changes to allow the code to compile on Windows platforms.
Changes from 1.11.2 to 1.11.3:
* The tag/rtag code has been fixed to once again lock just a single
directory at a time.
* There was a bug where certain error conditions could cause the server
to go into an infinite loop. There was also a bug that caused a
compressed connection from an older client to hang on shutdown. These
bugs have been fixed.
* Fixed a bug that caused the server to reject most watch commands.
* When waiting for another user's lock, the message timestamps are now
in UTC rather than the server's local time.
@ -24,6 +366,12 @@ sanity.sh to use Autotest and Autoshell. Again, this should only really affect
developers. See the section of the INSTALL file about using the autotools if
you are compiling CVS yourself.
* Fixed a bug in the log/rlog code when a revision range crosses a
branch point.
* Fixed a bug where filenames starting with - would be misinterpreted as
options when using client/server mode.
Changes from 1.11.1p1 to 1.11.2:
* There is a new feature, enabled by RereadLogAfterVerify in CVSROOT/config,
@ -62,6 +410,12 @@ Changes from 1.11.1 to 1.11.1p1:
Changes from 1.11 to 1.11.1:
* There was a locking bug in the tag/rtag code that could lose changes
made to a file while the tag operation was in progress. This has been
fixed, but all of the directories being tagged are now locked for the
entire duration of the tag operation rather than only one directory at a
time.
* The "cvs diff" command now accepts the -y/--side=by-side and -T/
--initial-tab options. (To use these options with a remote repository,
both the client and the server must support them.)

View File

@ -3,6 +3,9 @@
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
This program is free software; you can redistribute it and/or modify
@ -75,7 +78,6 @@ Installation:
Please read the INSTALL file for installation instructions. Brief summary:
$ ./noautomake.sh --noautoconf
$ ./configure
$ make
(run the regression tests if desired)
@ -112,87 +114,4 @@ then it will be possible to create one.
-------------------------------------------------------------------------------
Credits:
The conflict-resolution algorithms and much of the administrative file
definitions of CVS were based on the original package written by Dick Grune
at Vrije Universiteit in Amsterdam <dick@cs.vu.nl>, and posted to
comp.sources.unix in the volume 6 release sometime in 1986. This original
version was a collection of shell scripts. I am thankful that Dick made
his work available.
Brian Berliner from Prisma, Inc. (now at Sun Microsystems, Inc.)
<berliner@sun.com> converted the original CVS shell scripts into reasonably
fast C and added many, many features to support software release control
functions. See the manual page in the "man" directory. A copy of the
USENIX article presented at the Winter 1990 USENIX Conference, Washington
D.C., is included in the "doc" directory.
Jeff Polk from BSDI <polk@bsdi.com> converted the CVS 1.2
sources into much more readable and maintainable C code. He also added a
whole lot of functionality and modularity to the code in the process.
See the bottom of the NEWS file (from about 1992).
david d `zoo' zuhn <zoo@armadillo.com> contributed the working base code
for CVS 1.4 Alpha. His work carries on from work done by K. Richard Pixley
and others at Cygnus Support. The CVS 1.4 upgrade is due in large part to
Zoo's efforts.
David G. Grubbs <dgg@odi.com> contributed the CVS "history" and "release"
commands. As well as the ever-so-useful "-n" option of CVS which tells CVS
to show what it would do, without actually doing it. He also contributed
support for the .cvsignore file.
The Free Software Foundation (GNU) contributed most of the portability
framework that CVS now uses. This can be found in the "configure" script,
the Makefile's, and basically most of the "lib" directory.
K. Richard Pixley, Cygnus Support <rich@cygnus.com> contributed many bug
fixes/enhancement as well as completing early reviews of the CVS 1.3 manual
pages.
Roland Pesch, then of Cygnus Support <roland@wrs.com> contributed
brand new cvs(1) and cvs(5) manual pages. Thanks to him for saving us
from poor use of our language!
Paul Sander, HaL Computer Systems, Inc. <paul@hal.com> wrote and
contributed the code in lib/sighandle.c. I added support for POSIX, BSD,
and non-POSIX/non-BSD systems.
Jim Kingdon and others at Cygnus Support <info@cygnus.com> wrote the
remote repository access code.
There have been many, many contributions not listed here. Consult the
ChangeLog files in each directory for a more complete idea.
In addition to the above contributors, the following Beta testers
deserve special mention for their support. This is only a partial
list; if you have helped in this way and would like to be listed, let
bug-cvs know (as described in the Cederqvist manual).
Mark D. Baushke <mdb@cisco.com>
Per Cederqvist <ceder@signum.se>
J.T. Conklin <jtc@cygnus.com>
Vince DeMarco <vdemarco@fdcsrvr.cs.mci.com>
Paul Eggert <eggert@twinsun.com>
Lal George <george@research.att.com>
Dean E. Hardi <Dean.E.Hardi@ccmail.jpl.nasa.gov>
Mike Heath <mike@pencom.com>
Jim Kingdon <kingdon@cygnus.com>
Bernd Leibing <bernd.leibing@rz.uni-ulm.de>
Benedict Lofstedt <benedict@tusc.com.au>
Dave Love <d.love@dl.ac.uk>
Robert Lupton the Good <rhl@astro.princeton.edu>
Tom McAliney <tom@hilco.com>
Eberhard Mattes <mattes@azu.informatik.uni-stuttgart.de>
Jim Meyering <meyering@comco.com>
Thomas Mohr <mohr@lts.sel.alcatel.de>
Thomas Nilsson <thoni@softlab.se>
Raye Raskin <raye.raskin@lia.com>
Harlan Stenn <harlan@landmark.com>
Gunnar Tornblom <gunnar.tornblom@senet.abb.se>
Greg A. Woods <woods@planix.com>
Many contributors have added code to the "contrib" directory. See the
README file there for a list of what is available. There is also a
contributed GNU Emacs CVS-mode in tools/pcl-cvs.
Credits: See the AUTHORS file.

View File

@ -206,6 +206,10 @@ miss, but here are a few important ones. I'm leaving off long explanations
after the first few since it probably gives you the idea and the data is in
sanity.sh.
Note that the boolean variables contain shell commands which return true or
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)
@ -216,8 +220,11 @@ sanity.sh.
* $username = regexp to match a username
* $hostname = regexp to match a hostname
* $PROG = regexp to match progname in CVS error messages
* $remote = 'yes' or 'no', depending on whether the script is running with
a remote CVSROOT
* $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

@ -6,9 +6,10 @@ The "TODO" file! -*-Indented-Text-*-
(If done, this should be configurable via commitinfo or some new
config file -kingdon, Jun 1995).
30. Add "rdiff" program option to the modules database (and "diff"
too?). (perhaps should think a little harder about what this is
trying to accomplish and what the best way is -kingdon, Jul 1997).
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
@ -26,10 +27,6 @@ trying to accomplish and what the best way is -kingdon, Jul 1997).
PRCS 1.0 was particularly bad the way it handled the "invisible
state", but 1.2 is significantly better.
45. Consider enhancing the "rdiff" and "tag" (rtag??) command support in
the module database -- they seem hard to use since these commands
deal directly with the RCS ,v files.
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;
@ -56,8 +53,8 @@ trying to accomplish and what the best way is -kingdon, Jul 1997).
66. Length of the CVS temporary files must be limited to 14 characters for
System-V stupid support. As well as the length on the CVS.adm files.
72. Consider re-design of the module -o, -i, -t options to use the file
system more intuitively.
72. Consider re-design of the module -t options to use the file system more
intuitively.
73. Consider an option (in .cvsrc?) to automatically add files that are new
and specified to commit.
@ -261,10 +258,6 @@ trying to accomplish and what the best way is -kingdon, Jul 1997).
This behavior was not particularly popular and has been since
reverted.
Note also RELATIVE_REPOS in options.h; it needs to be set for
changing CVS/Root (not CVS/Repository) to be sufficient in the
case where the directory has changed.
This whole area is a rather bad pile of individual decisions which
accumulated over time, some of them probably bad decisions with
hindsight. But we didn't get into this mess overnight, and we're
@ -787,10 +780,6 @@ send differences instead of entire files. In the degenerate case
(e.g. "cvs diff" without arguments) the required network traffic is
reduced to zero, and the client need not even contact the server.
196. Using a CVSROOT with a trailing slash will confuse CVS. I think
we need to add a call to strip_trailing_slashes in root.c
(parse_cvsroot), but I haven't considered all of the ramifications.
197. Analyze the difference between CVS_UNLINK & unlink_file. As far as I
can tell, unlink_file aborts in noexec mode and CVS_UNLINK does not. I'm not
sure it would be possible to remove even the use of temp files in noexec mode,
@ -825,9 +814,6 @@ and other non-canonical paths confuse CVS. Most of the cases that do
work are handled on an ad-hoc basis. We need to come up with a coherent
strategy to address path canonicalization and apply it consistently.
206. Restore directory-at-a-time locking for tag operations instead of
locking the entire tree.
208. Merge enhancements to the diff package back into the original GNU source.
209. Go through this file and try to:
@ -862,24 +848,12 @@ glibc version.
216. Avoid command-line keyword expansion modes overriding binary mode
(or make binary mode completely separate from keyword expansion mode).
217. Fix assertion failures that occur when CVSROOT is a symlink to the
actual repository location.
218. Fix "checkout -d ." in client/server mode.
219. Fix "checkout -d multi/level/dir" in client/server mode.
220. Send correct Max-dotdot in client/server mode (broken by change to
support multiple repositories).
221. Handle spaces in file/directory names. (Most, if not all, of the
internal infrastructure already handles them correctly, but most of the
administrative file interfaces do not.)
222. Fix assertion failure (*rcsnode == NULL in commit.c, line 2056)
when adding a file from a case-insensitive client that matches an Attic
file with case differences.
223. Internationalization support. This probably means using some kind
of universal character set (ISO 10646?) internally and converting on
input and output, which opens the locale can of worms.
@ -899,13 +873,18 @@ local time string according to the localization settings before printing it.
225. Add support for --allow-root to server command.
226. Add support for upgrading read locks to write locks and use it to
avoid holding potentially long-term write locks (for example, in tag and
commit).
227. 'cvs release' should use the CVS/Root in the directory being released
when such is specified rather than $CVSROOT. In my work directory with no CVS
dir, a release of subdirectories causes the released projects to be tested
against my $CVSROOT environment variable, which often isn't correct but which
can complete without generating error messages if the project also exists in
the other CVSROOT. This happens a lot with my copies of the ccvs project.
228. Consider adding -d to commit ala ci.
229. Improve the locking code to use a random delay with exponential
backoff ala Ethernet and separate the notification interval from the
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.

View File

@ -85,7 +85,7 @@ AC_MSG_RESULT([$acx_gssapi_cv_gssapi])
# Set up GSSAPI includes for later use. We don't bother to check for
# $acx_gssapi_cv_gssapi=no here since that will be caught later.
#
if test x$acx_gssapi_cv_gssapi = yes; then
if test x$acx_gssapi_cv_gssapi = xyes; then
# no special includes necessary
GSSAPI_INCLUDES=""
else
@ -210,8 +210,14 @@ when using GSSAPI.])
#
AC_SEARCH_LIBS([__dn_expand], [resolv])
#
# crypt Needed by roken under FreeBSD 4.6.
#
AC_SEARCH_LIBS([crypt], [crypt])
#
# roken Heimdal K 0.3d -lresolv
# roken FreeBSD 4.6 -lcrypt
#
AC_SEARCH_LIBS([roken_gethostbyaddr], [roken])

264
contrib/cvs/aclocal.m4 vendored
View File

@ -1,6 +1,6 @@
# aclocal.m4 generated automatically by aclocal 1.6.3 -*- Autoconf -*-
# generated automatically by aclocal 1.7.9 -*- Autoconf -*-
# Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -98,7 +98,7 @@ AC_MSG_RESULT([$acx_gssapi_cv_gssapi])
# Set up GSSAPI includes for later use. We don't bother to check for
# $acx_gssapi_cv_gssapi=no here since that will be caught later.
#
if test x$acx_gssapi_cv_gssapi = yes; then
if test x$acx_gssapi_cv_gssapi = xyes; then
# no special includes necessary
GSSAPI_INCLUDES=""
else
@ -223,8 +223,14 @@ when using GSSAPI.])
#
AC_SEARCH_LIBS([__dn_expand], [resolv])
#
# crypt Needed by roken under FreeBSD 4.6.
#
AC_SEARCH_LIBS([crypt], [crypt])
#
# roken Heimdal K 0.3d -lresolv
# roken FreeBSD 4.6 -lcrypt
#
AC_SEARCH_LIBS([roken_gethostbyaddr], [roken])
@ -280,7 +286,7 @@ fi
# This macro actually does too much some checks are only needed if
# your package does certain things. But this isn't really a big deal.
# Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
@ -298,16 +304,9 @@ fi
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 8
# serial 10
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
# will think it sees a *use*, and therefore will trigger all it's
# C support machinery. Also note that it means that autoscan, seeing
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
AC_PREREQ([2.52])
AC_PREREQ([2.54])
# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow
# the ones we care about.
@ -333,6 +332,16 @@ if test "`cd $srcdir && pwd`" != "`pwd`" &&
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
fi
# test whether we have cygpath
if test -z "$CYGPATH_W"; then
if (cygpath --version) >/dev/null 2>/dev/null; then
CYGPATH_W='cygpath -w'
else
CYGPATH_W=echo
fi
fi
AC_SUBST([CYGPATH_W])
# Define the identity of the package.
dnl Distinguish between old-style and new-style calls.
m4_ifval([$2],
@ -340,8 +349,8 @@ m4_ifval([$2],
AC_SUBST([PACKAGE], [$1])dnl
AC_SUBST([VERSION], [$2])],
[_AM_SET_OPTIONS([$1])dnl
AC_SUBST([PACKAGE], [AC_PACKAGE_TARNAME])dnl
AC_SUBST([VERSION], [AC_PACKAGE_VERSION])])dnl
AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
_AM_IF_OPTION([no-define],,
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
@ -362,19 +371,41 @@ AM_PROG_INSTALL_STRIP
# some platforms.
AC_REQUIRE([AC_PROG_AWK])dnl
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
_AM_IF_OPTION([no-dependencies],,
[AC_PROVIDE_IFELSE([AC_PROG_][CC],
[AC_PROVIDE_IFELSE([AC_PROG_CC],
[_AM_DEPENDENCIES(CC)],
[define([AC_PROG_][CC],
defn([AC_PROG_][CC])[_AM_DEPENDENCIES(CC)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_][CXX],
[define([AC_PROG_CC],
defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_CXX],
[_AM_DEPENDENCIES(CXX)],
[define([AC_PROG_][CXX],
defn([AC_PROG_][CXX])[_AM_DEPENDENCIES(CXX)])])dnl
[define([AC_PROG_CXX],
defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
])
])
# When config.status generates a header, we must update the stamp-h file.
# This file resides in the same directory as the config header
# that is generated. The stamp files are numbered to have different names.
# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
# loop where config.status creates the headers, so we can generate
# our stamp files there.
AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
[# Compute $1's index in $config_headers.
_am_stamp_count=1
for _am_header in $config_headers :; do
case $_am_header in
$1 | $1:* )
break ;;
* )
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
esac
done
echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
# Copyright 2002 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
@ -395,14 +426,14 @@ AC_PROVIDE_IFELSE([AC_PROG_][CXX],
# ----------------------------
# Automake X.Y traces this macro to ensure aclocal.m4 has been
# generated from the m4 files accompanying Automake X.Y.
AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.6"])
AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"])
# AM_SET_CURRENT_AUTOMAKE_VERSION
# -------------------------------
# Call AM_AUTOMAKE_VERSION so it can be traced.
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
[AM_AUTOMAKE_VERSION([1.6.3])])
[AM_AUTOMAKE_VERSION([1.7.9])])
# Helper functions for option handling. -*- Autoconf -*-
@ -688,9 +719,42 @@ fi
INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
# serial 4 -*- Autoconf -*-
# -*- Autoconf -*-
# Copyright (C) 2003 Free Software Foundation, Inc.
# Copyright 1999, 2000, 2001 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.
# serial 1
# Check whether the underlying file-system supports filenames
# with a leading dot. For instance MS-DOS doesn't.
AC_DEFUN([AM_SET_LEADING_DOT],
[rm -rf .tst 2>/dev/null
mkdir .tst 2>/dev/null
if test -d .tst; then
am__leading_dot=.
else
am__leading_dot=_
fi
rmdir .tst 2>/dev/null
AC_SUBST([am__leading_dot])])
# serial 5 -*- Autoconf -*-
# Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -751,18 +815,32 @@ AC_CACHE_CHECK([dependency style of $depcc],
# using a relative directory.
cp "$am_depcomp" conftest.dir
cd conftest.dir
# We will build objects and dependencies in a subdirectory because
# it helps to detect inapplicable dependency modes. For instance
# both Tru64's cc and ICC support -MD to output dependencies as a
# side effect of compilation, but ICC will put the dependencies in
# the current directory while Tru64 will put them in the object
# directory.
mkdir sub
am_cv_$1_dependencies_compiler_type=none
if test "$am_compiler_list" = ""; then
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
fi
for depmode in $am_compiler_list; do
# Setup a source with many dependencies, because some compilers
# like to wrap large dependency lists on column 80 (with \), and
# we should not choose a depcomp mode which is confused by this.
#
# We need to recreate these files for each test, as the compiler may
# overwrite some of them when testing with obscure command lines.
# This happens at least with the AIX C compiler.
echo '#include "conftest.h"' > conftest.c
echo 'int i;' > conftest.h
echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf
: > 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
done
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
case $depmode in
nosideeffect)
@ -780,13 +858,20 @@ AC_CACHE_CHECK([dependency style of $depcc],
# mode. It turns out that the SunPro C++ compiler does not properly
# handle `-M -o', and we need to detect this.
if depmode=$depmode \
source=conftest.c object=conftest.o \
depfile=conftest.Po tmpdepfile=conftest.TPo \
$SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 &&
grep conftest.h conftest.Po > /dev/null 2>&1 &&
source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
$SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
>/dev/null 2>conftest.err &&
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
am_cv_$1_dependencies_compiler_type=$depmode
break
# 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
am_cv_$1_dependencies_compiler_type=$depmode
break
fi
fi
done
@ -797,6 +882,9 @@ else
fi
])
AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
AM_CONDITIONAL([am__fastdep$1], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_$1_dependencies_compiler_type" = gcc3])
])
@ -805,16 +893,8 @@ AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
# Choose a directory name for dependency files.
# This macro is AC_REQUIREd in _AM_DEPENDENCIES
AC_DEFUN([AM_SET_DEPDIR],
[rm -f .deps 2>/dev/null
mkdir .deps 2>/dev/null
if test -d .deps; then
DEPDIR=.deps
else
# MS-DOS does not allow filenames that begin with a dot.
DEPDIR=_deps
fi
rmdir .deps 2>/dev/null
AC_SUBST([DEPDIR])
[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
])
@ -916,7 +996,9 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
])
# Copyright 2001 Free Software Foundation, Inc. -*- Autoconf -*-
# Check to see how 'make' treats includes. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -941,8 +1023,9 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
AC_DEFUN([AM_MAKE_INCLUDE],
[am_make=${MAKE-make}
cat > confinc << 'END'
doit:
am__doit:
@echo done
.PHONY: am__doit
END
# If we don't find an include directive, just comment out the code.
AC_MSG_CHECKING([for style of include used by $am_make])
@ -956,7 +1039,7 @@ echo "include confinc" > confmf
# In particular we don't look at `^make:' because GNU make might
# be invoked under some other name (usually "gmake"), in which
# case it prints its new name instead of `make'.
if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then
if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
am__include=include
am__quote=
_am_result=GNU
@ -970,9 +1053,9 @@ if test "$am__include" = "#"; then
_am_result=BSD
fi
fi
AC_SUBST(am__include)
AC_SUBST(am__quote)
AC_MSG_RESULT($_am_result)
AC_SUBST([am__include])
AC_SUBST([am__quote])
AC_MSG_RESULT([$_am_result])
rm -f confinc confmf
])
@ -1016,7 +1099,7 @@ else
fi
AC_CONFIG_COMMANDS_PRE(
[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
AC_MSG_ERROR([conditional \"$1\" was never defined.
AC_MSG_ERROR([conditional "$1" was never defined.
Usually this means the macro was only invoked conditionally.])
fi])])
@ -1043,60 +1126,47 @@ AC_PREREQ([2.52])
# serial 6
# When config.status generates a header, we must update the stamp-h file.
# This file resides in the same directory as the config header
# that is generated. We must strip everything past the first ":",
# and everything past the last "/".
# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
# _AM_DIRNAME(PATH)
# -----------------
# Like AS_DIRNAME, only do it during macro expansion
AC_DEFUN([_AM_DIRNAME],
[m4_if(regexp([$1], [^.*[^/]//*[^/][^/]*/*$]), -1,
m4_if(regexp([$1], [^//\([^/]\|$\)]), -1,
m4_if(regexp([$1], [^/.*]), -1,
[.],
patsubst([$1], [^\(/\).*], [\1])),
patsubst([$1], [^\(//\)\([^/].*\|$\)], [\1])),
patsubst([$1], [^\(.*[^/]\)//*[^/][^/]*/*$], [\1]))[]dnl
])# _AM_DIRNAME
# Add --enable-maintainer-mode option to configure.
# From Jim Meyering
# Copyright 1996, 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
# The stamp files are numbered to have different names.
# We could number them on a directory basis, but that's additional
# complications, let's have a unique counter.
m4_define([_AM_STAMP_Count], [0])
# 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.
# _AM_STAMP(HEADER)
# -----------------
# The name of the stamp file for HEADER.
AC_DEFUN([_AM_STAMP],
[m4_define([_AM_STAMP_Count], m4_incr(_AM_STAMP_Count))dnl
AS_ESCAPE(_AM_DIRNAME(patsubst([$1],
[:.*])))/stamp-h[]_AM_STAMP_Count])
# 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.
# serial 2
# _AM_CONFIG_HEADER(HEADER[:SOURCES], COMMANDS, INIT-COMMANDS)
# ------------------------------------------------------------
# We used to try to get a real timestamp in stamp-h. But the fear is that
# that will cause unnecessary cvs conflicts.
AC_DEFUN([_AM_CONFIG_HEADER],
[# Add the stamp file to the list of files AC keeps track of,
# along with our hook.
AC_CONFIG_HEADERS([$1],
[# update the timestamp
echo 'timestamp for $1' >"_AM_STAMP([$1])"
$2],
[$3])
])# _AM_CONFIG_HEADER
AC_DEFUN([AM_MAINTAINER_MODE],
[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
dnl maintainer-mode is disabled by default
AC_ARG_ENABLE(maintainer-mode,
[ --enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer],
USE_MAINTAINER_MODE=$enableval,
USE_MAINTAINER_MODE=no)
AC_MSG_RESULT([$USE_MAINTAINER_MODE])
AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
MAINT=$MAINTAINER_MODE_TRUE
AC_SUBST(MAINT)dnl
]
)
# AM_CONFIG_HEADER(HEADER[:SOURCES]..., COMMANDS, INIT-COMMANDS)
# --------------------------------------------------------------
AC_DEFUN([AM_CONFIG_HEADER],
[AC_FOREACH([_AM_File], [$1], [_AM_CONFIG_HEADER(_AM_File, [$2], [$3])])
])# AM_CONFIG_HEADER
AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
# serial 2

View File

@ -41,10 +41,15 @@
/* Define to enable encryption support. */
#undef ENCRYPTION
/* Define if this executable will be running on case insensitive file systems.
In the client case, this means that it will request that the server pretend
to be case insensitive if it isn't already. */
#undef FILENAMES_CASE_INSENSITIVE
/* When committing or importing files, you must enter a log message. Normally,
you can do this either via the -m flag on the command line, the -F flag on
the command line, or an editor will be started for you. If you like to use
logging templates (the rcsinfo file within the /CVSROOT directory),
logging templates (the rcsinfo file within the $CVSROOT/CVSROOT directory),
you might want to force people to use the editor even if they specify a
message with -m or -F. Enabling FORCE_USE_EDITOR will cause the -m or -F
message to be appended to the temp file when the editor is started. */
@ -83,7 +88,7 @@
/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
/* Define to 1 if your system has a working `fnmatch' function. */
/* Define to 1 if your system has a working POSIX `fnmatch' function. */
#undef HAVE_FNMATCH
/* Define to 1 if you have the <fnmatch.h> header file. */
@ -116,9 +121,6 @@
/* Define to 1 if you have the `getpagesize' function. */
#undef HAVE_GETPAGESIZE
/* Define to 1 if you have the `getpassphrase' function. */
#undef HAVE_GETPASSPHRASE
/* Define if you have the getspnam function. */
#undef HAVE_GETSPNAM
@ -155,6 +157,12 @@
/* Define to 1 if you have the `krb_get_err_text' function. */
#undef HAVE_KRB_GET_ERR_TEXT
/* Define to 1 if you have the `krb' library (-lkrb). */
#undef HAVE_LIBKRB
/* Define to 1 if you have the `krb4' library (-lkrb4). */
#undef HAVE_LIBKRB4
/* Define to 1 if you have the `nsl' library (-lnsl). */
#undef HAVE_LIBNSL
@ -470,6 +478,11 @@
/* Define to empty if `const' does not conform to ANSI C. */
#undef const
/* We want to always use the GNULIB version of getpass which we have in lib,
so define getpass to something that won't conflict with any existing system
declarations. */
#undef getpass
/* Define to `int' if <sys/types.h> doesn't define. */
#undef gid_t

5576
contrib/cvs/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,12 @@
dnl configure.in for cvs
AC_INIT([Concurrent Versions System (CVS)],[1.11.5],[bug-cvs@gnu.org],[cvs])
AC_INIT([Concurrent Versions System (CVS)],[1.11.15],[bug-cvs@gnu.org],[cvs])
AC_CONFIG_SRCDIR(src/cvs.h)
AM_INIT_AUTOMAKE([gnu 1.5 dist-bzip2 no-define])
AC_PREREQ(2.53)
AM_INIT_AUTOMAKE([gnu 1.7.9 dist-bzip2 no-define])
AC_PREREQ(2.58)
AC_PREFIX_PROGRAM(cvs)
AM_CONFIG_HEADER(config.h)
AM_MAINTAINER_MODE
AC_PROG_CC
AM_PROG_CC_C_O
@ -71,8 +72,18 @@ AC_EXEEXT
AC_PATH_PROG(PERL, perl, no)
AC_PATH_PROG(CSH, csh, no)
AC_PATH_PROG(PR, pr, no)
# for contrib/rcs2log.sh & src/cvsbug.in.
AC_PATH_PROG(MKTEMP, mktemp, mktemp)
if test x"$MKTEMP" = xmktemp; then
MKTEMP_SH_FUNCTION=$srcdir/mktemp.sh
else
MKTEMP_SH_FUNCTION=/dev/null
fi
AC_SUBST_FILE(MKTEMP_SH_FUNCTION)
# for src/cvsbug.in
AC_PATH_PROG(SENDMAIL, sendmail, no, [$PATH:/usr/sbin:/usr/lib])
# For diff/util.c
AC_PATH_PROG(PR, pr, no)
if test x"$PR" != xno; then
AC_DEFINE_UNQUOTED([PR_PROGRAM], ["$PR"], [Path to the pr utility])
fi
@ -174,6 +185,26 @@ AC_REPLACE_FUNCS(\
valloc \
waitpid \
)
dnl
dnl Begin GNULIB stuff.
dnl
dnl We always want to use the GNULIB getpass, so define its name to something
dnl that won't conflict with system declarations.
AC_DEFINE([getpass], [cvs_getpass],
[We want to always use the GNULIB version of getpass which we have in lib,
so define getpass to something that won't conflict with any existing system
declarations.])
dnl
dnl End GNULIB stuff.
dnl
AC_CHECK_FUNCS(\
fchdir \
fchmod \
@ -183,7 +214,6 @@ AC_CHECK_FUNCS(\
getgroups \
getopt \
getpagesize \
getpassphrase \
gettimeofday \
initgroups \
login \
@ -349,18 +379,20 @@ if test -n "$krb_h"; then
LDFLAGS=$hold_ldflags
else
AC_CHECK_LIB(krb,printf,[krb_lib=yes krb_libdir=])
AC_CHECK_FUNC(krb_recvauth,[krb_lib=yes krb_libdir=])
fi
if test -n "$krb_lib"; then
AC_DEFINE([HAVE_KERBEROS], 1,
[Define if you have MIT Kerberos version 4 available.])
test -n "${krb_libdir}" && LIBS="${LIBS} -L${krb_libdir}"
LIBS="${LIBS} -lkrb"
# Put -L${krb_libdir} in LDFLAGS temporarily so that it appears before
# -ldes in the command line. Don't do it permanently so that we honor
# the user's setting for LDFLAGS
hold_ldflags=$LDFLAGS
test -n "${krb_libdir}" && LDFLAGS="$LDFLAGS -L${krb_libdir}"
AC_CHECK_LIB(des,printf,[LIBS="${LIBS} -ldes"])
AC_CHECK_LIB(krb,krb_recvauth)
AC_CHECK_LIB(krb4,krb_recvauth)
LDFLAGS=$hold_ldflags
if test -n "$krb_incdir"; then
includeopt="${includeopt} -I$krb_incdir"
@ -396,8 +428,21 @@ AC_ARG_WITH(
[--with-editor],
[The default text editor CVS should use for log messages
(default autoselects)]), ,
[with_editor="vi emacs pico edit"])
[with_editor=yes])
# If --with-editor was supplied with an argument, let it override $EDITOR from
# the user's environment. We need to unset EDITOR here because AC_CHECK_PROGS
# will let the value of EDITOR ride when it is set rather than searching. We
# ignore the --without-editor case since it will be caught below.
if test -n "$EDITOR" && test yes != $with_editor; then
AS_UNSET([EDITOR])
fi
# Set the default when --with-editor wasn't supplied or when it was supplied
# without an argument.
if test yes = $with_editor; then
with_editor="vim vi emacs nano pico edit"
fi
if echo $with_editor |grep ^/ >/dev/null; then
# If $with_editor is an absolute path, issue a warning if the executable
@ -409,31 +454,40 @@ if echo $with_editor |grep ^/ >/dev/null; then
if ! test -f $with_editor \
|| ! test -x $with_editor; then
# warn the user that they may encounter problems
AC_MSG_WARN([$with_editor is not a path to an executable file])
AC_MSG_WARN([\`$with_editor' is not a path to an executable file])
fi
elif test no != "${with_editor}"; then
# Search for an editor
AC_CHECK_PROGS([EDITOR], [$with_editor])
AC_CHECK_PROGS([EDITOR], [$with_editor], [no])
if test no = "${EDITOR}"; then
AC_MSG_ERROR([
Failed to find a text file editor. CVS cannot be compiled
without a default log message editor. Searched for
\`$with_editor'. Try \`configure --with-editor'.])
fi
else
AC_MSG_CHECKING([for an editor])
AC_MSG_RESULT([no])
AC_MSG_ERROR([
CVS cannot be compiled without a default log message editor.
Try \`configure --with-editor'.])
fi
if test -n "${EDITOR}"; then
dnl FIXME - Using --without-editor will probably break a compile at
dnl the moment, but maybe it is reasonable for someone to want to
dnl compile a CVS executable that refuses to run if no $EDITOR,
dnl $CVS_EDITOR, or -e option is specified? Making a preliminary
dnl design decision in this direction, subject to discussion.
AC_DEFINE_UNQUOTED(
[EDITOR_DFLT], ["$EDITOR"],
[The default editor to use, if one does not specify the "-e" option
to cvs, or does not have an EDITOR environment variable. If this
is not set to an absolute path to an executable, use the shell to
find where the editor actually is. This allows sites with
/usr/bin/vi or /usr/ucb/vi to work equally well (assuming that their
PATH is reasonable).])
fi
dnl FIXME - Using --without-editor will probably break a compile at
dnl the moment, but maybe it is reasonable for someone to want to
dnl compile a CVS executable that refuses to run if no $EDITOR,
dnl $CVS_EDITOR, or -e option is specified? Making a preliminary
dnl design decision in this direction, subject to discussion.
dnl
dnl Still don't know if the above would be useful, but we shouldn't
dnl be able to get here any longer without $EDITOR defined due to the
dnl error checking above.
AC_DEFINE_UNQUOTED(
[EDITOR_DFLT], ["$EDITOR"],
[The default editor to use, if one does not specify the "-e" option
to cvs, or does not have an EDITOR environment variable. If this
is not set to an absolute path to an executable, use the shell to
find where the editor actually is. This allows sites with
/usr/bin/vi or /usr/ucb/vi to work equally well (assuming that their
PATH is reasonable).])
dnl
dnl done finding an editor
@ -454,7 +508,7 @@ AC_ARG_WITH(
AC_MSG_CHECKING([for temporary directory])
if test -z "$with_tmpdir" || test yes = "$with_tmpdir"; then
for with_tmpdir in "$TMPDIR" "$TMP" "$TEMP" /tmp /var/tmp no; do
for with_tmpdir in /tmp /var/tmp no; do
if test -d "$with_tmpdir" && test -x "$with_tmpdir" \
&& test -w "$with_tmpdir" && test -r "$with_tmpdir"; then
break
@ -633,7 +687,7 @@ if test no != "$enable_password_authenticated_client"; then
method in the CVS client (default)])
else
AC_MSG_WARN(
[--enable-password-authenticated-server is meaningless with
[--enable-password-authenticated-client is meaningless with
the CVS client disabled (--disable-client)])
fi
fi
@ -740,6 +794,73 @@ if test no != "$enable_server"; then
fi # enable_server
dnl
dnl begin --enable-case-sensitivity
dnl
AC_ARG_ENABLE(
[case-sensitivity],
AC_HELP_STRING(
[--enable-case-sensitivity],
[Force CVS to expect a case sensitive file system. Enabling this on a case
insensitive system should have little effect on the server or client
operation, though client users may ocassionally be suprised that the CVS
server appears to be case sensitive. Disabling this for a case sensitive
server disables server support for case insensitive clients, which can
confuse all users of case insensitive clients contacting the server.
Disabling this for a case sensitive client will cause the client to ask
servers to behave case insensitively, which could cause confusion for
users, but also probably no real harm. (default autoselects based on the
case sensitivity of the file system containing the current working
directory)]),
[case "$enable_case_sensitivity" in
yes | no | auto) ;;
*)
AC_MSG_ERROR([Unrecognized argument to --enable-case-sensitivity: \`$enable_case_sensitivity'. Acceptable values are \`yes', \`no', and \`auto'.])
;;
esac],
[enable_case_sensitivity=auto])
acx_forced=' (forced)'
AC_MSG_CHECKING([for a case sensitive file system])
if test $enable_case_sensitivity = auto; then
dnl
dnl Check for a case insensitive filesystem, like Mac OS X and Windows have.
dnl
AC_CACHE_VAL([acx_cv_case_sensitive],
[ rm -f ac_TEST_filenames_CASE_sensitive
echo foo >ac_test_filenames_case_sensitive
if test -f ac_TEST_filenames_CASE_sensitive; then
acx_cv_case_sensitive=no
else
acx_cv_case_sensitive=yes
fi
rm ac_test_filenames_case_sensitive
])
enable_case_sensitivity=$acx_cv_case_sensitive
acx_forced=
fi
AC_MSG_RESULT([$enable_case_sensitivity$acx_forced])
if test $enable_case_sensitivity = no; then
AC_DEFINE([FILENAMES_CASE_INSENSITIVE], [1],
[Define if this executable will be running on case insensitive
file systems. In the client case, this means that it will request
that the server pretend to be case insensitive if it isn't
already.])
dnl Compile fncase.c (containing fncase() & fncmp()) to handle file name
dnl comparisons on case insensitive filesystems.
AC_LIBOBJ(fncase)
fi
dnl
dnl end --enable-case-sensitivity
dnl
dnl
dnl begin --enable-encryption
dnl
dnl
dnl Use --enable-encryption to turn on encryption support, but ignore this
dnl option unless either client or server is enabled.
@ -757,7 +878,7 @@ if test "$enable_encryption" = yes; then
[Define to enable encryption support.])
else
AC_MSG_WARN(
[--enable-encryption is meaningless with neither the CVS client
[--enable-encryption is meaningless when neither the CVS client
nor the CVS server is enabled (--disable-client and --disable-server).])
fi
fi
@ -849,6 +970,7 @@ dnl end --enable-*
dnl
dnl For the moment we will assume that all systems which have
dnl the unixyness to run configure are unixy enough to do the
dnl PreservePermissions stuff. I have this sinking feeling that
@ -856,11 +978,9 @@ dnl things won't be that simple, before long.
dnl AC_DEFINE(PRESERVE_PERMISSIONS_SUPPORT, 1,
dnl [Define if this system supports chown(), link(), and friends.])
dnl On cygwin32, we configure like a Unix system, but we use the
dnl Windows support code in lib/fncase.c to handle the case
dnl insensitive file system. We also need some support libraries. We
dnl do this at the end so that the new libraries are added at the end
dnl of LIBS.
dnl On cygwin32, we configure like a Unix system, but we need some support
dnl libraries. We do this at the end so that the new libraries are added at
dnl the end of LIBS.
dnl
dnl FIXME: We should be trying to meet the autoconf ideal of checking for
dnl the properties of the system rather than the name of the os here. In other
@ -870,7 +990,6 @@ AC_CACHE_CHECK(for cygwin32, ccvs_cv_sys_cygwin32,
[AC_TRY_COMPILE([], [return __CYGWIN32__;],
ccvs_cv_sys_cygwin32=yes, ccvs_cv_sys_cygwin32=no)])
if test $ccvs_cv_sys_cygwin32 = yes; then
AC_LIBOBJ(fncase)
LIBS="$LIBS -ladvapi32"
dnl On Windows you can only change file times if you can write to
@ -898,6 +1017,7 @@ AC_CONFIG_FILES(contrib/log, [chmod +x contrib/log])
AC_CONFIG_FILES(contrib/log_accum, [chmod +x contrib/log_accum])
AC_CONFIG_FILES(contrib/mfpipe, [chmod +x contrib/mfpipe])
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(src/cvsbug, [chmod +x src/cvsbug])
@ -921,3 +1041,19 @@ AC_CONFIG_FILES([Makefile \
dnl and we're done
AC_OUTPUT
# Report the state of this version of CVS if this is from dev.
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>.
Below you will find information on the status of this version of CVS.
EOF
sed -n '/^\* Status/,$p' $srcdir/BUGS
])

View File

@ -1,3 +1,73 @@
2004-01-30 Derek Price <derek@ximbiot.com>
Close issue #155.
* log_accum.in: Remove unused variables.
(Patch from (Ville Skyttä <scop@cvshome.org>.)
2003-10-14 Derek Price <derek@ximbiot.com>
Port to pedantic POSIX 1003.1-2001 hosts, such as Debian GNU/Linux
testing with _POSIX2_VERSION=200112 in the environment.
* cvs2vendor.sh: Work with POSIX sort as well as with
traditional sort.
* rcs2sccs.sh, sccs2rcs.in: Likewise.
(Patch from Paul Eggert <eggert@twinsun.com>.)
2003-09-26 Mark D. Baushke <mdb@cvshome.org>
* sccs2rcs.in: Use @AWK@ to avoid ancient Solaris awk (no support
for the "?" operator). Add support for handling binary SCCS files.
(Suggestion from Allan Schrum <agschrum@mindspring.com>.)
2003-08-06 Derek Price <derek@ximbiot.com>
* commit_prep.in, log_accum.in: Port copious changes from Karl Fogel
and CollabNet. These changes add features, generalize, and organize.
2003-07-07 Larry Jones <lawrence.jones@eds.com>
* rcs2log.1: New file from Paul Eggert <eggert@twinsun.com>
via Eric Seidel <eseidel@apple.com>.
2003-06-20 Derek Price <derek@ximbiot.com>
* Don't call CVS with the -l option since CVS no longer accepts it.
(Suggestion from Matt Doar <matt@trpz.com>.)
2003-05-21 Derek Price <derek@ximbiot.com>
* Makefile.in: Regenerate with Automake version 1.7.5.
2003-04-10 Larry Jones <lawrence.jones@eds.com>
* Makefile.in: Regenerated.
2003-03-24 Derek Price <derek@ximbiot.com>
* Makefile.am: Update copyright notice.
* Makefile.in: Regenerated.
2003-02-25 Derek Price <derek@ximbiot.com>
* rcs2log.sh: Import RedHat 8.0's use of mktemp from the CVS 1.11.2
RPM. Use new MKTEMP variable from configure.
* Makefile.in: Regenerated.
2003-02-24 Larry Jones <lawrence.jones@eds.com>
and Donald Sharp <sharpd@cisco.com>
* check_cvs.in: Filenames with funky characters need to be quoted
correctly. Also needed to modify regex due to locked revisions of
files cause output to be different.
* check_cvs.in: Fixed multiple symlinks in your cvsroot,
improved CVSROOT/CVSROOT handling (Patch from Shlomo Reinstein
<shlomo.reinstein@intel.com). Fixed retrieving revisions of ,v
files. Added passwd, readers, and writers to list of files to
ignore and sorted list to match the one in src/mkmodules.c.
2002-12-16 Derek Price <derek@ximbiot.com>
* cvs_acls.in: Fix split loop error with Perl 5.8.0.

View File

@ -1,7 +1,9 @@
## 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, 1988-1990 Free Software Foundation, Inc.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# Makefile.in generated by automake 1.7.9 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -16,7 +16,9 @@
# Makefile for GNU CVS contributed sources.
# Do not use this makefile directly, but only from `../Makefile'.
# Copyright (C) 1986, 1988-1990 Free Software Foundation, Inc.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -27,79 +29,117 @@
# 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.
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSH = @CSH@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EDITOR = @EDITOR@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
KRB4 = @KRB4@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MAKE_TARGETS_IN_VPATH_FALSE = @MAKE_TARGETS_IN_VPATH_FALSE@
MAKE_TARGETS_IN_VPATH_TRUE = @MAKE_TARGETS_IN_VPATH_TRUE@
MKTEMP = @MKTEMP@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PR = @PR@
PS2PDF = @PS2PDF@
RANLIB = @RANLIB@
ROFF = @ROFF@
SENDMAIL = @SENDMAIL@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
YACC = @YACC@
ac_ct_CC = @ac_ct_CC@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
ac_prefix_program = @ac_prefix_program@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
bindir = @bindir@
build_alias = @build_alias@
datadir = @datadir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
includedir = @includedir@
includeopt = @includeopt@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
contribdir = $(pkgdatadir)/contrib
@ -155,26 +195,28 @@ 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 rcslock sccs2rcs
log_accum mfpipe pvcs2rcs rcs2log rcslock sccs2rcs
SCRIPTS = $(contrib_SCRIPTS)
DIST_SOURCES =
DATA = $(contrib_DATA)
DIST_COMMON = README ChangeLog Makefile.am Makefile.in check_cvs.in \
clmerge.in cln_hist.in commit_prep.in cvs_acls.in log.in \
log_accum.in mfpipe.in pvcs2rcs.in rcslock.in sccs2rcs.in
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: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu contrib/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
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
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
@ -194,6 +236,8 @@ mfpipe: $(top_builddir)/config.status mfpipe.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
pvcs2rcs: $(top_builddir)/config.status pvcs2rcs.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
rcs2log: $(top_builddir)/config.status rcs2log.sh
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
rcslock: $(top_builddir)/config.status rcslock.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
sccs2rcs: $(top_builddir)/config.status sccs2rcs.in
@ -240,13 +284,22 @@ uninstall-contribDATA:
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@list='$(DISTFILES)'; for file in $$list; do \
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
@ -272,7 +325,6 @@ all-am: Makefile $(SCRIPTS) $(DATA)
installdirs:
$(mkinstalldirs) $(DESTDIR)$(contribdir) $(DESTDIR)$(contribdir)
install: install-am
install-exec: install-exec-am
install-data: install-data-am
@ -284,7 +336,7 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
@ -293,7 +345,7 @@ clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -303,7 +355,7 @@ clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
@ -326,13 +378,21 @@ install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-contribDATA uninstall-contribSCRIPTS \
uninstall-info-am uninstall-local
@ -343,7 +403,7 @@ uninstall-am: uninstall-contribDATA uninstall-contribSCRIPTS \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic uninstall uninstall-am \
mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
uninstall-contribDATA uninstall-contribSCRIPTS \
uninstall-info-am uninstall-local

View File

@ -67,6 +67,7 @@ my $verbose = 0;
my $total_revisions;
my $total_interesting_revisions;
my $total_files;
my @ignore_files;
######################################################################
# SUBROUTINES #
@ -121,12 +122,19 @@ if( exists( $ENV{ CVSDEBUGEDIT } ) )
}
$directory_to_look_at = $ENV{ CVSROOT };
if( -l $directory_to_look_at )
my $sym_count = 0;
while( -l $directory_to_look_at )
{
$directory_to_look_at = readlink( $directory_to_look_at );
$sym_count += 1;
if( $sym_count > 5 )
{
die( "Encountered too many symlinks for $ENV{ CVSROOT }\n" );
}
}
print( "Processing: $directory_to_look_at\n" ) if( $verbose );
@ignore_files = &get_ignore_files_from_cvsroot( $directory_to_look_at );
find( \&process_file, $directory_to_look_at );
my $num_files = @list_of_broken_files;
@ -184,34 +192,6 @@ sub process_file
elsif( ! -d $File::Find::name )
{
my $save = 0;
my @ignore_files = ( 'CVS\/fileattr$',
'^CVSROOT\/modules',
'^CVSROOT\/.#modules',
'^CVSROOT\/loginfo',
'^CVSROOT\/.#loginfo',
'^CVSROOT\/rcsinfo',
'^CVSROOT\/.#rcsinfo',
'^CVSROOT\/editinfo',
'^CVSROOT\/.#editinfo',
'^CVSROOT\/commitinfo',
'^CVSROOT\/.#commitinfo',
'^CVSROOT\/taginfo',
'^CVSROOT\/.#taginfo',
'^CVSROOT\/notify',
'^CVSROOT\/.#notify',
'^CVSROOT\/checkoutlist',
'^CVSROOT\/.#checkoutlist',
'^CVSROOT\/cvswrappers',
'^CVSROOT\/.#cvswrappers',
'^CVSROOT\/val-tags',
'^CVSROOT\/.#val-tags',
'^CVSROOT\/verifymsg',
'^CVSROOT\/.#verifymsg',
'^CVSROOT\/config',
'^CVSROOT\/.#config',
'^CVSROOT\/history',
'^CVSROOT\/cvsignore',
'^CVSROOT\/.#cvsignore' );
foreach my $ignore ( @ignore_files )
{
@ -322,18 +302,29 @@ sub look_at_cvs_file
sub get_history
{
my( $file ) = @_;
$file =~ s/(["\$`\\])/\\$1/g;
my @revisions;
my $revision;
my $ignore = 1;
my $save_ = $_;
open( FILE, "rlog -N '$file' 2>&1 |" ) or die( "unable to run rlog, help" );
open( FILE, "rlog -N \"$file\" 2>&1 |" ) or die( "unable to run rlog, help" );
while( <FILE> )
{
if( ( $revision ) = /^revision (.*)$/ )
{
push( @revisions, $revision );
#rlog outputs a "----" line before the actual revision
#without this we'll pick up peoples comments if they
#happen to start with revision
if( /^----------------------------$/ )
{
$ignore = 0;
next;
}
if( ( !$ignore ) && ( ( $revision ) = m/^revision (\S+)/ ) )
{
push( @revisions, $revision );
$ignore = 1;
}
}
@ -369,9 +360,6 @@ sub get_history
#
# COMMENTS :
# cvs command line options are as followed:
# -l - Do not log this command in the history file. I am
# doing this because we will literaly be looking at
# thousands of files with *lots* of revisions.
# -n - Do not run any checkout program as specified by the -o
# option in the modules file
# -p - Put all output to standard out.
@ -383,11 +371,12 @@ sub get_history
sub check_revision
{
my( $file, $revision ) = @_;
$file =~ s/(["\$`\\])/\\$1/g;
my $cwd = getcwd();
chdir( "/tmp" );
my $ret_code = 0xffff & system( "cvs -l co -n -p -r $revision '$file' > /dev/null 2>&1" );
my $ret_code = 0xffff & system( "cvs co -n -p -r $revision \"$file\" > /dev/null 2>&1" );
chdir( $cwd );
return( 1 ) if ( $ret_code == 0 );
@ -753,3 +742,81 @@ sub branch_split
return( $branch, pop( @split_rev ) );
}
######################################################################
#
# NAME :
# get_ignore_files_from_cvsroot
#
# PURPOSE :
# Retrieve the list of files from the CVSROOT/ directory
# that should be ignored.
# These are the regular files (e.g., commitinfo, loginfo)
# and those specified in the checkoutlist file.
#
# PARAMETERS :
# The CVSROOT
#
# GLOBALS :
# NONE
#
# RETURNS :
# @ignore - the list of files to ignore
#
# COMMENTS :
# NONE
#
######################################################################
sub get_ignore_files_from_cvsroot {
my( $cvsroot ) = @_;
my @ignore = ( 'CVS\/fileattr$',
'^CVSROOT\/loginfo',
'^CVSROOT\/.#loginfo',
'^CVSROOT\/rcsinfo',
'^CVSROOT\/.#rcsinfo',
'^CVSROOT\/editinfo',
'^CVSROOT\/.#editinfo',
'^CVSROOT\/verifymsg',
'^CVSROOT\/.#verifymsg',
'^CVSROOT\/commitinfo',
'^CVSROOT\/.#commitinfo',
'^CVSROOT\/taginfo',
'^CVSROOT\/.#taginfo',
'^CVSROOT\/cvsignore',
'^CVSROOT\/.#cvsignore',
'^CVSROOT\/checkoutlist',
'^CVSROOT\/.#checkoutlist',
'^CVSROOT\/cvswrappers',
'^CVSROOT\/.#cvswrappers',
'^CVSROOT\/notify',
'^CVSROOT\/.#notify',
'^CVSROOT\/modules',
'^CVSROOT\/.#modules',
'^CVSROOT\/readers',
'^CVSROOT\/.#readers',
'^CVSROOT\/writers',
'^CVSROOT\/.#writers',
'^CVSROOT\/passwd',
'^CVSROOT\/config',
'^CVSROOT\/.#config',
'^CVSROOT\/val-tags',
'^CVSROOT\/.#val-tags',
'^CVSROOT\/history' );
my $checkoutlist_file = "$cvsroot\/CVSROOT\/checkoutlist";
open( CHECKOUTLIST, "<$cvsroot\/CVSROOT\/checkoutlist" )
or die( "Unable to read checkoutlist file: $!\n" );
my @list = <CHECKOUTLIST>;
chomp( @list );
close( CHECKOUTLIST )
or die( "Unable to close checkoutlist file: $!\n" );
foreach my $line( @list )
{
next if( $line =~ /^#/ || $line =~ /^$/ );
if( $line =~ /^\s*(\S*)\s*/ ) { $line = $1 };
push( @ignore, "^CVSROOT\/$line", "^CVSROOT\/\.#$line" );
}
return @ignore;
}

View File

@ -1,215 +1,56 @@
#! @PERL@
# -*-Perl-*-
#
#
# 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. For new files, it forces the
# existence of a RCS "Id" keyword in the first ten lines of the file.
# For existing files, it checks version number in the "Id" line to
# prevent losing changes because an old version of a file was copied
# into the direcory.
#
# Possible future enhancements:
#
# Check for cruft left by unresolved conflicts. Search for
# "^<<<<<<<$", "^-------$", and "^>>>>>>>$".
#
# Look for a copyright and automagically update it to the
# current year. [[ bad idea! -- woods ]]
# use by the log_accum.pl script.
#
# IMPORTANT: this script interacts with log_accum, they have to agree
# on the tmpfile name to use. See $LAST_FILE below.
#
# Contributed by David Hampton <hampton@cisco.com>
# Stripped to minimum by Roy Fielding
#
# Hacked on lots by Greg A. Woods <woods@web.net>
############################################################
$TMPDIR = $ENV{'TMPDIR'} || '/tmp';
$FILE_PREFIX = '#cvs.';
#
# Configurable options
#
# If see a "-u $USER" argument, then destructively remove it from the
# argument list, so $ARGV[0] will be the repository dir again, as it
# used to be before we added the -u flag.
if ($ARGV[0] eq '-u') {
shift @ARGV;
$CVS_USERNAME = shift (@ARGV);
}
# Constants (remember to protect strings from RCS keyword substitution)
#
$LAST_FILE = "/tmp/#cvs.lastdir"; # must match name in log_accum.pl
$ENTRIES = "CVS/Entries";
# Patterns to find $Log keywords in files
#
$LogString1 = "\\\$\\Log: .* \\\$";
$LogString2 = "\\\$\\Log\\\$";
$NoLog = "%s - contains an RCS \$Log keyword. It must not!\n";
# pattern to match an RCS Id keyword line with an existing ID
#
$IDstring = "\"@\\(#\\)[^:]*:.*\\\$\Id: .*\\\$\"";
$NoId = "
%s - Does not contain a properly formatted line with the keyword \"Id:\".
I.e. no lines match \"" . $IDstring . "\".
Please see the template files for an example.\n";
# pattern to match an RCS Id keyword line for a new file (i.e. un-expanded)
#
$NewId = "\"@(#)[^:]*:.*\\$\Id\\$\"";
$NoName = "
%s - The ID line should contain only \"@(#)module/path:\$Name\$:\$\Id\$\"
for a newly created file.\n";
$BadName = "
%s - The file name '%s' in the ID line does not match
the actual filename.\n";
$BadVersion = "
%s - How dare you!!! You replaced your copy of the file '%s',
which was based upon version %s, with an %s version based
upon %s. Please move your '%s' out of the way, perform an
update to get the current version, and them merge your changes
into that file, then try the commit again.\n";
#
# Subroutines
#
# This needs to match the corresponding var in log_accum.pl, including
# the appending of the pgrp and username suffixes (see uses of this
# var farther down).
$LAST_FILE = "$TMPDIR/${FILE_PREFIX}lastdir";
sub write_line {
local($filename, $line) = @_;
open(FILE, ">$filename") || die("Cannot open $filename, stopped");
my ($filename, $line) = @_;
# A check of some kind is needed here, but the rules aren't apparent
# at the moment:
# foreach($filename, $line){
# $_ =~ m#^([-\@\w.\#]+)$#;
# $_ = $1;
# }
open(FILE, ">$filename") || die("Cannot open $filename: $!\n");
print(FILE $line, "\n");
close(FILE);
}
sub check_version {
local($i, $id, $rname, $version);
local($filename, $cvsversion) = @_;
open(FILE, "<$filename") || return(0);
@all_lines = ();
$idpos = -1;
$newidpos = -1;
for ($i = 0; <FILE>; $i++) {
chop;
push(@all_lines, $_);
if ($_ =~ /$IDstring/) {
$idpos = $i;
}
if ($_ =~ /$NewId/) {
$newidpos = $i;
}
}
if (grep(/$LogString1/, @all_lines) || grep(/$LogString2/, @all_lines)) {
print STDERR sprintf($NoLog, $filename);
return(1);
}
if ($debug != 0) {
print STDERR sprintf("file = %s, version = %d.\n", $filename, $cvsversion{$filename});
}
if ($cvsversion{$filename} == 0) {
if ($newidpos != -1 && $all_lines[$newidpos] !~ /$NewId/) {
print STDERR sprintf($NoName, $filename);
return(1);
}
return(0);
}
if ($idpos == -1) {
print STDERR sprintf($NoId, $filename);
return(1);
}
$line = $all_lines[$idpos];
$pos = index($line, "Id: ");
if ($debug != 0) {
print STDERR sprintf("%d in '%s'.\n", $pos, $line);
}
($id, $rname, $version) = split(' ', substr($line, $pos));
if ($rname ne "$filename,v") {
print STDERR sprintf($BadName, $filename, substr($rname, 0, length($rname)-2));
return(1);
}
if ($cvsversion{$filename} < $version) {
print STDERR sprintf($BadVersion, $filename, $filename, $cvsversion{$filename},
"newer", $version, $filename);
return(1);
}
if ($cvsversion{$filename} > $version) {
print STDERR sprintf($BadVersion, $filename, $filename, $cvsversion{$filename},
"older", $version, $filename);
return(1);
}
return(0);
}
#
# Main Body
#
$id = getpgrp(); # You *must* use a shell that does setpgrp()!
# Check each file (except dot files) for an RCS "Id" keyword.
#
$check_id = 0;
# Record the directory for later use by the log_accumulate stript.
#
$record_directory = 0;
# parse command line arguments
#
while (@ARGV) {
$arg = shift @ARGV;
if ($arg eq '-d') {
$debug = 1;
print STDERR "Debug turned on...\n";
} elsif ($arg eq '-c') {
$check_id = 1;
} elsif ($arg eq '-r') {
$record_directory = 1;
} else {
push(@files, $arg);
}
}
$directory = shift @files;
if ($debug != 0) {
print STDERR "dir - ", $directory, "\n";
print STDERR "files - ", join(":", @files), "\n";
print STDERR "id - ", $id, "\n";
}
# Suck in the CVS/Entries file
#
open(ENTRIES, $ENTRIES) || die("Cannot open $ENTRIES.\n");
while (<ENTRIES>) {
local($filename, $version) = split('/', substr($_, 1));
$cvsversion{$filename} = $version;
}
# Now check each file name passed in, except for dot files. Dot files
# are considered to be administrative files by this script.
#
if ($check_id != 0) {
$failed = 0;
foreach $arg (@files) {
if (index($arg, ".") == 0) {
next;
}
$failed += &check_version($arg);
}
if ($failed) {
print STDERR "\n";
exit(1);
}
}
# Record this directory as the last one checked. This will be used
# by the log_accumulate script to determine when it is processing
# the final directory of a multi-directory commit.
#
if ($record_directory != 0) {
&write_line("$LAST_FILE.$id", $directory);
}
$id = getpgrp();
&write_line("$LAST_FILE.$id.$CVS_USERNAME", $ARGV[0]);
exit(0);

View File

@ -42,6 +42,11 @@ rm -f $revfile
commentfile=/tmp/cvs2vendor_$$_comment
rm -f $commentfile
if sort -k 1,1 /dev/null 2>/dev/null
then sort_each_field='-k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9'
else sort_each_field='+0 +1 +2 +3 +4 +5 +6 +7 +8'
fi
srcdirs=`cd $tsrcdir && find . -type d -print | sed 's~^\.[/]*~~'`
# the "" is a trick to get $tsrcdir itself without resorting to '.'
@ -68,7 +73,7 @@ for ldir in "" $srcdirs; do
fi
# work on each rev of that file in ascending order
rlog $file | grep "^revision [0-9][0-9]*\." | awk '{print $2}' | sed -e 's/\./ /g' | sort -n -u +0 +1 +2 +3 +4 +5 +6 +7 +8 | sed -e 's/ /./g' > $revfile
rlog $file | grep "^revision [0-9][0-9]*\." | awk '{print $2}' | sed -e 's/\./ /g' | sort -n -u $sort_each_field | sed -e 's/ /./g' > $revfile
for rev in `cat $revfile`; do

File diff suppressed because it is too large Load Diff

View File

@ -31,7 +31,7 @@ Report bugs to <bug-gnu-emacs@gnu.org>.'
Id='$Id: rcs2log,v 1.48 2001/09/05 23:07:46 eggert Exp $'
# Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2001
# Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2003
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
@ -49,13 +49,16 @@ Id='$Id: rcs2log,v 1.48 2001/09/05 23:07:46 eggert Exp $'
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
Copyright='Copyright 2001 Free Software Foundation, Inc.
Copyright='Copyright 1992-2003 Free Software Foundation, Inc.
This program comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of this program
under the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING.
Author: Paul Eggert <eggert@twinsun.com>'
# functions
@MKTEMP_SH_FUNCTION@
# Use the traditional C locale.
LANG=C
LANGUAGE=C
@ -79,8 +82,10 @@ nl='
# Parse options.
# defaults
: ${MKTEMP="@MKTEMP@"}
: ${AWK=awk}
: ${TMPDIR=/tmp}
changelog=ChangeLog # change log file name
datearg= # rlog date option
hostname= # name of local host (if empty, will deduce it later)
@ -182,11 +187,11 @@ month_data='
m[9]="Oct"; m[10]="Nov"; m[11]="Dec"
'
logdir=$TMPDIR/rcs2log$$
logdir=`$MKTEMP -d $TMPDIR/rcs2log.XXXXXX`
test -n "$logdir" || exit
llogout=$logdir/l
trap exit 1 2 13 15
trap "rm -fr $logdir 2>/dev/null" 0
(umask 077 && exec mkdir $logdir) || exit
# If no rlog-format log file is given, generate one into $rlogfile.
case $rlogfile in

View File

@ -42,13 +42,17 @@ cp $tmpfile $sedfile
############################################################
# Loop over every RCS file in RCS dir
#
if sort -k 1,1 /dev/null 2>/dev/null
then sort_each_field='-k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9'
else sort_each_field='+0 +1 +2 +3 +4 +5 +6 +7 +8'
fi
for vfile in *,v; do
# get rid of the ",v" at the end of the name
file=`echo $vfile | sed -e 's/,v$//'`
# work on each rev of that file in ascending order
firsttime=1
rlog $file | grep "^revision [0-9][0-9]*\." | awk '{print $2}' | sed -e 's/\./ /g' | sort -n -u +0 +1 +2 +3 +4 +5 +6 +7 +8 | sed -e 's/ /./g' > $revfile
rlog $file | grep "^revision [0-9][0-9]*\." | awk '{print $2}' | sed -e 's/\./ /g' | sort -n -u $sort_each_field | sed -e 's/ /./g' > $revfile
for rev in `cat $revfile`; do
if [ $? != 0 ]; then
echo ERROR - revision

View File

@ -1,7 +1,7 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
# Copyright 1999, 2000 Free Software Foundation, Inc.
# Copyright 1999, 2000, 2003 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -18,6 +18,11 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
@ -26,7 +31,16 @@ if test -z "$depmode" || test -z "$source" || test -z "$object"; then
fi
# `libtool' can also be set to `yes' or `no'.
depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`}
if test -z "$depfile"; then
base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
dir=`echo "$object" | sed 's,/.*$,/,'`
if test "$dir" = "$object"; then
dir=
fi
# FIXME: should be _deps on DOS.
depfile="$dir.deps/$base"
fi
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
rm -f "$tmpdepfile"
@ -50,8 +64,9 @@ fi
case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
## we want. Yay!
"$@" -MT "$object" -MF "$tmpdepfile" -MD -MP
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff. Hmm.
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
@ -157,19 +172,25 @@ sgi)
aix)
# The C for AIX Compiler uses -M and outputs the dependencies
# in a .u file. This file always lives in the current directory.
# Also, the AIX compiler puts `$object:' at the start of each line;
# $object doesn't have directory information.
stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
# in a .u file. In older versions, this file always lives in the
# current directory. Also, the AIX compiler puts `$object:' at the
# start of each line; $object doesn't have directory information.
# Version 6 uses the directory in both cases.
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
tmpdepfile="$stripped.u"
outname="$stripped.o"
if test "$libtool" = yes; then
"$@" -Wc,-M
else
"$@" -M
fi
stat=$?
if test -f "$tmpdepfile"; then :
else
stripped=`echo "$stripped" | sed 's,^.*/,,'`
tmpdepfile="$stripped.u"
fi
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
@ -177,6 +198,7 @@ aix)
fi
if test -f "$tmpdepfile"; then
outname="$stripped.o"
# Each line is of the form `foo.o: dependent.h'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
@ -191,29 +213,80 @@ aix)
rm -f "$tmpdepfile"
;;
tru64)
# The Tru64 AIX compiler uses -MD to generate dependencies as a side
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
# Subdirectories are respected.
icc)
# Intel's C compiler understands `-MD -MF file'. However on
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
# ICC 7.0 will fill foo.d with something like
# foo.o: sub/foo.c
# foo.o: sub/foo.h
# which is wrong. We want:
# sub/foo.o: sub/foo.c
# sub/foo.o: sub/foo.h
# sub/foo.c:
# sub/foo.h:
# ICC 7.1 will output
# foo.o: sub/foo.c sub/foo.h
# and will wrap long lines using \ :
# foo.o: sub/foo.c ... \
# sub/foo.h ... \
# ...
"$@" -MD -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
# Each line is of the form `foo.o: dependent.h',
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
# Some versions of the HPUX 10.20 sed can't process this invocation
# correctly. Breaking it into two sed invocations is a workaround.
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
# dependencies in `foo.d' instead, so we check for that too.
# Subdirectories are respected.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
tmpdepfile="$object.d"
if test "$libtool" = yes; then
tmpdepfile1="$dir.libs/$base.lo.d"
tmpdepfile2="$dir.libs/$base.d"
"$@" -Wc,-MD
else
tmpdepfile1="$dir$base.o.d"
tmpdepfile2="$dir$base.d"
"$@" -MD
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
rm -f "$tmpdepfile1" "$tmpdepfile2"
exit $stat
fi
if test -f "$tmpdepfile1"; then
tmpdepfile="$tmpdepfile1"
else
tmpdepfile="$tmpdepfile2"
fi
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
# That's a space and a tab in the [].
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
# That's a tab and a space in the [].
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
@ -226,34 +299,42 @@ tru64)
dashmstdout)
# Important note: in order to support this mode, a compiler *must*
# always write the proprocessed file to stdout, regardless of -o,
# because we must use -o when running libtool.
test -z "$dashmflag" && dashmflag=-M
( IFS=" "
case " $* " in
*" --mode=compile "*) # this is libtool, let us make it quiet
for arg
do # cycle over the arguments
case "$arg" in
"--mode=compile")
# insert --quiet before "--mode=compile"
set fnord "$@" --quiet
shift # fnord
;;
esac
set fnord "$@" "$arg"
shift # fnord
shift # "$arg"
done
# always write the preprocessed file to stdout, regardless of -o.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
"$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
) &
proc=$!
"$@"
stat=$?
wait "$proc"
if test "$stat" != 0; then exit $stat; fi
done
test -z "$dashmflag" && dashmflag=-M
# Require at least two characters before searching for `:'
# in the target name. This is to cope with DOS-style filenames:
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
"$@" $dashmflag |
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
tr ' ' '
@ -271,36 +352,40 @@ dashXmstdout)
;;
makedepend)
# X makedepend
(
shift
cleared=no
for arg in "$@"; do
case $cleared in no)
set ""; shift
cleared=yes
esac
case "$arg" in
-D*|-I*)
set fnord "$@" "$arg"; shift;;
-*)
;;
*)
set fnord "$@" "$arg"; shift;;
esac
"$@" || exit $?
# Remove any Libtool call
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
obj_suffix="`echo $object | sed 's/^.*\././'`"
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@"
) &
proc=$!
"$@"
stat=$?
wait "$proc"
if test "$stat" != 0; then exit $stat; fi
shift
fi
# X makedepend
shift
cleared=no
for arg in "$@"; do
case $cleared in
no)
set ""; shift
cleared=yes ;;
esac
case "$arg" in
-D*|-I*)
set fnord "$@" "$arg"; shift ;;
# Strip any option that makedepend may not understand. Remove
# the object too, otherwise makedepend will parse it as a source file.
-*|$object)
;;
*)
set fnord "$@" "$arg"; shift ;;
esac
done
obj_suffix="`echo $object | sed 's/^.*\././'`"
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
tail +3 "$tmpdepfile" | tr ' ' '
sed '1,2d' "$tmpdepfile" | tr ' ' '
' | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
@ -310,35 +395,39 @@ makedepend)
cpp)
# Important note: in order to support this mode, a compiler *must*
# always write the proprocessed file to stdout, regardless of -o,
# because we must use -o when running libtool.
( IFS=" "
case " $* " in
*" --mode=compile "*)
for arg
do # cycle over the arguments
case $arg in
"--mode=compile")
# insert --quiet before "--mode=compile"
set fnord "$@" --quiet
shift # fnord
;;
esac
set fnord "$@" "$arg"
shift # fnord
shift # "$arg"
done
# always write the preprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
"$@" -E |
done
"$@" -E |
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed '$ s: \\$::' > "$tmpdepfile"
) &
proc=$!
"$@"
stat=$?
wait "$proc"
if test "$stat" != 0; then exit $stat; fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
cat < "$tmpdepfile" >> "$depfile"
@ -348,34 +437,27 @@ cpp)
msvisualcpp)
# Important note: in order to support this mode, a compiler *must*
# always write the proprocessed file to stdout, regardless of -o,
# always write the preprocessed file to stdout, regardless of -o,
# because we must use -o when running libtool.
( IFS=" "
case " $* " in
*" --mode=compile "*)
for arg
do # cycle over the arguments
case $arg in
"--mode=compile")
# insert --quiet before "--mode=compile"
set fnord "$@" --quiet
shift # fnord
;;
esac
"$@" || exit $?
IFS=" "
for arg
do
case "$arg" in
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
set fnord "$@"
shift
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # "$arg"
done
;;
shift
shift
;;
esac
"$@" -E |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
) &
proc=$!
"$@"
stat=$?
wait "$proc"
if test "$stat" != 0; then exit $stat; fi
done
"$@" -E |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"

View File

@ -1,3 +1,39 @@
2004-03-20 Derek Price <derek@ximbiot.com>
* diff.c (diff_run): Update string arg to const.
* diffrun.h: Update prototype to match.
2003-07-12 Larry Jones <lawrence.jones@eds.com>
* io.c (find_identical_ends): Update to match current diffutils
code and improve handling of files with no newline at end.
(Patch from Andrew Moise <chops@demiurgestudios.com>.)
2003-06-13 Derek Price <derek@ximbiot.com>
* diff3.c (read_diff): Fix memory leak.
(Patch from Kenneth Lorber <keni@his.com>.)
2003-05-21 Derek Price <derek@ximbiot.com>
* Makefile.in: Regenerate with Automake version 1.7.5.
2003-05-09 Derek Price <derek@ximbiot.com>
* system.h: Define S_ISSOCK on SCO OpenServer.
2003-04-10 Larry Jones <lawrence.jones@eds.com>
* Makefile.in: Regenerated.
2003-02-25 Derek Price <derek@ximbiot.com>
* Makefile.in: Regenerated.
2003-02-01 Larry Jones <lawrence.jones@eds.com>
* util.c (finish_output): Handle EINTR from waitpid.
2002-09-24 Derek Price <derek@ximbiot.com>
* Makefile.in: Regenerated using Automake 1.6.3.

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# Makefile.in generated by automake 1.7.9 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -13,79 +13,117 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSH = @CSH@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EDITOR = @EDITOR@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
KRB4 = @KRB4@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MAKE_TARGETS_IN_VPATH_FALSE = @MAKE_TARGETS_IN_VPATH_FALSE@
MAKE_TARGETS_IN_VPATH_TRUE = @MAKE_TARGETS_IN_VPATH_TRUE@
MKTEMP = @MKTEMP@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PR = @PR@
PS2PDF = @PS2PDF@
RANLIB = @RANLIB@
ROFF = @ROFF@
SENDMAIL = @SENDMAIL@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
YACC = @YACC@
ac_ct_CC = @ac_ct_CC@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
ac_prefix_program = @ac_prefix_program@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
bindir = @bindir@
build_alias = @build_alias@
datadir = @datadir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
includedir = @includedir@
includeopt = @includeopt@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
INCLUDES = -I$(top_srcdir)/lib
@ -98,6 +136,7 @@ libdiff_a_SOURCES = diff.c diff3.c analyze.c cmpbuf.c cmpbuf.h io.c \
EXTRA_DIST = ChangeLog build_diff.com diagmeet.note libdiff.dsp
subdir = diff
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
@ -111,11 +150,7 @@ am_libdiff_a_OBJECTS = diff.$(OBJEXT) diff3.$(OBJEXT) analyze.$(OBJEXT) \
version.$(OBJEXT) side.$(OBJEXT)
libdiff_a_OBJECTS = $(am_libdiff_a_OBJECTS)
DEFS = @DEFS@
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/analyze.Po ./$(DEPDIR)/cmpbuf.Po \
@ -129,19 +164,18 @@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
CFLAGS = @CFLAGS@
DIST_SOURCES = $(libdiff_a_SOURCES)
DIST_COMMON = ChangeLog Makefile.am Makefile.in
DIST_COMMON = $(srcdir)/Makefile.in ChangeLog Makefile.am
SOURCES = $(libdiff_a_SOURCES)
all: all-am
.SUFFIXES:
.SUFFIXES: .c .o .obj
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu diff/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
AR = ar
@ -173,26 +207,35 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Po@am__quote@
distclean-depend:
-rm -rf ./$(DEPDIR)
.c.o:
@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
@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
@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)/'`$<
.c.obj:
@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
$(COMPILE) -c `cygpath -w $<`
CCDEPMODE = @CCDEPMODE@
@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
@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`
uninstall-info-am:
ETAGS = etags
ETAGSFLAGS =
CTAGS = ctags
CTAGSFLAGS =
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@ -218,20 +261,41 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
-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)
@list='$(DISTFILES)'; for file in $$list; do \
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
@ -256,7 +320,6 @@ check: check-am
all-am: Makefile $(LIBRARIES)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
@ -268,7 +331,7 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
@ -276,7 +339,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -286,9 +349,10 @@ clean: clean-am
clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
distclean: distclean-am
distclean-am: clean-am distclean-compile distclean-depend \
distclean-generic distclean-tags
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
@ -309,25 +373,33 @@ install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
.PHONY: GTAGS all all-am check check-am clean clean-generic \
clean-noinstLIBRARIES distclean distclean-compile \
distclean-depend 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 tags uninstall 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
# 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

@ -233,11 +233,13 @@ static struct option const longopts[] =
{0, 0, 0, 0}
};
int
diff_run (argc, argv, out, callbacks_arg)
int argc;
char *argv[];
char *out;
const char *out;
const struct diff_callbacks *callbacks_arg;
{
int val;

View File

@ -56,7 +56,7 @@ struct diff_callbacks
/* Run a diff. */
extern int diff_run DIFFPARAMS((int, char **, char *,
extern int diff_run DIFFPARAMS((int, char **, const char *,
const struct diff_callbacks *));
/* Run a diff3. */

View File

@ -508,11 +508,10 @@ find_identical_ends (filevec)
beg0 = filevec[0].prefix_end + (n0 < n1 ? 0 : n0 - n1);
/* Scan back until chars don't match or we reach that point. */
while (p0 != beg0)
if (*--p0 != *--p1)
for (; p0 != beg0; p0--, p1--)
if (*p0 != *p1)
{
/* Point at the first char of the matching suffix. */
++p0, ++p1;
beg0 = p0;
break;
}

View File

@ -61,9 +61,19 @@ GNU General Public License for more details.
#if !defined(S_ISFIFO) && defined(S_IFFIFO)
#define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFFIFO)
#endif
#if !defined(S_ISSOCK) && defined(S_IFSOCK)
#define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
#endif
#ifndef S_ISSOCK
# if defined( S_IFSOCK )
# ifdef S_IFMT
# define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
# else
# define S_ISSOCK(mode) ((mode) & S_IFSOCK)
# endif /* S_IFMT */
# elif defined( S_ISNAM )
/* SCO OpenServer 5.0.6a */
# define S_ISSOCK S_ISNAM
# endif /* !S_IFSOCK && S_ISNAM */
#endif /* !S_ISSOCK */
#if HAVE_UNISTD_H
#include <unistd.h>

View File

@ -300,7 +300,7 @@ finish_output ()
if (paginate_flag && outfile != 0 && outfile != stdout)
{
#ifdef PR_PROGRAM
int wstatus;
int wstatus, w;
if (ferror (outfile))
fatal ("write error");
# if ! HAVE_FORK
@ -308,7 +308,9 @@ finish_output ()
# else /* HAVE_FORK */
if (fclose (outfile) != 0)
pfatal_with_name ("write error");
if (waitpid (pr_pid, &wstatus, 0) < 0)
while ((w = waitpid (pr_pid, &wstatus, 0)) < 0 && errno == EINTR)
;
if (w < 0)
pfatal_with_name ("waitpid");
# endif /* HAVE_FORK */
if (wstatus != 0)

View File

@ -1,3 +1,399 @@
2004-04-06 Larry Jones <lawrence.jones@ugsplm.com>
* cvs.texinfo (Assigning revisions): Note that client/server mode
only considers files sent to the server to determine the major
revision for new files.
(Reported by Krzysztof GORBIEL <Krzysztof_GORBIEL@raiffeisen.pl>.)
* stamp-vti, version.texi: Regenerated.
2004-03-15 Derek Price <derek@ximbiot.com>
* stamp-vti, version.texi: Regenerated.
2004-03-11 Larry Jones <lawrence.jones@ugsplm.com>
* cvs.texinfo (loginfo, Error messages): Note that not reading all of
the log info can result in a broken pipe signal.
(Reported by Steven Nicoloso <spn@nwmail.wh.lucent.com>.)
* stamp-vti, version.texi: Regenerated.
2004-02-04 Derek Price <derek@ximbiot.com>
* cvs.texinfo (File Permissions): Clarify index entry.
* stamp-vti, version.texi: Regenerated.
2004-01-22 Derek Price <derek@ximbiot.com>
* stamp-vti, version.texi: Regenerated.
2004-01-08 Larry Jones <lawrence.jones@ugsplm.com>
* cvs.texinfo (user-defined logging): Move taginfo stuff from here...
(Administrative files): ...to its own node under here.
2003-12-18 Derek Price <derek@ximbiot.com>
* stamp-1, stamp-vti, version-client.texi, version.texi: Regenerated
for 1.11.11.1.
2003-12-18 Derek Price <derek@ximbiot.com>
* stamp-1, stamp-vti, version-client.texi, version.texi: Regenerated
for 1.11.11.
2003-12-05 Derek Price <derek@ximbiot.com>
* stamp-1, stamp-vti, version-client.texi, version.texi: Regenerated.
2003-12-04 Derek Price <derek@ximbiot.com>
* stamp-1, stamp-vti, version-client.texi, version.texi: Regenerated
for 1.11.10.1.
2003-12-04 Derek Price <derek@ximbiot.com>
* stamp-1, stamp-vti, version-client.texi, version.texi: Regenerated
for 1.11.10.
2003-11-18 Derek Price <derek@ximbiot.com>
* stamp-vti, version.texi: Regenerated.
2003-11-13 Larry Jones <lawrence.jones@eds.com>
* cvs.texinfo (Reverting local changes): Use the same vendor tag
in the admin command as was used in the previous import commands.
2003-11-10 Derek Price <derek@ximbiot.com>
* stamp-vti, version.texi: Regenerated.
2003-11-07 Mark D. Baushke <mdb@cvshome.org>
* cvs.texinfo (CVS commands): Fix typo.
(FreeBSD PR docs/58669 reported by Ceri Davies <ceri@FreeBSD.org>.)
2003-10-30 Derek Price <derek@ximbiot.com>
* stamp-vti, version.texi: Regenerated.
2003-10-30 Derek Price <derek@ximbiot.com>
* cvs.texinfo (File permissions, Error messages): Add index entries for
CVSROOT/val-tags file.
2003-10-21 Derek Price <derek@ximbiot.com>
* cvs.texinfo: Note gnu.cvs.* usenet mirrors of the email lists.
(Suggestion from Paul Edwards, from somewhere in Australia.)
* cvs.texinfo: Put email addresses in @email{} tags and URLs in @url{}
tags rather than relying on markup like @code{}.
* stamp-vti, version.texi: Regenerated.
2003-10-14 Derek Price <derek@ximbiot.com>
* stamp-vti, version.texi: Regenerated.
2003-10-14 Derek Price <derek@ximbiot.com>
Port to pedantic POSIX 1003.1-2001 hosts, such as Debian GNU/Linux
testing with _POSIX2_VERSION=200112 in the environment.
* cvs.texinfo: Suggest 'sed 1q', not 'head -1'.
(Patch from Paul Eggert <eggert@twinsun.com>.)
2003-10-10 Derek Price <derek@ximbiot.com>
* stamp-1, stamp-vti, version-client.texi, version.texi: Regenerated
for 1.11.9.1.
2003-10-10 Derek Price <derek@ximbiot.com>
* stamp-1, stamp-vti, version-client.texi, version.texi: Regenerated
for 1.11.9.
2003-10-06 Derek Price <derek@ximbiot.com>
* cvsclient.texi (Requests): Add recommendation to client developers to
avoid the `Case' request.
* stamp-1, version-client.texi: Regenerated.
2003-10-02 Derek Price <derek@ximbiot.com>
* stamp-1, stamp-vti, version-client.texi, version.texi: Regenerated
for 1.11.8.1.
2003-10-02 Derek Price <derek@ximbiot.com>
* stamp-1, stamp-vti, version-client.texi, version.texi: Regenerated
for 1.11.8.
2003-09-29 Derek Price <derek@ximbiot.com>
* stamp-1, stamp-vti, version-client.texi, version.texi: Regenerated
for 1.11.7.1.
2003-09-29 Derek Price <derek@ximbiot.com>
* stamp-1, stamp-vti, version-client.texi, version.texi: Regenerated
for 1.11.7.
2003-09-12 Derek Price <derek@ximbiot.com>
* cvs.texinfo (checkoutlist): Document the error messages which may be
specified in this file.
* stamp-vti, version.texi: Regenerated.
2003-08-27 Larry Jones <lawrence.jones@eds.com>
* cvs.texinfo (history options): Note the 'P' record type which
has been around for a long time but never actually appeared in
the history file due to bugs in the code.
(Invoking CVS): Ditto.
(config): Ditto.
* stamp-vti, version.texi: Regenerated.
2003-08-07 Derek Price <derek@ximbiot.com>
* .cvsignore: Ignore {cvs,cvsclient}.txt.
2003-08-07 Derek Price <derek@ximbiot.com>
* cvs.texinfo: Use the @dircategory and @direntry commands from texinfo
rather than rolling our own.
* stamp-vti, version.texi: Regenerated.
2003-08-07 Derek Price <derek@ximbiot.com>
* Makefile.am (POSTSCRIPTS): Rename to...
(PSS): ...to sync with and override Automakes default targets.
(PDFS): Reorder to match PSS.
(SUFFIXES): Remove .pdf and .aux.
(cvs.aux, cvs.pdf, cvsclient.aux, cvsclient.pdf): Remove these targets.
.aux weren't being generated anyhow and .pdf no longer need to be
supplied explicitly.
(cvs-paper.pdf: cvs-paper.ps): Provide ps2pdf rule explicitly.
(.{texinfo,texi,txy}.pdf): Remove these suffix rules - they are now
provided by Automake.
2003-08-06 Derek Price <derek@ximbiot.com>
* Makefile.am (CLEANFILES): Move...
(MOSTLYCLEANFILES): ...here and drop PDFs since this is where Automake
cleans PDFs & PSs by default.
(MAINTAINERCLEANFILES): Clean all PostScripts even though they will
have been removed in mostlyclean. That is a bug in Automake.
(doc): Depend on info & ps.
(pdf, ps): Removed in favor of Automake's default targets for these
types.
(cvsclient.* targets): Depened on version-client.texi.
(cvs-paper.pdf): Remove in favor of Automake's default target.
(.{texinfo,texi,txi}.{pdf,txt}): Update these targets based on
Automake's similar treatment of dvi, ps, and info targets.
* .cvsignore: Add cvs.tmp, a `make pdf' generated file.
* Makefile.in: Regenerated.
2003-07-18 Derek Price <derek@ximbiot.com>
* cvs.texinfo: Put a few errant references to bug-cvs inside @code{}
for consistancy.
2003-07-18 Derek Price <derek@ximbiot.com>
* cvs.texinfo: Update WARNINGs and Notes for a more consistent
appearance. Remove some obsolete comments.
* stamp-vti: Regenerated.
* version.texi: Regenerated.
2003-07-12 Larry Jones <lawrence.jones@eds.com>
* cvs.texinfo (Binary howto): Add note about how to determine whether
a file is marked as binary or not.
(Suggested by Erik Sigra <sigra@home.se>.)
* stamp-vti: Regenerated.
* version.texi: Regenerated.
2003-06-23 Derek Price <derek@ximbiot.com>
* stamp-vti: Regenerated.
* version.texi: Ditto.
2003-06-16 Derek Price <derek@ximbiot.com>
* cvs.texinfo (splitrcskeyword): New macro, now that @ifhtml will work
properly with texi2html (as of version 1.68), to cause output HTML to
contain <i></i> where we used to have @asis{} and prevent RCS keyword
substitution in generated HTML.
(Original patch from Patrice Dumas <dumas@centre-cired.fr>.)
2003-06-11 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Invoking CVS): Remove `-P' from the list of `cvs export'
options.
(Patch from Alexander Taler <dissent@cvshome.org>.)
2003-06-11 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Top): Remove out-of-date (by at least 5 years) comment.
(Patch from Alexander Taler <dissent@cvshome.org>.)
2003-05-27 Derek Price <derek@ximbiot.com>
* cvs.texinfo: Consolidate copyright notices into a single macro that
is called elsewhere to avoid needing three of them. Update copyright
notice.
(BUGS): Suggest Ximbiot rather than the defunct Signum Support as CVS
consultants.
* stamp-vti: Regenerated.
* version.texi: Ditto.
2003-05-26 Derek Price <derek@ximbiot.com>
* stamp-1: Regenerated for 1.11.6.1.
* stamp-vti: Ditto.
* version-client.texi: Ditto.
* version.texi: Ditto.
2003-05-25 Derek Price <derek@ximbiot.com>
* stamp-1: Regenerated for 1.11.6.
* stamp-vti: Ditto.
* version-client.texi: Ditto.
* version.texi: Ditto.
2003-05-21 Derek Price <derek@ximbiot.com>
* Makefile.in: Regenerate with Automake version 1.7.5.
2003-04-28 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Working directory storage, Module options, Module
program options): Remove references to Checkin.prog and Update.prog.
(commit options): Remove reference to -n option.
* stamp-vti: Regenerated.
* version.texi: Ditto.
2003-04-10 Larry Jones <lawrence.jones@eds.com>
* Makefile.in: Regenerated.
2003-03-26 Derek Price <derek@ximbiot.com>
* stamp-vti: Regenerated.
* version.texi: Ditto.
2003-03-25 Larry Jones <larry.jones@sdrc.com>
* cvs.texinfo (Server temporary directory): Reorder list of places
to match code.
(Connection): Add additional example error message and note about
firewall software.
* stamp-vti: Regenerated.
* version.texi: Ditto.
2003-03-24 Derek Price <derek@ximbiot.com>
* Makefile.am: Update copyright notice.
* Makefile.in: Regenerated.
2003-03-06 Derek Price <derek@ximbiot.com>
* cvs.texinfo (What is CVS?): Correct date of first post of CVS by
Dick Grune from December to July based on the archive posted on
Google:
<http://groups.google.com/groups?q=Grune+cvs+group:mod.sources.*&hl=en&lr=&ie=UTF-8&selm=122%40mirror.UUCP&rnum=2>.
(Thanks to David A Wheeler <dwheeler@dwheeler.com>.)
* stamp-vti: Regenerated.
* version.texi: Ditto.
2003-03-05 Mark D. Baushke <mdb@cvshome.org>
* cvs.texinfo (CVS_LOCAL_BRANCH_NUM): Backout CVS_LOCAL_BRANCH_NUM
feature.
* cvs.texinfo (CVS_LOCAL_BRANCH_NUM): Document new environment
variable.
2003-02-27 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Environment variables): Make the information on
CVS_CLIENT_PORT slightly clearer.
(Kerberos authenticated): XREF the Environment variables node.
* stamp-vti: Regenerated.
* version.texi: Ditto.
2003-02-25 Derek Price <derek@ximbiot.com>
* Makefile.in: Regenerated.
* stamp-1: Ditto.
* version-client.texi: Ditto.
2003-02-06 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Working directory storage, Module options,
Module program options): Correct description of where Checkin.prog
and Update.prog are run. Provide more index entries and cross
references. Remove some FIXME comments. Add a FIXCVS THEN FIXME.
(Thanks to Art Manion at the CERT Coordination Center <cert@cert.org>.)
2003-02-04 Derek Price <derek@ximbiot.com>
* cvs.texinfo (File status): Mention the "Unresolved Conflict" status
which was apparently and erroneously removed from the doc at some
point in the past.
2003-02-03 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Merging a branch): Mention the GCA as opposed to the
"branch point" as the implicit revision when merging a branch.
2003-02-03 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Remote repositories): :METHOD: is optional.
2003-02-03 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Committing your changes): Move index entries closer to
their corresponding references.
(Environment variables): Include $VISUAL in order of
preference. Add index entries. Reference Global options node.
(Variables): Change order of list to match the Env. Variables node
mentioned above.
* stamp-1: Regenerated.
* stamp-vti: Ditto.
* version-client.texi: Ditto.
* version.texi: Ditto.
2003-02-14 Derek Price <derek@ximbiot.com>
* cvs.texinfo (Watch Information, Editing files, Getting Notified,
Setting a watch): Edit usage specs for correctness and uniformity.
(Sticky tags): Use ref rather than xref to avoid a warning from
makeinfo.
* stamp-vti: Regenerated.
* version.texi: Ditto.
2003-01-23 Derek Price <derek@ximbiot.com>
* stamp-1: Regenerated.
* stamp-vti: Ditto.
* version-client.texi: Ditto.
* version.texi: Ditto.
2003-01-22 Larry Jones <larry.jones@sdrc.com>
* cvs.texinfo (config): Correct LogHistory default (U was omitted).
2003-01-16 Derek Price <derek@ximbiot.com>
* stamp-1: Regenerated for version (1.11.5).
@ -179,7 +575,7 @@
* Makefile.in: Regenerated.
* stamp-1: New file.
* version-client.texi: Ditto.
(Reportred by Alexey Mahotkin <alexm@hsys.msk.ru>.)
(Reported by Alexey Mahotkin <alexm@hsys.msk.ru>.)
2001-09-04 Derek Price <dprice@collab.net>

View File

@ -1,6 +1,8 @@
## Process this file with automake to produce Makefile.in
# Makefile for GNU CVS documentation (excluding man pages - see ../man).
# Copyright (C) 1986, 1988-1990, 2000 Free Software Foundation, Inc.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -14,14 +16,14 @@
info_TEXINFOS = cvs.texinfo cvsclient.texi
POSTSCRIPTS = \
PSS = \
cvs.ps \
cvs-paper.ps \
cvsclient.ps
PDFS = \
cvs-paper.pdf \
cvs.pdf \
cvs-paper.pdf \
cvsclient.pdf
TXTS = \
@ -29,25 +31,23 @@ TXTS = \
cvsclient.txt
EXTRA_DIST = \
$(POSTSCRIPTS) \
$(PSS) \
.cvsignore \
ChangeLog.fsf \
RCSFILES \
mdate-sh \
cvs-paper.ms
CLEANFILES = \
$(PDFS) \
MOSTLYCLEANFILES = \
$(TXTS)
# These Automake generates MOSTLYCLEAN targets for PostScripts genersted from
# TEXINFOS, but it shouldn't when those files are in EXTRA_DIST
MAINTAINERCLEANFILES = \
cvs-paper.ps
$(PSS)
doc ps: $(POSTSCRIPTS)
.PHONY: doc ps
pdf: $(PDFS)
.PHONY: pdf
doc: info ps
.PHONY: doc
txt: $(TXTS)
.PHONY: txt
@ -58,8 +58,8 @@ dvi: cvs.dvi cvsclient.dvi
# FIXME-AUTOMAKE:
# For some reason if I remove version.texi, it doesn't get built automatically.
# This needs to be fixed in automake.
cvs.aux cvs.pdf cvs.txt: cvs.texinfo $(srcdir)/version.texi
cvsclient.aux cvsclient.pdf cvsclient.txt: cvsclient.texi
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
@ -70,36 +70,25 @@ cvs-paper.ps: cvs-paper.ms
mv $@-t $@
cvs-paper.pdf: cvs-paper.ps
$(PS2PDF) $< $@
ps2pdf $< $@
SUFFIXES = .aux .txt .pdf
SUFFIXES = .txt
# texinfo based targets automake neglects to include
.texinfo.pdf:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf --batch $<
.txi.pdf:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf --batch $<
.texi.pdf:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf --batch $<
.texinfo.txt:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(MAKEINFO) $< --no-headers -o $@
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
--no-headers -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
.txi.txt:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(MAKEINFO) $< --no-headers -o $@
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
--no-headers -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
.texi.txt:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(MAKEINFO) $< --no-headers -o $@
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
--no-headers -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
##
## MAINTAINER Targets
##
## realclean ##
# for backwards compatibility with the old makefiles
realclean: maintainer-clean
.PHONY: realclean

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# Makefile.in generated by automake 1.7.9 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -15,7 +15,9 @@
@SET_MAKE@
# Makefile for GNU CVS documentation (excluding man pages - see ../man).
# Copyright (C) 1986, 1988-1990, 2000 Free Software Foundation, Inc.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -26,91 +28,129 @@
# 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.
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSH = @CSH@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EDITOR = @EDITOR@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
KRB4 = @KRB4@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MAKE_TARGETS_IN_VPATH_FALSE = @MAKE_TARGETS_IN_VPATH_FALSE@
MAKE_TARGETS_IN_VPATH_TRUE = @MAKE_TARGETS_IN_VPATH_TRUE@
MKTEMP = @MKTEMP@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PR = @PR@
PS2PDF = @PS2PDF@
RANLIB = @RANLIB@
ROFF = @ROFF@
SENDMAIL = @SENDMAIL@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
YACC = @YACC@
ac_ct_CC = @ac_ct_CC@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
ac_prefix_program = @ac_prefix_program@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
bindir = @bindir@
build_alias = @build_alias@
datadir = @datadir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
includedir = @includedir@
includeopt = @includeopt@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
info_TEXINFOS = cvs.texinfo cvsclient.texi
POSTSCRIPTS = \
PSS = \
cvs.ps \
cvs-paper.ps \
cvsclient.ps
PDFS = \
cvs-paper.pdf \
cvs.pdf \
cvs-paper.pdf \
cvsclient.pdf
@ -120,7 +160,7 @@ TXTS = \
EXTRA_DIST = \
$(POSTSCRIPTS) \
$(PSS) \
.cvsignore \
ChangeLog.fsf \
RCSFILES \
@ -128,149 +168,144 @@ EXTRA_DIST = \
cvs-paper.ms
CLEANFILES = \
$(PDFS) \
MOSTLYCLEANFILES = \
$(TXTS)
# These Automake generates MOSTLYCLEAN targets for PostScripts genersted from
# TEXINFOS, but it shouldn't when those files are in EXTRA_DIST
MAINTAINERCLEANFILES = \
cvs-paper.ps
$(PSS)
SUFFIXES = .aux .txt .pdf
SUFFIXES = .txt
subdir = doc
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CFLAGS = @CFLAGS@
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 =
am__TEXINFO_TEX_DIR = $(srcdir)
INFO_DEPS = cvs.info cvsclient.info
DVIS = cvs.dvi cvsclient.dvi
TEXINFOS = cvs.texinfo cvsclient.texi
DIST_COMMON = ChangeLog Makefile.am Makefile.in mdate-sh stamp-1 \
stamp-vti texinfo.tex version-client.texi version.texi
DIST_COMMON = $(srcdir)/Makefile.in ChangeLog Makefile.am mdate-sh \
stamp-1 stamp-vti texinfo.tex version-client.texi version.texi
all: all-am
.SUFFIXES:
.SUFFIXES: .aux .txt .pdf .dvi .info .ps .texi .texinfo .txi
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
.SUFFIXES: .txt .dvi .info .pdf .ps .texi .texinfo .txi
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
$(srcdir)/version.texi: $(srcdir)/stamp-vti
@:
$(srcdir)/stamp-vti: cvs.texinfo $(top_srcdir)/configure.in
@(set `$(SHELL) $(srcdir)/mdate-sh $(srcdir)/cvs.texinfo`; \
.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)/'`$<
.texinfo.dvi:
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2DVI) `test -f '$<' || echo '$(srcdir)/'`$<
.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
@(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 $(srcdir)/version.texi \
|| (echo "Updating $(srcdir)/version.texi"; \
cp vti.tmp $(srcdir)/version.texi)
@cmp -s vti.tmp version.texi \
|| (echo "Updating version.texi"; \
cp vti.tmp version.texi)
-@rm -f vti.tmp
@cp $(srcdir)/version.texi $@
@cp version.texi $@
mostlyclean-vti:
-rm -f vti.tmp
maintainer-clean-vti:
-rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
@MAINTAINER_MODE_TRUE@ -rm -f stamp-vti version.texi
cvs.info: cvs.texinfo $(srcdir)/version.texi
cvs.dvi: cvs.texinfo $(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)/'`$<
$(srcdir)/version-client.texi: $(srcdir)/stamp-1
@:
$(srcdir)/stamp-1: cvsclient.texi $(top_srcdir)/configure.in
@(set `$(SHELL) $(srcdir)/mdate-sh $(srcdir)/cvsclient.texi`; \
.texi.dvi:
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2DVI) `test -f '$<' || echo '$(srcdir)/'`$<
.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
@(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 $(srcdir)/version-client.texi \
|| (echo "Updating $(srcdir)/version-client.texi"; \
cp 1.tmp $(srcdir)/version-client.texi)
@cmp -s 1.tmp version-client.texi \
|| (echo "Updating version-client.texi"; \
cp 1.tmp version-client.texi)
-@rm -f 1.tmp
@cp $(srcdir)/version-client.texi $@
@cp version-client.texi $@
mostlyclean-1:
-rm -f 1.tmp
maintainer-clean-1:
-rm -f $(srcdir)/stamp-1 $(srcdir)/version-client.texi
@MAINTAINER_MODE_TRUE@ -rm -f stamp-1 version-client.texi
cvsclient.info: cvsclient.texi $(srcdir)/version-client.texi
cvsclient.dvi: cvsclient.texi $(srcdir)/version-client.texi
.texi.info:
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
cd $(srcdir) \
&& $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
`echo $< | sed 's,.*/,,'`
.texi.dvi:
TEXINPUTS="$(srcdir)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2DVI) $<
.texi:
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
cd $(srcdir) \
&& $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
`echo $< | sed 's,.*/,,'`
.texinfo.info:
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
cd $(srcdir) \
&& $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
`echo $< | sed 's,.*/,,'`
.texinfo.dvi:
TEXINPUTS="$(srcdir)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2DVI) $<
.texinfo:
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
cd $(srcdir) \
&& $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
`echo $< | sed 's,.*/,,'`
MAKEINFO = @MAKEINFO@
TEXI2PDF = $(TEXI2DVI) --pdf --batch
DVIPS = dvips
.dvi.ps:
$(DVIPS) $< -o $@
$(DVIPS) -o $@ $<
uninstall-info-am:
$(PRE_UNINSTALL)
@if (install-info --version && \
install-info --version | fgrep -i -v debian) >/dev/null 2>&1; then \
install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
list='$(INFO_DEPS)'; \
for file in $$list; do \
echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file"; \
install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file; \
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; \
done; \
else :; fi
@$(NORMAL_UNINSTALL)
@list='$(INFO_DEPS)'; \
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 $$file $$file-[0-9] $$file-[0-9][0-9])"; \
rm -f $$file $$file-[0-9] $$file-[0-9][0-9]; \
echo " 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)
list='$(INFO_DEPS)'; \
for base in $$list; do \
d=$(srcdir); \
if test -f $$base; then d=.; else d=$(srcdir); fi; \
for file in $$d/$$base*; do \
relfile=`expr "$$file" : "$$d/\(.*\)"`; \
test -f $(distdir)/$$relfile || \
@ -279,30 +314,39 @@ dist-info: $(INFO_DEPS)
done
mostlyclean-aminfo:
-rm -f cvs.aux cvs.cp cvs.cps cvs.dvi cvs.fn cvs.fns cvs.ky cvs.log cvs.pg \
cvs.ps cvs.tmp cvs.toc cvs.tp cvs.vr cvsclient.aux \
cvsclient.cp cvsclient.dvi cvsclient.fn cvsclient.ky \
cvsclient.log cvsclient.pg cvsclient.ps cvsclient.tmp \
cvsclient.toc cvsclient.tp cvsclient.vr
-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
maintainer-clean-aminfo:
cd $(srcdir) && \
list='$(INFO_DEPS)'; for i in $$list; do \
rm -f $$i; \
if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \
rm -f $$i-[0-9]*; \
fi; \
@list='$(INFO_DEPS)'; for i in $$list; do \
i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
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
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@list='$(DISTFILES)'; for file in $$list; do \
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
@ -323,7 +367,7 @@ distdir: $(DISTFILES)
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="${top_distdir}" distdir="$(distdir)" \
top_distdir="$(top_distdir)" distdir="$(distdir)" \
dist-info
check-am: all-am
check: check-am
@ -331,7 +375,6 @@ all-am: Makefile $(INFO_DEPS)
installdirs:
$(mkinstalldirs) $(DESTDIR)$(infodir)
install: install-am
install-exec: install-exec-am
install-data: install-data-am
@ -343,16 +386,16 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -363,7 +406,7 @@ clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
@ -385,10 +428,12 @@ install-info-am: $(INFO_DEPS)
$(mkinstalldirs) $(DESTDIR)$(infodir)
@list='$(INFO_DEPS)'; \
for file in $$list; do \
d=$(srcdir); \
for ifile in echo $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9]; do \
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=`expr "$$ifile" : "$$d/\(.*\)"`; \
relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
echo " $(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile"; \
$(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile; \
else : ; fi; \
@ -396,11 +441,12 @@ install-info-am: $(INFO_DEPS)
done
@$(POST_INSTALL)
@if (install-info --version && \
install-info --version | fgrep -i -v debian) >/dev/null 2>&1; then \
install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
list='$(INFO_DEPS)'; \
for file in $$list; do \
echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\
install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\
relfile=`echo "$$file" | sed 's|^.*/||'`; \
echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$relfile";\
install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$relfile || :;\
done; \
else : ; fi
install-man:
@ -408,7 +454,7 @@ install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-1 \
maintainer-clean-aminfo maintainer-clean-generic \
maintainer-clean-vti
@ -418,6 +464,14 @@ mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-1 mostlyclean-aminfo mostlyclean-generic \
mostlyclean-vti
pdf: pdf-am
pdf-am: $(PDFS)
ps: ps-am
ps-am: $(PSS)
uninstall-am: uninstall-info-am
.PHONY: all all-am check check-am clean clean-generic dist-info \
@ -428,14 +482,12 @@ uninstall-am: uninstall-info-am
maintainer-clean maintainer-clean-1 maintainer-clean-aminfo \
maintainer-clean-generic maintainer-clean-vti mostlyclean \
mostlyclean-1 mostlyclean-aminfo mostlyclean-generic \
mostlyclean-vti uninstall uninstall-am uninstall-info-am
mostlyclean-vti pdf pdf-am ps ps-am uninstall uninstall-am \
uninstall-info-am
doc ps: $(POSTSCRIPTS)
.PHONY: doc ps
pdf: $(PDFS)
.PHONY: pdf
doc: info ps
.PHONY: doc
txt: $(TXTS)
.PHONY: txt
@ -446,8 +498,8 @@ dvi: cvs.dvi cvsclient.dvi
# FIXME-AUTOMAKE:
# For some reason if I remove version.texi, it doesn't get built automatically.
# This needs to be fixed in automake.
cvs.aux cvs.pdf cvs.txt: cvs.texinfo $(srcdir)/version.texi
cvsclient.aux cvsclient.pdf cvsclient.txt: cvsclient.texi
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
@ -458,28 +510,18 @@ cvs-paper.ps: cvs-paper.ms
mv $@-t $@
cvs-paper.pdf: cvs-paper.ps
$(PS2PDF) $< $@
ps2pdf $< $@
# texinfo based targets automake neglects to include
.texinfo.pdf:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf --batch $<
.txi.pdf:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf --batch $<
.texi.pdf:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf --batch $<
.texinfo.txt:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(MAKEINFO) $< --no-headers -o $@
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
--no-headers -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
.txi.txt:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(MAKEINFO) $< --no-headers -o $@
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
--no-headers -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
.texi.txt:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(MAKEINFO) $< --no-headers -o $@
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
--no-headers -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
# for backwards compatibility with the old makefiles
realclean: maintainer-clean

File diff suppressed because it is too large Load Diff

View File

@ -943,6 +943,16 @@ there are some situations it cannot handle (ignore patterns, or
situations where the user specifies a filename and the client does not
know about that file).
Though this request will be supported into the forseeable future, it has been
the source of numerous bug reports in the past due to the complexity of testing
this functionality via the test suite and client developers are encouraged not
to use it. Instead, please consider munging conflicting names and maintaining
a map for communicating with the server. For example, suppose the server sends
files @file{case}, @file{CASE}, and @file{CaSe}. The client could write all
three files to names such as, @file{case}, @file{case_prefix_case}, and
@file{case_prefix_2_case} and maintain a mapping between the file names in, for
instance a new @file{CVS/Map} file.
@item Argument @var{text} \n
Response expected: no.
Save argument for use in a subsequent command. Arguments

View File

@ -1,4 +1,4 @@
@set UPDATED 5 September 2001
@set UPDATED-MONTH September 2001
@set EDITION 1.11.5
@set VERSION 1.11.5
@set UPDATED 3 February 2004
@set UPDATED-MONTH February 2004
@set EDITION 1.11.15
@set VERSION 1.11.15

View File

@ -1,4 +1,4 @@
@set UPDATED 18 November 2002
@set UPDATED-MONTH November 2002
@set EDITION 1.11.5
@set VERSION 1.11.5
@set UPDATED 6 April 2004
@set UPDATED-MONTH April 2004
@set EDITION 1.11.15
@set VERSION 1.11.15

View File

@ -1,4 +1,4 @@
@set UPDATED 5 September 2001
@set UPDATED-MONTH September 2001
@set EDITION 1.11.5
@set VERSION 1.11.5
@set UPDATED 3 February 2004
@set UPDATED-MONTH February 2004
@set EDITION 1.11.15
@set VERSION 1.11.15

View File

@ -1,4 +1,4 @@
@set UPDATED 18 November 2002
@set UPDATED-MONTH November 2002
@set EDITION 1.11.5
@set VERSION 1.11.5
@set UPDATED 6 April 2004
@set UPDATED-MONTH April 2004
@set EDITION 1.11.15
@set VERSION 1.11.15

View File

@ -1,3 +1,114 @@
2004-04-07 Derek Price <derek@ximbiot.com>
* regex.c: Revise "FREE_VAR" macro to eliminate C4090/C4022 warnings
in Windows build with Visual C++ 6.0 compiler.
(Original patch from Conrad T. Pino <Conrad@Pino.com>.)
2004-04-04 Derek Price <derek@ximbiot.com>
* system.h: Correct comment.
2004-04-04 Derek Price <derek@ximbiot.com>
* system.h: Restore complete path folding for Cygwin under Windows.
Add ISABSOLUTE macro for determining whether a path is absolute to
handle X:\ style paths under Windows (& Cygwin).
2004-03-25 Derek Price <derek@ximbiot.com>
* system.h: No longer fold back slashes in paths into slashes.
2004-03-20 Derek Price <derek@ximbiot.com>
* mkdir.c (mkdir): Declare string args const.
2004-03-19 Derek Price <derek@ximbiot.com>
* .cvsignore: Add fnmatch.h for Windows and other platforms which build
it.
2003-12-09 Derek Price <derek@ximbiot.com>
* system.h: Correct spelling in comment.
2003-12-03 Derek Price <derek@ximbiot.com>
* fncase.c (OSX_filename_classes): New array.
(fncmp): Use FOLD_FN_CASE rather relying on the fact that it will be
#defined to use WNT_filename_classes.
* system.h: Define FOLD_FN_CASE, fncmp, and fnfold for all case
insensitive filesystems. Share some code between the new generic case
insensitive section and the old WOE32 section.
2003-10-02 Derek Price <derek@ximbiot.com>
* getpass.c: Back out my last getpass.c update since the new GNULIB
version introduced some dependencies which I do not want to introduce
on stable.
2003-10-01 Derek Price <derek@ximbiot.com>
* getpass.c: Update to new version from GNULIB with Larry's fix
incorporated.
2003-09-30 Larry Jones <lawrence.jones@eds.com>
* getpass.c: Fix bug that caused password to be echoed on many
systems (input may not be followed by output on the same stream
without an intervening call to a file positioning function).
(Reported by David Everly <david.everly@mci.com>.)
2003-07-29 Derek Price <derek@ximbiot.com>
* getpass.c: New file, almost identical to GNULIB's currect version.
* Makefile.am (libcvs_a_SOURCES): Add getpass.c.
* Makefile.in: Regenerated.
2003-06-09 Derek Price <derek@ximbiot.com>
* system.h: Reference the WIN32 macro only in order to define WOE32,
in accordance with the GNU convention to avoid implying that we
consider the Microsoft Windows Operating Environment any sort of "win".
2003-05-21 Derek Price <derek@ximbiot.com>
* Makefile.in: Regenerate with Automake version 1.7.5.
2003-05-09 Derek Price <derek@ximbiot.com>
* system.h: Define S_ISSOCK on SCO OpenServer.
2003-04-10 Larry Jones <lawrence.jones@eds.com>
* Makefile.in: Regenerated.
2003-04-03 Derek Price <derek@ximbiot.com>
* Makefile.am (distclean-local): New target to remove fnmatch.h when
necessary. This should be handled by Automake, but until then...
(Resolves issue #100
<http://ccvs.cvshome.org/issues/show_bug.cgi?id=100> from
Serguei E. Leontiev <Serge3lse@cvshome.org>.)
* Makefile.in: Regenerated.
2003-03-24 Derek Price <derek@ximbiot.com>
* Makefile.am: Update copyright notice.
* Makefile.in: Regenerated.
2003-02-25 Derek Price <derek@ximbiot.com>
* Makefile.in: Regenerated.
2003-01-23 Larry Jones <lawrence.jones@eds.com>
* getdate.y: Add RCS/CVS timestamp format (Y.mm.dd.hh.mm.ss).
* getdate.c: Regenerated.
* wait.h (WCOREDUMP): New macro.
2002-12-27 Derek Price <derek@ximbiot.com>
* getdate.c: Regenerated with Bison 1.35.

View File

@ -1,6 +1,8 @@
## Process this file with automake to produce Makefile.in
# Makefile for library files used by GNU CVS.
# Copyright (C) 1986, 1988-1994, 2000 Free Software Foundation, Inc.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -44,6 +46,7 @@ libcvs_a_SOURCES = \
getline.c \
getopt.c \
getopt1.c \
getpass.c \
md5.c \
regex.c \
savecwd.c \
@ -84,6 +87,10 @@ EXTRA_DIST = \
build_lib.com \
xgssapi.h
# Until Automake gets its act together
distclean-local:
rm -f fnmatch.h
# for backwards compatibility with the old makefiles
realclean: maintainer-clean
.PHONY: realclean

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# Makefile.in generated by automake 1.7.9 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -15,7 +15,9 @@
@SET_MAKE@
# Makefile for library files used by GNU CVS.
# Copyright (C) 1986, 1988-1994, 2000 Free Software Foundation, Inc.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -26,79 +28,117 @@
# 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.
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSH = @CSH@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EDITOR = @EDITOR@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
KRB4 = @KRB4@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MAKE_TARGETS_IN_VPATH_FALSE = @MAKE_TARGETS_IN_VPATH_FALSE@
MAKE_TARGETS_IN_VPATH_TRUE = @MAKE_TARGETS_IN_VPATH_TRUE@
MKTEMP = @MKTEMP@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PR = @PR@
PS2PDF = @PS2PDF@
RANLIB = @RANLIB@
ROFF = @ROFF@
SENDMAIL = @SENDMAIL@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
YACC = @YACC@
ac_ct_CC = @ac_ct_CC@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
ac_prefix_program = @ac_prefix_program@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
bindir = @bindir@
build_alias = @build_alias@
datadir = @datadir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
includedir = @includedir@
includeopt = @includeopt@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
# For now we need to include $(top_srcdir)/src because some systems
# (at least 'AIX rioscpu2 3 4 000030498200',
@ -132,6 +172,7 @@ libcvs_a_SOURCES = \
getline.c \
getopt.c \
getopt1.c \
getpass.c \
md5.c \
regex.c \
savecwd.c \
@ -159,6 +200,7 @@ EXTRA_DIST = \
xgssapi.h
subdir = lib
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
@ -168,16 +210,12 @@ libcvs_a_AR = $(AR) cru
libcvs_a_DEPENDENCIES = @LIBOBJS@
am_libcvs_a_OBJECTS = argmatch.$(OBJEXT) getdate.$(OBJEXT) \
getline.$(OBJEXT) getopt.$(OBJEXT) getopt1.$(OBJEXT) \
md5.$(OBJEXT) regex.$(OBJEXT) savecwd.$(OBJEXT) \
sighandle.$(OBJEXT) stripslash.$(OBJEXT) xgetwd.$(OBJEXT) \
yesno.$(OBJEXT)
getpass.$(OBJEXT) md5.$(OBJEXT) regex.$(OBJEXT) \
savecwd.$(OBJEXT) sighandle.$(OBJEXT) stripslash.$(OBJEXT) \
xgetwd.$(OBJEXT) yesno.$(OBJEXT)
libcvs_a_OBJECTS = $(am_libcvs_a_OBJECTS)
DEFS = @DEFS@
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/dup2.Po $(DEPDIR)/fncase.Po \
@ -189,31 +227,31 @@ am__depfiles_maybe = depfiles
@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)/md5.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/regex.Po ./$(DEPDIR)/savecwd.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/sighandle.Po ./$(DEPDIR)/stripslash.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/xgetwd.Po ./$(DEPDIR)/yesno.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 $@
CFLAGS = @CFLAGS@
YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
DIST_SOURCES = $(libcvs_a_SOURCES)
DIST_COMMON = ChangeLog Makefile.am Makefile.in 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
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)
all: all-am
.SUFFIXES:
.SUFFIXES: .c .o .obj .y
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu lib/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
AR = ar
@ -250,6 +288,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getline.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpass.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/savecwd.Po@am__quote@
@ -258,26 +297,30 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetwd.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yesno.Po@am__quote@
distclean-depend:
-rm -rf $(DEPDIR) ./$(DEPDIR)
.c.o:
@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
@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
@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)/'`$<
.c.obj:
@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
$(COMPILE) -c `cygpath -w $<`
CCDEPMODE = @CCDEPMODE@
@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
@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`
.y.c:
$(YACCCOMPILE) `test -f '$<' || echo '$(srcdir)/'`$<
sed '/^#/ s|y\.tab\.c|$@|' y.tab.c >$@
rm -f y.tab.c
if test -f y.tab.h; then \
to=`echo "$*_H" | sed \
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
@ -293,11 +336,16 @@ CCDEPMODE = @CCDEPMODE@
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
uninstall-info-am:
ETAGS = etags
ETAGSFLAGS =
CTAGS = ctags
CTAGSFLAGS =
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@ -323,20 +371,41 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
-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)
@list='$(DISTFILES)'; for file in $$list; do \
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
@ -361,7 +430,6 @@ check: check-am
all-am: Makefile $(LIBRARIES)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
@ -373,7 +441,7 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
@ -381,20 +449,21 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-test -z "getdate.c" || rm -f getdate.c
-rm -f getdate.c
clean: clean-am
clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
distclean: distclean-am
distclean-am: clean-am distclean-compile distclean-depend \
distclean-generic distclean-tags
-rm -rf $(DEPDIR) ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-local distclean-tags
dvi: dvi-am
@ -415,27 +484,40 @@ install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf $(DEPDIR) ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
.PHONY: GTAGS all all-am check check-am clean clean-generic \
clean-noinstLIBRARIES distclean distclean-compile \
distclean-depend distclean-generic distclean-tags distdir dvi \
.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 tags uninstall uninstall-am \
uninstall-info-am
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
uninstall-am uninstall-info-am
# Until Automake gets its act together
distclean-local:
rm -f fnmatch.h
# for backwards compatibility with the old makefiles
realclean: maintainer-clean
.PHONY: realclean

View File

@ -50,6 +50,8 @@ main ()
}
#endif
/* Under Windows NT, filenames are case-insensitive but case-preserving,
and both \ and / are path element separators. */
unsigned char
WNT_filename_classes[] =
{
@ -87,18 +89,56 @@ WNT_filename_classes[] =
0xf8,0xf9,0xfa,0xfb, 0xfc,0xfd,0xfe,0xff,
};
/* Same as WNT_filename_classes, but do not fold `\' into `/'. */
unsigned char
OSX_filename_classes[] =
{
0x00,0x01,0x02,0x03, 0x04,0x05,0x06,0x07,
0x08,0x09,0x0a,0x0b, 0x0c,0x0d,0x0e,0x0f,
0x10,0x11,0x12,0x13, 0x14,0x15,0x16,0x17,
0x18,0x19,0x1a,0x1b, 0x1c,0x1d,0x1e,0x1f,
0x20,0x21,0x22,0x23, 0x24,0x25,0x26,0x27,
0x28,0x29,0x2a,0x2b, 0x2c,0x2d,0x2e,0x2f,
0x30,0x31,0x32,0x33, 0x34,0x35,0x36,0x37,
0x38,0x39,0x3a,0x3b, 0x3c,0x3d,0x3e,0x3f,
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,
0x60,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,0x7b, 0x7c,0x7d,0x7e,0x7f,
0x80,0x81,0x82,0x83, 0x84,0x85,0x86,0x87,
0x88,0x89,0x8a,0x8b, 0x8c,0x8d,0x8e,0x8f,
0x90,0x91,0x92,0x93, 0x94,0x95,0x96,0x97,
0x98,0x99,0x9a,0x9b, 0x9c,0x9d,0x9e,0x9f,
0xa0,0xa1,0xa2,0xa3, 0xa4,0xa5,0xa6,0xa7,
0xa8,0xa9,0xaa,0xab, 0xac,0xad,0xae,0xaf,
0xb0,0xb1,0xb2,0xb3, 0xb4,0xb5,0xb6,0xb7,
0xb8,0xb9,0xba,0xbb, 0xbc,0xbd,0xbe,0xbf,
0xc0,0xc1,0xc2,0xc3, 0xc4,0xc5,0xc6,0xc7,
0xc8,0xc9,0xca,0xcb, 0xcc,0xcd,0xce,0xcf,
0xd0,0xd1,0xd2,0xd3, 0xd4,0xd5,0xd6,0xd7,
0xd8,0xd9,0xda,0xdb, 0xdc,0xdd,0xde,0xdf,
0xe0,0xe1,0xe2,0xe3, 0xe4,0xe5,0xe6,0xe7,
0xe8,0xe9,0xea,0xeb, 0xec,0xed,0xee,0xef,
0xf0,0xf1,0xf2,0xf3, 0xf4,0xf5,0xf6,0xf7,
0xf8,0xf9,0xfa,0xfb, 0xfc,0xfd,0xfe,0xff,
};
/* Like strcmp, but with the appropriate tweaks for file names.
Under Windows NT, filenames are case-insensitive but case-preserving,
and both \ and / are path element separators. */
and both \ and / are path element separators. Under Mac OS X, filenames
are case-insensitive but case-preserving. */
int
fncmp (const char *n1, const char *n2)
{
while (*n1 && *n2
&& (WNT_filename_classes[(unsigned char) *n1]
== WNT_filename_classes[(unsigned char) *n2]))
&& (FOLD_FN_CHAR(*n1)
== FOLD_FN_CHAR(*n2)))
n1++, n2++;
return (WNT_filename_classes[(unsigned char) *n1]
- WNT_filename_classes[(unsigned char) *n2]);
return (FOLD_FN_CHAR(*n1) - FOLD_FN_CHAR(*n2));
}
/* Fold characters in FILENAME to their canonical forms.

View File

@ -175,9 +175,27 @@ item : time {
| rel {
yyHaveRel++;
}
| cvsstamp {
yyHaveTime++;
yyHaveDate++;
yyHaveZone++;
}
| number
;
cvsstamp: tUNUMBER '.' tUNUMBER '.' tUNUMBER '.' tUNUMBER '.' tUNUMBER '.' tUNUMBER {
yyYear = $1;
if (yyYear < 100) yyYear += 1900;
yyMonth = $3;
yyDay = $5;
yyHour = $7;
yyMinutes = $9;
yySeconds = $11;
yyDSTmode = DSToff;
yyTimezone = 0;
}
;
time : tUNUMBER tMERIDIAN {
yyHour = $1;
yyMinutes = 0;

106
contrib/cvs/lib/getpass.c Normal file
View File

@ -0,0 +1,106 @@
/* Copyright (C) 1992,93,94,95,96,97,98,99,2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#include <stdio.h>
#ifndef SEEK_CUR
#define SEEK_CUR 1
#endif
#include <termios.h>
#include <unistd.h>
#include "getline.h"
/* It is desirable to use this bit on systems that have it.
The only bit of terminal state we want to twiddle is echoing, which is
done in software; there is no need to change the state of the terminal
hardware. */
#ifndef TCSASOFT
# define TCSASOFT 0
#endif
char *
getpass (const char *prompt)
{
FILE *in, *out;
struct termios s, t;
int tty_changed;
static char *buf;
static size_t bufsize;
ssize_t nread;
/* Try to write to and read from the terminal if we can.
If we can't open the terminal, use stderr and stdin. */
in = fopen ("/dev/tty", "w+");
if (in == NULL)
{
in = stdin;
out = stderr;
}
else
out = in;
/* Turn echoing off if it is on now. */
if (tcgetattr (fileno (in), &t) == 0)
{
/* Save the old one. */
s = t;
/* Tricky, tricky. */
t.c_lflag &= ~(ECHO|ISIG);
tty_changed = (tcsetattr (fileno (in), TCSAFLUSH|TCSASOFT, &t) == 0);
}
else
tty_changed = 0;
/* Write the prompt. */
fputs (prompt, out);
fflush (out);
/* Read the password. */
nread = getline (&buf, &bufsize, in);
if (buf != NULL)
{
if (nread < 0)
buf[0] = '\0';
else if (buf[nread - 1] == '\n')
{
/* Remove the newline. */
buf[nread - 1] = '\0';
if (tty_changed)
{
/* Write the newline that was not echoed. */
if (out == in) fseek (out, 0, SEEK_CUR);
putc ('\n', out);
}
}
}
/* Restore the original setting. */
if (tty_changed)
(void) tcsetattr (fileno (in), TCSAFLUSH|TCSASOFT, &s);
if (in != stdin)
/* We opened the terminal; now close it. */
fclose (in);
return buf;
}

View File

@ -37,7 +37,7 @@ extern int errno;
int
mkdir (dpath, dmode)
char *dpath;
const char *dpath;
int dmode;
{
int cpid, status;

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) { REGEX_FREE (var); var = NULL; } else
#define FREE_VAR(var) if (var) { (void)REGEX_FREE ((void *)var); var = NULL; } else
#define FREE_VARIABLES() \
do { \
REGEX_FREE_STACK (fail_stack.stack); \

View File

@ -84,13 +84,18 @@
# endif
#endif
#if !defined(S_ISSOCK) && defined(S_IFSOCK)
# if defined(S_IFMT)
# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
# else
# define S_ISSOCK(m) ((m) & S_IFSOCK)
# endif
#endif
#ifndef S_ISSOCK
# if defined( S_IFSOCK )
# ifdef S_IFMT
# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
# else
# define S_ISSOCK(m) ((m) & S_IFSOCK)
# endif /* S_IFMT */
# elif defined( S_ISNAM )
/* SCO OpenServer 5.0.6a */
# define S_ISSOCK S_ISNAM
# endif /* !S_IFSOCK && S_ISNAM */
#endif /* !S_ISSOCK */
#if !defined(S_ISMPB) && defined(S_IFMPB) /* V7 */
# if defined(S_IFMT)
@ -452,30 +457,65 @@ extern int errno;
#define CVS_FNMATCH fnmatch
#endif
#if defined (__CYGWIN32__) || defined (WIN32)
#ifdef WIN32
/*
* According to GNU conventions, we should avoid referencing any macro
* containing "WIN" as a reference to Microsoft Windows, as we would like to
* avoid any implication that we consider Microsoft Windows any sort of "win".
*
* FIXME: As of 2003-06-09, folks on the GNULIB project were discussing
* defining a configure macro to define WOE32 appropriately. If they ever do
* write such a beast, we should use it, though in most cases it would be
* preferable to avoid referencing any OS or compiler anyhow, per Autoconf
* convention, and reference only tested features of the system.
*/
# define WOE32 1
#endif /* WIN32 */
/* Under Windows NT, filenames are case-insensitive, and both / and \
are path component separators. */
#define FOLD_FN_CHAR(c) (WNT_filename_classes[(unsigned char) (c)])
#ifdef WOE32
/* Under Windows NT, filenames are case-insensitive. */
# define FILENAMES_CASE_INSENSITIVE 1
#endif /* WOE32 */
#ifdef FILENAMES_CASE_INSENSITIVE
# if defined (__CYGWIN32__) || defined (WOE32)
/* Under Windows NT, filenames are case-insensitive, and both / and \
are path component separators. */
# define FOLD_FN_CHAR(c) (WNT_filename_classes[(unsigned char) (c)])
extern unsigned char WNT_filename_classes[];
#define FILENAMES_CASE_INSENSITIVE 1
/* Is the character C a path name separator? Under
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, both Cygwin and Macintosh OS X can make it here,
* but since the OS X fold just folds a-z into A-Z or visa-versa, I'm just
* using it for Cygwin too. The var name below could probably use a
* rename.
*
* Under Mac OS X & Cygwin, filenames are case-insensitive.
*/
# define FOLD_FN_CHAR(c) (OSX_filename_classes[(unsigned char) (c)])
extern unsigned char OSX_filename_classes[];
# endif /* __CYGWIN32__ || WOE32 */
/* Is the character C a path name separator? Under
Windows NT, you can use either / or \. */
#define ISDIRSEP(c) (FOLD_FN_CHAR(c) == '/')
/* The following need to be declared for all case insensitive filesystems.
* When not FOLD_FN_CHAR is not #defined, a default definition for these
* functions is provided later in this header file. */
/* Like strcmp, but with the appropriate tweaks for file names.
Under Windows NT, filenames are case-insensitive but case-preserving,
and both \ and / are path element separators. */
/* Like strcmp, but with the appropriate tweaks for file names. */
extern int fncmp (const char *n1, const char *n2);
/* Fold characters in FILENAME to their canonical forms.
If FOLD_FN_CHAR is not #defined, the system provides a default
definition for this. */
/* Fold characters in FILENAME to their canonical forms. */
extern void fnfold (char *FILENAME);
#endif /* defined (__CYGWIN32__) || defined (WIN32) */
#endif /* FILENAMES_CASE_INSENSITIVE */
/* Some file systems are case-insensitive. If FOLD_FN_CHAR is
#defined, it maps the character C onto its "canonical" form. In a
@ -483,15 +523,22 @@ extern void fnfold (char *FILENAME);
to lower case. Under Windows NT, / and \ are both path component
separators, so FOLD_FN_CHAR would map them both to /. */
#ifndef FOLD_FN_CHAR
#define FOLD_FN_CHAR(c) (c)
#define fnfold(filename) (filename)
#define fncmp strcmp
# define FOLD_FN_CHAR(c) (c)
# define fnfold(filename) (filename)
# define fncmp strcmp
#endif
/* Different file systems have different path component separators.
For the VMS port we might need to abstract further back than this. */
#ifndef ISDIRSEP
#define ISDIRSEP(c) ((c) == '/')
# define ISDIRSEP(c) ((c) == '/')
#endif
/* Different file systems can have different naming patterns which designate
* a path as absolute
*/
#ifndef ISABSOLUTE
# define ISABSOLUTE(s) ISDIRSEP(s[0])
#endif

View File

@ -27,6 +27,9 @@
#ifndef WIFEXITED
#define WIFEXITED(w) (((w) & 0xff) == 0)
#endif
#ifndef WCOREDUMP /* not POSIX, but common and useful */
#define WCOREDUMP(w) (((w) & 0x80) != 0)
#endif
#ifndef WSTOPSIG
#define WSTOPSIG(w) (((w) >> 8) & 0xff)

View File

@ -1,3 +1,51 @@
2004-02-12 Derek Price <derek@ximbiot.com>
Close issue #162.
* cvs.1: Remove references to the removed global -l option.
(Original patch from Ville Skyttä <scop@cvshome.org>.)
2004-02-12 Derek Price <derek@ximbiot.com>
Close issue #161.
* cvs.1, cvs.5: A couple of spelling fixes.
(Patch from Ville Skyttä <scop@cvshome.org>.)
2004-01-30 Derek Price <derek@ximbiot.com>
Close issue #146.
* cvs.1: Reference `cvs --help diff' rather than the rcsdiff man page.
Use consistent spelling of `initialization'.
(Patch from Ville Skyttä <scop@cvshome.org>.)
2003-05-21 Derek Price <derek@ximbiot.com>
* Makefile.in: Regenerate with Automake version 1.7.5.
2003-04-10 Larry Jones <lawrence.jones@eds.com>
* Makefile.in: Regenerated.
2003-03-24 Derek Price <derek@ximbiot.com>
* Makefile.am: Update copyright notice.
* Makefile.in: Regenerated.
2003-03-05 Mark D. Baushke <mdb@cvshome.org>
* cvs.1 (CVS_LOCAL_BRANCH_NUM): Backout CVS_LOCAL_BRANCH_NUM feature.
* cvs.1 (CVS_LOCAL_BRANCH_NUM): Document new environment variable.
2003-02-26 Larry Jones <lawrence.jones@eds.com>
* cvs.1: Note using "cvs" in .cvsrc for global options.
(Patch from "Mark D. Baushke" <mdb@cvshome.org>).
2003-02-25 Derek Price <derek@ximbiot.com>
* Makefile.in: Regenerated.
2002-09-24 Derek Price <derek@ximbiot.com>
* Makefile.in: Regenerated using Automake 1.6.3.

View File

@ -1,6 +1,8 @@
## Process this file with automake to produce Makefile.in
# Makefile.am for GNU CVS man pages.
# Copyright (C) 1986-1992, 2000 Free Software Foundation, Inc.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# Makefile.in generated by automake 1.7.9 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -15,7 +15,9 @@
@SET_MAKE@
# Makefile.am for GNU CVS man pages.
# Copyright (C) 1986-1992, 2000 Free Software Foundation, Inc.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -26,79 +28,117 @@
# 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.
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSH = @CSH@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EDITOR = @EDITOR@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
KRB4 = @KRB4@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MAKE_TARGETS_IN_VPATH_FALSE = @MAKE_TARGETS_IN_VPATH_FALSE@
MAKE_TARGETS_IN_VPATH_TRUE = @MAKE_TARGETS_IN_VPATH_TRUE@
MKTEMP = @MKTEMP@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PR = @PR@
PS2PDF = @PS2PDF@
RANLIB = @RANLIB@
ROFF = @ROFF@
SENDMAIL = @SENDMAIL@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
YACC = @YACC@
ac_ct_CC = @ac_ct_CC@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
ac_prefix_program = @ac_prefix_program@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
bindir = @bindir@
build_alias = @build_alias@
datadir = @datadir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
includedir = @includedir@
includeopt = @includeopt@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
man_MANS = cvs.1 cvs.5 cvsbug.8
EXTRA_DIST = \
@ -106,6 +146,7 @@ EXTRA_DIST = \
$(man_MANS)
subdir = man
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
@ -113,14 +154,14 @@ DIST_SOURCES =
NROFF = nroff
MANS = $(man_MANS)
DIST_COMMON = ChangeLog Makefile.am Makefile.in
DIST_COMMON = $(srcdir)/Makefile.in ChangeLog Makefile.am
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu man/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
uninstall-info-am:
@ -160,6 +201,10 @@ uninstall-man1:
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
1*) ;; \
*) ext='1' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
@ -203,6 +248,10 @@ uninstall-man5:
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
5*) ;; \
*) ext='5' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
@ -246,6 +295,10 @@ uninstall-man8:
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
8*) ;; \
*) ext='8' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
@ -255,13 +308,22 @@ uninstall-man8:
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@list='$(DISTFILES)'; for file in $$list; do \
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
@ -287,7 +349,6 @@ all-am: Makefile $(MANS)
installdirs:
$(mkinstalldirs) $(DESTDIR)$(man1dir) $(DESTDIR)$(man5dir) $(DESTDIR)$(man8dir)
install: install-am
install-exec: install-exec-am
install-data: install-data-am
@ -299,7 +360,7 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
@ -307,7 +368,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -317,7 +378,7 @@ clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
@ -339,13 +400,21 @@ install-man: install-man1 install-man5 install-man8
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am uninstall-man
uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
@ -356,9 +425,9 @@ uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
install-exec-am install-info install-info-am install-man \
install-man1 install-man5 install-man8 install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
uninstall uninstall-am uninstall-info-am uninstall-man \
uninstall-man1 uninstall-man5 uninstall-man8
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
pdf-am ps ps-am uninstall uninstall-am uninstall-info-am \
uninstall-man uninstall-man1 uninstall-man5 uninstall-man8
# for backwards compatibility with the old makefiles

View File

@ -284,7 +284,7 @@ containing the logging forms) rather than command templates.
The `\|editinfo\|' file allows you to execute a script \fIbefore the
commit starts\fP, but after the log information is recorded. These
"edit" scripts can verify information recorded in the log file. If
the edit script exits wth a non-zero exit status, the commit is aborted.
the edit script exits with a non-zero exit status, the commit is aborted.
.SP
The `\|loginfo\|' file contains commands to execute \fIat the end\fP
of a commit. The text specified as a commit log message is piped

39
contrib/cvs/mktemp.sh Normal file
View File

@ -0,0 +1,39 @@
# mktemp
# Copyright (c) Derek Price, Ximbiot <http://ximbiot.com>, and the
# Free Software Foundation, Inc. <http://gnu.org>
# 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.
# This Bourne Shell scriptlet is intended as a simple replacement for
# the BSD mktemp function for systems that do not support mktemp. It
# currently does not check that the files it is creating did not exist
# previously and it does not verify that it successfully creates the
# files it returns the names of.
mktemp() {
if test x"$1" = x-d; then
tmp=`echo $2 |sed "s/XXXXXX/$$/"`
(umask 077 && exec mkdir $tmp) || return 1
else
tmp=`echo $1 |sed "s/XXXXXX/$$/"`
(umask 077 && touch $tmp) || return 1
fi
echo $tmp
return 0
}

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,8 @@
## Process this file with automake to produce Makefile.in
# Makefile for GNU CVS program.
# Copyright (C) 1986, 1988-1990, 2000 Free Software Foundation, Inc.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -71,6 +73,7 @@ cvs_SOURCES = \
run.c \
scramble.c \
server.c \
stack.c \
status.c \
subr.c \
tag.c \
@ -88,10 +91,12 @@ cvs_SOURCES = \
fileattr.h \
hardlink.h \
hash.h \
history.h \
myndbm.h \
rcs.h \
root.h \
server.h \
stack.h \
update.h \
watch.h
@ -118,11 +123,11 @@ check-local: localcheck remotecheck
.PHONY: localcheck
localcheck:
$(SHELL) $(srcdir)/sanity.sh `pwd`/cvs
$(SHELL) $(srcdir)/sanity.sh `pwd`/cvs$(EXEEXT)
.PHONY: remotecheck
remotecheck: all
$(SHELL) $(srcdir)/sanity.sh -r `pwd`/cvs
$(SHELL) $(srcdir)/sanity.sh -r `pwd`/cvs$(EXEEXT)
## MAINTAINER Targets

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# Makefile.in generated by automake 1.7.9 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -15,7 +15,9 @@
@SET_MAKE@
# Makefile for GNU CVS program.
# Copyright (C) 1986, 1988-1990, 2000 Free Software Foundation, Inc.
# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
# 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -30,76 +32,114 @@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
SHELL = /bin/sh
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSH = @CSH@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EDITOR = @EDITOR@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
KRB4 = @KRB4@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MAKE_TARGETS_IN_VPATH_FALSE = @MAKE_TARGETS_IN_VPATH_FALSE@
MAKE_TARGETS_IN_VPATH_TRUE = @MAKE_TARGETS_IN_VPATH_TRUE@
MKTEMP = @MKTEMP@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PR = @PR@
PS2PDF = @PS2PDF@
RANLIB = @RANLIB@
ROFF = @ROFF@
SENDMAIL = @SENDMAIL@
SET_MAKE = @SET_MAKE@
SHELL = /bin/sh
STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
YACC = @YACC@
ac_ct_CC = @ac_ct_CC@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
ac_prefix_program = @ac_prefix_program@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
bindir = @bindir@
build_alias = @build_alias@
datadir = @datadir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
includedir = @includedir@
includeopt = @includeopt@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
# $(includeopt) is CVS specific and set by configure
# FIXME - This includes line is dependant on its order. This means there is
@ -157,6 +197,7 @@ cvs_SOURCES = \
run.c \
scramble.c \
server.c \
stack.c \
status.c \
subr.c \
tag.c \
@ -174,10 +215,12 @@ cvs_SOURCES = \
fileattr.h \
hardlink.h \
hash.h \
history.h \
myndbm.h \
rcs.h \
root.h \
server.h \
stack.h \
update.h \
watch.h
@ -203,6 +246,7 @@ EXTRA_DIST = \
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
@ -223,20 +267,17 @@ am_cvs_OBJECTS = add.$(OBJEXT) admin.$(OBJEXT) annotate.$(OBJEXT) \
patch.$(OBJEXT) rcs.$(OBJEXT) rcscmds.$(OBJEXT) \
recurse.$(OBJEXT) release.$(OBJEXT) remove.$(OBJEXT) \
repos.$(OBJEXT) root.$(OBJEXT) run.$(OBJEXT) scramble.$(OBJEXT) \
server.$(OBJEXT) status.$(OBJEXT) subr.$(OBJEXT) tag.$(OBJEXT) \
update.$(OBJEXT) version.$(OBJEXT) vers_ts.$(OBJEXT) \
watch.$(OBJEXT) wrapper.$(OBJEXT) zlib.$(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)
DEFS = @DEFS@
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/add.Po ./$(DEPDIR)/admin.Po \
@ -261,28 +302,28 @@ am__depfiles_maybe = depfiles
@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)/status.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/subr.Po ./$(DEPDIR)/tag.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/update.Po ./$(DEPDIR)/vers_ts.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/version.Po ./$(DEPDIR)/watch.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/wrapper.Po ./$(DEPDIR)/zlib.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 $@
CFLAGS = @CFLAGS@
DIST_SOURCES = $(cvs_SOURCES)
DIST_COMMON = ChangeLog Makefile.am Makefile.in cvsbug.in
DIST_COMMON = $(srcdir)/Makefile.in ChangeLog Makefile.am cvsbug.in
SOURCES = $(cvs_SOURCES)
all: all-am
.SUFFIXES:
.SUFFIXES: .c .o .obj
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu src/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
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
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
@ -296,7 +337,7 @@ install-binPROGRAMS: $(bin_PROGRAMS)
; 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; \
$(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \
else :; fi; \
done
@ -385,6 +426,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scramble.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/server.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/status.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subr.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tag.Po@am__quote@
@ -395,26 +437,35 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrapper.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zlib.Po@am__quote@
distclean-depend:
-rm -rf ./$(DEPDIR)
.c.o:
@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
@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
@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)/'`$<
.c.obj:
@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
$(COMPILE) -c `cygpath -w $<`
CCDEPMODE = @CCDEPMODE@
@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
@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`
uninstall-info-am:
ETAGS = etags
ETAGSFLAGS =
CTAGS = ctags
CTAGSFLAGS =
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@ -440,20 +491,41 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
-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)
@list='$(DISTFILES)'; for file in $$list; do \
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
@ -480,7 +552,6 @@ all-am: Makefile $(PROGRAMS) $(SCRIPTS)
installdirs:
$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(bindir)
install: install-am
install-exec: install-exec-am
install-data: install-data-am
@ -492,7 +563,7 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
@ -500,7 +571,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@ -511,9 +582,10 @@ clean: clean-am
clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
distclean: distclean-am
distclean-am: clean-am distclean-compile distclean-depend \
distclean-generic distclean-tags
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
@ -534,38 +606,47 @@ install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
uninstall-info-am
.PHONY: GTAGS all all-am check check-am check-local clean \
clean-binPROGRAMS clean-generic distclean distclean-compile \
distclean-depend distclean-generic distclean-tags distdir dvi \
.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 tags uninstall \
uninstall-am uninstall-binPROGRAMS uninstall-binSCRIPTS \
uninstall-info-am
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
.PHONY: localcheck
localcheck:
$(SHELL) $(srcdir)/sanity.sh `pwd`/cvs
$(SHELL) $(srcdir)/sanity.sh `pwd`/cvs$(EXEEXT)
.PHONY: remotecheck
remotecheck: all
$(SHELL) $(srcdir)/sanity.sh -r `pwd`/cvs
$(SHELL) $(srcdir)/sanity.sh -r `pwd`/cvs$(EXEEXT)
# for backwards compatibility with the old makefiles
.PHONY: realclean

View File

@ -24,13 +24,15 @@
* file to be resurrected.
*/
#include <assert.h>
#include "cvs.h"
#include "savecwd.h"
#include "fileattr.h"
static int add_directory PROTO ((struct file_info *finfo));
static int build_entry PROTO((char *repository, char *user, char *options,
char *message, List * entries, char *tag));
static int build_entry PROTO((const char *repository, const char *user,
const char *options, const char *message,
List * entries, const char *tag));
static const char *const add_usage[] =
{
@ -150,7 +152,7 @@ add (argc, argv)
#ifdef CLIENT_SUPPORT
if (current_parsed_root->isremote)
{
int i;
int j;
if (argc == 0)
/* We snipped out all the arguments in the above sanity
@ -180,7 +182,7 @@ add (argc, argv)
free (repository);
}
for (i = 0; i < argc; ++i)
for (j = 0; j < argc; ++j)
{
/* FIXME: Does this erroneously call Create_Admin in error
conditions which are only detected once the server gets its
@ -195,7 +197,7 @@ add (argc, argv)
"Directory %s added" message), and then Create_Admin,
which should also fix the error handling concerns. */
if (isdir (argv[i]))
if (isdir (argv[j]))
{
char *tag;
char *date;
@ -210,8 +212,11 @@ add (argc, argv)
if (save_cwd (&cwd))
error_exit ();
filedir = xstrdup (argv[i]);
p = last_component (filedir);
filedir = xstrdup (argv[j]);
/* Deliberately discard the const below since we know we just
* allocated filedir and can do what we like with it.
*/
p = (char *)last_component (filedir);
if (p == filedir)
{
update_dir = "";
@ -246,7 +251,7 @@ add (argc, argv)
rcsdir = xmalloc (strlen (repository) + strlen (p) + 5);
sprintf (rcsdir, "%s/%s", repository, p);
Create_Admin (p, argv[i], rcsdir, tag, date,
Create_Admin (p, argv[j], rcsdir, tag, date,
nonbranch, 0, 1);
if (found_slash)
@ -263,7 +268,7 @@ add (argc, argv)
free (rcsdir);
if (p == filedir)
Subdir_Register ((List *) NULL, (char *) NULL, argv[i]);
Subdir_Register ((List *) NULL, (char *) NULL, argv[j]);
else
{
Subdir_Register ((List *) NULL, update_dir, p);
@ -289,10 +294,7 @@ add (argc, argv)
int begin_added_files = added_files;
#endif
struct file_info finfo;
char *p;
#if defined (SERVER_SUPPORT) && !defined (FILENAMES_CASE_INSENSITIVE)
char *found_name;
#endif
char *filename, *p;
memset (&finfo, 0, sizeof finfo);
@ -300,8 +302,12 @@ add (argc, argv)
error_exit ();
finfo.fullname = xstrdup (argv[i]);
p = last_component (argv[i]);
if (p == argv[i])
filename = xstrdup (argv[i]);
/* We know we can discard the const below since we just allocated
* filename and can do as we like with it.
*/
p = (char *)last_component (filename);
if (p == filename)
{
finfo.update_dir = "";
finfo.file = p;
@ -309,7 +315,7 @@ add (argc, argv)
else
{
p[-1] = '\0';
finfo.update_dir = argv[i];
finfo.update_dir = filename;
finfo.file = p;
if (CVS_CHDIR (finfo.update_dir) < 0)
error (1, errno, "could not chdir to %s", finfo.update_dir);
@ -325,7 +331,8 @@ add (argc, argv)
repository = Name_Repository (NULL, finfo.update_dir);
/* don't add stuff to Emptydir */
if (strncmp (repository, current_parsed_root->directory, cvsroot_len) == 0
if (strncmp (repository, current_parsed_root->directory,
cvsroot_len) == 0
&& ISDIRSEP (repository[cvsroot_len])
&& strncmp (repository + cvsroot_len + 1,
CVSROOTADM,
@ -340,65 +347,12 @@ add (argc, argv)
finfo.repository = repository;
finfo.entries = entries;
#if defined (SERVER_SUPPORT) && !defined (FILENAMES_CASE_INSENSITIVE)
if (ign_case)
{
/* Need to check whether there is a directory with the
same name but different case. We'll check for files
with the same name later (when Version_TS calls
RCS_parse which calls fopen_case). If CVS some day
records directories in the RCS files, then we should be
able to skip the separate check here, which would be
cleaner. */
DIR *dirp;
struct dirent *dp;
dirp = CVS_OPENDIR (finfo.repository);
if (dirp == NULL)
error (1, errno, "cannot read directory %s", finfo.repository);
found_name = NULL;
errno = 0;
while ((dp = CVS_READDIR (dirp)) != NULL)
{
if (cvs_casecmp (dp->d_name, finfo.file) == 0)
{
if (found_name != NULL)
error (1, 0, "%s is ambiguous; could mean %s or %s",
finfo.file, dp->d_name, found_name);
found_name = xstrdup (dp->d_name);
}
}
if (errno != 0)
error (1, errno, "cannot read directory %s", finfo.repository);
CVS_CLOSEDIR (dirp);
if (found_name != NULL)
{
/* OK, we are about to patch up the name, so patch up
the temporary directory too to match. The isdir
should "always" be true (since files have ,v), but
I guess we might as well make some attempt to not
get confused by stray files in the repository. */
if (isdir (finfo.file))
{
if (CVS_MKDIR (found_name, 0777) < 0
&& errno != EEXIST)
error (0, errno, "cannot create %s", finfo.file);
}
/* OK, we found a directory with the same name, maybe in
a different case. Treat it as if the name were the
same. */
finfo.file = found_name;
}
}
#endif
/* We pass force_tag_match as 1. If the directory has a
sticky branch tag, and there is already an RCS file which
does not have that tag, then the head revision is
meaningless to us. */
vers = Version_TS (&finfo, options, NULL, NULL, 1, 0);
if (vers->vn_user == NULL)
{
/* No entry available, ts_rcs is invalid */
@ -507,24 +461,90 @@ same name already exists in the repository.");
}
else
{
char *timestamp = NULL;
if (vers->ts_user == NULL)
{
/* If this file does not exist locally, assume that
* the last version on the branch is being
* resurrected.
*
* Compute previous revision. We assume that it
* exists and that it is not a revision on the
* trunk of the form X.1 (1.1, 2.1, 3.1, ...). We
* also assume that it is not dead, which seems
* fair since we know vers->vn_rcs is dead
* and we shouldn't see two dead revisions in a
* row.
*/
char *prev = previous_rev (vers->srcfile,
vers->vn_rcs);
int status;
assert (prev != NULL);
if (!quiet)
error (0, 0,
"Resurrecting file `%s' from revision %s.",
finfo.fullname, prev);
status = RCS_checkout (vers->srcfile, finfo.file,
prev, vers->tag,
vers->options, RUN_TTY,
NULL, NULL);
xchmod (finfo.file, 1);
if (status != 0)
{
error (0, 0, "Failed to resurrect revision %s",
prev);
err++;
}
else
{
/* I don't actually set vers->ts_user here
* because it would confuse server_update().
*/
timestamp = time_stamp (finfo.file);
if (!really_quiet)
write_letter (&finfo, 'U');
}
free (prev);
}
if (!quiet)
{
if (vers->tag)
error (0, 0, "\
file `%s' will be added on branch `%s' from version %s",
finfo.fullname, vers->tag, vers->vn_rcs);
error (0, 0,
"file `%s' will be added on branch `%s' from version %s",
finfo.fullname, vers->tag,
vers->vn_rcs);
else
/* I'm not sure that mentioning
vers->vn_rcs makes any sense here; I
can't think of a way to word the
message which is not confusing. */
error (0, 0, "\
re-adding file %s (in place of dead revision %s)",
finfo.fullname, vers->vn_rcs);
error (0, 0,
"Re-adding file `%s' (in place of dead revision %s).",
finfo.fullname, vers->vn_rcs);
}
Register (entries, finfo.file, "0", vers->ts_user,
vers->options,
vers->tag, NULL, NULL);
Register (entries, finfo.file, "0",
timestamp ? timestamp : vers->ts_user,
vers->options, vers->tag, vers->date, NULL);
if (timestamp) free (timestamp);
#ifdef SERVER_SUPPORT
if (server_active && vers->ts_user == NULL)
{
/* If we resurrected the file from the archive, we
* need to tell the client about it.
*/
server_updated (&finfo, vers,
SERVER_UPDATED,
(mode_t) -1, NULL, NULL);
/* This is kinda hacky or, at least, it renders the
* name "begin_added_files" obsolete, but we want
* the added_files to be counted without triggering
* the check that causes server_checked_in() to be
* called below since we have already called
* server_updated() to complete the resurrection.
*/
++begin_added_files;
}
#endif
++added_files;
}
}
@ -570,36 +590,56 @@ cannot resurrect %s; RCS file removed by second party", finfo.fullname);
}
else
{
int status;
/*
* There is an RCS file, so remove the "-" from the
* version number and restore the file
*/
char *tmp = xmalloc (strlen (finfo.file) + 50);
char *tmp = xmalloc (strlen (vers->vn_user));
(void) strcpy (tmp, vers->vn_user + 1);
(void) strcpy (vers->vn_user, tmp);
(void) sprintf (tmp, "Resurrected %s", finfo.file);
Register (entries, finfo.file, vers->vn_user, tmp,
vers->options,
vers->tag, vers->date, vers->ts_conflict);
free (tmp);
/* XXX - bugs here; this really resurrect the head */
/* Note that this depends on the Register above actually
having written Entries, or else it won't really
check the file out. */
if (update (2, argv + i - 1) == 0)
free(tmp);
status = RCS_checkout (vers->srcfile, finfo.file,
vers->vn_user, vers->tag,
vers->options, RUN_TTY,
NULL, NULL);
xchmod (finfo.file, 1);
if (status != 0)
{
error (0, 0, "%s, version %s, resurrected",
finfo.fullname,
error (0, 0, "Failed to resurrect revision %s",
vers->vn_user);
err++;
tmp = NULL;
}
else
{
error (0, 0, "could not resurrect %s", finfo.fullname);
err++;
/* I don't actually set vers->ts_user here because it
* would confuse server_update().
*/
tmp = time_stamp (finfo.file);
write_letter (&finfo, 'U');
if (!quiet)
error (0, 0, "%s, version %s, resurrected",
finfo.fullname, vers->vn_user);
}
Register (entries, finfo.file, vers->vn_user,
tmp, vers->options,
vers->tag, vers->date, NULL);
if (tmp) free (tmp);
#ifdef SERVER_SUPPORT
if (server_active)
{
/* If we resurrected the file from the archive, we
* need to tell the client about it.
*/
server_updated (&finfo, vers,
SERVER_UPDATED,
(mode_t) -1, NULL, NULL);
}
/* We don't increment added_files here because this isn't
* a change that needs to be committed.
*/
#endif
}
}
else
@ -642,11 +682,11 @@ cannot resurrect %s; RCS file removed by second party", finfo.fullname);
error_exit ();
free_cwd (&cwd);
free (finfo.fullname);
#if defined (SERVER_SUPPORT) && !defined (FILENAMES_CASE_INSENSITIVE)
if (ign_case && found_name != NULL)
free (found_name);
#endif
/* It's okay to discard the const to free this - we allocated this
* above. The const is for everybody else.
*/
free ((char *) finfo.fullname);
free ((char *) filename);
}
if (added_files && !really_quiet)
error (0, 0, "use '%s commit' to add %s permanently",
@ -672,9 +712,9 @@ static int
add_directory (finfo)
struct file_info *finfo;
{
char *repository = finfo->repository;
const char *repository = finfo->repository;
List *entries = finfo->entries;
char *dir = finfo->file;
const char *dir = finfo->file;
char *rcsdir = NULL;
struct saved_cwd cwd;
@ -707,11 +747,11 @@ add_directory (finfo)
/* now, remember where we were, so we can get back */
if (save_cwd (&cwd))
return (1);
if ( CVS_CHDIR (dir) < 0)
return 1;
if (CVS_CHDIR (dir) < 0)
{
error (0, errno, "cannot chdir to %s", finfo->fullname);
return (1);
return 1;
}
#ifdef SERVER_SUPPORT
if (!server_active && isfile (CVSADM))
@ -737,7 +777,8 @@ add_directory (finfo)
+ 80
+ (tag == NULL ? 0 : strlen (tag) + 80)
+ (date == NULL ? 0 : strlen (date) + 80));
(void) sprintf (message, "Directory %s added to the repository\n", rcsdir);
(void) sprintf (message, "Directory %s added to the repository\n",
rcsdir);
if (tag)
{
(void) strcat (message, "--> Using per-directory sticky tag `");
@ -799,7 +840,7 @@ add_directory (finfo)
li->type = T_TITLE;
li->tag = xstrdup (tag);
li->rev_old = li->rev_new = NULL;
p->data = (char *) li;
p->data = li;
(void) addnode (ulist, p);
Update_Logfile (rcsdir, message, (FILE *) NULL, ulist);
dellist (&ulist);
@ -820,12 +861,13 @@ add_directory (finfo)
Subdir_Register (entries, (char *) NULL, dir);
cvs_output (message, 0);
if (!really_quiet)
cvs_output (message, 0);
free (rcsdir);
free (message);
return (0);
return 0;
out:
if (restore_cwd (&cwd, NULL))
@ -836,18 +878,20 @@ out:
return (0);
}
/*
* Builds an entry for a new file and sets up "CVS/file",[pt] by
* interrogating the user. Returns non-zero on error.
*/
static int
build_entry (repository, user, options, message, entries, tag)
char *repository;
char *user;
char *options;
char *message;
const char *repository;
const char *user;
const char *options;
const char *message;
List *entries;
char *tag;
const char *tag;
{
char *fname;
char *line;

View File

@ -15,9 +15,9 @@
#endif
#include <assert.h>
static Dtype admin_dirproc PROTO ((void *callerdat, char *dir,
char *repos, char *update_dir,
List *entries));
static Dtype admin_dirproc PROTO ((void *callerdat, const char *dir,
const char *repos, const char *update_dir,
List *entries));
static int admin_fileproc PROTO ((void *callerdat, struct file_info *finfo));
static const char *const admin_usage[] =
@ -367,7 +367,7 @@ admin (argc, argv)
/* getopt will have printed an error message. */
usage_error:
/* Don't use command_name; it might be "server". */
/* Don't use cvs_cmd_name; it might be "server". */
error (1, 0, "specify %s -H admin for usage information",
program_name);
}
@ -520,7 +520,8 @@ admin (argc, argv)
err = start_recursion (admin_fileproc, (FILESDONEPROC) NULL, admin_dirproc,
(DIRLEAVEPROC) NULL, (void *)&admin_data,
argc, argv, 0,
W_LOCAL, 0, CVS_LOCK_NONE, (char *) NULL, 1);
W_LOCAL, 0, CVS_LOCK_NONE, (char *) NULL, 1,
(char *) NULL);
Lock_Cleanup ();
return_it:
@ -564,15 +565,22 @@ admin_fileproc (callerdat, finfo)
if (version != NULL && strcmp (version, "0") == 0)
{
error (0, 0, "cannot admin newly added file `%s'", finfo->file);
status = 1;
goto exitfunc;
}
rcs = vers->srcfile;
if (rcs == NULL)
{
if (!really_quiet)
error (0, 0, "nothing known about %s", finfo->file);
status = 1;
goto exitfunc;
}
if (rcs->flags & PARTIAL)
RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
status = 0;
if (!really_quiet)
{
cvs_output ("RCS file: ", 0);
@ -776,7 +784,7 @@ admin_fileproc (callerdat, finfo)
error (0, 0,
"%s: symbolic name %s already bound to %s",
rcs->path,
tag, n->data);
tag, (char *)n->data);
status = 1;
free (tag);
continue;
@ -835,7 +843,7 @@ admin_fileproc (callerdat, finfo)
continue;
}
free (rev);
delta = (RCSVers *) n->data;
delta = n->data;
free (delta->state);
delta->state = tag;
break;
@ -849,20 +857,32 @@ admin_fileproc (callerdat, finfo)
status = 1;
continue;
}
*p = '\0';
rev = RCS_gettag (rcs, arg + 2, 0, NULL);
*p = '\0'; /* temporarily make arg+2 its own string */
rev = RCS_gettag (rcs, arg + 2, 1, NULL); /* Force tag match */
if (rev == NULL)
{
error (0, 0, "%s: no such revision %s", rcs->path, rev);
error (0, 0, "%s: no such revision %s", rcs->path, arg+2);
status = 1;
*p = ':'; /* restore the full text of the -m argument */
continue;
}
*p++ = ':';
msg = p;
msg = p+1;
n = findnode (rcs->versions, rev);
/* tags may exist against non-existing versions */
if (n == NULL)
{
error (0, 0, "%s: no such revision %s: %s",
rcs->path, arg+2, rev);
status = 1;
*p = ':'; /* restore the full text of the -m argument */
free (rev);
continue;
}
*p = ':'; /* restore the full text of the -m argument */
free (rev);
delta = (RCSVers *) n->data;
delta = n->data;
if (delta->text == NULL)
{
delta->text = (Deltatext *) xmalloc (sizeof (Deltatext));
@ -911,9 +931,9 @@ admin_fileproc (callerdat, finfo)
static Dtype
admin_dirproc (callerdat, dir, repos, update_dir, entries)
void *callerdat;
char *dir;
char *repos;
char *update_dir;
const char *dir;
const char *repos;
const char *update_dir;
List *entries;
{
if (!quiet)

View File

@ -54,7 +54,7 @@ annotate (argc, argv)
int err = 0;
int c;
is_rannotate = (strcmp(command_name, "rannotate") == 0);
is_rannotate = (strcmp(cvs_cmd_name, "rannotate") == 0);
if (argc == -1)
usage (annotate_usage);
@ -224,14 +224,12 @@ rannotate_proc (argc, argv, xwhere, mwhere, mfile, shorten, local, mname, msg)
free (repository);
return (1);
}
free (repository);
/* End section which is identical to patch_proc. */
if (force_tag_match && tag != NULL)
which = W_REPOS | W_ATTIC;
else
which = W_REPOS;
repository = NULL;
}
else
{
@ -249,7 +247,11 @@ rannotate_proc (argc, argv, xwhere, mwhere, mfile, shorten, local, mname, msg)
err = start_recursion (annotate_fileproc, (FILESDONEPROC) NULL,
(DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
argc - 1, argv + 1, local, which, 0, CVS_LOCK_READ,
where, 1);
where, 1, repository);
if ( which & W_REPOS )
free ( repository );
if ( where != NULL )
free (where);
return err;
}

View File

@ -119,6 +119,7 @@ extern struct buffer *packetizing_buffer_initialize
PROTO((struct buffer *, int (*) (void *, const char *, char *, int),
int (*) (void *, const char *, char *, int, int *), void *,
void (*) (struct buffer *)));
extern int buf_empty PROTO((struct buffer *));
extern int buf_empty_p PROTO((struct buffer *));
extern void buf_output PROTO((struct buffer *, const char *, int));
extern void buf_output0 PROTO((struct buffer *, const char *));

View File

@ -15,15 +15,15 @@
* Returns non-zero on error.
*/
#include <assert.h>
#include "cvs.h"
#include "fileattr.h"
#include "edit.h"
int
Checkin (type, finfo, rcs, rev, tag, options, message)
Checkin (type, finfo, rev, tag, options, message)
int type;
struct file_info *finfo;
char *rcs;
char *rev;
char *tag;
char *options;
@ -53,10 +53,15 @@ Checkin (type, finfo, rcs, rev, tag, options, message)
}
}
if (finfo->rcs == NULL)
finfo->rcs = RCS_parse (finfo->file, finfo->repository);
/* There use to be a check for finfo->rcs == NULL here and then a
* call to RCS_parse when necessary, but Checkin() isn't called
* if the RCS file hasn't already been parsed in one of the
* check functions.
*/
assert (finfo->rcs != NULL);
switch (RCS_checkin (finfo->rcs, NULL, message, rev, RCS_FLAGS_KEEPFILE))
switch (RCS_checkin (finfo->rcs, finfo->file, message, rev,
RCS_FLAGS_KEEPFILE))
{
case 0: /* everything normal */
@ -78,11 +83,12 @@ Checkin (type, finfo, rcs, rev, tag, options, message)
call RCS_checkout here, compare the resulting files
using xcmp, and rename if necessary. I think this
should be fixed in RCS_cmp_file. */
if ((! preserve_perms
&& options != NULL
&& (strcmp (options, "-ko") == 0
|| strcmp (options, "-kb") == 0))
|| RCS_cmp_file (finfo->rcs, rev, options, finfo->file) == 0)
if( ( ! preserve_perms
&& options != NULL
&& ( strcmp( options, "-ko" ) == 0
|| strcmp( options, "-kb" ) == 0 ) )
|| RCS_cmp_file( finfo->rcs, rev, (char **)NULL, (char *)NULL,
options, finfo->file ) == 0 )
{
/* The existing file is correct. We don't have to do
anything. */
@ -176,5 +182,5 @@ Checkin (type, finfo, rcs, rev, tag, options, message)
mark_up_to_date (finfo->file);
freevers_ts (&vers);
return (0);
return 0;
}

View File

@ -266,7 +266,7 @@ Classify_File (finfo, tag, date, options, force_tag_match, aflag, versp,
* There is no user file, so note that it was lost and
* extract a new version
*/
/* Comparing the command_name against "update", in
/* Comparing the cvs_cmd_name against "update", in
addition to being an ugly way to operate, means
that this message does not get printed by the
server. That might be considered just a straight
@ -274,7 +274,7 @@ Classify_File (finfo, tag, date, options, force_tag_match, aflag, versp,
gets hit when a patch fails and the client fetches
a file. I'm not sure there is currently any way
for the server to distinguish those two cases. */
if (strcmp (command_name, "update") == 0)
if (strcmp (cvs_cmd_name, "update") == 0)
if (!really_quiet)
error (0, 0, "warning: %s was lost", finfo->fullname);
ret = T_CHECKOUT;
@ -344,7 +344,7 @@ Classify_File (finfo, tag, date, options, force_tag_match, aflag, versp,
/* See comment at other "update" compare, for more
thoughts on this comparison. */
if (strcmp (command_name, "update") == 0)
if (strcmp (cvs_cmd_name, "update") == 0)
if (!really_quiet)
error (0, 0, "warning: %s was lost", finfo->fullname);
ret = T_CHECKOUT;

View File

@ -60,6 +60,8 @@ extern int client_prune_dirs;
# ifdef AUTH_CLIENT_SUPPORT
extern int use_authenticating_server;
# endif /* AUTH_CLIENT_SUPPORT */
# if defined (AUTH_CLIENT_SUPPORT) || defined (HAVE_GSSAPI)
void connect_to_pserver PROTO ((cvsroot_t *,
struct buffer **,
struct buffer **,
@ -67,7 +69,7 @@ void connect_to_pserver PROTO ((cvsroot_t *,
# ifndef CVS_AUTH_PORT
# define CVS_AUTH_PORT 2401
# endif /* CVS_AUTH_PORT */
# endif /* AUTH_CLIENT_SUPPORT */
# endif /* (AUTH_CLIENT_SUPPORT) || defined (HAVE_GSSAPI) */
# if HAVE_KERBEROS
# ifndef CVS_PORT
@ -75,16 +77,8 @@ void connect_to_pserver PROTO ((cvsroot_t *,
# endif
# endif /* HAVE_KERBEROS */
# if defined (AUTH_SERVER_SUPPORT) || (defined (SERVER_SUPPORT) && defined (HAVE_GSSAPI))
extern void pserver_authenticate_connection PROTO ((void));
# endif
# if defined (SERVER_SUPPORT) && defined (HAVE_KERBEROS)
extern void kserver_authenticate_connection PROTO ((void));
# endif
/* Talking to the server. */
void send_to_server PROTO((char *str, size_t len));
void send_to_server PROTO((const char *str, size_t len));
void read_from_server PROTO((char *buf, size_t len));
/* Internal functions that handle client communication to server, etc. */
@ -131,7 +125,8 @@ send_arg PROTO((char *string));
void
send_option_string PROTO((char *string));
extern void send_a_repository PROTO ((char *, char *, char *));
extern void send_a_repository PROTO ((const char *, const char *,
const char *));
#endif /* CLIENT_SUPPORT */
@ -209,5 +204,6 @@ extern int client_process_import_file
int targc, char *targv[], char *repository, int all_files_binary,
int modtime));
extern void client_import_done PROTO((void));
extern void client_notify PROTO((char *, char *, char *, int, char *));
extern void client_notify PROTO((const char *, const char *, const char *, int,
const char *));
#endif /* CLIENT_SUPPORT */

View File

@ -24,11 +24,11 @@
int
Create_Admin (dir, update_dir, repository, tag, date, nonbranch, warn,
dotemplate)
char *dir;
char *update_dir;
char *repository;
char *tag;
char *date;
const char *dir;
const char *update_dir;
const char *repository;
const char *tag;
const char *date;
int nonbranch;
int warn;
int dotemplate;

View File

@ -48,16 +48,17 @@ DEFAULT_ORGANIZATION="net"
## # Newer config information?
## [ -f ${GNATS_ROOT}/gnats-adm/config ] && . ${GNATS_ROOT}/gnats-adm/config
# Hack mktemp on systems that don't have it.
@MKTEMP_SH_FUNCTION@
MKTEMP="@MKTEMP@"
# What mailer to use. This must come after the config file, since it is
# host-dependent.
if [ -f /usr/sbin/sendmail ]; then
MAIL_AGENT="/usr/sbin/sendmail -oi -t"
else
MAIL_AGENT="/usr/lib/sendmail -oi -t"
fi
SENDMAIL="@SENDMAIL@"
MAIL_AGENT="$SENDMAIL -oi -t"
MAILER=`echo $MAIL_AGENT | sed -e 's, .*,,'`
if [ ! -f "$MAILER" ] ; then
echo "$COMMAND: Cannot file mail program \"$MAILER\"."
echo "$COMMAND: Cannot find mail program \"$MAILER\"."
echo "$COMMAND: Please fix the MAIL_AGENT entry in the $COMMAND file."
exit 1
fi
@ -85,9 +86,9 @@ fi
[ -z "$TMPDIR" ] && TMPDIR=/tmp
TEMP=$TMPDIR/p$$
BAD=$TMPDIR/pbad$$
REF=$TMPDIR/pf$$
TEMP="`$MKTEMP $TMPDIR/p.XXXXXX`"
BAD="`$MKTEMP $TMPDIR/pbad.XXXXXX`"
REF="`$MKTEMP $TMPDIR/pf.XXXXXX`"
if [ -z "$LOGNAME" -a -n "$USER" ]; then
LOGNAME=$USER

View File

@ -30,7 +30,7 @@ void
read_cvsrc (argc, argv, cmdname)
int *argc;
char ***argv;
char *cmdname;
const char *cmdname;
{
char *homedir;
char *homeinit;

View File

@ -36,14 +36,17 @@ onoff_fileproc (callerdat, finfo)
return 0;
}
static int onoff_filesdoneproc PROTO ((void *, int, char *, char *, List *));
static int onoff_filesdoneproc PROTO ((void *, int, const char *, const char *,
List *));
static int
onoff_filesdoneproc (callerdat, err, repository, update_dir, entries)
void *callerdat;
int err;
char *repository;
char *update_dir;
const char *repository;
const char *update_dir;
List *entries;
{
if (setting_default)
@ -104,7 +107,7 @@ watch_onoff (argc, argv)
err = start_recursion (onoff_fileproc, onoff_filesdoneproc,
(DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
argc, argv, local, W_LOCAL, 0, CVS_LOCK_NONE,
(char *)NULL, 0);
(char *) NULL, 0, (char *) NULL);
Lock_Cleanup ();
return err;
@ -238,7 +241,7 @@ send_notifications (argc, argv, local)
notifications stay in CVSADM_NOTIFY to be sent next time. */
if (current_parsed_root->isremote)
{
if (strcmp (command_name, "release") != 0)
if (strcmp (cvs_cmd_name, "release") != 0)
{
start_server ();
ign_setup ();
@ -247,10 +250,10 @@ send_notifications (argc, argv, local)
err += start_recursion (dummy_fileproc, (FILESDONEPROC) NULL,
(DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
0);
0, (char *) NULL);
send_to_server ("noop\012", 0);
if (strcmp (command_name, "release") == 0)
if (strcmp (cvs_cmd_name, "release") == 0)
err += get_server_responses ();
else
err += get_responses_and_close ();
@ -264,7 +267,7 @@ send_notifications (argc, argv, local)
err += start_recursion (ncheck_fileproc, (FILESDONEPROC) NULL,
(DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
0);
0, (char *) NULL);
Lock_Cleanup ();
}
return err;
@ -443,8 +446,8 @@ edit (argc, argv)
repository. */
err = start_recursion (edit_fileproc, (FILESDONEPROC) NULL,
(DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
0);
argc, argv, local, W_LOCAL, 0, 0, (char *) NULL,
0, (char *) NULL);
err += send_notifications (argc, argv, local);
@ -534,7 +537,7 @@ unedit_fileproc (callerdat, finfo)
now. */
if (node != NULL)
{
entdata = (Entnode *) node->data;
entdata = node->data;
if (baserev == NULL)
{
/* This can only happen if the CVS/Baserev file got
@ -613,7 +616,7 @@ unedit (argc, argv)
err = start_recursion (unedit_fileproc, (FILESDONEPROC) NULL,
(DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
0);
0, (char *) NULL);
err += send_notifications (argc, argv, local);
@ -622,7 +625,7 @@ unedit (argc, argv)
void
mark_up_to_date (file)
char *file;
const char *file;
{
char *base;
@ -637,12 +640,13 @@ mark_up_to_date (file)
free (base);
}
void
editor_set (filename, editor, val)
char *filename;
char *editor;
char *val;
const char *filename;
const char *editor;
const char *val;
{
char *edlist;
char *newlist;
@ -663,32 +667,36 @@ editor_set (filename, editor, val)
struct notify_proc_args {
/* What kind of notification, "edit", "tedit", etc. */
char *type;
const char *type;
/* User who is running the command which causes notification. */
char *who;
const char *who;
/* User to be notified. */
char *notifyee;
const char *notifyee;
/* File. */
char *file;
const char *file;
};
/* Pass as a static until we get around to fixing Parse_Info to pass along
a void * where we can stash it. */
static struct notify_proc_args *notify_args;
static int notify_proc PROTO ((char *repository, char *filter));
static int notify_proc PROTO ((const char *repository, const char *filter));
static int
notify_proc (repository, filter)
char *repository;
char *filter;
const char *repository;
const char *filter;
{
FILE *pipefp;
char *prog;
char *expanded_prog;
char *p;
const char *p;
char *q;
char *srepos;
const char *srepos;
struct notify_proc_args *args = notify_args;
srepos = Short_Repository (repository);
@ -751,11 +759,11 @@ notify_proc (repository, filter)
void
notify_do (type, filename, who, val, watches, repository)
int type;
char *filename;
char *who;
char *val;
char *watches;
char *repository;
const char *filename;
const char *who;
const char *val;
const char *watches;
const char *repository;
{
static struct addremove_args blank;
struct addremove_args args;
@ -919,9 +927,11 @@ notify_do (type, filename, who, val, watches, repository)
if (args.notifyee == NULL)
{
args.notifyee = xmalloc (endp - p + 1);
strncpy (args.notifyee, p, endp - p);
args.notifyee[endp - p] = '\0';
char *tmp;
tmp = xmalloc (endp - p + 1);
strncpy (tmp, p, endp - p);
tmp[endp - p] = '\0';
args.notifyee = tmp;
}
notify_args = &args;
@ -930,7 +940,12 @@ notify_do (type, filename, who, val, watches, repository)
args.file = filename;
(void) Parse_Info (CVSROOTADM_NOTIFY, repository, notify_proc, 1);
free (args.notifyee);
/* It's okay to cast out the const for the free() below since we
* just allocated this a few lines above. The const was for
* everybody else.
*/
free ((char *)args.notifyee);
}
p = nextp;
@ -969,8 +984,8 @@ notify_do (type, filename, who, val, watches, repository)
/* Check and send notifications. This is only for the client. */
void
notify_check (repository, update_dir)
char *repository;
char *update_dir;
const char *repository;
const char *update_dir;
{
FILE *fp;
char *line = NULL;
@ -1136,6 +1151,6 @@ editors (argc, argv)
return start_recursion (editors_fileproc, (FILESDONEPROC) NULL,
(DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
argc, argv, local, W_LOCAL, 0, 1, (char *)NULL,
0);
argc, argv, local, W_LOCAL, 0, 1, (char *) NULL,
0, (char *) NULL);
}

View File

@ -17,7 +17,8 @@ extern int watch_off PROTO ((int argc, char **argv));
/* Check to see if any notifications are sitting around in need of being
sent. These are the notifications stored in CVSADM_NOTIFY (edit,unedit);
commit calls notify_do directly. */
extern void notify_check PROTO ((char *repository, char *update_dir));
extern void notify_check PROTO ((const char *repository,
const char *update_dir));
#endif /* CLIENT_SUPPORT */
/* Issue a notification for file FILENAME. TYPE is 'E' for edit, 'U'
@ -25,14 +26,16 @@ extern void notify_check PROTO ((char *repository, char *update_dir));
For TYPE 'E', VAL is the time+host+directory data which goes in
_editors, and WATCHES is zero or more of E,U,C, in that order, to specify
what kinds of temporary watches to set. */
extern void notify_do PROTO ((int type, char *filename, char *who,
char *val, char *watches, char *repository));
extern void notify_do PROTO ((int type, const char *filename, const char *who,
const char *val, const char *watches,
const char *repository));
/* Set attributes to reflect the fact that EDITOR is editing FILENAME.
VAL is time+host+directory, or NULL if we are to say that EDITOR is
*not* editing FILENAME. */
extern void editor_set PROTO ((char *filename, char *editor, char *val));
extern void editor_set PROTO ((const char *filename, const char *editor,
const char *val));
/* Take note of the fact that FILE is up to date (this munges CVS/Base;
processing of CVS/Entries is done separately). */
extern void mark_up_to_date PROTO ((char *file));
extern void mark_up_to_date PROTO ((const char *file));

View File

@ -128,12 +128,12 @@ error (status, errnum, message, va_alist)
char buf[100];
cvs_outerr (program_name, 0);
if (command_name && *command_name)
if (cvs_cmd_name && *cvs_cmd_name)
{
cvs_outerr (" ", 1);
if (status != 0)
cvs_outerr ("[", 1);
cvs_outerr (command_name, 0);
cvs_outerr (cvs_cmd_name, 0);
if (status != 0)
cvs_outerr (" aborted]", 0);
}

View File

@ -15,9 +15,11 @@
#include "cvs.h"
#include <sys/types.h>
static char *expand_variable PROTO((char *env, char *file, int line));
static char *expand_variable PROTO((const char *env, const char *file,
int line));
/* User variables. */
List *variable_list = NULL;
@ -79,7 +81,9 @@ variable_set (nameval)
free (name);
}
}
/* This routine will expand the pathname to account for ~ and $
characters as described above. Returns a pointer to a newly
malloc'd string. If an error occurs, an error message is printed
@ -89,11 +93,11 @@ variable_set (nameval)
known. */
char *
expand_path (name, file, line)
char *name;
char *file;
const char *name;
const char *file;
int line;
{
char *s;
const char *s;
char *d;
char *mybuf = NULL;
@ -179,8 +183,9 @@ expand_path (name, file, line)
if (*s++ == '~')
{
char *t;
char *p=s;
if (*s=='/' || *s==0)
char *p, *pstart;
pstart = p = xstrdup (s);
if (*pstart=='/' || *pstart==0)
t = get_homedir ();
else
{
@ -201,14 +206,14 @@ expand_path (name, file, line)
for (; *p!='/' && *p; p++)
;
*p = 0;
ps = getpwnam (s);
ps = getpwnam (pstart);
if (ps == 0)
{
if (line != 0)
error (0, 0, "%s:%d: no such user %s",
file, line, s);
file, line, pstart);
else
error (0, 0, "%s: no such user %s", file, s);
error (0, 0, "%s: no such user %s", file, pstart);
return NULL;
}
t = ps->pw_dir;
@ -227,9 +232,8 @@ expand_path (name, file, line)
d = buf + doff;
}
--d;
if (*p == 0)
*p = '/'; /* always add / */
s=p;
s+=p-pstart;
free (pstart);
}
else
--s;
@ -267,12 +271,12 @@ expand_path (name, file, line)
static char *
expand_variable (name, file, line)
char *name;
char *file;
const char *name;
const char *file;
int line;
{
if (strcmp (name, CVSROOT_ENV) == 0)
return current_parsed_root->original;
return current_parsed_root->directory;
else if (strcmp (name, "RCSBIN") == 0)
{
error (0, 0, "RCSBIN internal variable is no longer supported");

View File

@ -43,7 +43,7 @@ static struct unrecog *unrecog_head;
no open(), no nothing. */
void
fileattr_startdir (repos)
char *repos;
const char *repos;
{
assert (fileattr_stored_repos == NULL);
fileattr_stored_repos = xstrdup (repos);

View File

@ -56,7 +56,7 @@
/* Prepare for a new directory with repository REPOS. If REPOS is NULL,
then prepare for a "non-directory"; the caller can call fileattr_write
and fileattr_free, but must not call fileattr_get or fileattr_set. */
extern void fileattr_startdir PROTO ((char *repos));
extern void fileattr_startdir PROTO ((const char *repos));
/* Get the attribute ATTRNAME for file FILENAME. The return value
points into memory managed by the fileattr_* routines, should not

View File

@ -33,11 +33,10 @@ add_entries_proc (node, closure)
Node *node;
void *closure;
{
Entnode *entnode;
Node *fnode;
List *filelist = (List *) closure;
List *filelist = closure;
Entnode *entnode = node->data;
entnode = (Entnode *) node->data;
if (entnode->type != ENT_FILE)
return (0);
@ -127,11 +126,10 @@ add_subdir_proc (p, closure)
Node *p;
void *closure;
{
List *dirlist = (List *) closure;
Entnode *entnode;
List *dirlist = closure;
Entnode *entnode = p->data;
Node *dnode;
entnode = (Entnode *) p->data;
if (entnode->type != ENT_SUBDIR)
return 0;
@ -189,7 +187,7 @@ Find_Directories (repository, which, entries)
tmpentries = NULL;
if (tmpentries != NULL)
sdtp = (struct stickydirtag *) tmpentries->list->data;
sdtp = tmpentries->list->data;
/* If we do have an entries list, then if sdtp is NULL, or if
sdtp->subdirs is nonzero, all subdirectory information is

View File

@ -87,7 +87,7 @@ lookup_file_by_inode (filepath)
hp = getnode ();
hp->type = NT_UNKNOWN;
hp->key = inodestr;
hp->data = (char *) getlist();
hp->data = getlist();
hp->delproc = dellist;
(void) addnode (hardlist, hp);
}
@ -96,14 +96,14 @@ lookup_file_by_inode (filepath)
free (inodestr);
}
p = findnode ((List *) hp->data, filepath);
p = findnode (hp->data, filepath);
if (p == NULL)
{
p = getnode();
p->type = NT_UNKNOWN;
p->key = xstrdup (filepath);
p->data = NULL;
(void) addnode ((List *) hp->data, p);
(void) addnode (hp->data, p);
}
return p;
@ -143,8 +143,8 @@ update_hardlink_info (file)
}
if (n->data == NULL)
n->data = (char *) xmalloc (sizeof (struct hardlink_info));
hlinfo = (struct hardlink_info *) n->data;
n->data = xmalloc (sizeof (struct hardlink_info));
hlinfo = n->data;
hlinfo->status = T_UPTODATE;
hlinfo->checked_out = 1;
}
@ -197,10 +197,10 @@ list_linked_files_on_disk (file)
/* Make sure the files linked to this inode are sorted. */
n = findnode (hardlist, inodestr);
sortlist ((List *) n->data, fsortcmp);
sortlist (n->data, fsortcmp);
free (inodestr);
return (List *) n->data;
return n->data;
}
/* Compare the files in the `key' fields of two lists, returning 1 if
@ -292,7 +292,7 @@ find_checkedout_proc (node, data)
return 0;
}
hlinfo = (struct hardlink_info *) link->data;
hlinfo = link->data;
if (hlinfo->checked_out)
{
/* This file has been checked out recently, so it's safe to

View File

@ -195,7 +195,7 @@ freenode_mem (p)
free (p->key);
/* to be safe, re-initialize these */
p->key = p->data = (char *) NULL;
p->key = p->data = NULL;
p->delproc = (void (*) ()) NULL;
}
@ -402,6 +402,9 @@ sortlist (list, comp)
Node *head, *remain, *p, **array;
int i, n;
if (list == NULL)
return;
/* save the old first element of the list */
head = list->list;
remain = head->next;
@ -488,8 +491,10 @@ printnode (node, closure)
return(0);
}
(void) printf("Node at 0x%p: type = %s, key = 0x%p = \"%s\", data = 0x%p, next = 0x%p, prev = 0x%p\n",
node, nodetypestring(node->type), node->key, node->key, node->data, node->next, node->prev);
(void) printf("Node at %p: type = %s, key = %p = \"%s\", data = %p, next = %p, prev = %p\n",
(void *)node, nodetypestring(node->type),
(void *)node->key, node->key, node->data,
(void *)node->next, (void *)node->prev);
return(0);
}
@ -509,8 +514,8 @@ printlist (list)
return;
}
(void) printf("List at 0x%p: list = 0x%p, HASHSIZE = %d, next = 0x%p\n",
list, list->list, HASHSIZE, list->next);
(void) printf("List at %p: list = %p, HASHSIZE = %d, next = %p\n",
(void *)list, (void *)list->list, HASHSIZE, (void *)list->next);
(void) walklist(list, printnode, NULL);

View File

@ -30,7 +30,7 @@ struct node
struct node *hashnext;
struct node *hashprev;
char *key;
char *data;
void *data;
void (*delproc) ();
};
typedef struct node Node;

View File

@ -21,6 +21,7 @@
* F "Release" cmd.
* W "Update" cmd - No User file, Remove from Entries file.
* U "Update" cmd - File was checked out over User file.
* P "Update" cmd - User file was patched.
* G "Update" cmd - File was merged successfully.
* C "Update" cmd - File was merged and shows overlaps.
* M "Commit" cmd - "Modified" file.
@ -34,9 +35,9 @@
*
* CurDir The directory where the action occurred. This should be the
* absolute path of the directory which is at the same level as
* the "Repository" field (for W,U,G,C & M,A,R).
* the "Repository" field (for W,U,P,G,C & M,A,R).
*
* Repository For record types [W,U,G,C,M,A,R] this field holds the
* Repository For record types [W,U,P,G,C,M,A,R] this field holds the
* repository read from the administrative data where the
* command was typed.
* T "A" --> New Tag, "D" --> Delete Tag
@ -48,11 +49,11 @@
* O,E The Tag or Date, if specified, else "" (null field).
* F "" (null field)
* W The Tag or Date, if specified, else "" (null field).
* U The Revision checked out over the User file.
* U,P The Revision checked out over the User file.
* G,C The Revision(s) involved in merge.
* M,A,R RCS Revision affected.
*
* argument The module (for [TOEUF]) or file (for [WUGCMAR]) affected.
* argument The module (for [TOEF]) or file (for [WUPGCMAR]) affected.
*
*
*** Report categories: "User" and "Since" modifiers apply to all reports.
@ -60,7 +61,7 @@
*
* Extract list of record types
*
* -e, -x [TOEFWUGCMAR]
* -e, -x [TOEFWUPGCMAR]
*
* Extracted records are simply printed, No analysis is performed.
* All "field" modifiers apply. -e chooses all types.
@ -93,7 +94,7 @@
* modules are remembered. Only records matching exactly those
* files and repositories are shown. Sorting by "module", then
* filename, is implied. If -l ("last modified") is specified,
* then "update" records (types WUCG), tag and release records
* then "update" records (types WUPCG), tag and release records
* are ignored and the last (by date) "modified" record.
*
* TAG history
@ -170,7 +171,7 @@
* cvs hi -e -u user
*
*** Dump (eXtract) specified record types
* cvs hi -x [TOFWUGCMAR]
* cvs hi -x [TOEFWUPGCMAR]
*
*
* FUTURE: J[Join], I[Import] (Not currently implemented.)
@ -178,6 +179,7 @@
*/
#include "cvs.h"
#include "history.h"
#include "savecwd.h"
static struct hrec
@ -208,7 +210,6 @@ static void save_file PROTO((char *dir, char *name, char *module));
static void save_module PROTO((char *module));
static void save_user PROTO((char *name));
#define ALL_REC_TYPES "TOEFWUCGMAR"
#define USER_INCREMENT 2
#define FILE_INCREMENT 128
#define MODULE_INCREMENT 5
@ -217,6 +218,7 @@ static void save_user PROTO((char *name));
static short report_count;
static short extract;
static short extract_all;
static short v_checkout;
static short modified;
static short tag_report;
@ -234,7 +236,7 @@ static short tz_local;
static time_t tz_seconds_east_of_GMT;
static char *tz_name = "+0000";
char *logHistory = ALL_REC_TYPES;
char *logHistory = ALL_HISTORY_REC_TYPES;
/* -r, -t, or -b options, malloc'd. These are "" if the option in
question is not specified or is overridden by another option. The
@ -290,7 +292,7 @@ static const char *const history_usg[] =
" -c Committed (Modified) files\n",
" -o Checked out modules\n",
" -m <module> Look for specified module (repeatable)\n",
" -x [TOEFWUCGMAR] Extract by record type\n",
" -x [" ALL_HISTORY_REC_TYPES "] Extract by record type\n",
" -e Everything (same as -x, but all record types)\n",
" Flags:\n",
" -a All users (Default is self)\n",
@ -399,9 +401,9 @@ history (argc, argv)
break;
case 'e':
report_count++;
extract++;
extract_all++;
free (rec_types);
rec_types = xstrdup (ALL_REC_TYPES);
rec_types = xstrdup (ALL_HISTORY_REC_TYPES);
break;
case 'l': /* Find Last file record */
last_entry = 1;
@ -482,7 +484,7 @@ history (argc, argv)
char *cp;
for (cp = optarg; *cp; cp++)
if (!strchr (ALL_REC_TYPES, *cp))
if (!strchr (ALL_HISTORY_REC_TYPES, *cp))
error (1, 0, "%c is not a valid report type", *cp);
}
free (rec_types);
@ -584,6 +586,8 @@ history (argc, argv)
option_with_arg ("-t", since_tag);
for (mod = user_list; mod < &user_list[user_count]; ++mod)
option_with_arg ("-u", *mod);
if (extract_all)
send_arg("-e");
if (extract)
option_with_arg ("-x", rec_types);
option_with_arg ("-z", tz_name);
@ -607,7 +611,7 @@ history (argc, argv)
(void) strcat (rec_types, "T");
}
}
else if (extract)
else if (extract || extract_all)
{
if (user_list)
user_sort++;
@ -636,7 +640,7 @@ history (argc, argv)
else if (module_report)
{
free (rec_types);
rec_types = xstrdup (last_entry ? "OMAR" : ALL_REC_TYPES);
rec_types = xstrdup (last_entry ? "OMAR" : ALL_HISTORY_REC_TYPES);
module_sort++;
repos_sort++;
file_sort++;
@ -697,22 +701,25 @@ history (argc, argv)
void
history_write (type, update_dir, revs, name, repository)
int type;
char *update_dir;
char *revs;
char *name;
char *repository;
const char *update_dir;
const char *revs;
const char *name;
const char *repository;
{
char *fname;
char *workdir;
char *username = getcaller ();
int fd;
char *line;
char *slash = "", *cp, *cp2, *repos;
char *slash = "", *cp;
const char *cp2, *repos;
int i;
static char *tilde = "";
static char *PrCurDir = NULL;
if (logoff) /* History is turned off by cmd line switch */
if (logoff) /* History is turned off by noexec or
* readonlyfs.
*/
return;
if ( strchr(logHistory, type) == NULL )
return;
@ -722,6 +729,15 @@ history_write (type, update_dir, revs, name, repository)
CVSROOTADM, CVSROOTADM_HISTORY);
/* turn off history logging if the history file does not exist */
/* FIXME: This should check for write permissions instead. This way,
* O_CREATE could be added back into the call to open() below and
* there would be no race condition involved in log rotation.
*
* Note that the new method of turning off logging would be either via
* the CVSROOT/config file (probably the quicker method, but would need
* to be added, or at least checked for, too) or by creating a dummy
* history file with 0444 permissions.
*/
if (!isfile (fname))
{
logoff = 1;
@ -733,7 +749,7 @@ history_write (type, update_dir, revs, name, repository)
CLIENT_SERVER_STR, fname);
if (noexec)
goto out;
fd = CVS_OPEN (fname, O_WRONLY | O_APPEND | O_CREAT | OPEN_BINARY, 0666);
fd = CVS_OPEN (fname, O_WRONLY | O_APPEND | OPEN_BINARY, 0666);
if (fd < 0)
{
if (! really_quiet)
@ -1524,6 +1540,7 @@ report_hrecs ()
break;
case 'W':
case 'U':
case 'P':
case 'C':
case 'G':
case 'M':

13
contrib/cvs/src/history.h Normal file
View File

@ -0,0 +1,13 @@
/*
* Copyright (c) 2003, Derek Price, Ximbiot <http://ximbiot.com>,
* and the Free Software Foundation
*
* 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.
*
* This is the header file for definitions and functions shared by history.c
* with other portions of CVS.
*/
#define ALL_HISTORY_REC_TYPES "TOEFWUPCGMAR"

View File

@ -165,6 +165,8 @@ ign_add_file (file, hold)
free (line);
}
/* Parse a line of space-separated wildcards and add them to the list. */
void
ign_add (ign, hold)
@ -183,6 +185,16 @@ ign_add (ign, hold)
if (isspace ((unsigned char) *ign))
continue;
/* If we have used up all the space, add some more. Do this before
processing `!', since an "empty" list still contains the `CVS'
entry. */
if (ign_count >= ign_size)
{
ign_size += IGN_GROW;
ign_list = (char **) xrealloc ((char *) ign_list,
(ign_size + 1) * sizeof (char *));
}
/*
* if we find a single character !, we must re-set the ignore list
* (saving it if necessary). We also catch * as a special case in a
@ -198,8 +210,10 @@ ign_add (ign, hold)
for (i = 0; i < ign_count; i++)
free (ign_list[i]);
ign_count = 0;
ign_list[0] = NULL;
ign_count = 1;
/* Always ignore the "CVS" directory. */
ign_list[0] = xstrdup("CVS");
ign_list[1] = NULL;
/* if we are doing a '!', continue; otherwise add the '*' */
if (*ign == '!')
@ -223,20 +237,14 @@ ign_add (ign, hold)
for (i = 0; i < ign_count; i++)
s_ign_list[i] = ign_list[i];
s_ign_count = ign_count;
ign_count = 0;
ign_list[0] = NULL;
ign_count = 1;
/* Always ignore the "CVS" directory. */
ign_list[0] = xstrdup ("CVS");
ign_list[1] = NULL;
continue;
}
}
/* If we have used up all the space, add some more */
if (ign_count >= ign_size)
{
ign_size += IGN_GROW;
ign_list = (char **) xrealloc ((char *) ign_list,
(ign_size + 1) * sizeof (char *));
}
/* find the end of this token */
for (mark = ign; *mark && !isspace ((unsigned char) *mark); mark++)
/* do nothing */ ;
@ -255,12 +263,11 @@ ign_add (ign, hold)
}
}
/* Set to 1 if filenames should be matched in a case-insensitive
fashion. Note that, contrary to the name and placement in ignore.c,
this is no longer just for ignore patterns. */
int ign_case;
/* Return 1 if the given filename should be ignored by update or import. */
/* Return true if the given filename should be ignored by update or import,
* else return false.
*/
int
ign_name (name)
char *name;
@ -268,47 +275,17 @@ ign_name (name)
char **cpp = ign_list;
if (cpp == NULL)
return (0);
if (ign_case)
{
/* We do a case-insensitive match by calling fnmatch on copies of
the pattern and the name which have been converted to
lowercase. FIXME: would be much cleaner to just unify this
with the other case-insensitive fnmatch stuff (FOLD_FN_CHAR
in lib/fnmatch.c; os2_fnmatch in emx/system.c). */
char *name_lower;
char *pat_lower;
char *p;
name_lower = xstrdup (name);
for (p = name_lower; *p != '\0'; ++p)
*p = tolower (*p);
while (*cpp)
{
pat_lower = xstrdup (*cpp++);
for (p = pat_lower; *p != '\0'; ++p)
*p = tolower (*p);
if (CVS_FNMATCH (pat_lower, name_lower, 0) == 0)
goto matched;
free (pat_lower);
}
free (name_lower);
return 0;
matched:
free (name_lower);
free (pat_lower);
return 1;
}
else
{
while (*cpp)
if (CVS_FNMATCH (*cpp++, name, 0) == 0)
return 1;
return 0;
}
while (*cpp)
if (CVS_FNMATCH (*cpp++, name, 0) == 0)
return 1;
return 0;
}
/* FIXME: This list of dirs to ignore stuff seems not to be used.
Really? send_dirent_proc and update_dirent_proc both call
ignore_directory and do_module calls ign_dir_add. No doubt could
@ -340,7 +317,7 @@ ign_dir_add (name)
int
ignore_directory (name)
char *name;
const char *name;
{
int i;
@ -356,7 +333,9 @@ ignore_directory (name)
return 0;
}
/*
* Process the current directory, looking for files not in ILIST and
* not on the global ignore list for this directory. If we find one,
@ -369,7 +348,7 @@ void
ignore_files (ilist, entries, update_dir, proc)
List *ilist;
List *entries;
char *update_dir;
const char *update_dir;
Ignore_proc proc;
{
int subdirs;
@ -377,7 +356,7 @@ ignore_files (ilist, entries, update_dir, proc)
struct dirent *dp;
struct stat sb;
char *file;
char *xdir;
const char *xdir;
List *files;
Node *p;
@ -386,9 +365,8 @@ ignore_files (ilist, entries, update_dir, proc)
subdirs = 0;
else
{
struct stickydirtag *sdtp;
struct stickydirtag *sdtp = entries->list->data;
sdtp = (struct stickydirtag *) entries->list->data;
subdirs = sdtp == NULL || sdtp->subdirs;
}
@ -451,7 +429,7 @@ ignore_files (ilist, entries, update_dir, proc)
#ifdef DT_DIR
dp->d_type != DT_UNKNOWN ||
#endif
lstat(file, &sb) != -1)
CVS_LSTAT (file, &sb) != -1)
{
if (

View File

@ -115,9 +115,10 @@ struct log_data_and_rcs
static int rlog_proc PROTO((int argc, char **argv, char *xwhere,
char *mwhere, char *mfile, int shorten,
int local_specified, char *mname, char *msg));
static Dtype log_dirproc PROTO ((void *callerdat, char *dir,
char *repository, char *update_dir,
List *entries));
static Dtype log_dirproc PROTO ((void *callerdat, const char *dir,
const char *repository,
const char *update_dir,
List *entries));
static int log_fileproc PROTO ((void *callerdat, struct file_info *finfo));
static struct option_revlist *log_parse_revlist PROTO ((const char *));
static void log_parse_date PROTO ((struct log_data *, const char *));
@ -224,7 +225,7 @@ cvslog (argc, argv)
int local = 0;
struct option_revlist **prl;
is_rlog = (strcmp (command_name, "rlog") == 0);
is_rlog = (strcmp (cvs_cmd_name, "rlog") == 0);
if (argc == -1)
usage (log_usage);
@ -486,39 +487,46 @@ rlog_proc (argc, argv, xwhere, mwhere, mfile, shorten, local, mname, msg)
if (is_rlog)
{
repository = xmalloc (strlen (current_parsed_root->directory) + strlen (argv[0])
repository = xmalloc (strlen (current_parsed_root->directory)
+ strlen (argv[0])
+ (mfile == NULL ? 0 : strlen (mfile) + 1) + 2);
(void) sprintf (repository, "%s/%s", current_parsed_root->directory, argv[0]);
where = xmalloc (strlen (argv[0]) + (mfile == NULL ? 0 : strlen (mfile) + 1)
(void)sprintf (repository, "%s/%s",
current_parsed_root->directory, argv[0]);
where = xmalloc (strlen (argv[0])
+ (mfile == NULL ? 0 : strlen (mfile) + 1)
+ 1);
(void) strcpy (where, argv[0]);
/* if mfile isn't null, we need to set up to do only part of the module */
/* If mfile isn't null, we need to set up to do only part of theu
* module.
*/
if (mfile != NULL)
{
char *cp;
char *path;
/* if the portion of the module is a path, put the dir part on repos */
/* If the portion of the module is a path, put the dir part on
* repos.
*/
if ((cp = strrchr (mfile, '/')) != NULL)
{
*cp = '\0';
(void) strcat (repository, "/");
(void) strcat (repository, mfile);
(void) strcat (where, "/");
(void) strcat (where, mfile);
(void)strcat (repository, "/");
(void)strcat (repository, mfile);
(void)strcat (where, "/");
(void)strcat (where, mfile);
mfile = cp + 1;
}
/* take care of the rest */
path = xmalloc (strlen (repository) + strlen (mfile) + 5);
(void) sprintf (path, "%s/%s", repository, mfile);
(void)sprintf (path, "%s/%s", repository, mfile);
if (isdir (path))
{
/* directory means repository gets the dir tacked on */
(void) strcpy (repository, path);
(void) strcat (where, "/");
(void) strcat (where, mfile);
(void)strcpy (repository, path);
(void)strcat (where, "/");
(void)strcat (where, mfile);
}
else
{
@ -531,19 +539,20 @@ rlog_proc (argc, argv, xwhere, mwhere, mfile, shorten, local, mname, msg)
}
/* cd to the starting repository */
if ( CVS_CHDIR (repository) < 0)
if (CVS_CHDIR (repository) < 0)
{
error (0, errno, "cannot chdir to %s", repository);
free (repository);
return (1);
free (where);
return 1;
}
free (repository);
/* End section which is identical to patch_proc. */
which = W_REPOS | W_ATTIC;
}
else
{
repository = NULL;
where = NULL;
which = W_LOCAL | W_REPOS | W_ATTIC;
}
@ -551,15 +560,19 @@ rlog_proc (argc, argv, xwhere, mwhere, mfile, shorten, local, mname, msg)
err = start_recursion (log_fileproc, (FILESDONEPROC) NULL, log_dirproc,
(DIRLEAVEPROC) NULL, (void *) &log_data,
argc - 1, argv + 1, local, which, 0, CVS_LOCK_READ,
where, 1);
where, 1, repository);
if (!(which & W_LOCAL)) free (repository);
if (where) free (where);
return err;
}
/*
* Parse a revision list specification.
*/
static struct option_revlist *
log_parse_revlist (argstring)
const char *argstring;
@ -783,6 +796,8 @@ printlock_proc (lock, foo)
return 0;
}
/*
* Do an rlog on a file
*/
@ -796,7 +811,7 @@ log_fileproc (callerdat, finfo)
int selrev = -1;
RCSNode *rcsfile;
char buf[50];
struct revlist *revlist;
struct revlist *revlist = NULL;
struct log_data_and_rcs log_data_and_rcs;
if ((rcsfile = finfo->rcs) == NULL)
@ -805,22 +820,21 @@ log_fileproc (callerdat, finfo)
p = findnode (finfo->entries, finfo->file);
if (p != NULL)
{
Entnode *e;
e = (Entnode *) p->data;
Entnode *e = p->data;
if (e->version[0] == '0' && e->version[1] == '\0')
{
if (!really_quiet)
error (0, 0, "%s has been added, but not committed",
finfo->file);
return(0);
return 0;
}
}
if (!really_quiet)
error (0, 0, "nothing known about %s", finfo->file);
return (1);
return 1;
}
if (log_data->sup_header || !log_data->nameonly)
@ -833,7 +847,8 @@ log_fileproc (callerdat, finfo)
revisions. */
revlist = log_expand_revlist (rcsfile, log_data->revlist,
log_data->default_branch);
if (log_data->sup_header || (!log_data->header && !log_data->long_header))
if (log_data->sup_header
|| (!log_data->header && !log_data->long_header))
{
log_data_and_rcs.log_data = log_data;
log_data_and_rcs.revlist = revlist;
@ -846,11 +861,15 @@ log_fileproc (callerdat, finfo)
start date for each specific revision. */
if (log_data->singledatelist != NULL)
walklist (rcsfile->versions, log_fix_singledate,
(void *) &log_data_and_rcs);
(void *)&log_data_and_rcs);
selrev = walklist (rcsfile->versions, log_count_print,
(void *) &log_data_and_rcs);
if (log_data->sup_header && selrev == 0) return 0;
(void *)&log_data_and_rcs);
if (log_data->sup_header && selrev == 0)
{
log_free_revlist (revlist);
return 0;
}
}
}
@ -859,6 +878,7 @@ log_fileproc (callerdat, finfo)
{
cvs_output (rcsfile->path, 0);
cvs_output ("\n", 1);
log_free_revlist (revlist);
return 0;
}
@ -915,7 +935,7 @@ log_fileproc (callerdat, finfo)
cvs_output ("\n\t", 2);
cp2 = cp;
while (! isspace ((unsigned char) *cp2) && *cp2 != '\0')
while (!isspace ((unsigned char) *cp2) && *cp2 != '\0')
++cp2;
cvs_output (cp, cp2 - cp);
cp = cp2;
@ -924,7 +944,7 @@ log_fileproc (callerdat, finfo)
}
}
if (! log_data->notags)
if (!log_data->notags)
{
List *syms;
@ -952,14 +972,14 @@ log_fileproc (callerdat, finfo)
cvs_output ("\n", 1);
if (! log_data->header || log_data->long_header)
if (!log_data->header || log_data->long_header)
{
cvs_output ("description:\n", 0);
if (rcsfile->desc != NULL)
cvs_output (rcsfile->desc, 0);
}
if (! log_data->header && ! log_data->long_header && rcsfile->head != NULL)
if (!log_data->header && ! log_data->long_header && rcsfile->head != NULL)
{
p = findnode (rcsfile->versions, rcsfile->head);
if (p == NULL)
@ -967,9 +987,8 @@ log_fileproc (callerdat, finfo)
finfo->fullname);
while (p != NULL)
{
RCSVers *vers;
RCSVers *vers = p->data;
vers = (RCSVers *) p->data;
log_version (log_data, revlist, rcsfile, vers, 1);
if (vers->next == NULL)
p = NULL;
@ -1009,6 +1028,8 @@ log_fileproc (callerdat, finfo)
return 0;
}
/*
* Fix up a revision list in order to compare it against versions.
* Expand any symbolic revisions.
@ -1109,26 +1130,21 @@ log_expand_revlist (rcs, revlist, default_branch)
does. This code is a bit cryptic for my tastes, but
keeping the same implementation as rlog ensures a
certain degree of compatibility. */
if (r->first == NULL)
if (r->first == NULL && nr->last != NULL)
{
if (nr->last == NULL)
nr->fields = 0;
nr->fields = numdots (nr->last) + 1;
if (nr->fields < 2)
nr->first = xstrdup (".0");
else
{
nr->fields = numdots (nr->last) + 1;
if (nr->fields < 2)
nr->first = xstrdup (".0");
else
{
char *cp;
char *cp;
nr->first = xstrdup (nr->last);
cp = strrchr (nr->first, '.');
strcpy (cp + 1, "0");
}
nr->first = xstrdup (nr->last);
cp = strrchr (nr->first, '.');
strcpy (cp + 1, "0");
}
}
else if (r->last == NULL)
else if (r->last == NULL && nr->first != NULL)
{
nr->fields = numdots (nr->first) + 1;
nr->last = xstrdup (nr->first);
@ -1377,6 +1393,8 @@ log_version_requested (log_data, revlist, rcs, vnode)
return 1;
}
/*
* Output a single symbol. This is called via walklist.
*/
@ -1393,6 +1411,8 @@ log_symbol (p, closure)
return 0;
}
/*
* Count the number of entries on a list. This is called via walklist.
*/
@ -1405,6 +1425,8 @@ log_count (p, closure)
return 1;
}
/*
* Sort out a single date specification by narrowing down the date
* until we find the specific selected revision.
@ -1424,7 +1446,7 @@ log_fix_singledate (p, closure)
if (pv == NULL)
error (1, 0, "missing version `%s' in RCS file `%s'",
p->key, data->rcs->path);
vnode = (RCSVers *) pv->data;
vnode = pv->data;
/* We are only interested if this revision passes any other tests.
Temporarily clear log_data->singledatelist to avoid confusing
@ -1464,6 +1486,8 @@ log_fix_singledate (p, closure)
return 0;
}
/*
* Count the number of revisions we are going to print.
*/
@ -1480,7 +1504,7 @@ log_count_print (p, closure)
error (1, 0, "missing version `%s' in RCS file `%s'",
p->key, data->rcs->path);
if (log_version_requested (data->log_data, data->revlist, data->rcs,
(RCSVers *) pv->data))
pv->data))
return 1;
else
return 0;
@ -1504,7 +1528,7 @@ log_tree (log_data, revlist, rcs, ver)
if (p == NULL)
error (1, 0, "missing version `%s' in RCS file `%s'",
ver, rcs->path);
vnode = (RCSVers *) p->data;
vnode = p->data;
if (vnode->next != NULL)
log_tree (log_data, revlist, rcs, vnode->next);
if (vnode->branches != NULL)
@ -1540,7 +1564,7 @@ log_abranch (log_data, revlist, rcs, ver)
if (p == NULL)
error (1, 0, "missing version `%s' in RCS file `%s'",
ver, rcs->path);
vnode = (RCSVers *) p->data;
vnode = p->data;
if (vnode->next != NULL)
log_abranch (log_data, revlist, rcs, vnode->next);
log_version (log_data, revlist, rcs, vnode, 0);
@ -1611,7 +1635,7 @@ log_version (log_data, revlist, rcs, ver, trunk)
if (nextp == NULL)
error (1, 0, "missing version `%s' in `%s'", ver->next,
rcs->path);
nextver = (RCSVers *) nextp->data;
nextver = nextp->data;
pdel = findnode (nextver->other, ";add");
padd = findnode (nextver->other, ";delete");
}
@ -1640,14 +1664,14 @@ log_version (log_data, revlist, rcs, ver, trunk)
would be the p == NULL case would mean an RCS file which was
missing the "log" keyword (which is illegal according to
rcsfile.5). */
if (p == NULL || p->data == NULL || p->data[0] == '\0')
if (p == NULL || p->data == NULL || *(char *)p->data == '\0')
cvs_output ("*** empty log message ***\n", 0);
else
{
/* FIXME: Technically, the log message could contain a null
byte. */
cvs_output (p->data, 0);
if (p->data[strlen (p->data) - 1] != '\n')
if (((char *)p->data)[strlen (p->data) - 1] != '\n')
cvs_output ("\n", 1);
}
}
@ -1685,9 +1709,9 @@ log_branch (p, closure)
static Dtype
log_dirproc (callerdat, dir, repository, update_dir, entries)
void *callerdat;
char *dir;
char *repository;
char *update_dir;
const char *dir;
const char *repository;
const char *update_dir;
List *entries;
{
if (!isdir (dir))

View File

@ -3,7 +3,8 @@
* 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.
* as specified in the README file that comes with the CVS source
* distribution.
*
* Modules
*
@ -30,7 +31,7 @@
/* Options in modules file. Note that it is OK to use GNU getopt features;
we already are arranging to make sure we are using the getopt distributed
with CVS. */
#define CVSMODULE_OPTS "+ad:i:lo:e:s:t:u:"
#define CVSMODULE_OPTS "+ad:lo:e:s:t:"
/* Special delimiter. */
#define CVSMODULE_SPEC '&'
@ -91,14 +92,17 @@ close_module (db)
dbm_close (db);
}
/*
* This is the recursive function that processes a module name.
* It calls back the passed routine for each directory of a module
* It runs the post checkout or post tag proc from the modules file
*/
int
do_module (db, mname, m_type, msg, callback_proc, where, shorten,
local_specified, run_module_prog, build_dirs, extra_arg)
static int
my_module (db, mname, m_type, msg, callback_proc, where, shorten,
local_specified, run_module_prog, build_dirs, extra_arg,
stack)
DBM *db;
char *mname;
enum mtype m_type;
@ -110,12 +114,11 @@ do_module (db, mname, m_type, msg, callback_proc, where, shorten,
int run_module_prog;
int build_dirs;
char *extra_arg;
List *stack;
{
char *checkin_prog = NULL;
char *checkout_prog = NULL;
char *export_prog = NULL;
char *tag_prog = NULL;
char *update_prog = NULL;
struct saved_cwd cwd;
int cwd_saved = 0;
char *line;
@ -150,7 +153,7 @@ do_module (db, mname, m_type, msg, callback_proc, where, shorten,
+ strlen (msg)
+ (where ? strlen (where) : 0)
+ (extra_arg ? strlen (extra_arg) : 0));
sprintf (buf, "%s-> do_module (%s, %s, %s, %s)\n",
sprintf (buf, "%s-> my_module (%s, %s, %s, %s)\n",
CLIENT_SERVER_STR,
mname, msg, where ? where : "",
extra_arg ? extra_arg : "");
@ -170,6 +173,13 @@ do_module (db, mname, m_type, msg, callback_proc, where, shorten,
if (isabsolute (mname))
error (1, 0, "Absolute module reference invalid: `%s'", mname);
/* Similarly for directories that attempt to step above the root of the
* repository.
*/
if (pathname_levels (mname) > 0)
error (1, 0, "up-level in module reference (`..') invalid: `%s'.",
mname);
/* if this is a directory to ignore, add it to that list */
if (mname[0] == '!' && mname[1] != '\0')
{
@ -238,7 +248,8 @@ do_module (db, mname, m_type, msg, callback_proc, where, shorten,
*acp = '/';
}
else
(void) sprintf (attic_file, "%s/%s/%s%s", current_parsed_root->directory,
(void) sprintf (attic_file, "%s/%s/%s%s",
current_parsed_root->directory,
CVSATTIC, mname, RCSEXT);
if (isdir (file))
@ -440,12 +451,6 @@ do_module (db, mname, m_type, msg, callback_proc, where, shorten,
mwhere = xstrdup (optarg);
nonalias_opt = 1;
break;
case 'i':
if (checkin_prog)
free (checkin_prog);
checkin_prog = xstrdup (optarg);
nonalias_opt = 1;
break;
case 'l':
local_specified = 1;
nonalias_opt = 1;
@ -468,12 +473,6 @@ do_module (db, mname, m_type, msg, callback_proc, where, shorten,
tag_prog = xstrdup (optarg);
nonalias_opt = 1;
break;
case 'u':
if (update_prog)
free (update_prog);
update_prog = xstrdup (optarg);
nonalias_opt = 1;
break;
case '?':
error (0, 0,
"modules file has invalid option for key %s value %s",
@ -510,14 +509,33 @@ do_module (db, mname, m_type, msg, callback_proc, where, shorten,
for (i = 0; i < modargc; i++)
{
if (strcmp (mname, modargv[i]) == 0)
/*
* Recursion check: if an alias module calls itself or a module
* which causes the first to be called again, print an error
* message and stop recursing.
*
* Algorithm:
*
* 1. Check that MNAME isn't in the stack.
* 2. Push MNAME onto the stack.
* 3. Call do_module().
* 4. Pop MNAME from the stack.
*/
if (stack && findnode (stack, mname))
error (0, 0,
"module `%s' in modules file contains infinite loop",
mname);
else
err += do_module (db, modargv[i], m_type, msg, callback_proc,
where, shorten, local_specified,
run_module_prog, build_dirs, extra_arg);
{
if (!stack) stack = getlist();
push_string (stack, mname);
err += my_module (db, modargv[i], m_type, msg, callback_proc,
where, shorten, local_specified,
run_module_prog, build_dirs, extra_arg,
stack);
pop_string (stack);
if (isempty (stack)) dellist (&stack);
}
}
goto do_module_return;
}
@ -552,7 +570,7 @@ module `%s' is a request for a file in a module which is not a directory",
/* XXX - think about making null repositories at each dir here
instead of just at the bottom */
make_directories (dir);
if ( CVS_CHDIR (dir) < 0)
if (CVS_CHDIR (dir) < 0)
{
error (0, errno, "cannot chdir to %s", dir);
spec_opt = NULL;
@ -654,9 +672,10 @@ module `%s' is a request for a file in a module which is not a directory",
error (0, 0, "Mal-formed %c option for module %s - ignored",
CVSMODULE_SPEC, mname);
else
err += do_module (db, spec_opt, m_type, msg, callback_proc,
(char *) NULL, 0, local_specified,
run_module_prog, build_dirs, extra_arg);
err += my_module (db, spec_opt, m_type, msg, callback_proc,
(char *) NULL, 0, local_specified,
run_module_prog, build_dirs, extra_arg,
stack);
spec_opt = next_opt;
}
@ -668,40 +687,6 @@ module `%s' is a request for a file in a module which is not a directory",
}
#endif
/* run/write out the checkin/update prog files if necessary */
if (err == 0 && !noexec && m_type == CHECKOUT && run_module_prog)
{
#ifdef SERVER_SUPPORT
if (server_active) {
if (checkin_prog != NULL)
server_prog (where ? where : mwhere ? mwhere : mname, checkin_prog, PROG_CHECKIN);
if (update_prog != NULL)
server_prog (where ? where : mwhere ? mwhere : mname, update_prog, PROG_UPDATE);
}
else
{
#endif
FILE *fp;
if (checkin_prog != NULL)
{
fp = open_file (CVSADM_CIPROG, "w+");
(void) fprintf (fp, "%s\n", checkin_prog);
if (fclose (fp) == EOF)
error (1, errno, "cannot close %s", CVSADM_CIPROG);
}
if (update_prog != NULL)
{
fp = open_file (CVSADM_UPROG, "w+");
(void) fprintf (fp, "%s\n", update_prog);
if (fclose (fp) == EOF)
error (1, errno, "cannot close %s", CVSADM_UPROG);
}
#ifdef SERVER_SUPPORT
}
#endif
}
/* cd back to where we started */
if (restore_cwd (&cwd, NULL))
error_exit ();
@ -750,7 +735,7 @@ module `%s' is a request for a file in a module which is not a directory",
{
cvs_output (program_name, 0);
cvs_output (" ", 1);
cvs_output (command_name, 0);
cvs_output (cvs_cmd_name, 0);
cvs_output (": Executing '", 0);
run_print (stdout);
cvs_output ("'\n", 0);
@ -769,16 +754,12 @@ module `%s' is a request for a file in a module which is not a directory",
free_names (&xmodargc, xmodargv);
if (mwhere)
free (mwhere);
if (checkin_prog)
free (checkin_prog);
if (checkout_prog)
free (checkout_prog);
if (export_prog)
free (export_prog);
if (tag_prog)
free (tag_prog);
if (update_prog)
free (update_prog);
if (cwd_saved)
free_cwd (&cwd);
if (value != NULL)
@ -789,6 +770,33 @@ module `%s' is a request for a file in a module which is not a directory",
return (err);
}
/* External face of do_module so that we can have an internal version which
* accepts a stack argument to track alias recursion.
*/
int
do_module (db, mname, m_type, msg, callback_proc, where, shorten,
local_specified, run_module_prog, build_dirs, extra_arg)
DBM *db;
char *mname;
enum mtype m_type;
char *msg;
CALLBACKPROC callback_proc;
char *where;
int shorten;
int local_specified;
int run_module_prog;
int build_dirs;
char *extra_arg;
{
return my_module (db, mname, m_type, msg, callback_proc, where, shorten,
local_specified, run_module_prog, build_dirs, extra_arg,
NULL);
}
/* - Read all the records from the modules database into an array.
- Sort the array depending on what format is desired.
- Print the array in the format desired.
@ -799,7 +807,7 @@ module `%s' is a request for a file in a module which is not a directory",
files and the comment field: (Including aliases)
modulename -s switches, one per line, even if
-i it has many switches.
it has many switches.
Directories and files involved, formatted
to cover multiple lines if necessary.
# Comment, also formatted to cover multiple

View File

@ -19,7 +19,7 @@
#ifdef MY_NDBM
# ifndef O_ACCMODE
# define O_ACCMODE O_RDONLY|O_WRONLY|O_RDWR
# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
# endif /* defined O_ACCMODE */
static void mydbm_load_file PROTO ((FILE *, List *, char *));
@ -181,12 +181,12 @@ mydbm_store (db, key, value, flags)
node->type = NDBMNODE;
node->key = xmalloc (key.dsize + 1);
strncpy (node->key, key.dptr, key.dsize);
node->key[key.dsize] = '\0';
*node->key = '\0';
strncat (node->key, key.dptr, key.dsize);
node->data = xmalloc (value.dsize + 1);
strncpy (node->data, value.dptr, value.dsize);
node->data[value.dsize] = '\0';
*(char *)node->data = '\0';
strncat (node->data, value.dptr, value.dsize);
db->modified = 1;
if (addnode (db->dbm_list, node) == -1)

View File

@ -8,7 +8,7 @@
* No Difference
*
* The user file looks modified judging from its time stamp; however it needn't
* be. No_difference() finds out whether it is or not. If it is not, it
* be. No_Difference() finds out whether it is or not. If it is not, it
* updates the administration.
*
* returns 0 if no differences are found and non-zero otherwise
@ -49,8 +49,9 @@ No_Difference (finfo, vers)
options = xstrdup ("");
tocvsPath = wrap_tocvs_process_file (finfo->file);
retcode = RCS_cmp_file (vers->srcfile, vers->vn_user, options,
tocvsPath == NULL ? finfo->file : tocvsPath);
retcode = RCS_cmp_file( vers->srcfile, vers->vn_user, (char **)NULL,
(char *)NULL, options,
tocvsPath == NULL ? finfo->file : tocvsPath );
if (retcode == 0)
{
/* no difference was found, so fix the entries file */
@ -70,7 +71,7 @@ No_Difference (finfo, vers)
/* update the entdata pointer in the vers_ts structure */
p = findnode (finfo->entries, finfo->file);
vers->entdata = (Entnode *) p->data;
vers->entdata = p->data;
ret = 0;
}

View File

@ -17,8 +17,8 @@
#include "getline.h"
static RETSIGTYPE patch_cleanup PROTO((void));
static Dtype patch_dirproc PROTO ((void *callerdat, char *dir,
char *repos, char *update_dir,
static Dtype patch_dirproc PROTO ((void *callerdat, const char *dir,
const char *repos, const char *update_dir,
List *entries));
static int patch_fileproc PROTO ((void *callerdat, struct file_info *finfo));
static int patch_proc PROTO((int argc, char **argv, char *xwhere,
@ -58,6 +58,8 @@ static const char *const patch_usage[] =
NULL
};
int
patch (argc, argv)
int argc;
@ -86,7 +88,7 @@ patch (argc, argv)
#endif
error (1, 0,
"-q or -Q must be specified before \"%s\"",
command_name);
cvs_cmd_name);
break;
case 'f':
force_tag_match = 0;
@ -232,34 +234,36 @@ patch (argc, argv)
/* clean up if we get a signal */
#ifdef SIGABRT
(void) SIG_register (SIGABRT, patch_cleanup);
(void)SIG_register (SIGABRT, patch_cleanup);
#endif
#ifdef SIGHUP
(void) SIG_register (SIGHUP, patch_cleanup);
(void)SIG_register (SIGHUP, patch_cleanup);
#endif
#ifdef SIGINT
(void) SIG_register (SIGINT, patch_cleanup);
(void)SIG_register (SIGINT, patch_cleanup);
#endif
#ifdef SIGQUIT
(void) SIG_register (SIGQUIT, patch_cleanup);
(void)SIG_register (SIGQUIT, patch_cleanup);
#endif
#ifdef SIGPIPE
(void) SIG_register (SIGPIPE, patch_cleanup);
(void)SIG_register (SIGPIPE, patch_cleanup);
#endif
#ifdef SIGTERM
(void) SIG_register (SIGTERM, patch_cleanup);
(void)SIG_register (SIGTERM, patch_cleanup);
#endif
db = open_module ();
for (i = 0; i < argc; i++)
err += do_module (db, argv[i], PATCH, "Patching", patch_proc,
(char *) NULL, 0, 0, 0, 0, (char *) NULL);
(char *)NULL, 0, local, 0, 0, (char *)NULL);
close_module (db);
free (options);
patch_cleanup ();
return (err);
return err;
}
/*
* callback proc for doing the real work of patching
*/
@ -283,12 +287,14 @@ patch_proc (argc, argv, xwhere, mwhere, mfile, shorten, local_specified,
char *repository;
char *where;
repository = xmalloc (strlen (current_parsed_root->directory) + strlen (argv[0])
repository = xmalloc (strlen (current_parsed_root->directory)
+ strlen (argv[0])
+ (mfile == NULL ? 0 : strlen (mfile) + 1) + 2);
(void) sprintf (repository, "%s/%s", current_parsed_root->directory, argv[0]);
(void)sprintf (repository, "%s/%s",
current_parsed_root->directory, argv[0]);
where = xmalloc (strlen (argv[0]) + (mfile == NULL ? 0 : strlen (mfile) + 1)
+ 1);
(void) strcpy (where, argv[0]);
(void)strcpy (where, argv[0]);
/* if mfile isn't null, we need to set up to do only part of the module */
if (mfile != NULL)
@ -300,22 +306,22 @@ patch_proc (argc, argv, xwhere, mwhere, mfile, shorten, local_specified,
if ((cp = strrchr (mfile, '/')) != NULL)
{
*cp = '\0';
(void) strcat (repository, "/");
(void) strcat (repository, mfile);
(void) strcat (where, "/");
(void) strcat (where, mfile);
(void)strcat (repository, "/");
(void)strcat (repository, mfile);
(void)strcat (where, "/");
(void)strcat (where, mfile);
mfile = cp + 1;
}
/* take care of the rest */
path = xmalloc (strlen (repository) + strlen (mfile) + 2);
(void) sprintf (path, "%s/%s", repository, mfile);
(void)sprintf (path, "%s/%s", repository, mfile);
if (isdir (path))
{
/* directory means repository gets the dir tacked on */
(void) strcpy (repository, path);
(void) strcat (where, "/");
(void) strcat (where, mfile);
(void)strcpy (repository, path);
(void)strcat (where, "/");
(void)strcat (where, mfile);
}
else
{
@ -332,9 +338,8 @@ patch_proc (argc, argv, xwhere, mwhere, mfile, shorten, local_specified,
{
error (0, errno, "cannot chdir to %s", repository);
free (repository);
return (1);
return 1;
}
free (repository);
if (force_tag_match)
which = W_REPOS | W_ATTIC;
@ -343,25 +348,30 @@ patch_proc (argc, argv, xwhere, mwhere, mfile, shorten, local_specified,
if (rev1 != NULL && !rev1_validated)
{
tag_check_valid (rev1, argc - 1, argv + 1, local_specified, 0, NULL);
tag_check_valid (rev1, argc - 1, argv + 1, local_specified, 0,
repository);
rev1_validated = 1;
}
if (rev2 != NULL && !rev2_validated)
{
tag_check_valid (rev2, argc - 1, argv + 1, local_specified, 0, NULL);
tag_check_valid (rev2, argc - 1, argv + 1, local_specified, 0,
repository);
rev2_validated = 1;
}
/* start the recursion processor */
err = start_recursion (patch_fileproc, (FILESDONEPROC) NULL, patch_dirproc,
(DIRLEAVEPROC) NULL, NULL,
err = start_recursion (patch_fileproc, (FILESDONEPROC)NULL, patch_dirproc,
(DIRLEAVEPROC)NULL, NULL,
argc - 1, argv + 1, local_specified,
which, 0, CVS_LOCK_READ, where, 1);
which, 0, CVS_LOCK_READ, where, 1, repository);
free (repository);
free (where);
return (err);
return err;
}
/*
* Called to examine a particular RCS file, as appropriate with the options
* that were set above.
@ -394,6 +404,7 @@ patch_fileproc (callerdat, finfo)
line1_chars_allocated = 0;
line2 = NULL;
line2_chars_allocated = 0;
vers_tag = vers_head = NULL;
/* find the parsed rcs file */
if ((rcsfile = finfo->rcs) == NULL)
@ -449,53 +460,38 @@ patch_fileproc (callerdat, finfo)
vers_tag = NULL;
}
if (vers_tag == NULL && vers_head == NULL)
if ((vers_tag == NULL && vers_head == NULL) ||
(vers_tag != NULL && vers_head != NULL &&
strcmp (vers_head, vers_tag) == 0))
{
/* Nothing known about specified revs. */
/* Nothing known about specified revs or
* not changed between releases.
*/
ret = 0;
goto out2;
}
if (vers_tag && vers_head && strcmp (vers_head, vers_tag) == 0)
{
/* Not changed between releases. */
ret = 0;
goto out2;
}
if (patch_short)
if( patch_short && ( vers_tag == NULL || vers_head == NULL ) )
{
/* For adds & removes with a short patch requested, we can print our
* error message now and get out.
*/
cvs_output ("File ", 0);
cvs_output (finfo->fullname, 0);
if (vers_tag == NULL)
{
cvs_output (" is new; current revision ", 0);
cvs_output( " is new; ", 0 );
cvs_output( rev2 ? rev2 : date2 ? date2 : "current", 0 );
cvs_output( " revision ", 0 );
cvs_output (vers_head, 0);
cvs_output ("\n", 1);
}
else if (vers_head == NULL)
{
cvs_output (" is removed; not included in ", 0);
if (rev2 != NULL)
{
cvs_output ("release tag ", 0);
cvs_output (rev2, 0);
}
else if (date2 != NULL)
{
cvs_output ("release date ", 0);
cvs_output (date2, 0);
}
else
cvs_output ("current release", 0);
cvs_output ("\n", 1);
}
else
{
cvs_output (" changed from revision ", 0);
cvs_output (vers_tag, 0);
cvs_output (" to ", 0);
cvs_output (vers_head, 0);
cvs_output( " is removed; ", 0 );
cvs_output( rev1 ? rev1 : date1, 0 );
cvs_output( " revision ", 0 );
cvs_output( vers_tag, 0 );
cvs_output ("\n", 1);
}
ret = 0;
@ -541,9 +537,9 @@ patch_fileproc (callerdat, finfo)
if (vers_tag != NULL)
{
retcode = RCS_checkout (rcsfile, (char *) NULL, vers_tag,
retcode = RCS_checkout (rcsfile, (char *)NULL, vers_tag,
rev1, options, tmpfile1,
(RCSCHECKOUTPROC) NULL, (void *) NULL);
(RCSCHECKOUTPROC)NULL, (void *)NULL);
if (retcode != 0)
{
error (0, 0,
@ -565,9 +561,9 @@ patch_fileproc (callerdat, finfo)
}
if (vers_head != NULL)
{
retcode = RCS_checkout (rcsfile, (char *) NULL, vers_head,
retcode = RCS_checkout (rcsfile, (char *)NULL, vers_head,
rev2, options, tmpfile2,
(RCSCHECKOUTPROC) NULL, (void *) NULL);
(RCSCHECKOUTPROC)NULL, (void *)NULL);
if (retcode != 0)
{
error (0, 0,
@ -576,13 +572,14 @@ patch_fileproc (callerdat, finfo)
goto out;
}
if ((t.actime = t.modtime = RCS_getrevtime (rcsfile, vers_head,
(char *) 0, 0)) != -1)
(char *)0, 0)) != -1)
/* I believe this timestamp only affects the dates in our diffs,
and therefore should be on the server, not the client. */
(void) utime (tmpfile2, &t);
(void)utime (tmpfile2, &t);
}
switch (diff_exec (tmpfile1, tmpfile2, NULL, NULL, unidiff ? "-u" : "-c", tmpfile3))
switch (diff_exec (tmpfile1, tmpfile2, NULL, NULL, unidiff ? "-u" : "-c",
tmpfile3))
{
case -1: /* fork/wait failure */
error (1, errno, "fork for diff failed on %s", rcs);
@ -593,14 +590,29 @@ patch_fileproc (callerdat, finfo)
/*
* The two revisions are really different, so read the first two
* lines of the diff output file, and munge them to include more
* reasonable file names that "patch" will understand.
* reasonable file names that "patch" will understand, unless the
* user wanted a short patch. In that case, just output the short
* message.
*/
if( patch_short )
{
cvs_output ("File ", 0);
cvs_output (finfo->fullname, 0);
cvs_output (" changed from revision ", 0);
cvs_output (vers_tag, 0);
cvs_output (" to ", 0);
cvs_output (vers_head, 0);
cvs_output ("\n", 1);
ret = 0;
goto out;
}
/* Output an "Index:" line for patch to use */
cvs_output ("Index: ", 0);
cvs_output (finfo->fullname, 0);
cvs_output ("\n", 1);
/* Now the munging. */
fp = open_file (tmpfile3, "r");
if (getline (&line1, &line1_chars_allocated, fp) < 0 ||
getline (&line2, &line2_chars_allocated, fp) < 0)
@ -648,8 +660,10 @@ failed to read diff file header %s for %s: end of file", tmpfile3, rcs);
assert (current_parsed_root != NULL);
assert (current_parsed_root->directory != NULL);
{
strippath = xmalloc (strlen (current_parsed_root->directory) + 2);
(void) sprintf (strippath, "%s/", current_parsed_root->directory);
strippath = xmalloc (strlen (current_parsed_root->directory)
+ 2);
(void)sprintf (strippath, "%s/",
current_parsed_root->directory);
}
/*else
strippath = xstrdup (REPOS_STRIP); */
@ -661,7 +675,7 @@ failed to read diff file header %s for %s: end of file", tmpfile3, rcs);
file1 = xmalloc (strlen (finfo->fullname)
+ strlen (vers_tag)
+ 10);
(void) sprintf (file1, "%s:%s", finfo->fullname, vers_tag);
(void)sprintf (file1, "%s:%s", finfo->fullname, vers_tag);
}
else
{
@ -670,8 +684,8 @@ failed to read diff file header %s for %s: end of file", tmpfile3, rcs);
file2 = xmalloc (strlen (finfo->fullname)
+ (vers_head != NULL ? strlen (vers_head) : 10)
+ 10);
(void) sprintf (file2, "%s:%s", finfo->fullname,
vers_head ? vers_head : "removed");
(void)sprintf (file2, "%s:%s", finfo->fullname,
vers_head ? vers_head : "removed");
/* Note that the string "diff" is specified by POSIX (for -c)
and is part of the diff output format, not the name of a
@ -745,9 +759,11 @@ failed to read diff file header %s for %s: end of file", tmpfile3, rcs);
free (vers_head);
if (rcs != NULL)
free (rcs);
return (ret);
return ret;
}
/*
* Print a warm fuzzy message
*/
@ -755,9 +771,9 @@ failed to read diff file header %s for %s: end of file", tmpfile3, rcs);
static Dtype
patch_dirproc (callerdat, dir, repos, update_dir, entries)
void *callerdat;
char *dir;
char *repos;
char *update_dir;
const char *dir;
const char *repos;
const char *update_dir;
List *entries;
{
if (!quiet)

View File

@ -94,7 +94,7 @@ release (argc, argv)
case 'q':
error (1, 0,
"-q or -Q must be specified before \"%s\"",
command_name);
cvs_cmd_name);
break;
case 'd':
delete_flag++;
@ -116,12 +116,17 @@ release (argc, argv)
* up to the user to take note of them, at least currently
* (ignore-193 in testsuite)).
*/
/* Construct the update command. */
/* Construct the update command. Be sure to add authentication and
encryption if we are using them currently, else our child process may
not be able to communicate with the server. */
update_cmd = xmalloc (strlen (program_path)
+ strlen (current_parsed_root->original)
+ 20);
sprintf (update_cmd, "%s -n -q -d %s update",
program_path, current_parsed_root->original);
+ strlen (current_parsed_root->original)
+ 1 + 3 + 3 + 16 + 1);
sprintf (update_cmd, "%s %s%s-n -q -d %s update",
program_path,
cvsauthenticate ? "-a " : "",
cvsencrypt ? "-x " : "",
current_parsed_root->original);
#ifdef CLIENT_SUPPORT
/* Start the server; we'll close it after looping. */
@ -216,7 +221,7 @@ release (argc, argv)
if (c) /* "No" */
{
(void) fprintf (stderr, "** `%s' aborted by user choice.\n",
command_name);
cvs_cmd_name);
free (repository);
if (restore_cwd (&cwd, NULL))
error_exit ();
@ -224,6 +229,17 @@ release (argc, argv)
}
}
/* Note: client.c doesn't like to have other code
changing the current directory on it. So a fair amount
of effort is needed to make sure it doesn't get confused
about the directory and (for example) overwrite
CVS/Entries file in the wrong directory. See release-17
through release-23. */
free (repository);
if (restore_cwd (&cwd, NULL))
exit (EXIT_FAILURE);
if (1
#ifdef CLIENT_SUPPORT
&& !(current_parsed_root->isremote
@ -232,13 +248,14 @@ release (argc, argv)
#endif
)
{
/* We are chdir'ed into the directory in question.
So don't pass args to unedit. */
int argc = 1;
int argc = 2;
char *argv[3];
argv[0] = "dummy";
argv[1] = NULL;
argv[1] = thisarg;
argv[2] = NULL;
err += unedit (argc, argv);
if (restore_cwd (&cwd, NULL))
exit (EXIT_FAILURE);
}
#ifdef CLIENT_SUPPORT
@ -255,11 +272,6 @@ release (argc, argv)
history_write ('F', thisarg, "", thisarg, ""); /* F == Free */
}
free (repository);
if (restore_cwd (&cwd, NULL))
error_exit ();
if (delete_flag)
{
/* FIXME? Shouldn't this just delete the CVS-controlled
@ -272,7 +284,17 @@ release (argc, argv)
#ifdef CLIENT_SUPPORT
if (current_parsed_root->isremote)
err += get_server_responses ();
{
/* FIXME:
* Is there a good reason why get_server_responses() isn't
* responsible for restoring its initial directory itself when
* finished?
*/
err += get_server_responses ();
if (restore_cwd (&cwd, NULL))
exit (EXIT_FAILURE);
}
#endif /* CLIENT_SUPPORT */
}

View File

@ -22,8 +22,8 @@ static int remove_force_fileproc PROTO ((void *callerdat,
struct file_info *finfo));
#endif
static int remove_fileproc PROTO ((void *callerdat, struct file_info *finfo));
static Dtype remove_dirproc PROTO ((void *callerdat, char *dir,
char *repos, char *update_dir,
static Dtype remove_dirproc PROTO ((void *callerdat, const char *dir,
const char *repos, const char *update_dir,
List *entries));
static int force;
@ -90,7 +90,8 @@ cvsremove (argc, argv)
start_recursion (remove_force_fileproc, (FILESDONEPROC) NULL,
(DIRENTPROC) NULL, (DIRLEAVEPROC) NULL,
(void *) NULL, argc, argv, local, W_LOCAL,
0, CVS_LOCK_NONE, (char *) NULL, 0);
0, CVS_LOCK_NONE, (char *) NULL, 0,
(char *) NULL);
}
/* else FIXME should probably act as if the file doesn't exist
in doing the following checks. */
@ -114,7 +115,8 @@ cvsremove (argc, argv)
err = start_recursion (remove_fileproc, (FILESDONEPROC) NULL,
remove_dirproc, (DIRLEAVEPROC) NULL, NULL,
argc, argv,
local, W_LOCAL, 0, CVS_LOCK_READ, (char *) NULL, 1);
local, W_LOCAL, 0, CVS_LOCK_READ, (char *) NULL, 1,
(char *) NULL);
if (removed_files && !really_quiet)
error (0, 0, "use '%s commit' to remove %s permanently", program_name,
@ -276,9 +278,9 @@ cannot remove file `%s' which has a sticky date of `%s'",
static Dtype
remove_dirproc (callerdat, dir, repos, update_dir, entries)
void *callerdat;
char *dir;
char *repos;
char *update_dir;
const char *dir;
const char *repos;
const char *update_dir;
List *entries;
{
if (!quiet)

View File

@ -21,11 +21,11 @@
char *
Name_Repository (dir, update_dir)
char *dir;
char *update_dir;
const char *dir;
const char *update_dir;
{
FILE *fpin;
char *xupdate_dir;
const char *xupdate_dir;
char *repos = NULL;
size_t repos_allocated = 0;
char *tmp;
@ -123,8 +123,9 @@ Name_Repository (dir, update_dir)
error (0, 0, "`..'-relative repositories are not supported.");
error (1, 0, "illegal source repository");
}
newrepos = xmalloc (strlen (current_parsed_root->directory) + strlen (repos) + 2);
(void) sprintf (newrepos, "%s/%s", current_parsed_root->directory, repos);
newrepos = xmalloc (strlen (current_parsed_root->directory)
+ strlen (repos) + 2);
sprintf (newrepos, "%s/%s", current_parsed_root->directory, repos);
free (repos);
repos = newrepos;
}
@ -134,29 +135,33 @@ Name_Repository (dir, update_dir)
return repos;
}
/*
* Return a pointer to the repository name relative to CVSROOT from a
* possibly fully qualified repository
*/
char *
const char *
Short_Repository (repository)
char *repository;
const char *repository;
{
if (repository == NULL)
return (NULL);
return NULL;
/* If repository matches CVSroot at the beginning, strip off CVSroot */
/* And skip leading '/' in rep, in case CVSroot ended with '/'. */
if (strncmp (current_parsed_root->directory, repository,
strlen (current_parsed_root->directory)) == 0)
{
char *rep = repository + strlen (current_parsed_root->directory);
const char *rep = repository + strlen (current_parsed_root->directory);
return (*rep == '/') ? rep+1 : rep;
}
else
return (repository);
return repository;
}
/* Sanitize the repository name (in place) by removing trailing
* slashes and a trailing "." if present. It should be safe for
* callers to use strcat and friends to create repository names.
@ -179,12 +184,7 @@ Short_Repository (repository)
* back further someday, so that the trailing "/." doesn't get into
* repository in the first place, but we haven't taken things that
* far yet.'' --Jim Kingdon (recurse.c, 07-Sep-97)
*
* Ahh, all too true. The major consideration is RELATIVE_REPOS. If
* the "/." doesn't end up in the repository while RELATIVE_REPOS is
* defined, there will be nothing in the CVS/Repository file. I
* haven't verified that the remote protocol will handle that
* correctly yet, so I've not made that change. */
*/
void
Sanitize_Repository_Name (repository)

View File

@ -16,8 +16,9 @@
/* Printable names for things in the current_parsed_root->method enum variable.
Watch out if the enum is changed in cvs.h! */
char *method_names[] = {
"undefined", "local", "server (rsh)", "pserver", "kserver", "gserver", "ext", "fork"
const char method_names[][16] = {
"undefined", "local", "server (rsh)", "pserver",
"kserver", "gserver", "ext", "fork"
};
#ifndef DEBUG
@ -34,6 +35,7 @@ Name_Root (dir, update_dir)
char *tmp;
char *cvsadm;
char *cp;
int len;
if (update_dir && *update_dir)
xupdate_dir = update_dir;
@ -73,18 +75,20 @@ Name_Root (dir, update_dir)
*/
fpin = open_file (tmp, "r");
if (getline (&root, &root_allocated, fpin) < 0)
if ((len = getline (&root, &root_allocated, fpin)) < 0)
{
int saved_errno = errno;
/* FIXME: should be checking for end of file separately; errno
is not set in that case. */
error (0, 0, "in directory %s:", xupdate_dir);
error (0, errno, "cannot read %s", CVSADM_ROOT);
error (0, saved_errno, "cannot read %s", CVSADM_ROOT);
error (0, 0, "please correct this problem");
ret = NULL;
goto out;
}
(void) fclose (fpin);
if ((cp = strrchr (root, '\n')) != NULL)
fclose (fpin);
cp = root + (len - 1);
if (*cp == '\n')
*cp = '\0'; /* strip the newline */
/*
@ -131,6 +135,8 @@ Name_Root (dir, update_dir)
return (ret);
}
/*
* Write the CVS/Root file so that the environment variable CVSROOT
* and/or the -d option to cvs will be validated or not necessary for
@ -138,8 +144,8 @@ Name_Root (dir, update_dir)
*/
void
Create_Root (dir, rootdir)
char *dir;
char *rootdir;
const char *dir;
const char *rootdir;
{
FILE *fout;
char *tmp;
@ -287,12 +293,14 @@ new_cvsroot_t ()
newroot->original = NULL;
newroot->method = null_method;
#ifdef CLIENT_SUPPORT
newroot->username = NULL;
newroot->password = NULL;
newroot->hostname = NULL;
newroot->port = 0;
newroot->directory = NULL;
#ifdef CLIENT_SUPPORT
newroot->proxy_hostname = NULL;
newroot->proxy_port = 0;
newroot->isremote = 0;
#endif /* CLIENT_SUPPORT */
@ -308,6 +316,9 @@ free_cvsroot_t (root)
{
if (root->original != NULL)
free (root->original);
if (root->directory != NULL)
free (root->directory);
#ifdef CLIENT_SUPPORT
if (root->username != NULL)
free (root->username);
if (root->password != NULL)
@ -318,8 +329,9 @@ free_cvsroot_t (root)
}
if (root->hostname != NULL)
free (root->hostname);
if (root->directory != NULL)
free (root->directory);
if (root->proxy_hostname != NULL)
free (root->proxy_hostname);
#endif /* CLIENT_SUPPORT */
free (root);
}
@ -350,7 +362,7 @@ free_cvsroot_t (root)
*/
cvsroot_t *
parse_cvsroot (root_in)
char *root_in;
const char *root_in;
{
cvsroot_t *newroot; /* the new root to be returned */
char *cvsroot_save; /* what we allocated so we can dispose
@ -360,7 +372,9 @@ parse_cvsroot (root_in)
* [[user][:password]@]host[:[port]]
*/
char *cvsroot_copy, *p, *q; /* temporary pointers for parsing */
#ifdef CLIENT_SUPPORT
int check_hostname, no_port, no_password;
#endif /* CLIENT_SUPPORT */
/* allocate some space */
newroot = new_cvsroot_t();
@ -392,6 +406,25 @@ parse_cvsroot (root_in)
*p = '\0';
cvsroot_copy = ++p;
#ifdef CLIENT_SUPPORT
/* Look for method options, for instance, proxy, proxyport.
* We don't handle these, but we like to try and warn the user that
* they are being ignored.
*/
if (p = strchr (method, ';'))
{
*p++ = '\0';
if (!really_quiet)
{
error (0, 0,
"WARNING: Ignoring method options found in CVSROOT: `%s'.",
p);
error (0, 0,
"Use CVS version 1.12.7 or later to handle method options.");
}
}
#endif /* CLIENT_SUPPORT */
/* Now we have an access method -- see if it's valid. */
if (strcmp (method, "local") == 0)
@ -440,13 +473,18 @@ parse_cvsroot (root_in)
if ((p = strchr (cvsroot_copy, '/')) == NULL)
{
error (0, 0, "CVSROOT requires a path spec:");
error (0, 0, ":(gserver|kserver|pserver):[[user][:password]@]host[:[port]]/path");
error (0, 0,
":(gserver|kserver|pserver):[[user][:password]@]host[:[port]]/path");
error (0, 0, "[:(ext|server):][[user]@]host[:]/path");
goto error_exit;
}
firstslash = p; /* == NULL if '/' not in string */
*p = '\0';
/* Don't parse username, password, hostname, or port without client
* support.
*/
#ifdef CLIENT_SUPPORT
/* Check to see if there is a username[:password] in the string. */
if ((p = strchr (cvsroot_copy, '@')) != NULL)
{
@ -488,15 +526,18 @@ parse_cvsroot (root_in)
{
if (!isdigit(*q++))
{
error (0, 0, "CVSROOT may only specify a positive, non-zero, integer port (not `%s').",
error (0, 0,
"CVSROOT may only specify a positive, non-zero, integer port (not `%s').",
p);
error (0, 0, "Perhaps you entered a relative pathname?");
error (0, 0,
"Perhaps you entered a relative pathname?");
goto error_exit;
}
}
if ((newroot->port = atoi (p)) <= 0)
{
error (0, 0, "CVSROOT may only specify a positive, non-zero, integer port (not `%s').",
error (0, 0,
"CVSROOT may only specify a positive, non-zero, integer port (not `%s').",
p);
error (0, 0, "Perhaps you entered a relative pathname?");
goto error_exit;
@ -514,9 +555,17 @@ parse_cvsroot (root_in)
/* restore the '/' */
cvsroot_copy = firstslash;
*cvsroot_copy = '/';
#endif /* CLIENT_SUPPORT */
}
/* parse the path for all methods */
/*
* Parse the path for all methods.
*/
/* Here & local_cvsroot() should be the only places this needs to be
* called on a CVSROOT now. cvsroot->original is saved for error messages
* and, otherwise, we want no trailing slashes.
*/
Sanitize_Repository_Name( cvsroot_copy );
newroot->directory = xstrdup(cvsroot_copy);
/*
@ -541,6 +590,7 @@ parse_cvsroot (root_in)
}
#endif
#ifdef CLIENT_SUPPORT
if (newroot->username && ! newroot->hostname)
{
error (0, 0, "Missing hostname in CVSROOT.");
@ -548,17 +598,22 @@ parse_cvsroot (root_in)
}
check_hostname = 0;
no_password = 0;
no_password = 1;
no_port = 0;
#endif /* CLIENT_SUPPORT */
switch (newroot->method)
{
case local_method:
#ifdef CLIENT_SUPPORT
if (newroot->username || newroot->hostname)
{
error (0, 0, "Can't specify hostname and username in CVSROOT");
error (0, 0, "when using local access method.");
goto error_exit;
}
no_port = 1;
/* no_password already set */
#endif /* CLIENT_SUPPORT */
/* cvs.texinfo has always told people that CVSROOT must be an
absolute pathname. Furthermore, attempts to use a relative
pathname produced various errors (I couldn't get it to work),
@ -571,9 +626,8 @@ parse_cvsroot (root_in)
error (0, 0, "when using local access method.");
goto error_exit;
}
no_port = 1;
no_password = 1;
break;
#ifdef CLIENT_SUPPORT
case fork_method:
/* We want :fork: to behave the same as other remote access
methods. Therefore, don't check to see that the repository
@ -584,6 +638,7 @@ parse_cvsroot (root_in)
error (0, 0, "when using fork access method.");
goto error_exit;
}
newroot->hostname = xstrdup("server"); /* for error messages */
if (!isabsolute (newroot->directory))
{
error (0, 0, "CVSROOT must be an absolute pathname (not `%s')",
@ -592,39 +647,44 @@ parse_cvsroot (root_in)
goto error_exit;
}
no_port = 1;
no_password = 1;
/* no_password already set */
break;
case kserver_method:
#ifndef HAVE_KERBEROS
# ifndef HAVE_KERBEROS
error (0, 0, "CVSROOT is set for a kerberos access method but your");
error (0, 0, "CVS executable doesn't support it.");
goto error_exit;
#else
# else
check_hostname = 1;
/* no_password already set */
break;
#endif
# endif
case gserver_method:
#ifndef HAVE_GSSAPI
# ifndef HAVE_GSSAPI
error (0, 0, "CVSROOT is set for a GSSAPI access method but your");
error (0, 0, "CVS executable doesn't support it.");
goto error_exit;
#else
# else
check_hostname = 1;
/* no_password already set */
break;
#endif
# endif
case server_method:
case ext_method:
no_port = 1;
no_password = 1;
/* no_password already set */
check_hostname = 1;
break;
case pserver_method:
no_password = 0;
check_hostname = 1;
break;
#endif /* CLIENT_SUPPORT */
default:
error (1, 0, "Invalid method found in parse_cvsroot");
}
#ifdef CLIENT_SUPPORT
if (no_password && newroot->password)
{
error (0, 0, "CVSROOT password specification is only valid for");
@ -644,6 +704,7 @@ parse_cvsroot (root_in)
error (0, 0, "and pserver connection methods.");
goto error_exit;
}
#endif /* CLIENT_SUPPORT */
if (*newroot->directory == '\0')
{
@ -718,14 +779,18 @@ normalize_cvsroot (root)
* repository DIR. */
cvsroot_t *
local_cvsroot (dir)
char *dir;
const char *dir;
{
cvsroot_t *newroot = new_cvsroot_t();
newroot->original = xstrdup(dir);
newroot->method = local_method;
newroot->directory = xstrdup(dir);
/* Here and parse_cvsroot() should be the only places this needs to be
* called on a CVSROOT now. cvsroot->original is saved for error messages
* and, otherwise, we want no trailing slashes.
*/
Sanitize_Repository_Name( newroot->directory );
return newroot;
}
@ -741,7 +806,7 @@ local_cvsroot (dir)
#include <stdio.h>
char *program_name = "testing";
char *command_name = "parse_cvsroot"; /* XXX is this used??? */
char *cvs_cmd_name = "parse_cvsroot"; /* XXX is this used??? */
/* Toy versions of various functions when debugging under unix. Yes,
these make various bad assumptions, but they're pretty easy to
@ -790,5 +855,3 @@ main (argc, argv)
/* NOTREACHED */
}
#endif
/* vim:tabstop=8:shiftwidth=4
*/

View File

@ -20,18 +20,23 @@ typedef enum {
ext_method,
fork_method
} CVSmethod;
extern char *method_names[]; /* change this in root.c if you change
the enum above */
extern const char method_names[][16]; /* change this in root.c if you change
the enum above */
typedef struct cvsroot_s {
char *original; /* the complete source CVSroot string */
CVSmethod method; /* one of the enum values above */
char *username; /* the username or NULL if method == local */
char *password; /* the username or NULL if method == local */
char *hostname; /* the hostname or NULL if method == local */
int port; /* the port or zero if method == local */
char *directory; /* the directory name */
char *original; /* The complete source CVSroot string. */
CVSmethod method; /* One of the enum values above. */
char *directory; /* The directory name. */
#ifdef CLIENT_SUPPORT
unsigned char isremote; /* nonzero if we are doing remote access */
char *username; /* The username or NULL if method == local. */
char *password; /* The password or NULL if method == local. */
char *hostname; /* The hostname or NULL if method == local. */
int port; /* The port or zero if method == local. */
char *proxy_hostname; /* The hostname of the proxy server, or NULL
* when method == local or no proxy will be
* used.
*/
int proxy_port; /* The port of the proxy or zero, as above. */
unsigned char isremote; /* Nonzero if we are doing remote access. */
#endif /* CLIENT_SUPPORT */
} cvsroot_t;

View File

@ -91,6 +91,8 @@ run_add_arg (s)
run_argv[run_argc] = (char *) 0; /* not post-incremented on purpose! */
}
int
run_exec (stin, stout, sterr, flags)
const char *stin;
@ -129,10 +131,10 @@ run_exec (stin, stout, sterr, flags)
cvs_outerr (")\n", 0);
}
if (noexec && (flags & RUN_REALLY) == 0)
return (0);
return 0;
/* make sure that we are null terminated, since we didn't calloc */
run_add_arg ((char *) 0);
run_add_arg ((char *)0);
/* setup default file descriptor numbers */
shin = 0;
@ -170,8 +172,8 @@ run_exec (stin, stout, sterr, flags)
}
/* Make sure we don't flush this twice, once in the subprocess. */
fflush (stdout);
fflush (stderr);
cvs_flushout();
cvs_flusherr();
/* The output files, if any, are now created. Do the fork and dups.
@ -251,7 +253,7 @@ run_exec (stin, stout, sterr, flags)
#ifdef BSD_SIGNALS
if (flags & RUN_SIGIGNORE)
{
memset ((char *) &vec, 0, sizeof (vec));
memset ((char *)&vec, 0, sizeof (vec));
vec.sv_handler = SIG_IGN;
(void) sigvec (SIGINT, &vec, &ivec);
(void) sigvec (SIGQUIT, &vec, &qvec);
@ -300,17 +302,17 @@ run_exec (stin, stout, sterr, flags)
#ifdef POSIX_SIGNALS
if (flags & RUN_SIGIGNORE)
{
(void) sigaction (SIGINT, &iact, (struct sigaction *) NULL);
(void) sigaction (SIGQUIT, &qact, (struct sigaction *) NULL);
(void) sigaction (SIGINT, &iact, (struct sigaction *)NULL);
(void) sigaction (SIGQUIT, &qact, (struct sigaction *)NULL);
}
else
(void) sigprocmask (SIG_SETMASK, &sigset_omask, (sigset_t *) NULL);
(void) sigprocmask (SIG_SETMASK, &sigset_omask, (sigset_t *)NULL);
#else
#ifdef BSD_SIGNALS
if (flags & RUN_SIGIGNORE)
{
(void) sigvec (SIGINT, &ivec, (struct sigvec *) NULL);
(void) sigvec (SIGQUIT, &qvec, (struct sigvec *) NULL);
(void) sigvec (SIGINT, &ivec, (struct sigvec *)NULL);
(void) sigvec (SIGQUIT, &qvec, (struct sigvec *)NULL);
}
else
(void) sigsetmask (mask);
@ -344,9 +346,11 @@ run_exec (stin, stout, sterr, flags)
out0:
if (rerrno)
errno = rerrno;
return (rc);
return rc;
}
void
run_print (fp)
FILE *fp;
@ -398,7 +402,7 @@ run_popen (cmd, mode)
int
piped_child (command, tofdp, fromfdp)
char **command;
const char **command;
int *tofdp;
int *fromfdp;
{
@ -436,7 +440,8 @@ piped_child (command, tofdp, fromfdp)
if (dup2 (from_child_pipe[1], STDOUT_FILENO) < 0)
error (1, errno, "cannot dup2 pipe");
execvp (command[0], command);
/* Okay to cast out const below - execvp don't return anyhow. */
execvp ((char *)command[0], (char **)command);
error (1, errno, "cannot exec %s", command[0]);
}
if (close (to_child_pipe[0]) < 0)
@ -455,7 +460,7 @@ close_on_exec (fd)
int fd;
{
#ifdef F_SETFD
if (fcntl (fd, F_SETFD, 1))
if (fcntl (fd, F_SETFD, 1) == -1)
error (1, errno, "can't set close-on-exec flag on %d", fd);
#endif
}

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,16 @@
/* Interface between the server and the rest of CVS. */
/*
* Copyright (c) 2003 The Free Software Foundation.
*
* Portions Copyright (c) 2003 Derek Price
* and Ximbiot <http://ximbiot.com>,
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS kit.
*
*
*
* This file contains the interface between the server and the rest of CVS.
*/
/* Miscellaneous stuff which isn't actually particularly server-specific. */
#ifndef STDIN_FILENO
@ -6,7 +18,7 @@
#define STDOUT_FILENO 1
#define STDERR_FILENO 2
#endif
/*
* Expand to `S', ` ', or the empty string. Used in `%s-> ...' trace printfs.
@ -30,13 +42,24 @@ extern int server_active;
/* Run the server. */
extern int server PROTO((int argc, char **argv));
/* kserver user authentication. */
# ifdef HAVE_KERBEROS
extern void kserver_authenticate_connection PROTO ((void));
# endif
/* pserver user authentication. */
# if defined (AUTH_SERVER_SUPPORT) || defined (HAVE_GSSAPI)
extern void pserver_authenticate_connection PROTO ((void));
# endif
/* See server.c for description. */
extern void server_pathname_check PROTO ((char *));
/* We have a new Entries line for a file. TAG or DATE can be NULL. */
extern void server_register
PROTO((char *name, char *version, char *timestamp,
char *options, char *tag, char *date, char *conflict));
PROTO((const char *name, const char *version, const char *timestamp,
const char *options, const char *tag, const char *date,
const char *conflict));
/* Set the modification time of the next file sent. This must be
followed by a call to server_updated on the same file. */
@ -47,7 +70,7 @@ extern void server_modtime PROTO ((struct file_info *finfo,
* We want to nuke the Entries line for a file, and (unless
* server_scratch_entry_only is subsequently called) the file itself.
*/
extern void server_scratch PROTO((char *name));
extern void server_scratch PROTO((const char *name));
/*
* The file which just had server_scratch called on it needs to have only
@ -61,10 +84,11 @@ extern void server_scratch_entry_only PROTO((void));
* repository.
*/
extern void server_checked_in
PROTO((char *file, char *update_dir, char *repository));
PROTO((const char *file, const char *update_dir, const char *repository));
extern void server_copy_file
PROTO((char *file, char *update_dir, char *repository, char *newfile));
PROTO((const char *file, const char *update_dir, const char *repository,
const char *newfile));
/* Send the appropriate responses for a file described by FINFO and
VERS. This is called after server_register or server_scratch. In
@ -99,18 +123,21 @@ extern void server_updated
extern int server_use_rcs_diff PROTO((void));
/* Set the Entries.Static flag. */
extern void server_set_entstat PROTO((char *update_dir, char *repository));
extern void server_set_entstat PROTO((const char *update_dir,
const char *repository));
/* Clear it. */
extern void server_clear_entstat PROTO((char *update_dir, char *repository));
extern void server_clear_entstat PROTO((const char *update_dir,
const char *repository));
/* Set or clear a per-directory sticky tag or date. */
extern void server_set_sticky PROTO((char *update_dir, char *repository,
char *tag, char *date, int nonbranch));
extern void server_set_sticky PROTO((const char *update_dir,
const char *repository, const char *tag,
const char *date, int nonbranch));
/* Send Template response. */
extern void server_template PROTO ((char *, char *));
extern void server_template PROTO ((const char *, const char *));
extern void server_update_entries
PROTO((char *file, char *update_dir, char *repository,
PROTO((const char *file, const char *update_dir, const char *repository,
enum server_updated_arg4 updated));
/* Pointer to a malloc'd string which is the directory which
@ -118,8 +145,6 @@ extern void server_update_entries
to the client. */
extern char *server_dir;
enum progs {PROG_CHECKIN, PROG_UPDATE};
extern void server_prog PROTO((char *, char *, enum progs));
extern void server_cleanup PROTO((int sig));
#ifdef SERVER_FLOWCONTROL
@ -173,5 +198,5 @@ extern struct request requests[];
/* Gzip library, see zlib.c. */
extern int gunzip_and_write PROTO ((int, char *, unsigned char *, size_t));
extern int read_and_gzip PROTO ((int, char *, unsigned char **, size_t *,
size_t *, int));
extern int read_and_gzip PROTO ((int, const char *, unsigned char **, size_t *,
size_t *, int));

187
contrib/cvs/src/stack.c Normal file
View File

@ -0,0 +1,187 @@
/*
* Copyright (c) 2004, Free Software Foundation,
* Derek Price,
* & Ximbiot <http://ximbiot.com>.
*
* 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.
*
* This module uses the hash.c module to implement a stack.
*/
#include "cvs.h"
#include <assert.h>
static void
do_push (stack, elem, isstring)
List *stack;
void *elem;
int isstring;
{
Node *p = getnode();
if (isstring)
p->key = elem;
else
p->data = elem;
addnode(stack, p);
}
void
push (stack, elem)
List *stack;
void *elem;
{
do_push (stack, elem, 0);
}
void
push_string (stack, elem)
List *stack;
char *elem;
{
do_push (stack, elem, 1);
}
static void *
do_pop (stack, isstring)
List *stack;
int isstring;
{
void *elem;
if (isempty (stack)) return NULL;
if (isstring)
{
elem = stack->list->prev->key;
stack->list->prev->key = NULL;
}
else
{
elem = stack->list->prev->data;
stack->list->prev->data = NULL;
}
delnode (stack->list->prev);
return elem;
}
void *
pop (stack)
List *stack;
{
return do_pop (stack, 0);
}
char *
pop_string (stack)
List *stack;
{
return do_pop (stack, 1);
}
static void
do_unshift (stack, elem, isstring)
List *stack;
void *elem;
int isstring;
{
Node *p = getnode();
if (isstring)
p->key = elem;
else
p->data = elem;
addnode_at_front(stack, p);
}
void
unshift (stack, elem)
List *stack;
void *elem;
{
do_unshift (stack, elem, 0);
}
void
unshift_string (stack, elem)
List *stack;
char *elem;
{
do_unshift (stack, elem, 1);
}
static void *
do_shift (stack, isstring)
List *stack;
int isstring;
{
void *elem;
if (isempty (stack)) return NULL;
if (isstring)
{
elem = stack->list->next->key;
stack->list->next->key = NULL;
}
else
{
elem = stack->list->next->data;
stack->list->next->data = NULL;
}
delnode (stack->list->next);
return elem;
}
void *
shift (stack)
List *stack;
{
return do_shift (stack, 0);
}
char *
shift_string (stack)
List *stack;
{
return do_shift (stack, 1);
}
int
isempty (stack)
List *stack;
{
if (stack->list == stack->list->next)
return 1;
return 0;
}

18
contrib/cvs/src/stack.h Normal file
View File

@ -0,0 +1,18 @@
/*
* Copyright (c) 2004, Free Software Foundation,
* Derek Price,
* & Ximbiot <http://ximbiot.com>.
*
* 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.
*/
void push PROTO((List *_stack, void *_elem));
void *pop PROTO((List *_stack));
void unshift PROTO((List *_stack, void *_elem));
void *shift PROTO((List *_stack));
void push_string PROTO((List *_stack, char *_elem));
char *pop_string PROTO((List *_stack));
void unshift_string PROTO((List *_stack, char *_elem));
char *shift_string PROTO((List *_stack));
int isempty PROTO((List *_stack));

View File

@ -10,8 +10,8 @@
#include "cvs.h"
static Dtype status_dirproc PROTO ((void *callerdat, char *dir,
char *repos, char *update_dir,
static Dtype status_dirproc PROTO ((void *callerdat, const char *dir,
const char *repos, const char *update_dir,
List *entries));
static int status_fileproc PROTO ((void *callerdat, struct file_info *finfo));
static int tag_list_proc PROTO((Node * p, void *closure));
@ -107,7 +107,8 @@ cvsstatus (argc, argv)
err = start_recursion (status_fileproc, (FILESDONEPROC) NULL,
status_dirproc, (DIRLEAVEPROC) NULL, NULL,
argc, argv, local,
W_LOCAL, 0, CVS_LOCK_READ, (char *) NULL, 1);
W_LOCAL, 0, CVS_LOCK_READ, (char *) NULL, 1,
(char *) NULL);
return (err);
}
@ -152,9 +153,15 @@ status_fileproc (callerdat, finfo)
sstat = "Locally Removed";
break;
case T_MODIFIED:
if (vers->ts_conflict)
if ( vers->ts_conflict
&& ( file_has_conflict ( finfo, vers->ts_conflict )
|| file_has_markers ( finfo ) ) )
sstat = "File had conflicts on merge";
else
/* Note that we do not re Register() the file when we spot
* a resolved conflict like update_fileproc() does on the
* premise that status should not alter the sandbox.
*/
sstat = "Locally Modified";
break;
case T_REMOVE_ENTRY:
@ -316,9 +323,9 @@ status_fileproc (callerdat, finfo)
static Dtype
status_dirproc (callerdat, dir, repos, update_dir, entries)
void *callerdat;
char *dir;
char *repos;
char *update_dir;
const char *dir;
const char *repos;
const char *update_dir;
List *entries;
{
if (!quiet)
@ -344,7 +351,7 @@ tag_list_proc (p, closure)
+ (branch ? strlen (branch) : strlen (p->data)));
sprintf (buf, "\t%-25s\t(%s: %s)\n", p->key,
branch ? "branch" : "revision",
branch ? branch : p->data);
branch ? branch : (char *)p->data);
cvs_output (buf, 0);
free (buf);

View File

@ -8,6 +8,7 @@
* Various useful functions for the CVS support code.
*/
#include <assert.h>
#include "cvs.h"
#include "getline.h"
@ -51,7 +52,7 @@ xmalloc (bytes)
/*
* realloc data and die if it fails [I've always wanted to have "realloc" do
* a "malloc" if the argument is NULL, but you can't depend on it. Here, I
* can *force* it.
* can *force* it.]
*/
void *
xrealloc (ptr, bytes)
@ -149,61 +150,70 @@ xstrdup (str)
return (s);
}
/* Remove trailing newlines from STRING, destructively. */
void
strip_trailing_newlines (str)
char *str;
{
int len;
len = strlen (str) - 1;
while (str[len] == '\n')
str[len--] = '\0';
/* Remove trailing newlines from STRING, destructively.
*
* RETURNS
*
* True if any newlines were removed, false otherwise.
*/
int
strip_trailing_newlines (str)
char *str;
{
size_t index, origlen;
index = origlen = strlen (str);
while (index > 0 && str[index-1] == '\n')
str[--index] = '\0';
return index != origlen;
}
/* Return the number of levels that path ascends above where it starts.
For example:
"../../foo" -> 2
"foo/../../bar" -> 1
*/
/* FIXME: Should be using ISDIRSEP, last_component, or some other
mechanism which is more general than just looking at slashes,
particularly for the client.c caller. The server.c caller might
want something different, so be careful. */
/* Return the number of levels that PATH ascends above where it starts.
* For example:
*
* "../../foo" -> 2
* "foo/../../bar" -> 1
*/
int
pathname_levels (path)
char *path;
pathname_levels (p)
const char *p;
{
char *p;
char *q;
int level;
int max_level;
if (p == NULL) return 0;
max_level = 0;
p = path;
level = 0;
do
{
q = strchr (p, '/');
if (q != NULL)
++q;
if (p[0] == '.' && p[1] == '.' && (p[2] == '\0' || p[2] == '/'))
/* Now look for pathname level-ups. */
if (p[0] == '.' && p[1] == '.' && (p[2] == '\0' || ISDIRSEP (p[2])))
{
--level;
if (-level > max_level)
max_level = -level;
}
else if (p[0] == '\0' || p[0] == '/' ||
(p[0] == '.' && (p[1] == '\0' || p[1] == '/')))
else if (p[0] == '\0' || ISDIRSEP (p[0]) ||
(p[0] == '.' && (p[1] == '\0' || ISDIRSEP (p[1]))))
;
else
++level;
p = q;
} while (p != NULL);
/* q = strchr (p, '/'); but sub ISDIRSEP() for '/': */
while (*p != '\0' && !ISDIRSEP (*p)) p++;
if (*p != '\0') p++;
} while (*p != '\0');
return max_level;
}
/* Free a vector, where (*ARGV)[0], (*ARGV)[1], ... (*ARGV)[*PARGC - 1]
are malloc'd and so is *ARGV itself. Such a vector is allocated by
line2argv or expand_wild, for example. */
@ -283,13 +293,12 @@ compare_revnums (rev1, rev2)
const char *rev1;
const char *rev2;
{
const char *s, *sp;
const char *t, *tp;
const char *sp, *tp;
char *snext, *tnext;
int result = 0;
sp = s = rev1;
tp = t = rev2;
sp = rev1;
tp = rev2;
while (result == 0)
{
result = strtoul (sp, &snext, 10) - strtoul (tp, &tnext, 10);
@ -393,6 +402,71 @@ get_date (date, now)
#endif
#endif
/* Given some revision, REV, return the first prior revision that exists in the
* RCS file, RCS.
*
* ASSUMPTIONS
* REV exists.
*
* INPUTS
* RCS The RCS node pointer.
* REV An existing revision in the RCS file referred to by RCS.
*
* RETURNS
* The first prior revision that exists in the RCS file, or NULL if no prior
* revision exists. The caller is responsible for disposing of this string.
*
* NOTES
* This function currently neglects the case where we are on the trunk with
* rev = X.1, where X != 1. If rev = X.Y, where X != 1 and Y > 1, then this
* function should work fine, as revision X.1 must exist, due to RCS rules.
*/
char *
previous_rev (rcs, rev)
RCSNode *rcs;
const char *rev;
{
char *p;
char *tmp = xstrdup (rev);
long r1;
char *retval;
/* Our retval can have no more digits and dots than our input revision. */
retval = xmalloc (strlen (rev) + 1);
p = strrchr (tmp, '.');
*p = '\0';
r1 = strtol (p+1, NULL, 10);
do {
if (--r1 == 0)
{
/* If r1 == 0, then we must be on a branch and our parent must
* exist, or we must be on the trunk with a REV like X.1.
* We are neglecting the X.1 with X != 1 case by assuming that
* there is no previous revision when we discover we were on
* the trunk.
*/
p = strrchr (tmp, '.');
if (p == NULL)
/* We are on the trunk. */
retval = NULL;
else
{
*p = '\0';
sprintf (retval, "%s", tmp);
}
break;
}
sprintf (retval, "%s.%ld", tmp, r1);
} while (!RCS_exist_rev (rcs, retval));
free (tmp);
return retval;
}
/* Given two revisions, find their greatest common ancestor. If the
two input revisions exist, then rcs guarantees that the gca will
exist. */
@ -518,9 +592,10 @@ check_numeric (rev, argc, argv)
*/
char *
make_message_rcslegal (message)
char *message;
const char *message;
{
char *dst, *dp, *mp;
char *dst, *dp;
const char *mp;
if (message == NULL) message = "";
@ -553,6 +628,61 @@ make_message_rcslegal (message)
return dst;
}
/*
* file_has_conflict
*
* This function compares the timestamp of a file with ts_conflict set
* to the timestamp on the actual file and returns TRUE or FALSE based
* on the results.
*
* This function does not check for actual markers in the file and
* file_has_markers() function should be called when that is interesting.
*
* ASSUMPTIONS
* The ts_conflict field is not NULL.
*
* RETURNS
* TRUE ts_conflict matches the current timestamp.
* FALSE The ts_conflict field does not match the file's
* timestamp.
*/
int
file_has_conflict (finfo, ts_conflict)
const struct file_info *finfo;
const char *ts_conflict;
{
char *filestamp;
int retcode;
/* If ts_conflict is NULL, there was no merge since the last
* commit and there can be no conflict.
*/
assert ( ts_conflict );
/*
* If the timestamp has changed and no
* conflict indicators are found, it isn't a
* conflict any more.
*/
#ifdef SERVER_SUPPORT
if ( server_active )
retcode = ts_conflict[0] == '=';
else
#endif /* SERVER_SUPPORT */
{
filestamp = time_stamp ( finfo->file );
retcode = !strcmp ( ts_conflict, filestamp );
free ( filestamp );
}
return retcode;
}
/* Does the file FINFO contain conflict markers? The whole concept
of looking at the contents of the file to figure out whether there are
unresolved conflicts is kind of bogus (people do want to manage files
@ -695,19 +825,18 @@ void
resolve_symlink (filename)
char **filename;
{
if ((! filename) || (! *filename))
if (filename == NULL || *filename == NULL)
return;
while (islink (*filename))
{
char *newname;
#ifdef HAVE_READLINK
/* The clean thing to do is probably to have each filesubr.c
implement this (with an error if not supported by the
platform, in which case islink would presumably return 0).
But that would require editing each filesubr.c and so the
expedient hack seems to be looking at HAVE_READLINK. */
newname = xreadlink (*filename);
char *newname = xreadlink (*filename);
if (isabsolute (newname))
{
@ -716,7 +845,7 @@ resolve_symlink (filename)
}
else
{
char *oldname = last_component (*filename);
const char *oldname = last_component (*filename);
int dirlen = oldname - *filename;
char *fullnewname = xmalloc (dirlen + strlen (newname) + 1);
strncpy (fullnewname, *filename, dirlen);
@ -797,6 +926,8 @@ shell_escape(buf, str)
return buf;
}
/*
* We can only travel forwards in time, not backwards. :)
*/
@ -849,7 +980,8 @@ sleep_past (desttime)
struct timeval tv;
tv.tv_sec = s;
tv.tv_usec = us;
(void)select (0, (fd_set *)NULL, (fd_set *)NULL, (fd_set *)NULL, &tv);
(void)select (0, (fd_set *)NULL, (fd_set *)NULL, (fd_set *)NULL,
&tv);
}
#else
if (us > 0) s++;
@ -857,3 +989,14 @@ sleep_past (desttime)
#endif
}
}
/* Return non-zero iff FILENAME is absolute.
Trivial under Unix, but more complicated under other systems. */
int
isabsolute (filename)
const char *filename;
{
return ISABSOLUTE (filename);
}

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