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

which included commits to RCS files with non-trunk default branches.
This commit is contained in:
Peter Wemm 1997-06-22 10:55:49 +00:00
commit b4f08217a4
30 changed files with 1065 additions and 148 deletions

View File

@ -1,3 +1,24 @@
Wed Jun 18 00:00:02 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* NEWS: Mention pserver --allow-root.
Mon Jun 16 19:07:34 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* Makefile.in (SUBDIRS): Add emx.
* configure.in (AC_OUTPUT): Add emx.
* configure: Regenerated.
Sun Jun 8 23:44:00 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* configure.in (AC_CHECK_FUNCS): Remove mkfifo; not used anywhere.
* configure, config.h.in: Regenerated.
Thu May 29 15:53:06 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* DEVEL-CVS: Add "Policy regarding checkout-only access" to
replace parenthetical remark about checkout-only access. This is
more of a cosmetic/editorial change than a new policy.
Wed May 21 17:02:29 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* BUGS: Add item about wrappers.

View File

@ -43,8 +43,7 @@ distribution of such items under the terms of the GNU Public License.
----------------------------------------------------------------------
Procedure for dealing with people who want to be developers:
People who want checkin access (checkout-only access is available primarily
via snapshots, for technical reasons) are first requested to send
People who want checkin access are first requested to send
patches and have them reviewed by a developer. If they submit some
good ones (preferably over a period of time, to demonstrate sustained
interest), then one of the developers can ask the devel-cvs mailing
@ -52,3 +51,11 @@ list whether it is OK to make this person a developer (after first
sending the prospective developer a copy of this file and then having
the prospective developer say they want to be a developer). If there
are no objections, an account will be created.
----------------------------------------------------------------------
Policy regarding checkout-only access:
Checkout-only access to the CVS repository is available to all, on an
anonymous basis (no need for registration or other complications).
The exact technical mechanisms by which it is available are not
covered by this policy.

View File

@ -97,7 +97,7 @@ DISTFILES = \
USOURCE_SUBDIRS = lib zlib src
# All other subdirs:
SUBDIRS = ${USOURCE_SUBDIRS} man doc contrib tools \
windows-NT os2 macintosh vms
windows-NT os2 emx macintosh vms
# Only make TAGS/tags files in these directories.
TSUBDIRS= src lib

View File

@ -1,5 +1,11 @@
Changes since 1.9:
* When setting up the pserver server, one now must specify the
allowable CVSROOT directories in inetd.conf. See the Password
authentication server section of cvs.texinfo for details. Note that
this implies that everyone who is running a pserver server must edit
inetd.conf when upgrading their CVS.
* The client no longer needs an external patch program (assuming both
the client and the server have been updated to the new version).

View File

@ -105,9 +105,6 @@
/* Define if you have the krb_get_err_text function. */
#undef HAVE_KRB_GET_ERR_TEXT
/* Define if you have the mkfifo function. */
#undef HAVE_MKFIFO
/* Define if you have the mktemp function. */
#undef HAVE_MKTEMP

View File

@ -1797,7 +1797,7 @@ fi
done
for ac_func in fchmod fsync ftime mkfifo mktemp putenv vfork vprintf ftruncate timezone getpagesize initgroups fchdir sigaction sigprocmask sigvec sigsetmask sigblock tempnam tzset readlink wait3
for ac_func in fchmod fsync ftime mktemp putenv vfork vprintf ftruncate timezone getpagesize initgroups fchdir sigaction sigprocmask sigvec sigsetmask sigblock tempnam tzset readlink wait3
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
@ -2928,7 +2928,7 @@ trap 'rm -fr `echo "Makefile lib/Makefile src/Makefile zlib/Makefile doc/Makefil
man/Makefile tools/Makefile tools/pcl-cvs/Makefile \
contrib/Makefile contrib/elib/Makefile \
windows-NT/Makefile windows-NT/SCC/Makefile \
os2/Makefile macintosh/Makefile vms/Makefile \
os2/Makefile emx/Makefile macintosh/Makefile vms/Makefile \
stamp-h config.h src/options.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
EOF
cat >> $CONFIG_STATUS <<EOF
@ -2981,7 +2981,7 @@ CONFIG_FILES=\${CONFIG_FILES-"Makefile lib/Makefile src/Makefile zlib/Makefile d
man/Makefile tools/Makefile tools/pcl-cvs/Makefile \
contrib/Makefile contrib/elib/Makefile \
windows-NT/Makefile windows-NT/SCC/Makefile \
os2/Makefile macintosh/Makefile vms/Makefile \
os2/Makefile emx/Makefile macintosh/Makefile vms/Makefile \
stamp-h"}
EOF
cat >> $CONFIG_STATUS <<\EOF

View File

@ -62,7 +62,7 @@ AC_TYPE_MODE_T
AC_TYPE_SIZE_T
AC_TYPE_PID_T
AC_REPLACE_FUNCS(getwd mkdir rename strdup strstr dup2 strerror valloc waitpid vasprintf strtoul)
AC_CHECK_FUNCS(fchmod fsync ftime mkfifo mktemp putenv vfork vprintf ftruncate timezone getpagesize initgroups fchdir sigaction sigprocmask sigvec sigsetmask sigblock tempnam tzset readlink wait3)
AC_CHECK_FUNCS(fchmod fsync ftime mktemp putenv vfork vprintf ftruncate timezone getpagesize initgroups fchdir sigaction sigprocmask sigvec sigsetmask sigblock tempnam tzset readlink wait3)
dnl
dnl Look for shadow password files before we go ahead and set getspnam.
@ -266,5 +266,5 @@ AC_OUTPUT(Makefile lib/Makefile src/Makefile zlib/Makefile doc/Makefile \
man/Makefile tools/Makefile tools/pcl-cvs/Makefile \
contrib/Makefile contrib/elib/Makefile \
windows-NT/Makefile windows-NT/SCC/Makefile \
os2/Makefile macintosh/Makefile vms/Makefile \
os2/Makefile emx/Makefile macintosh/Makefile vms/Makefile \
stamp-h)

View File

@ -1,3 +1,61 @@
Wed Jun 18 00:03:25 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* cvs.texinfo (Password authentication server): Document
--allow-root.
Tue Jun 17 09:58:03 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* cvs.texinfo (Error messages): Add "unknown option" from RCS.
Fri Jun 13 12:11:09 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* cvs.texinfo (Global options): Add note about how -n might affect
CVS's output.
Thu Jun 12 09:33:40 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* cvs.texinfo (Other problems): New node. Add discussion of
problem with old rcsmerge.
* cvs.texinfo (Environment variables): Add CVSUMASK.
Mon Jun 2 18:39:57 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* cvs.texinfo (Moving a repository): New node.
Tue May 27 18:27:57 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* cvs.texinfo (Working directory storage): Add comment about
timestamps.
* cvsclient.texi (Responses): Add Mod-time.
Mon May 26 10:04:32 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* cvs.texinfo (Wrappers): Add comment concerning -t/-f and
client/server.
Sun May 25 00:08:39 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* cvs.texinfo (Multiple vendor branches): New node.
(First import, import options, Invoking CVS): xref to it.
Sat May 24 23:47:47 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* cvs.texinfo (File permissions): Add comment about group
ownership in repository and setgid bit on directories.
Fri May 23 17:14:05 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* RCSFILES: Fix typo in dead newphrase description ("an" -> "a").
Fri May 23 16:33:38 1997 Ian Lance Taylor <ian@cygnus.com>
* RCSFILES: Mention dead as a newphrase.
Fri May 23 09:45:39 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* cvs.texinfo (Builds): In comment, update URL of mk.
Thu May 22 09:25:56 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* cvs.texinfo (Error messages): Add comment about yet another way

View File

@ -53,6 +53,9 @@ rules.
---------- -------
namespace RCS library done at Silicon Graphics Inc. (SGI) in 1996
(a modified RCS 5.7--not sure it has any other name).
dead A set of RCS patches developed by Rich Pixley at
Cygnus. These were for CVS, and predated the current
CVS death support, which does not require RCS changes.
The rules regarding keyword expansion are not documented along with
the rest of the RCS file format; they are documented in the co(1)

View File

@ -980,6 +980,7 @@ user-defined modules.
* Multiple repositories:: Multiple repositories
* Creating a repository:: Creating a repository
* Backing up:: Backing up a repository
* Moving a repository:: Moving a repository
* Remote repositories:: Accessing repositories on remote machines
* Read-only access:: Granting read-only access to the repository
* Server temporary directory:: The server creates temporary directories
@ -1224,6 +1225,18 @@ typical for newly created files, except that sometimes
@sc{cvs} creates them read-only (see the sections on
watches, @ref{Setting a watch}; -r, @ref{Global
options}; or CVSREAD, @ref{Environment variables}).
@c FIXME: Need more discussion of which users and
@c groups should own the file in the repository.
@c Include a somewhat detailed example of the usual
@c case where CVSUMASK is 007, the developers are all
@c in a group, and that group owns stuff in the
@c repository. Need to talk about group ownership of
@c newly-created directories/files (on some unices,
@c such as SunOS4, setting the setgid bit on the
@c directories will make files inherit the directory's
@c group. On other unices, your mileage may vary. I
@c can't remember what POSIX says about this, if
@c anything).
Note that using the client/server @sc{cvs}
(@pxref{Remote repositories}), there is no good way to
@ -1292,6 +1305,13 @@ non-@code{dead} state.
@node Working directory storage
@section How data is stored in the working directory
@c FIXME: Somewhere we should discuss timestamps (test
@c case "stamps" in sanity.sh). But not here. Maybe
@c in some kind of "working directory" chapter which
@c would encompass the "Builds" one? But I'm not sure
@c whether that is a good organization (is it based on
@c what the user wants to do?).
While we are discussing @sc{cvs} internals which may
become visible from time to time, we might as well talk
about what @sc{cvs} puts in the @file{CVS} directories
@ -1756,6 +1776,41 @@ what has changed, and then when you are ready, commit
the changes into the repository.
@end itemize
@node Moving a repository
@section Moving a repository
@cindex repository, moving
@cindex moving a repository
@cindex copying a repository
Just as backing up the files in the repository is
pretty much like backing up any other files, if you
need to move a repository from one place to another it
is also pretty much like just moving any other
collection of files.
The main thing to consider is that working directories
point to the repository. The simplest way to deal with
a moved repository is to just get a fresh working
directory after the move. Of course, you'll want to
make sure that the old working directory had been
checked in before the move, or you figured out some
other way to make sure that you don't lose any
changes. If you really do want to reuse the existing
working directory, it should be possible with manual
surgery on the @file{CVS/Repository} files. You can
see @ref{Working directory storage}, for information on
the @file{CVS/Repository} and @file{CVS/Root} files, but
unless you are sure you want to bother, it probably
isn't worth it.
@c FIXME: This should be made unnecessary by:
@c 1) a new -d should affect CVS/Root files throughout
@c the tree, not just at the top level.
@c 2) the RELATIVE_REPOS code should be fixed and made the
@c default. I think that CVS already reads
@c CVS/Repository files which are absolute or
@c relative. FIXME: needs more investigation and
@c documentation in "Working directory storage".
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@node Remote repositories
@section Remote repositories
@ -1993,13 +2048,19 @@ single line in @file{inetd.conf}) should be sufficient:
@example
2401 stream tcp nowait root /usr/local/bin/cvs
cvs -b /usr/local/bin pserver
cvs -b /usr/local/bin --allow-root=/usr/cvsroot pserver
@end example
The @samp{-b} option specifies the directory which contains
the @sc{rcs} binaries on the server. You could also use the
@samp{-T} option to specify a temporary directory.
The @samp{--allow-root} option specifies the allowable
@sc{cvsroot} directory. Clients which attempt to use a
different @sc{cvsroot} directory will not be allowed to
connect. If there is more than one @sc{cvsroot}
directory which you want to allow, repeat the option.
If your @code{inetd} wants a symbolic service
name instead of a raw port number, then put this in
@file{/etc/services}:
@ -2108,6 +2169,8 @@ passwd} command.
@c would open up a can of worms in that the users next
@c questions are likely to be "where do I get it?" and
@c "how do I use it?"
@c Also note that htpasswd, at least the version I had,
@c likes to clobber the third field.
@node Password authentication client
@subsubsection Using the client with password authentication
@ -4938,6 +5001,7 @@ revision.
* Reverting local changes:: Reverting a module to the latest vendor release
* Binary files in imports:: Binary files require special handling
* Keywords in imports:: Keyword substitution might be undesirable
* Multiple vendor branches:: What if you get sources from several places?
@end menu
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -4953,7 +5017,7 @@ command to track third-party sources, the @dfn{vendor
tag} and @dfn{release tags} are useful. The
@dfn{vendor tag} is a symbolic name for the branch
(which is always 1.1.1, unless you use the @samp{-b
@var{branch}} flag---@xref{import options}.). The
@var{branch}} flag---@xref{Multiple vendor branches}.). The
@dfn{release tags} are symbolic names for a particular
release, such as @samp{FSF_0_04}.
@ -5085,6 +5149,58 @@ and use the @samp{-k} option to @code{cvs update} or
@c has no effect. Not clear to me whether it should
@c or not.
@node Multiple vendor branches
@section Multiple vendor branches
All the examples so far assume that there is only one
vendor from which you are getting sources. In some
situations you might get sources from a variety of
places. For example, suppose that you are dealing with
a project where many different people and teams are
modifying the software. There are a variety of ways to
handle this, but in some cases you have a bunch of
source trees lying around and what you want to do more
than anything else is just to all put them in CVS so
that you at least have them in one place.
For handling situations in which there may be more than
one vendor, you may specify the @samp{-b} option to
@code{cvs import}. It takes as an argument the vendor
branch to import to. The default is @samp{-b 1.1.1}.
For example, suppose that there are two teams, the red
team and the blue team, that are sending you sources.
You want to import the red team's efforts to branch
1.1.1 and use the vendor tag RED. You want to import
the blue team's efforts to branch 1.1.3 and use the
vendor tag BLUE. So the commands you might use are:
@example
$ cvs import dir RED RED_1-0
$ cvs import -b 1.1.3 dir BLUE BLUE_1-5
@end example
Note that if your vendor tag does not match your
@samp{-b} option, CVS will not detect this case! For
example,
@example
$ cvs import -b 1.1.3 dir RED RED_1-0
@end example
@noindent
Be careful; this kind of mismatch is sure to sow
confusion or worse. I can't think of a useful purpose
for the ability to specify a mismatch here, but if you
discover such a use, don't. CVS is likely to make this
an error in some future release.
@c Probably should say more about the semantics of
@c multiple branches. What about the default branch?
@c What about joining (perhaps not as useful with
@c multiple branches, or perhaps it is. Either way
@c should be mentioned).
@c ---------------------------------------------------------------------
@node Moving files
@chapter Moving and renaming files
@ -6062,8 +6178,11 @@ is Odin (see
@c Of course, many non-CVS systems have this kind of
@c functionality, for example OSF's ODE
@c (http://www.osf.org/ode/) or mk
@c (http://www.io.org/~pzi/heading.html;
@c ftp://ftp.interlog.com/pub/unix/mk is out of date). But I'm not sure
@c (http://www.grin.net/~pzi/mk-3.18.4.docs/mk_toc.html
@c He has changed providers in the past; a search engine search
@c for "Peter Ziobrzynski" probably won't get too many
@c spurious hits :-). A more stable URL might be
@c ftp://ftp.uu.net/pub/cmvc/mk). But I'm not sure
@c there is any point in mentioning them here unless they
@c can work with CVS.
@ -6380,6 +6499,10 @@ The available @samp{cvs_options} (that are given to the
left of @samp{cvs_command}) are:
@table @code
@item --allow-root=@var{rootdir}
Specify legal @sc{cvsroot} directory. See
@ref{Password authentication server}.
@cindex RCSBIN, overriding
@cindex Overriding RCSBIN
@item -b @var{bindir}
@ -6442,6 +6565,12 @@ Do not change any files. Attempt to execute the
@samp{cvs_command}, but only to issue reports; do not remove,
update, or merge any existing files, or create any new files.
Note that @sc{cvs} will not necessarily produce exactly
the same output as without @samp{-n}. In some cases
the output will be the same, but in other cases
@sc{cvs} will skip some of the processing that would
have been required to produce the exact same output.
@item -Q
Cause the command to be really quiet; the command will only
generate output for serious problems.
@ -8068,13 +8197,7 @@ There are three additional special options.
@table @code
@item -b @var{branch}
Specify a first-level branch other than 1.1.1. Unless
the @samp{-b @var{branch}} flag is given, revisions will
@emph{always} be made to the branch 1.1.1---even if a
@var{vendortag} that matches another branch is given!
What happens in that case, is that the tag will be
reset to 1.1.1. Warning: This behavior might change
in the future.
See @ref{Multiple vendor branches}.
@item -k @var{subst}
Indicate the RCS keyword expansion mode desired. This
@ -9400,7 +9523,7 @@ Import files into CVS, using vendor branches. See
@table @code
@item -b @var{bra}
Import to vendor branch @var{bra}. See
@ref{import options}.
@ref{Multiple vendor branches}.
@item -d
Use the file's modification time as the time of
@ -9957,6 +10080,10 @@ with the @code{-t} flag) and the other when the file is
checked out of the repository (this is denoted with the
@code{-f} flag). The @samp{-t}/@samp{-f} feature does
not work with client/server @sc{cvs}.
@c I think maybe -t/-f works client/server if a single
@c file converts to/from a single file, as opposed to
@c the file<->directory case. Could use more
@c investigation...
The @file{cvswrappers} also has a @samp{-m} option to
specify the merge methodology that should be used when
@ -10902,6 +11029,10 @@ try hard to make the files in your working directory
read-only. When this is not set, the default behavior
is to permit modification of your working files.
@item $CVSUMASK
Controls permissions of files in the repository. See
@ref{File permissions}.
@cindex CVSROOT
@item $CVSROOT
Should contain the full pathname to the root of the @sc{cvs}
@ -11057,8 +11188,16 @@ argument lists of most @sc{rcs} commands.
@node Troubleshooting
@appendix Troubleshooting
If you are having trouble with @sc{cvs}, this appendix
may help. If there is a particular error message which
you are seeing, then you can look up the message
alphabetically. If not, you can look through the
section on other problems to see if your problem is
mentioned there.
@menu
* Error messages:: Partial list of CVS errors
* Other problems:: Problems not readily listed by error message
@end menu
@ignore
@ -11185,6 +11324,16 @@ every place it appears in your @code{modules}
file. For more information on the @code{modules} file,
see @ref{modules}.
@item rcs error: Unknown option: -x,v/
This message will be followed by a usage message for
@sc{rcs}. It means that you have an old version of
@sc{rcs} (probably supplied with your operating
system). CVS only works with @sc{rcs} version 5 and
later.
@c For more information on installing @sc{cvs}, see
@c (FIXME: where? it depends on whether you are
@c getting binaries or sources or what).
@item cvs [server aborted]: received broken pipe signal
This message seems to be caused by a hard-to-track-down
bug in @sc{cvs} or the systems it runs on (we don't
@ -11244,6 +11393,23 @@ exit 0
@c potentially confusing for the new user.
@end table
@node Other problems
@appendixsec Other common problems
Here is a list of problems which cannot be readily
looked up based on an error message. They are in no
particular order.
@itemize @bullet
@item
If @code{cvs update} finds a conflict and tries to
merge, as described in @ref{Conflicts example}, but
doesn't tell you there were conflicts, then you may
have an old version of @sc{rcs}. For more information
on how to set this up, see the @file{INSTALL} file in
the @sc{cvs} source distribution.
@end itemize
@c ---------------------------------------------------------------------
@node Copying
@appendix GNU GENERAL PUBLIC LICENSE

View File

@ -1100,6 +1100,23 @@ This @var{mode} applies to the next file mentioned in
@code{Checked-in}, @code{New-entry}, @code{Updated}, @code{Merged}, or
@code{Patched} response.
@item Mod-time @var{time} \n
Set the modification time of the next file sent to @var{time}. Next
file sent means sent by @code{Checked-in}, @code{Created}, etc. The
@var{time} is in the format specified by RFC822 as modified by RFC1123.
The server may specify any timezone it chooses; clients will want to
convert that to their own timezone as appropriate. An example of this
format is:
@example
26 May 1997 13:01:40 -0400
@end example
There is no requirement that the client and server clocks be
synchronized. The server just sends its recommendation for a timestamp
(based on its own clock, presumably), and the client should just believe
it (this means that the time might be in the future, for example).
@item Checksum @var{checksum}\n
The @var{checksum} applies to the next file sent over via
@code{Updated}, @code{Merged}, or @code{Patched}. In the case of

View File

@ -1,3 +1,11 @@
Mon Jun 16 18:59:50 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* system.h: Add CVS_FNMATCH.
Sun Jun 8 23:41:11 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* system.h (mkfifo): Remove; not used anywhere.
Thu Mar 6 17:14:49 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* regex.c: Partial merge with version from emacs 19.34. I brought

View File

@ -104,10 +104,6 @@
# endif
#endif
#if !defined(HAVE_MKFIFO)
#define mkfifo(path, mode) (mknod ((path), (mode) | S_IFIFO, 0))
#endif
#ifdef NEED_DECOY_PERMISSIONS /* OS/2, really */
#define S_IRUSR S_IREAD
@ -469,6 +465,11 @@ char *getwd ();
#define CVS_UNLINK unlink
#endif
/* Wildcard matcher. Should be case-insensitive if the system is. */
#ifndef CVS_FNMATCH
#define CVS_FNMATCH fnmatch
#endif
/* Some file systems are case-insensitive. If FOLD_FN_CHAR is
#defined, it maps the character C onto its "canonical" form. In a
case-insensitive system, it would map all alphanumeric characters

View File

@ -1,3 +1,126 @@
Tue Jun 17 22:48:00 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* main.c (main): Add --allow-root=ROOT argument; call
root_allow_add for each time it is specified. Call
root_allow_free before exiting.
* root.c, cvs.h (root_allow_add, root_allow_free, root_allow_ok):
New function.
* server.c (pserver_authenticate_connection): If root_allow_ok
doesn't like the CVSROOT directory, don't allow access.
Tue Jun 17 14:30:14 1997 Jim Kingdon (unknown@beezley)
* client.c: Add "copyright" notice. If NO_EXT_METHOD, omit
start_rsh_method.
* client.c (update_entries): Cast argument to MD5Update from
char * to unsigned char *.
Mon Jun 16 16:46:28 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* run.c (piped_child, filter_stream_through_program):
If USE_SETMODE_BINARY, then put the pipes into binary mode.
* find_names.c, ignore.c, lock.c, wrapper.c: Change fnmatch to
CVS_FNMATCH.
* client.c (start_server): If NO_EXT_METHOD, then give a fatal
error on any use of :ext:.
Sun Jun 15 22:30:27 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* sanity.sh (toplevel): Match U CVSROOT/* lines with DOTSTAR in
test toplevel-9.
Thu Jun 12 10:27:51 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* sanity.sh (toplevel): Remove Emptydir before starting.
* sanity.sh: Change "rm -rf" to "rm -r" when deleting working
directories (except a few watches cases). Helps detect cases
where the testsuite has cd'd to somewhere other than where we
think it has.
(basic2): Remove "rm -r first-dir" between tests 49 and 50. The
directory was already deleted in test 45.5.
(rcs): Add "cd .." at end of tests.
(stamps): No longer cd to TESTDIR; shouldn't be necessary with
fix to "rcs" test.
Wed Jun 11 22:28:38 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* sanity.sh (basicb): Also remove CVSROOT/Emptydir at end of
test. Otherwise it affects the toplevel-9 test for remote.
Tue Jun 10 14:03:32 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* sanity.sh (toplevel): Change "update" and "checkout" to "[a-z]*"
as these read "server" instead for "make remotecheck". Change
expect strings for toplevel-9 to accept the behavior of remote CVS
(see comments for more discussion).
* sanity.sh: New tests stamps-9 through stamps-11 test timestamp
behavior on cvs update.
Mon Jun 9 22:42:50 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* sanity.sh: Remove "#! /bin/zsh" line at end. I assume it was
added accidentally.
Tue Jun 10 03:08:46 1997 Norbert Kiesel <nk@psycho.de>
* sanity.sh: new tests "toplevel" for the new toplevel CVS
directory creation (including one test which shows an error in
this area).
Sun Jun 8 20:52:00 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* rcs.c (getrcsrev): Before printing error, check whether it was
feof or ferror.
* rcs.h, import.c (add_rcs_file): No longer static. New arguments
add_vbranch, add_vhead, and add_logfp replace access to static
variables vbranch, vhead, and logfp.
* mkmodules.c: Call it instead of RCS_CI.
* import.c (process_import_file): Adjust call to add_rcs_file.
Tue Jun 3 10:18:33 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* sanity.sh (basicb): Match "." with "\." not ".".
Tue Jun 3 13:02:37 1997 Norbert Kiesel <nk@cosa.de>
* checkout.c (checkout): Removed restriction of not sending -k in
remote export (I think this was introduced while the -k handling
was still broken in remote mode). Give better error texts
regarding -c and -s options. Use error() instead of usage() for
reporting errors in all places. Reindented some lines. Free
xmalloc'd space of options.
Thu May 29 16:32:47 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* rcscmds.c (RCS_checkin), mkmodules.c (init): Pass -w option to
"ci", specifying getcaller ().
* server.h, server.c (CVS_Username): Now extern.
* subr.c (getcaller): Return CVS_Username if it is set.
Wed May 28 22:31:38 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* update.c (update_fileproc): If wrap_merge_is_copy and we would
like to do a merge, give a fatal error. See comment for why.
* sanity.sh (mwrap): New tests, tests for above fix.
Tue May 27 21:59:32 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* sanity.sh (stamps): cd to ${TESTDIR} before starting.
Mon May 26 15:31:30 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* client.c (handle_mod_time): New function.
(responses): Add "Mod-time".
(stored_modtime_valid, stored_modtime): New variables.
(update_entries): If it is set, change the file's modtime.
* server.c, server.h (server_modtime): New function.
* vers_ts.c (Version_TS): Call it.
* patch.c (patch_fileproc): Add comment about why we don't.
* sanity.sh (stamps): Added, tests for above fix.
Fri May 16 13:14:30 1997 Jim Kingdon <kingdon@harvey.cyclic.com>
* subr.c (free_names): Update documentation to reflect fact that

View File

@ -221,8 +221,11 @@ checkout (argc, argv)
if (shorten == -1)
shorten = 0;
if ((!(cat + status) && argc == 0) || ((cat + status) && argc != 0))
usage (valid_usage);
if ((cat || status) && argc != 0)
error (1, 0, "-c and -s must not get any arguments");
if (!(cat || status) && argc == 0)
error (1, 0, "must specify at least one module or directory");
if (where && pipeout)
error (1, 0, "-d and -p are mutually exclusive");
@ -230,20 +233,10 @@ checkout (argc, argv)
if (strcmp (command_name, "export") == 0)
{
if (!tag && !date)
{
error (0, 0, "must specify a tag or date");
usage (valid_usage);
}
error (1, 0, "must specify a tag or date");
if (tag && isdigit (tag[0]))
error (1, 0, "tag `%s' must be a symbolic tag", tag);
/*
* mhy 950615: -kv doesn't work for binaries with RCS keywords.
* Instead use the default provided in the RCS file (-ko for binaries).
*/
#if 0
if (!options)
options = RCS_check_kflag ("v");/* -kv is default */
#endif
}
if (!safe_location()) {
@ -279,10 +272,14 @@ checkout (argc, argv)
client_expand_modules (argc, argv, local);
}
if (!run_module_prog) send_arg ("-n");
if (local) send_arg ("-l");
if (pipeout) send_arg ("-p");
if (!force_tag_match) send_arg ("-f");
if (!run_module_prog)
send_arg ("-n");
if (local)
send_arg ("-l");
if (pipeout)
send_arg ("-p");
if (!force_tag_match)
send_arg ("-f");
if (aflag)
send_arg("-A");
if (!shorten)
@ -293,16 +290,10 @@ checkout (argc, argv)
if (cat)
send_arg("-c");
if (where != NULL)
{
option_with_arg ("-d", where);
}
if (status)
send_arg("-s");
/* Why not send -k for export? This would appear to make
remote export differ from local export. FIXME. */
if (strcmp (command_name, "export") != 0
&& options != NULL
&& options[0] != '\0')
if (options != NULL && options[0] != '\0')
send_arg (options);
option_with_arg ("-r", tag);
if (date)
@ -335,6 +326,8 @@ checkout (argc, argv)
if (cat || status)
{
cat_module (status);
if (options)
free (options);
return (0);
}
db = open_module ();
@ -432,6 +425,8 @@ checkout (argc, argv)
where, shorten, local, run_module_prog,
(char *) NULL);
close_module (db);
if (options)
free (options);
return (err);
}

View File

@ -1,4 +1,14 @@
/* CVS client-related stuff. */
/* CVS client-related stuff.
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. */
#ifdef HAVE_CONFIG_H
#include "config.h"
@ -1303,7 +1313,28 @@ handle_mode (args, len)
stored_mode = xstrdup (args);
stored_mode_valid = 1;
}
/* Nonzero if time was specified in Mod-time. */
static int stored_modtime_valid;
/* Time specified in Mod-time. */
static time_t stored_modtime;
static void handle_mod_time PROTO ((char *, int));
static void
handle_mod_time (args, len)
char *args;
int len;
{
if (stored_modtime_valid)
error (0, 0, "protocol error: duplicate Mod-time");
stored_modtime = get_date (args, NULL);
if (stored_modtime == (time_t) -1)
error (0, 0, "protocol error: cannot parse date %s", args);
else
stored_modtime_valid = 1;
}
/*
* If we receive a patch, but the patch program fails to apply it, we
* want to request the original file. We keep a list of files whose
@ -1787,7 +1818,7 @@ update_entries (data_arg, ent_list, short_pathname, filename)
the file out, so that we don't have to read it
back in again. */
MD5Init (&context);
MD5Update (&context, patchedbuf, patchedlen);
MD5Update (&context, (unsigned char *) patchedbuf, patchedlen);
MD5Final (checksum, &context);
if (memcmp (checksum, stored_checksum, 16) != 0)
{
@ -1899,6 +1930,19 @@ update_entries (data_arg, ent_list, short_pathname, filename)
change_mode (filename, stored_mode);
stored_mode_valid = 0;
if (stored_modtime_valid)
{
struct utimbuf t;
memset (&t, 0, sizeof (t));
/* There is probably little point in trying to preserved the
actime (or is there? What about Checked-in?). */
t.modtime = t.actime = stored_modtime;
if (utime (filename, &t) < 0)
error (0, errno, "cannot set time on %s", filename);
stored_modtime_valid = 0;
}
/*
* Process the entries line. Do this after we've written the file,
* since we need the timestamp.
@ -2869,6 +2913,7 @@ struct response responses[] =
RSP_LINE("Patched", handle_patched, response_type_normal, rs_optional),
RSP_LINE("Rcs-diff", handle_rcs_diff, response_type_normal, rs_optional),
RSP_LINE("Mode", handle_mode, response_type_normal, rs_optional),
RSP_LINE("Mod-time", handle_mod_time, response_type_normal, rs_optional),
RSP_LINE("Removed", handle_removed, response_type_normal, rs_essential),
RSP_LINE("Remove-entry", handle_remove_entry, response_type_normal,
rs_optional),
@ -3564,7 +3609,12 @@ start_server ()
#endif
case ext_method:
#if defined (NO_EXT_METHOD)
error (0, 0, ":ext: method not supported by this port of CVS");
error (1, 0, "try :server: instead");
#else
start_rsh_server (&tofd, &fromfd);
#endif
break;
case server_method:
@ -3873,6 +3923,8 @@ the :server: access method is not supported by this port of CVS");
walklist (variable_list, send_variable_proc, NULL);
}
#ifndef NO_EXT_METHOD
/* Contact the server by starting it with rsh. */
/* Right now, we have two different definitions for this function,
@ -4039,6 +4091,8 @@ start_rsh_server (tofdp, fromfdp)
#endif /* START_RSH_WITH_POPEN_RW */
#endif /* NO_EXT_METHOD */
/* Send an argument STRING. */

View File

@ -256,7 +256,7 @@ find_rcs (dir, list)
/* read the dir, grabbing the ,v files */
while ((dp = readdir (dirp)) != NULL)
{
if (fnmatch (RCSPAT, dp->d_name, 0) == 0)
if (CVS_FNMATCH (RCSPAT, dp->d_name, 0) == 0)
{
char *comma;
@ -320,7 +320,7 @@ find_dirs (dir, list, checkadm, entries)
continue;
#endif
/* don't bother stating ,v files */
if (fnmatch (RCSPAT, dp->d_name, 0) == 0)
if (CVS_FNMATCH (RCSPAT, dp->d_name, 0) == 0)
continue;
expand_string (&tmp,

View File

@ -269,7 +269,9 @@ ign_name (name)
{
/* We do a case-insensitive match by calling fnmatch on copies of
the pattern and the name which have been converted to
lowercase. */
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;
@ -282,7 +284,7 @@ ign_name (name)
pat_lower = xstrdup (*cpp++);
for (p = pat_lower; *p != '\0'; ++p)
*p = tolower (*p);
if (fnmatch (pat_lower, name_lower, 0) == 0)
if (CVS_FNMATCH (pat_lower, name_lower, 0) == 0)
goto matched;
free (pat_lower);
}
@ -296,7 +298,7 @@ ign_name (name)
else
{
while (*cpp)
if (fnmatch (*cpp++, name, 0) == 0)
if (CVS_FNMATCH (*cpp++, name, 0) == 0)
return 1;
return 0;
}

View File

@ -514,7 +514,9 @@ patch_fileproc (callerdat, finfo)
memset ((char *) &t, 0, sizeof (t));
if ((t.actime = t.modtime = RCS_getrevtime (rcsfile, vers_tag,
(char *) 0, 0)) != -1)
(void) utime (tmpfile1, &t);
/* I believe this timestamp only affects the dates in our diffs,
and therefore should be on the server, not the client. */
(void) utime (tmpfile1, &t);
}
else if (toptwo_diffs)
{
@ -536,7 +538,9 @@ patch_fileproc (callerdat, finfo)
}
if ((t.actime = t.modtime = RCS_getrevtime (rcsfile, vers_head,
(char *) 0, 0)) != -1)
(void) utime (tmpfile2, &t);
/* 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);
}
run_setup ("%s -%c", DIFF, unidiff ? 'u' : 'c');
run_arg (tmpfile1);

View File

@ -199,7 +199,7 @@ RCS_checkin (rcsfile, workfile, message, rev, flags)
if (!existence_error (errno))
error (0, errno, "warning: cannot stat %s", rcsfile);
}
run_setup ("%s%s -x,v/ -f %s%s", Rcsbin, RCS_CI,
run_setup ("%s%s -x,v/ -w%s -f %s%s", Rcsbin, RCS_CI, getcaller (),
rev ? "-r" : "", rev ? rev : "");
if (flags & RCS_FLAGS_DEAD)
run_arg ("-sdead");

View File

@ -199,6 +199,86 @@ Create_Root (dir, rootdir)
#endif /* ! DEBUG */
/* The root_allow_* stuff maintains a list of legal CVSROOT
directories. Then we can check against them when a remote user
hands us a CVSROOT directory. */
static unsigned int root_allow_count;
static char **root_allow_vector;
static unsigned int root_allow_size;
void
root_allow_add (arg)
char *arg;
{
char *p;
if (root_allow_size <= root_allow_count)
{
if (root_allow_size == 0)
{
root_allow_size = 1;
root_allow_vector =
(char **) malloc (root_allow_size * sizeof (char *));
}
else
{
root_allow_size *= 2;
root_allow_vector =
(char **) realloc (root_allow_vector,
root_allow_size * sizeof (char *));
}
if (root_allow_vector == NULL)
{
no_memory:
/* Strictly speaking, we're not supposed to output anything
now. But we're about to exit(), give it a try. */
printf ("E Fatal server error, aborting.\n\
error ENOMEM Virtual memory exhausted.\n");
/* I'm doing this manually rather than via error_exit ()
because I'm not sure whether we want to call server_cleanup.
Needs more investigation.... */
#ifdef SYSTEM_CLEANUP
/* Hook for OS-specific behavior, for example socket
subsystems on NT and OS2 or dealing with windows
and arguments on Mac. */
SYSTEM_CLEANUP ();
#endif
exit (EXIT_FAILURE);
}
}
p = malloc (strlen (arg) + 1);
if (p == NULL)
goto no_memory;
strcpy (p, arg);
root_allow_vector[root_allow_count++] = p;
}
void
root_allow_free ()
{
if (root_allow_vector != NULL)
free (root_allow_vector);
root_allow_count = 0;
root_allow_size = 0;
}
int
root_allow_ok (arg)
char *arg;
{
unsigned int i;
for (i = 0; i < root_allow_count; ++i)
if (strcmp (root_allow_vector[i], arg) == 0)
return 1;
return 0;
}
/* Parse a CVSROOT variable into its constituent parts -- method,
* username, hostname, directory. The prototypical CVSROOT variable
* looks like:

View File

@ -445,6 +445,13 @@ piped_child (command, tofdp, fromfdp)
if (pipe (from_child_pipe) < 0)
error (1, errno, "cannot create pipe");
#ifdef USE_SETMODE_BINARY
setmode (to_child_pipe[0], O_BINARY);
setmode (to_child_pipe[1], O_BINARY);
setmode (from_child_pipe[0], O_BINARY);
setmode (from_child_pipe[1], O_BINARY);
#endif
#ifdef HAVE_VFORK
pid = vfork ();
#else
@ -506,6 +513,11 @@ filter_stream_through_program (oldfd, dir, prog, pidp)
if (pipe (p))
error (1, errno, "cannot create pipe");
#ifdef USE_SETMODE_BINARY
setmode (p[0], O_BINARY);
setmode (p[1], O_BINARY);
#endif
#ifdef HAVE_VFORK
newpid = vfork ();
#else

View File

@ -481,9 +481,9 @@ if test x"$*" = x; then
tests="basica basicb basic1 deep basic2 rdiff death death2 branches"
tests="${tests} multibranch import join new newb conflicts conflicts2"
tests="${tests} modules modules2 modules3 mflag errmsg1 devcom devcom2"
tests="${tests} devcom3 ignore binfiles binfiles2 binwrap info"
tests="${tests} serverpatch log log2 crerepos rcs big modes"
tests="${tests} sticky keyword"
tests="${tests} devcom3 ignore binfiles binfiles2 binwrap mwrap info"
tests="${tests} serverpatch log log2 crerepos rcs big modes stamps"
tests="${tests} sticky keyword toplevel"
else
tests="$*"
fi
@ -560,7 +560,7 @@ for what in $tests; do
dotest basica-0b "${testcvs} add first-dir" \
"Directory ${TESTDIR}/cvsroot/first-dir added to the repository"
cd ..
rm -rf 1
rm -r 1
dotest basica-1 "${testcvs} -q co first-dir" ''
cd first-dir
@ -716,21 +716,21 @@ diff -r1\.2 -r1\.3"
"${PROG} [a-z]*: scheduling file .topfile. for addition
${PROG} [a-z]*: use .cvs commit. to add this file permanently"
dotest basicb-0c "${testcvs} -q ci -m add-it topfile" \
"RCS file: ${TESTDIR}/cvsroot/./topfile,v
"RCS file: ${TESTDIR}/cvsroot/\./topfile,v
done
Checking in topfile;
${TESTDIR}/cvsroot/./topfile,v <-- topfile
${TESTDIR}/cvsroot/\./topfile,v <-- topfile
initial revision: 1\.1
done"
cd ..
rm -rf 1
rm -r 1
mkdir 2; cd 2
dotest basicb-0d "${testcvs} -q co -l ." "U topfile"
mkdir first-dir
dotest basicb-0e "${testcvs} add first-dir" \
"Directory ${TESTDIR}/cvsroot/first-dir added to the repository"
cd ..
rm -rf 2
rm -r 2
: mkdir ${CVSROOT_DIRNAME}/first-dir
dotest basicb-1 "${testcvs} -q co first-dir" ''
@ -819,9 +819,9 @@ done"
dotest basicb-cod-1 "${testcvs} -q co -d first-dir1 first-dir" \
'U first-dir1/sdir1/sfile1
U first-dir1/sdir2/sfile2'
rm -rf first-dir1
rm -r first-dir1
rm -rf first-dir
rm -r first-dir
dotest basicb-9 \
"${testcvs} -q co -d newdir -r release-1 first-dir/sdir1 first-dir/sdir2" \
'U newdir/sdir1/sfile1
@ -836,7 +836,7 @@ U newdir/sdir2/sfile2'
"sfile1 develops
sfile2 starts"
rm -rf newdir
rm -r newdir
# Hmm, this might be a case for CVSNULLREPOS, but CVS doesn't
# seem to deal with it...
@ -873,7 +873,7 @@ ${TESTDIR}/cvsroot/second-dir/aa,v <-- aa
initial revision: 1\.1
done"
cd ../..
rm -rf 1
rm -r 1
# Now here is the kicker: note that the semantics of -d
# are fundamentally different if we specify two or more directories
# rather than one! I consider this to be seriously bogus,
@ -914,10 +914,16 @@ done"
cd ..
rmdir 1
rm -rf test2
if test "$keep" = yes; then
echo Keeping ${TESTDIR} and exiting due to --keep
exit 0
fi
rm -r test2
rm -rf ${CVSROOT_DIRNAME}/first-dir
rm -rf ${CVSROOT_DIRNAME}/second-dir
rm -rf ${CVSROOT_DIRNAME}/CVSROOT/Emptydir
rm -f ${CVSROOT_DIRNAME}/topfile,v
;;
@ -1292,7 +1298,7 @@ done"
exit 0
fi
rm -rf 1
rm -r 1
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
@ -1384,7 +1390,7 @@ done"
# CVS *will* recreate it, and we might want to make it so
# that "cvs release -d" is the way to delete the directory
# and have it stay gone -kingdon, Oct1996).
rm -rf dir6
rm -r dir6
dotest deep-4b1 "${testcvs} -q update" ''
dotest deep-4b2 "${testcvs} -q update -d -P" \
'U dir6/file1
@ -1624,7 +1630,6 @@ done"
fi
# now export by rtagged-by-head and rtagged-by-tag and compare.
rm -rf first-dir
if ${CVS} export -r rtagged-by-head first-dir ; then
echo "PASS: test 50" >>${LOGFILE}
else
@ -1645,7 +1650,7 @@ done"
else
echo "PASS: test 52" >>${LOGFILE}
fi
rm -rf 1dir first-dir
rm -r 1dir first-dir
# checkout by revision vs export by rtagged-by-revision and compare.
if ${CVS} export -rrtagged-by-revision -d export-dir first-dir ; then
@ -1704,9 +1709,9 @@ No conflicts created by this import"
echo "PASS: test 58" >>${LOGFILE}
fi
rm -rf second-dir
rm -r second-dir
rm -rf export-dir first-dir
rm -r export-dir first-dir
mkdir first-dir
(cd first-dir.cpy ; tar cf - . | (cd ../first-dir ; tar xf -))
@ -1755,7 +1760,7 @@ No conflicts created by this import"
# else
# echo "PASS: test 63" >>${LOGFILE}
# fi
rm -rf 1dir first-dir
rm -r 1dir first-dir
# Test the cvs history command.
@ -1879,7 +1884,7 @@ File: foo Status: Up-to-date
TRDIFF (branch: 1\.1\.1)"
cd ..
rm -rf trdiff
rm -r trdiff
dotest rdiff-8 \
"${testcvs} rdiff -r T1 -r local-v0 trdiff" \
@ -1913,7 +1918,7 @@ diff -c /dev/null trdiff/new:1\.1
# fi
cd ..
rm -rf testimport
rm -r testimport
rm -rf ${CVSROOT_DIRNAME}/trdiff
;;
@ -2225,7 +2230,7 @@ done"
dotest 89a "${testcvs} -q co first-dir" 'U first-dir/file1
U first-dir/file3'
cd ..
rm -rf 2
rm -r 2
cd first-dir
# remove first file.
@ -3073,8 +3078,10 @@ import should not expand \$''Id: imported-f2,v 1\.1\.1\.2 [0-9/]* [0-9:]* [a-z0-
rev 2 of file 2
[>]>>>>>> 1\.1\.1\.2'
cd .. ; rm -rf first-dir ${CVSROOT_DIRNAME}/first-dir
rm -rf import-dir
cd ..
rm -r first-dir
rm -rf ${CVSROOT_DIRNAME}/first-dir
rm -r import-dir
;;
join)
@ -3360,7 +3367,7 @@ M file4'
# revision which can be used as the source for files added
# on branches.
cd ../../3
rm -rf first-dir
rm -r first-dir
dotest join-20 "${testcvs} -q co -jbranch first-dir" \
"U first-dir/file1
U first-dir/file2
@ -3384,7 +3391,7 @@ R file3'
# Checkout the main line again.
cd ../../1
rm -rf first-dir
rm -r first-dir
dotest join-22 "${testcvs} -q co first-dir" \
'U first-dir/file2
U first-dir/file3
@ -3415,7 +3422,8 @@ R file3
M file4'
cd ../..
rm -rf 1 2 3 ${CVSROOT_DIRNAME}/first-dir
rm -r 1 2 3
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
new) # look for stray "no longer pertinent" messages.
@ -3468,7 +3476,9 @@ M file4'
echo "PASS: test 123" >>${LOGFILE}
fi
cd .. ; rm -rf first-dir ; rm -rf ${CVSROOT_DIRNAME}/first-dir
cd ..
rm -r first-dir
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
newb)
@ -3499,7 +3509,7 @@ done"
# Check out the branch.
cd ..
rm -rf first-dir
rm -r first-dir
mkdir 1
cd 1
dotest newb-123e "${testcvs} -q co -r branch first-dir" \
@ -3526,7 +3536,7 @@ done"
# that the file is not pertinent, but it should not
# say anything else.
cd ..
rm -rf first-dir
rm -r first-dir
dotest newb-123i "${testcvs} -q co -r branch first-dir/a" \
"${PROG} [a-z]*: warning: first-dir/a is not (any longer) pertinent"
@ -3555,7 +3565,8 @@ File: a Status: Needs \(Patch\|Checkout\)
fi
cd ../..
rm -rf 1 2 ; rm -rf ${CVSROOT_DIRNAME}/first-dir
rm -r 1 2
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
conflicts)
@ -3795,7 +3806,7 @@ File: a Status: Up-to-date
echo 'FAIL: test 142' | tee -a ${LOGFILE}
fi
cd ../..
rm -rf 1 2 3 ; rm -rf ${CVSROOT_DIRNAME}/first-dir
rm -r 1 2 3 ; rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
conflicts2)
@ -3915,7 +3926,7 @@ C aa\.c"
fi
cd ../..
rm -rf 1 2 ; rm -rf ${CVSROOT_DIRNAME}/first-dir
rm -r 1 2 ; rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
modules)
@ -4089,7 +4100,7 @@ realmodule NONE first-dir/subdir a'
else
echo 'PASS: test 150g2' >>${LOGFILE}
fi
rm -rf dirmodule
rm -r dirmodule
# Now test that a module using -d checks out to the specified
# directory.
@ -4141,7 +4152,7 @@ U nameddir/b'
fi
cd ..
rm -rf 1
rm -r 1
mkdir 2
cd 2
@ -4155,7 +4166,7 @@ U nameddir/b'
"CVS
first-dir"
cd ..
rm -rf 2
rm -r 2
# Test checking out everything.
mkdir 1
@ -4165,7 +4176,7 @@ first-dir"
U first-dir/subdir/a
U first-dir/subdir/b"
cd ..
rm -rf 1
rm -r 1
# Test checking out a module which lists at least two
# specific files twice. At one time, this failed over
@ -4198,13 +4209,13 @@ initial revision: 1\.1
done"
cd ..
rm -rf first-dir
rm -r first-dir
dotest modules-155c4 "${testcvs} -q co topfiles" \
"U first-dir/file1
U first-dir/file2"
dotest modules-155c5 "${testcvs} -q co topfiles" ""
cd ..
rm -rf 1
rm -r 1
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
@ -4269,9 +4280,9 @@ ${PROG} [a-z]*: Rebuilding administrative file database"
${PROG} \[[a-z]* aborted\]: cannot expand modules"
# Clean up.
rm -rf CVSROOT
rm -r CVSROOT
cd ..
rm -rf 1
rm -r 1
rm -rf ${CVSROOT_DIRNAME}/first-dir
rm -rf ${CVSROOT_DIRNAME}/second-dir
;;
@ -4322,7 +4333,7 @@ ${PROG} [a-z]*: Rebuilding administrative file database"
cd ..
dotest modules3-6 "${testcvs} -q co bigmod" ''
rm -rf first-dir
rm -r first-dir
dotest modules3-7 "${testcvs} -q co bigmod" 'U first-dir/file1'
cd ..
rm -r 1
@ -4481,7 +4492,7 @@ done"
exit 1
fi
# Test handling of -m during ci
cd ..; rm -rf a-dir;
cd ..; rm -r a-dir
if ${testcvs} co a-dir >>${LOGFILE} 2>&1; then
echo 'PASS: test 158' >>${LOGFILE}
else
@ -4511,7 +4522,9 @@ done"
exit 1
fi
# Clean up
cd ..; rm -rf a-dir ${CVSROOT_DIRNAME}/a-dir
cd ..
rm -r a-dir
rm -rf ${CVSROOT_DIRNAME}/a-dir
done
;;
errmsg1)
@ -4583,7 +4596,8 @@ EOF
cd ..
chmod u+w 1dir
cd ..
rm -rf 1 2 ${CVSROOT_DIRNAME}/1dir
rm -r 1 2
rm -rf ${CVSROOT_DIRNAME}/1dir
;;
devcom)
@ -4781,6 +4795,7 @@ T abc'
dotest devcom-t1 "${testcvs} -q co -rtag first-dir/abb" \
'U first-dir/abb'
cd ..
# Since first-dir/abb is readonly, use -f.
rm -rf 3
# Now remove all the file attributes
@ -4806,7 +4821,9 @@ U first-dir/abc'
exit 0
fi
rm -rf 1 2 3 ${CVSROOT_DIRNAME}/first-dir
# Use -f because of the readonly files.
rm -rf 1 2 3
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
devcom2)
@ -4857,7 +4874,9 @@ U first-dir/w3'
dotest_fail devcom2-11 "test -w first-dir/w3" ''
cd ..
rm -rf 1 2 ${CVSROOT_DIRNAME}/first-dir
# Use -f because of the readonly files.
rm -rf 1 2
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
devcom3)
@ -4912,7 +4931,9 @@ G@#..!@#=&"
cd ../..
rm -rf 1 ${CVSROOT_DIRNAME}/first-dir
# Use -f because of the readonly files.
rm -rf 1
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
ignore)
@ -4976,7 +4997,7 @@ N second-dir/optig.c
No conflicts created by this import'
cd ..
rm -rf dir-to-import
rm -r dir-to-import
mkdir 1
cd 1
@ -5069,7 +5090,7 @@ Are you sure you want to release (and delete) directory .first-dir': "
You have \[1\] altered files in this repository.
Are you sure you want to release (and delete) directory .second-dir': "
cd ..
rm -rf 1
rm -r 1
rm ${TESTDIR}/ignore.tmp
rm -rf ${CVSROOT_DIRNAME}/first-dir ${CVSROOT_DIRNAME}/second-dir
;;
@ -5130,7 +5151,7 @@ File: binfile Status: Up-to-date
Sticky Date: (none)
Sticky Options: -kb"
cd ../..
rm -rf 3
rm -r 3
cd 2/first-dir
cp ../../1/binfile2.dat binfile
@ -5180,7 +5201,7 @@ done"
fi
cd ../..
rm -rf 1
rm -r 1
mkdir 3
cd 3
@ -5197,7 +5218,7 @@ File: binfile Status: Up-to-date
Sticky Date: (none)
Sticky Options: -kb"
cd ../..
rm -rf 3
rm -r 3
cd 2/first-dir
echo 'this file is $''RCSfile$' >binfile
@ -5348,7 +5369,7 @@ done"
fail binwrap-1
fi
cd ..
rm -rf dir-to-import
rm -r dir-to-import
dotest binwrap-2 "${testcvs} -q co first-dir" 'U first-dir/foo.c
U first-dir/foo.exe'
dotest binwrap-3 "${testcvs} -q status first-dir" \
@ -5369,7 +5390,75 @@ File: foo\.exe Status: Up-to-date
Sticky Tag: (none)
Sticky Date: (none)
Sticky Options: -kb"
rm -rf first-dir ${CVSROOT_DIRNAME}/first-dir
rm -r first-dir
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
mwrap)
# Tests relating to the -m wrappers options. -k tests are in
# binwrap and -t/-f tests haven't been written yet.
dotest mwrap-c1 "${testcvs} -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
cd CVSROOT
echo "* -m 'COPY'" >>cvswrappers
dotest mwrap-c2 "${testcvs} -q ci -m wrapper-mod" \
"Checking in cvswrappers;
${TESTDIR}/cvsroot/CVSROOT/cvswrappers,v <-- cvswrappers
new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
done
${PROG} [a-z]*: Rebuilding administrative file database"
cd ..
mkdir m1; cd m1
dotest mwrap-1 "${testcvs} -q co -l ." ''
mkdir first-dir
dotest mwrap-2 "${testcvs} add first-dir" \
"Directory ${TESTDIR}/cvsroot/first-dir added to the repository"
cd first-dir
touch aa
dotest mwrap-3 "${testcvs} add aa" \
"${PROG} [a-z]*: scheduling file .aa. for addition
${PROG} [a-z]*: use .cvs commit. to add this file permanently"
dotest mwrap-4 "${testcvs} -q ci -m add" \
"RCS file: ${TESTDIR}/cvsroot/first-dir/aa,v
done
Checking in aa;
${TESTDIR}/cvsroot/first-dir/aa,v <-- aa
initial revision: 1\.1
done"
cd ../..
mkdir m2; cd m2
dotest mwrap-5 "${testcvs} -q co first-dir" "U first-dir/aa"
cd first-dir
echo "changed in m2" >aa
dotest mwrap-6 "${testcvs} -q ci -m m2-mod" \
"Checking in aa;
${TESTDIR}/cvsroot/first-dir/aa,v <-- aa
new revision: 1\.2; previous revision: 1\.1
done"
cd ../..
cd m1/first-dir
echo "changed in m1" >aa
dotest_fail mwrap-7 "${testcvs} -nq update" "C aa"
dotest_fail mwrap-8 "${testcvs} -q update" \
"${PROG} [a-z]*: A -m .COPY. wrapper is specified
${PROG} [a-z]*: but file aa needs merge
${PROG} \[[a-z]* aborted\]: You probably want to avoid -m .COPY. wrappers"
# Under the old, dangerous behavior, this would have been
# "changed in m2" -- that is, the changes in the working directory
# would have been clobbered (!).
dotest mwrap-9 "cat aa" "changed in m1"
cd ../..
cd CVSROOT
echo '# comment out' >cvswrappers
dotest mwrap-ce "${testcvs} -q ci -m wrapper-mod" \
"Checking in cvswrappers;
${TESTDIR}/cvsroot/CVSROOT/cvswrappers,v <-- cvswrappers
new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
done
${PROG} [a-z]*: Rebuilding administrative file database"
cd ..
rm -r CVSROOT
rm -r m1 m2
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
info)
@ -5571,7 +5660,8 @@ done"
U file1'
cd ../..
rm -rf 1 2 ${CVSROOT_DIRNAME}/first-dir
rm -r 1 2
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
log)
@ -5797,7 +5887,8 @@ ${log_rev1}
${log_trailer}"
cd ..
rm -rf first-dir ${CVSROOT_DIRNAME}/first-dir
rm -r first-dir
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
log2)
@ -5840,7 +5931,8 @@ date: [0-9/]* [0-9:]*; author: ${username}; state: Exp;
============================================================================="
cd ..
rm -rf first-dir ${CVSROOT_DIRNAME}/first-dir
rm -r first-dir
rm -rf ${CVSROOT_DIRNAME}/first-dir
fi # end of tests skipped for remote
@ -5886,7 +5978,7 @@ ${testcvs} -d ${TESTDIR}/crerepos release -d CVSROOT >>${LOGFILE}; then
else
fail crerepos-5
fi
rm -rf CVS
rm -r CVS
cd ..
# The directory tmp should be empty
dotest crerepos-6 "rmdir tmp" ''
@ -5905,13 +5997,13 @@ ${testcvs} -d ${TESTDIR}/crerepos release -d CVSROOT >>${LOGFILE}; then
dotest_fail crerepos-6a "${testcvs} -q -d ../crerepos get ." \
"${PROG} \[[a-z]* aborted\]: CVSROOT ../crerepos must be an absolute pathname"
cd ..
rm -rf 1
rm -r 1
mkdir 1; cd 1
dotest_fail crerepos-6b "${testcvs} -d crerepos init" \
"${PROG} \[[a-z]* aborted\]: CVSROOT crerepos must be an absolute pathname"
cd ..
rm -rf 1
rm -r 1
else # remote
# Test that CVS rejects a relative path in CVSROOT.
mkdir 1; cd 1
@ -5919,14 +6011,14 @@ ${testcvs} -d ${TESTDIR}/crerepos release -d CVSROOT >>${LOGFILE}; then
"${testcvs} -q -d :ext:`hostname`:../crerepos get ." \
"Root ../crerepos must be an absolute pathname"
cd ..
rm -rf 1
rm -r 1
mkdir 1; cd 1
dotest_fail crerepos-6b \
"${testcvs} -d :ext:`hostname`:crerepos init" \
"Root crerepos must be an absolute pathname"
cd ..
rm -rf 1
rm -r 1
fi # end of tests to be skipped for remote
# CVS better not create a history file--if the administrator
@ -6108,8 +6200,10 @@ add file1
else
fail rcs-4
fi
cd ..
rm -rf first-dir ${CVSROOT_DIRNAME}/first-dir ${TESTDIR}/rcs4.tmp
rm -r first-dir ${TESTDIR}/rcs4.tmp
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
big)
@ -6146,7 +6240,7 @@ ${TESTDIR}/cvsroot/first-dir/file1,v <-- file1
initial revision: 1\.1
done"
cd ..
rm -rf first-dir
rm -r first-dir
dotest big-4 "${testcvs} -q get first-dir" "U first-dir/file1"
if test "$keep" = yes; then
@ -6154,7 +6248,7 @@ done"
exit 0
fi
rm -rf first-dir
rm -r first-dir
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
@ -6276,11 +6370,152 @@ done"
fi
cd ../..
rm -rf 1 ${CVSROOT_DIRNAME}/first-dir
rm -r 1
rm -rf ${CVSROOT_DIRNAME}/first-dir
# Perhaps should restore the umask and CVSUMASK. But the other
# tests "should" not care about them...
;;
stamps)
# Test timestamps.
mkdir 1; cd 1
dotest stamps-1 "${testcvs} -q co -l ." ''
mkdir first-dir
dotest stamps-2 "${testcvs} add first-dir" \
"Directory ${TESTDIR}/cvsroot/first-dir added to the repository"
cd first-dir
touch aa
echo '$''Id$' >kw
ls -l aa >${TESTDIR}/1/stamp.aa.touch
ls -l kw >${TESTDIR}/1/stamp.kw.touch
# "sleep 1" would suffice if we could assume ls --full-time, but
# that is as far as I know unique to GNU ls. Is there some POSIX.2
# way to get the timestamp of a file, including the seconds?
sleep 60
dotest stamps-3 "${testcvs} add aa kw" \
"${PROG} [a-z]*: scheduling file .aa. for addition
${PROG} [a-z]*: scheduling file .kw. for addition
${PROG} [a-z]*: use .cvs commit. to add these files permanently"
ls -l aa >${TESTDIR}/1/stamp.aa.add
ls -l kw >${TESTDIR}/1/stamp.kw.add
# "cvs add" should not muck with the timestamp.
dotest stamps-4aa \
"cmp ${TESTDIR}/1/stamp.aa.touch ${TESTDIR}/1/stamp.aa.add" ''
dotest stamps-4kw \
"cmp ${TESTDIR}/1/stamp.kw.touch ${TESTDIR}/1/stamp.kw.add" ''
sleep 60
dotest stamps-5 "${testcvs} -q ci -m add" \
"RCS file: ${TESTDIR}/cvsroot/first-dir/aa,v
done
Checking in aa;
${TESTDIR}/cvsroot/first-dir/aa,v <-- aa
initial revision: 1\.1
done
RCS file: ${TESTDIR}/cvsroot/first-dir/kw,v
done
Checking in kw;
${TESTDIR}/cvsroot/first-dir/kw,v <-- kw
initial revision: 1\.1
done"
ls -l aa >${TESTDIR}/1/stamp.aa.ci
ls -l kw >${TESTDIR}/1/stamp.kw.ci
# If there are no keywords, "cvs ci" leaves the timestamp alone
# If there are, it sets the timestamp to the date of the commit.
# I'm not sure how logical this is, but it is intentional.
# If we wanted to get fancy we would make sure the time as
# reported in "cvs log kw" matched stamp.kw.ci. But that would
# be a lot of work.
dotest stamps-6aa \
"cmp ${TESTDIR}/1/stamp.aa.add ${TESTDIR}/1/stamp.aa.ci" ''
if cmp ${TESTDIR}/1/stamp.kw.add ${TESTDIR}/1/stamp.kw.ci >/dev/null
then
fail stamps-6kw
else
pass stamps-6kw
fi
cd ../..
sleep 60
mkdir 2
cd 2
dotest stamps-7 "${testcvs} -q get first-dir" "U first-dir/aa
U first-dir/kw"
cd first-dir
ls -l aa >${TESTDIR}/1/stamp.aa.get
ls -l kw >${TESTDIR}/1/stamp.kw.get
# On checkout, CVS should set the timestamp to the date that the
# file was committed. Could check that the time as reported in
# "cvs log aa" matches stamp.aa.get, but that would be a lot of
# work.
if cmp ${TESTDIR}/1/stamp.aa.ci ${TESTDIR}/1/stamp.aa.get >/dev/null
then
fail stamps-8aa
else
pass stamps-8aa
fi
dotest stamps-8kw \
"cmp ${TESTDIR}/1/stamp.kw.ci ${TESTDIR}/1/stamp.kw.get" ''
# Now we want to see what "cvs update" does.
sleep 60
echo add a line >>aa
echo add a line >>kw
dotest stamps-9 "${testcvs} -q ci -m change-them" \
"Checking in aa;
${TESTDIR}/cvsroot/first-dir/aa,v <-- aa
new revision: 1\.2; previous revision: 1\.1
done
Checking in kw;
${TESTDIR}/cvsroot/first-dir/kw,v <-- kw
new revision: 1\.2; previous revision: 1\.1
done"
ls -l aa >${TESTDIR}/1/stamp.aa.ci2
ls -l kw >${TESTDIR}/1/stamp.kw.ci2
cd ../..
cd 1/first-dir
sleep 60
dotest stamps-10 "${testcvs} -q update" '[UP] aa
[UP] kw'
# this doesn't serve any function other than being able to
# look at it manually, as we have no machinery for dates being
# newer or older than other dates.
date >${TESTDIR}/1/stamp.debug.update
ls -l aa >${TESTDIR}/1/stamp.aa.update
ls -l kw >${TESTDIR}/1/stamp.kw.update
# stamp.aa.update and stamp.kw.update should both be approximately
# the same as stamp.debug.update. Perhaps we could be testing
# this in a more fancy fashion by "touch stamp.before" before
# stamps-10, "touch stamp.after" after, and then using ls -t
# to check them. But for now we just make sure that the *.update
# stamps differ from the *.ci2 ones.
# As for the rationale, this is so that if one updates and gets
# a new revision, then "make" will be sure to regard those files
# as newer than .o files which may be sitting around.
if cmp ${TESTDIR}/1/stamp.aa.update ${TESTDIR}/1/stamp.aa.ci2 \
>/dev/null
then
fail stamps-11aa
else
pass stamps-11aa
fi
if cmp ${TESTDIR}/1/stamp.kw.update ${TESTDIR}/1/stamp.kw.ci2 \
>/dev/null
then
fail stamps-11kw
else
pass stamps-11kw
fi
cd ../..
if test "$keep" = yes; then
echo Keeping ${TESTDIR} and exiting due to --keep
exit 0
fi
rm -r 1 2
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
sticky)
# More tests of sticky tags, particularly non-branch sticky tags.
mkdir 1; cd 1
@ -6323,7 +6558,8 @@ ${QUESTION} file2" "${QUESTION} file2
${PROG} [a-z]*: use .cvs commit. to add this file permanently"
cd ../..
rm -rf 1 ${CVSROOT_DIRNAME}/first-dir
rm -r 1
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
keyword)
@ -6494,7 +6730,7 @@ xx "'\$'"Log"'\$'
# This workaround should be removed when the bug is fixed.
if test "x$remote" = "xyes"; then
cd ..
rm -rf first-dir
rm -r first-dir
dotest keyword-17 "${testcvs} -q co first-dir" "U first-dir/file1"
cd first-dir
else
@ -6560,7 +6796,79 @@ xx
change"
cd ../..
rm -rf 1 ${CVSROOT_DIRNAME}/first-dir
rm -r 1
rm -rf ${CVSROOT_DIRNAME}/first-dir
;;
toplevel)
# test the feature that cvs creates a CVS subdir also for
# the toplevel directory
# Some test, somewhere, is creating Emptydir. That test
# should, perhaps, clean up for itself, but I don't know which
# one it is.
rm -rf ${CVSROOT_DIRNAME}/CVSROOT/Emptydir
mkdir 1; cd 1
dotest toplevel-1 "${testcvs} -q co -l ." ''
mkdir top-dir
dotest toplevel-2 "${testcvs} add top-dir" \
"Directory ${TESTDIR}/cvsroot/top-dir added to the repository"
cd top-dir
touch file1
dotest toplevel-3 "${testcvs} add file1" \
"${PROG} [a-z]*: scheduling file .file1. for addition
${PROG} [a-z]*: use .cvs commit. to add this file permanently"
dotest toplevel-4 "${testcvs} -q ci -m add" \
"RCS file: ${TESTDIR}/cvsroot/top-dir/file1,v
done
Checking in file1;
${TESTDIR}/cvsroot/top-dir/file1,v <-- file1
initial revision: 1\.1
done"
cd ../..
rm -r 1; mkdir 1; cd 1
dotest toplevel-5 "${testcvs} co top-dir" \
"${PROG} [a-z]*: Updating top-dir
U top-dir/file1"
dotest toplevel-6 "${testcvs} update top-dir" \
"${PROG} [a-z]*: Updating top-dir"
dotest toplevel-7 "${testcvs} update" \
"${PROG} [a-z]*: Updating \.
${PROG} [a-z]*: Updating top-dir"
dotest toplevel-8 "${testcvs} update -d top-dir" \
"${PROG} [a-z]*: Updating top-dir"
# FIXME: This test fails in cvs starting from 1.9.2 because
# it updates "file1" in "1". Test modules3-7f also finds
# (and tolerates) this bug. The second expect string below
# should be removed when this is fixed. The first expect
# string is the behavior of remote CVS. There is some sentiment
# that
# "${PROG} [a-z]*: Updating \.
# ${PROG} [a-z]*: Updating top-dir"
# is correct but it isn't clear why that would be correct instead
# of the remote CVS behavior.
#
# The DOTSTAR matches of a bunch of lines like
# "U CVSROOT/checkoutlist". Trying to match them more precisely
# seemed to cause trouble. For example CVSROOT/cvsignore will
# be present or absent depending on whether we ran the "ignore"
# test or not.
dotest toplevel-9 "${testcvs} update -d" \
"${PROG} [a-z]*: Updating \.
${PROG} [a-z]*: Updating CVSROOT
${DOTSTAR}
${PROG} [a-z]*: Updating top-dir" \
"${PROG} [a-z]*: Updating \.
U file1
${PROG} [a-z]*: Updating top-dir"
cd ..
rm -r 1
;;
*)

View File

@ -29,6 +29,11 @@ extern void server_register
PROTO((char *name, char *version, char *timestamp,
char *options, char *tag, char *date, 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. */
extern void server_modtime PROTO ((struct file_info *finfo,
Vers_TS *vers_ts));
/*
* We want to nuke the Entries line for a file, and (unless
* server_scratch_entry_only is subsequently called) the file itself.
@ -106,6 +111,10 @@ extern void server_cleanup PROTO((int sig));
extern void server_pause_check PROTO((void));
#endif /* SERVER_FLOWCONTROL */
#ifdef AUTH_SERVER_SUPPORT
extern char *CVS_Username;
#endif /* AUTH_SERVER_SUPPORT */
#endif /* SERVER_SUPPORT */
/* Stuff shared with the client. */

View File

@ -234,11 +234,13 @@ numdots (s)
return (dots);
}
/*
* Get the caller's login from his uid. If the real uid is "root" try LOGNAME
* USER or getlogin(). If getlogin() and getpwuid() both fail, return
* the uid as a string.
*/
/* Return the username by which the caller should be identified in
CVS, in contexts such as the author field of RCS files, various
logs, etc.
Returns a pointer to storage that we manage; it is good until the
next call to getcaller () (provided that the caller doesn't call
getlogin () or some such themself). */
char *
getcaller ()
{
@ -247,6 +249,16 @@ getcaller ()
char *name;
uid_t uid;
/* If there is a CVS username, return it. */
#ifdef AUTH_SERVER_SUPPORT
if (CVS_Username != NULL)
return CVS_Username;
#endif
/* Get the caller's login from his uid. If the real uid is "root"
try LOGNAME USER or getlogin(). If getlogin() and getpwuid()
both fail, return the uid as a string. */
uid = getuid ();
if (uid == (uid_t) 0)
{

View File

@ -559,10 +559,31 @@ update_fileproc (callerdat, finfo)
else
{
if (wrap_merge_is_copy (finfo->file))
#if 0
/* Look, we can't clobber the user's file. We
know it is modified and we're going to
overwrite their mod? Puh-leeze. The
correct behavior is probably something like
what merge_file does for -kb, which is to
give the users both files and tell them
what the two filenames are. Of course, -m
in wrappers needs to be documented *much*
better. Anyway, until then, make this a
fatal error. */
/* Should we be warning the user that we are
* overwriting the user's copy of the file? */
retval =
checkout_file (finfo, vers, 0);
#else
{
error (0, 0, "A -m 'COPY' wrapper is specified");
error (0, 0, "but file %s needs merge",
finfo->fullname);
error (1, 0, "\
You probably want to avoid -m 'COPY' wrappers");
#endif
}
else
retval = merge_file (finfo, vers);
}

View File

@ -177,13 +177,26 @@ Version_TS (finfo, options, tag, date, force_tag_match, set_time)
*/
if (set_time)
{
struct utimbuf t;
#ifdef SERVER_SUPPORT
if (server_active)
server_modtime (finfo, vers_ts);
else
#endif
{
struct utimbuf t;
memset ((char *) &t, 0, sizeof (t));
if (vers_ts->vn_rcs &&
(t.actime = t.modtime = RCS_getrevtime (rcsdata,
vers_ts->vn_rcs, (char *) 0, 0)) != -1)
(void) utime (finfo->file, &t);
memset (&t, 0, sizeof (t));
if (vers_ts->vn_rcs)
{
t.modtime =
RCS_getrevtime (rcsdata, vers_ts->vn_rcs, 0, 0);
if (t.modtime != (time_t) -1)
{
t.actime = t.modtime;
(void) utime (finfo->file, &t);
}
}
}
}
}

View File

@ -12,7 +12,7 @@
#include "cvs.h"
char *version_string = "\nConcurrent Versions System (CVS) 1.9.9";
char *version_string = "\nConcurrent Versions System (CVS) 1.9.10";
#ifdef CLIENT_SUPPORT
#ifdef SERVER_SUPPORT

View File

@ -387,7 +387,7 @@ wrap_name_has (name,has)
char *temp;
for(x=0;x<count;++x)
if (fnmatch (wrap_list[x]->wildCard, name, 0) == 0){
if (CVS_FNMATCH (wrap_list[x]->wildCard, name, 0) == 0){
switch(has){
case WRAP_TOCVS:
temp=wrap_list[x]->tocvsFilter;
@ -418,7 +418,7 @@ wrap_matching_entry (name)
int x,count=wrap_count+wrap_saved_count;
for(x=0;x<count;++x)
if (fnmatch (wrap_list[x]->wildCard, name, 0) == 0)
if (CVS_FNMATCH (wrap_list[x]->wildCard, name, 0) == 0)
return wrap_list[x];
return (WrapperEntry *)NULL;
}

View File

@ -91,4 +91,4 @@ from `pcl-cvs.texinfo'.
--
#ident "@(#)cvs/contrib/pcl-cvs:$Name: $Id$"
#ident "@(#)cvs/contrib/pcl-cvs:$Name: $Id: INSTALL,v 1.2 1996/04/15 06:33:16 kfogel Exp $"