[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Fwd: Re: co -d, modules -d, & Emptydir]
From: |
Derek Robert Price |
Subject: |
Re: [Fwd: Re: co -d, modules -d, & Emptydir] |
Date: |
Mon, 16 Feb 2004 23:15:01 -0500 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Mark D. Baushke wrote:
> The patch you sent was corrupted with line wraps and leading '- ' added
> to many lines. Could you send another copy of it?
Attached.
Derek
- --
*8^)
Email: derek@ximbiot.com
Get CVS support at <http://ximbiot.com>!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)
Comment: Using GnuPG with Netscape - http://enigmail.mozdev.org
iD8DBQFAMZVELD1OTBfyMaQRApn1AJ90XdKeuajE9Hc/NB6h+NKfDfdKDgCghVhy
5vUsmeuiN5qRHRigHVEFa8U=
=5O9P
-----END PGP SIGNATURE-----
Index: ChangeLog
===================================================================
RCS file: /cvs/ccvs/ChangeLog,v
retrieving revision 1.692.2.126
diff -u -p -r1.692.2.126 ChangeLog
--- ChangeLog 12 Feb 2004 23:53:37 -0000 1.692.2.126
+++ ChangeLog 15 Feb 2004 17:37:30 -0000
@@ -1,3 +1,7 @@
+2004-02-15 Derek Price <derek@ximbiot.com>
+
+ * NEWS: Note `checkout -d' behavior change.
+
2004-02-12 Derek Price <derek@ximbiot.com>
* NEWS: Note Mark D. Baushke's recent memory leak plugs.
Index: NEWS
===================================================================
RCS file: /cvs/ccvs/NEWS,v
retrieving revision 1.116.2.66
diff -u -p -r1.116.2.66 NEWS
--- NEWS 13 Feb 2004 16:39:08 -0000 1.116.2.66
+++ NEWS 15 Feb 2004 17:37:31 -0000
@@ -1,6 +1,11 @@
Changes since 1.11.13:
**********************
+* Directories specified to `checkout -d' are no longer required to exist. This
+ consolidates some behavior between `-d' options specified in the modules file
+ and `checkout -d' as well as removing some prior differences between local
+ and client/server mode operation.
+
Changes from 1.11.12 to 1.11.13:
********************************
Index: src/ChangeLog
===================================================================
RCS file: /cvs/ccvs/src/ChangeLog,v
retrieving revision 1.2336.2.191
diff -u -p -r1.2336.2.191 ChangeLog
--- src/ChangeLog 13 Feb 2004 22:02:12 -0000 1.2336.2.191
+++ src/ChangeLog 15 Feb 2004 17:37:38 -0000
@@ -1,3 +1,17 @@
+2004-02-15 Derek Price <derek@ximbiot.com>
+
+ No longer require directories specified to `checkout -d' to exist.
+
+ * checkout.c (safe_location): Only confirm that destination is a safe
+ location for directories that already exist since we can assume that
+ creating directories under such a safe directory is acceptable.
+ (dir_to_build): Remove just_chdir member.
+ (checkout_proc): Add trace. No longer set dir_to_build->just_chdir.
+ Minor reformatting.
+ (build_dirs_and_chdir): Don't create or register directories that are
+ not created.
+ * sanity.sh (*): Update tests to account for new behavior.
+
2004-02-13 Larry Jones <lawrence.jones@ugsplm.com>
* rcs.c (locate_rcs): Remove unused variables.
Index: src/checkout.c
===================================================================
RCS file: /cvs/ccvs/src/checkout.c,v
retrieving revision 1.107.4.7
diff -u -p -r1.107.4.7 checkout.c
--- src/checkout.c 11 Feb 2004 15:18:05 -0000 1.107.4.7
+++ src/checkout.c 15 Feb 2004 17:37:39 -0000
@@ -418,7 +418,6 @@ safe_location (where)
char *where;
{
char *current;
- char *where_location;
char *hardpath;
size_t hardpath_len;
int retval;
@@ -443,59 +442,55 @@ safe_location (where)
/* if where is set, set current to where, where - last_component( where ),
* or fail, depending on whether the directories exist or not.
*/
- if( where != NULL )
+ if (where != NULL)
{
- if( chdir( where ) != -1 )
+ char *where_this_pass = xstrdup (where);
+ while (1)
{
- /* where */
- where_location = xgetwd();
- if( where_location == NULL )
- error( 1, errno, "could not get working directory" );
-
- if( chdir( current ) == -1 )
- error( 1, errno, "could not change directory to `%s'", current
);
-
- free( current );
- current = where_location;
- }
- else if( errno == ENOENT )
- {
- if ( last_component( where ) != where )
+ if (chdir (where_this_pass) != -1)
{
- /* where - last_component( where ) */
+ /* where */
+ free (where_this_pass);
+ where_this_pass = xgetwd();
+ if (where_this_pass == NULL)
+ error (1, errno, "could not get working directory");
+
+ if (chdir (current) == -1)
+ error (1, errno,
+ "could not restore directory to `%s'", current);
+
+ free (current);
+ current = where_this_pass;
+ break;
+ }
+ else if (errno == ENOENT)
+ {
+ /* where_this_pass - last_component (where_this_pass) */
char *parent;
- /* strip the last_component */
- where_location = xstrdup( where );
- parent = last_component( where_location );
- parent[-1] = '\0';
-
- if( chdir( where_location ) != -1 )
+ if ((parent = last_component (where_this_pass))
+ != where_this_pass)
{
- free( where_location );
- where_location = xgetwd();
- if( where_location == NULL )
- error( 1, errno, "could not get working directory
(nominally `%s')", where_location );
-
- if( chdir( current ) == -1 )
- error( 1, errno, "could not change directory to `%s'",
current );
-
- free( current );
- current = where_location;
+ /* strip the last_component */
+ parent[-1] = '\0';
+ /* continue */
}
else
- /* fail */
- error( 1, errno, "could not change directory to requested
checkout directory `%s'", where_location );
+ /* ERRNO == ENOENT
+ * && last_component (where_this_pass) == where_this_pass
+ * means we've tried all the parent diretories and not one
+ * exists, so there is no need to test any portion of where
+ * - it is all being created.
+ */
+ break;
}
- /* else: ERRNO == ENOENT & last_component(where) == where
- * for example, 'cvs co -d newdir module', where newdir hasn't
- * been created yet, so leave current set to '.' and check that
- */
- }
- else
- /* fail */
- error( 1, errno, "could not change directory to requested checkout
directory `%s'", where );
- }
+ else
+ /* fail */
+ error (1, errno, "\
+could not change directory to requested checkout directory `%s'",
+ where_this_pass);
+ } /* while (1) */
+ } /* where != NULL */
hardpath_len = strlen (hardpath);
if (strlen (current) >= hardpath_len
@@ -526,10 +521,6 @@ struct dir_to_build
/* The path to the directory. */
char *dirpath;
- /* If set, don't build the directory, just change to it.
- The caller will also want to set REPOSITORY to NULL. */
- int just_chdir;
-
struct dir_to_build *next;
};
@@ -608,6 +599,18 @@ checkout_proc (argc, argv, where_orig, m
char *oldupdate = NULL;
char *where;
+ if (trace)
+ (void) fprintf (stderr,
+ "%s-> checkout_proc (%s, %s, %s, %d, %d, %s, %s)\n",
+ CLIENT_SERVER_STR,
+ where_orig ? where_orig : "(null)",
+ mwhere ? mwhere : "(null)",
+ mfile ? mfile : "(null)",
+ shorten, local_specified,
+ omodule ? omodule : "(null)",
+ msg ? msg : "(null)"
+ );
+
/*
* OK, so we're doing the checkout! Our args are as follows:
* argc,argv contain either dir or dir followed by a list of files
@@ -625,7 +628,8 @@ checkout_proc (argc, argv, where_orig, m
+ strlen (argv[0])
+ (mfile == NULL ? 0 : strlen (mfile))
+ 10);
- (void) sprintf (repository, "%s/%s", current_parsed_root->directory,
argv[0]);
+ (void) sprintf (repository, "%s/%s",
+ current_parsed_root->directory, argv[0]);
Sanitize_Repository_Name (repository);
@@ -815,8 +819,6 @@ internal error: %s doesn't start with %s
head->repository = NULL;
head->dirpath = xstrdup (where);
head->next = NULL;
- head->just_chdir = 0;
-
/* Make a copy of the repository name to play with. */
reposcopy = xstrdup (repository);
@@ -856,23 +858,6 @@ internal error: %s doesn't start with %s
new->next = head;
head = new;
- /* If where consists of multiple pathname components,
- then we want to just cd into it, without creating
- directories or modifying CVS directories as we go.
- In CVS 1.9 and earlier, the code actually does a
- CVS_CHDIR up-front; I'm not going to try to go back
- to that exact code but this is somewhat similar
- in spirit. */
- if (where_orig != NULL
- && cp - where < strlen (where_orig))
- {
- new->repository = NULL;
- new->just_chdir = 1;
- continue;
- }
-
- new->just_chdir = 0;
-
/* Now figure out what repository directory to generate.
The most complete case would be something like this:
@@ -1214,12 +1199,10 @@ build_dirs_and_chdir (dirs, sticky)
while (dirs != NULL)
{
char *dir = last_component (dirs->dirpath);
+ int made_dir = 0;
- if (!dirs->just_chdir)
- {
- mkdir_if_needed (dir);
- Subdir_Register (NULL, NULL, dir);
- }
+ made_dir = !mkdir_if_needed (dir);
+ if (made_dir) Subdir_Register (NULL, NULL, dir);
if (CVS_CHDIR (dir) < 0)
{
@@ -1227,7 +1210,7 @@ build_dirs_and_chdir (dirs, sticky)
retval = 1;
goto out;
}
- if (dirs->repository != NULL)
+ if (made_dir && dirs->repository != NULL)
{
build_one_dir (dirs->repository, dirs->dirpath, sticky);
free (dirs->repository);
Index: src/sanity.sh
===================================================================
RCS file: /cvs/ccvs/src/sanity.sh,v
retrieving revision 1.752.2.82
diff -u -p -r1.752.2.82 sanity.sh
--- src/sanity.sh 9 Feb 2004 22:58:43 -0000 1.752.2.82
+++ src/sanity.sh 15 Feb 2004 17:38:01 -0000
@@ -11732,15 +11732,18 @@ done"
U dir/file2"
dotest co-d-1.2 "cat dir/CVS/Repository" "$module"
- # FIXCVS: This should work. Correct expected result:
- #
- #"U dir2/sdir/file1
- #U dir2/sdir/file2"
- dotest_fail co-d-2 "$testcvs -q co -d dir2/sdir $module" \
-"$PROG \[checkout aborted\]: could not change directory to requested checkout
directory \`dir2': No such file or directory"
- # FIXCVS:
- # dotest co-d-2.2 "cat dir4/CVS/Repository" "CVSROOT/Emptydir"
- # dotest co-d-2.3 "cat dir5/CVS/Repository" "$module"
+ dotest co-d-2 "$testcvs -q co -d dir2/sdir $module" \
+"U dir2/sdir/file1
+U dir2/sdir/file2"
+ dotest co-d-2.2 "cat dir2/CVS/Repository" "."
+ dotest co-d-2.3 "cat dir2/sdir/CVS/Repository" "$module"
+
+ dotest co-d-2.4 "$testcvs -q co -d dir2.4/sdir/sdir2 $module" \
+"U dir2.4/sdir/sdir2/file1
+U dir2.4/sdir/sdir2/file2"
+ dotest co-d-2.4.2 "cat dir2.4/CVS/Repository" "CVSROOT/Emptydir"
+ dotest co-d-2.4.3 "cat dir2.4/sdir/CVS/Repository" "."
+ dotest co-d-2.4.3 "cat dir2.4/sdir/sdir2/CVS/Repository" "$module"
mkdir dir3
dotest co-d-3 "$testcvs -q co -d dir3 $module" \
@@ -11748,40 +11751,41 @@ U dir/file2"
U dir3/file2"
dotest co-d-3.2 "cat dir3/CVS/Repository" "$module"
- if $remote; then
- # FIXCVS: As for co-d-2.
- mkdir dir4
- dotest_fail co-d-4r "$testcvs -q co -d dir4/sdir $module" \
-"$PROG \[checkout aborted\]: could not change directory to requested checkout
directory \`dir4': No such file or directory"
-
- # FIXCVS: As for co-d-2.
- mkdir dir5
- mkdir dir5/sdir
- dotest_fail co-d-5r "$testcvs -q co -d dir5/sdir $module" \
-"$PROG \[checkout aborted\]: could not change directory to requested checkout
directory \`dir5': No such file or directory"
- else
- mkdir dir4
- dotest co-d-4 "$testcvs -q co -d dir4/sdir $module" \
+ mkdir dir4
+ dotest co-d-4 "$testcvs -q co -d dir4/sdir $module" \
"U dir4/sdir/file1
U dir4/sdir/file2"
- # CVS only creates administration directories for directories it
- # creates, and the last portion of the path passed to -d
- # regardless.
+
+ # CVS is only supposed to create administration directories in
+ # directories it also creates, and in the directory specified by
+ # the last portion of the path passed to -d regardless. This is
+ #
+ # FIXCVS:
+ # This is broken in client/server mode because the server does not
+ # know the client's directory structure and has to create
+ # everything.
+ if $remote; then
+ dotest co-d-4.2r "cat dir4/CVS/Repository" "."
+ else
dotest_fail co-d-4.2 "test -d dir4/CVS"
- dotest co-d-4.3 "cat dir4/sdir/CVS/Repository" "$module"
+ fi
- mkdir dir5
- mkdir dir5/sdir
- dotest co-d-5 "$testcvs -q co -d dir5/sdir $module" \
+ dotest co-d-4.3 "cat dir4/sdir/CVS/Repository" "$module"
+
+ mkdir dir5
+ mkdir dir5/sdir
+ dotest co-d-5 "$testcvs -q co -d dir5/sdir $module" \
"U dir5/sdir/file1
U dir5/sdir/file2"
- # CVS only creates administration directories for directories it
- # creates, and the last portion of the path passed to -d
- # regardless.
+ # FIXCVS as for co-d-4.2r.
+ if $remote; then
+ dotest co-d-5.2 "cat dir5/CVS/Repository" "."
+ else
dotest_fail co-d-5.2 "test -d dir5/CVS"
- dotest co-d-5.3 "cat dir5/sdir/CVS/Repository" "$module"
fi
+ dotest co-d-5.3 "cat dir5/sdir/CVS/Repository" "$module"
+
# clean up
if $keep; then
echo Keeping ${TESTDIR} and exiting due to --keep
@@ -12702,225 +12706,219 @@ U dir/dir2d2-2/sub2d2-2/file2-2"
## on the command line, but use a longer path.
##################################################
- dotest_fail cvsadm-2d3-1 "${testcvs} co -d dir/dir2 1mod" \
-"${PROG} \[checkout aborted\]: could not change directory to requested
checkout directory .dir.: No such file or directory"
-
- if $remote; then :; else
- # Remote can't handle this, even with the "mkdir dir".
- # This was also true of CVS 1.9.
-
- mkdir dir
- dotest cvsadm-2d3 "${testcvs} co -d dir/dir2 1mod" \
-"${PROG} checkout: Updating dir/dir2
+ dotest cvsadm-2d3-1 "${testcvs} co -d dir/dir2 1mod" \
+"$PROG checkout: Updating dir/dir2
U dir/dir2/file1"
- dotest cvsadm-2d3b "cat CVS/Repository" "\."
- dotest_fail cvsadm-2d3d "test -f dir/CVS/Repository" ""
- dotest cvsadm-2d3f "cat dir/dir2/CVS/Repository" "mod1"
- rm -rf CVS dir
- mkdir dir
- dotest cvsadm-2d4 "${testcvs} co -d dir/dir2 2mod" \
+ # Remote couldn't handle this, even with the "mkdir dir", before
+ # CVS 1.11.14.
+ dotest cvsadm-2d3b "cat CVS/Repository" "\."
+ dotest cvsadm-2d3d "cat dir/CVS/Repository" "."
+ dotest cvsadm-2d3f "cat dir/dir2/CVS/Repository" "mod1"
+ rm -rf CVS dir
+
+ mkdir dir
+ dotest cvsadm-2d4 "${testcvs} co -d dir/dir2 2mod" \
"${PROG} checkout: Updating dir/dir2
U dir/dir2/file2"
- dotest cvsadm-2d4b "cat CVS/Repository" "\."
- dotest cvsadm-2d4f "cat dir/dir2/CVS/Repository" "mod2/sub2"
- rm -rf CVS dir
+ dotest cvsadm-2d4b "cat CVS/Repository" "\."
+ dotest cvsadm-2d4f "cat dir/dir2/CVS/Repository" "mod2/sub2"
+ rm -rf CVS dir
- mkdir dir
- dotest cvsadm-2d5 "${testcvs} co -d dir/dir2 1d1mod" \
+ mkdir dir
+ dotest cvsadm-2d5 "${testcvs} co -d dir/dir2 1d1mod" \
"${PROG} checkout: Updating dir/dir2
U dir/dir2/file1"
- dotest cvsadm-2d5b "cat CVS/Repository" "\."
- dotest cvsadm-2d5f "cat dir/dir2/CVS/Repository" "mod1"
- rm -rf CVS dir
+ dotest cvsadm-2d5b "cat CVS/Repository" "\."
+ dotest cvsadm-2d5f "cat dir/dir2/CVS/Repository" "mod1"
+ rm -rf CVS dir
- mkdir dir
- dotest cvsadm-2d6 "${testcvs} co -d dir/dir2 1d2mod" \
+ mkdir dir
+ dotest cvsadm-2d6 "${testcvs} co -d dir/dir2 1d2mod" \
"${PROG} checkout: Updating dir/dir2
U dir/dir2/file2"
- dotest cvsadm-2d6b "cat CVS/Repository" "\."
- dotest cvsadm-2d6f "cat dir/dir2/CVS/Repository" "mod2/sub2"
- rm -rf CVS dir
+ dotest cvsadm-2d6b "cat CVS/Repository" "\."
+ dotest cvsadm-2d6f "cat dir/dir2/CVS/Repository" "mod2/sub2"
+ rm -rf CVS dir
- mkdir dir
- dotest cvsadm-2d7 "${testcvs} co -d dir/dir2 2d1mod" \
+ mkdir dir
+ dotest cvsadm-2d7 "${testcvs} co -d dir/dir2 2d1mod" \
"${PROG} checkout: Updating dir/dir2
U dir/dir2/file1"
- dotest cvsadm-2d7b "cat CVS/Repository" "\."
- dotest cvsadm-2d7f "cat dir/dir2/CVS/Repository" "mod1"
- rm -rf CVS dir
+ dotest cvsadm-2d7b "cat CVS/Repository" "\."
+ dotest cvsadm-2d7f "cat dir/dir2/CVS/Repository" "mod1"
+ rm -rf CVS dir
- mkdir dir
- dotest cvsadm-2d8 "${testcvs} co -d dir/dir2 2d2mod" \
+ mkdir dir
+ dotest cvsadm-2d8 "${testcvs} co -d dir/dir2 2d2mod" \
"${PROG} checkout: Updating dir/dir2
U dir/dir2/file2"
- dotest cvsadm-2d8b "cat CVS/Repository" "\."
- dotest cvsadm-2d8f "cat dir/dir2/CVS/Repository" "mod2/sub2"
- rm -rf CVS dir
-
- ##################################################
- ## And now, a few of those tests revisited to
- ## test the behavior of the -N flag.
- ##################################################
+ dotest cvsadm-2d8b "cat CVS/Repository" "\."
+ dotest cvsadm-2d8f "cat dir/dir2/CVS/Repository" "mod2/sub2"
+ rm -rf CVS dir
+
+ ##################################################
+ ## And now, a few of those tests revisited to
+ ## test the behavior of the -N flag.
+ ##################################################
- dotest cvsadm-N3 "${testcvs} co -N 1mod" \
+ dotest cvsadm-N3 "${testcvs} co -N 1mod" \
"${PROG} checkout: Updating 1mod
U 1mod/file1"
- dotest cvsadm-N3b "cat CVS/Repository" "\."
- dotest cvsadm-N3d "cat 1mod/CVS/Repository" "mod1"
- rm -rf CVS 1mod
+ dotest cvsadm-N3b "cat CVS/Repository" "\."
+ dotest cvsadm-N3d "cat 1mod/CVS/Repository" "mod1"
+ rm -rf CVS 1mod
- dotest cvsadm-N4 "${testcvs} co -N 2mod" \
+ dotest cvsadm-N4 "${testcvs} co -N 2mod" \
"${PROG} checkout: Updating 2mod
U 2mod/file2"
- dotest cvsadm-N4b "cat CVS/Repository" "\."
- dotest cvsadm-N4d "cat 2mod/CVS/Repository" "mod2/sub2"
- rm -rf CVS 2mod
+ dotest cvsadm-N4b "cat CVS/Repository" "\."
+ dotest cvsadm-N4d "cat 2mod/CVS/Repository" "mod2/sub2"
+ rm -rf CVS 2mod
- dotest cvsadm-N5 "${testcvs} co -N 1d1mod" \
+ dotest cvsadm-N5 "${testcvs} co -N 1d1mod" \
"${PROG} checkout: Updating dir1d1
U dir1d1/file1"
- dotest cvsadm-N5b "cat CVS/Repository" "\."
- dotest cvsadm-N5d "cat dir1d1/CVS/Repository" "mod1"
- rm -rf CVS dir1d1
+ dotest cvsadm-N5b "cat CVS/Repository" "\."
+ dotest cvsadm-N5d "cat dir1d1/CVS/Repository" "mod1"
+ rm -rf CVS dir1d1
- dotest cvsadm-N6 "${testcvs} co -N 1d2mod" \
+ dotest cvsadm-N6 "${testcvs} co -N 1d2mod" \
"${PROG} checkout: Updating dir1d2
U dir1d2/file2"
- dotest cvsadm-N6b "cat CVS/Repository" "\."
- dotest cvsadm-N6d "cat dir1d2/CVS/Repository" "mod2/sub2"
- rm -rf CVS dir1d2
+ dotest cvsadm-N6b "cat CVS/Repository" "\."
+ dotest cvsadm-N6d "cat dir1d2/CVS/Repository" "mod2/sub2"
+ rm -rf CVS dir1d2
- dotest cvsadm-N7 "${testcvs} co -N 2d1mod" \
+ dotest cvsadm-N7 "${testcvs} co -N 2d1mod" \
"${PROG} checkout: Updating dir2d1/sub2d1
U dir2d1/sub2d1/file1"
- dotest cvsadm-N7b "cat CVS/Repository" "\."
- dotest cvsadm-N7d "cat dir2d1/CVS/Repository" "\."
- dotest cvsadm-N7f "cat dir2d1/sub2d1/CVS/Repository" "mod1"
- rm -rf CVS dir2d1
+ dotest cvsadm-N7b "cat CVS/Repository" "\."
+ dotest cvsadm-N7d "cat dir2d1/CVS/Repository" "\."
+ dotest cvsadm-N7f "cat dir2d1/sub2d1/CVS/Repository" "mod1"
+ rm -rf CVS dir2d1
- dotest cvsadm-N8 "${testcvs} co -N 2d2mod" \
+ dotest cvsadm-N8 "${testcvs} co -N 2d2mod" \
"${PROG} checkout: Updating dir2d2/sub2d2
U dir2d2/sub2d2/file2"
- dotest cvsadm-N8b "cat CVS/Repository" "\."
- dotest cvsadm-N8d "cat dir2d2/CVS/Repository" "mod2"
- dotest cvsadm-N8f "cat dir2d2/sub2d2/CVS/Repository" "mod2/sub2"
- rm -rf CVS dir2d2
+ dotest cvsadm-N8b "cat CVS/Repository" "\."
+ dotest cvsadm-N8d "cat dir2d2/CVS/Repository" "mod2"
+ dotest cvsadm-N8f "cat dir2d2/sub2d2/CVS/Repository" "mod2/sub2"
+ rm -rf CVS dir2d2
- ## the ones in one-deep directories
+ ## the ones in one-deep directories
- dotest cvsadm-N1d3 "${testcvs} co -N -d dir 1mod" \
+ dotest cvsadm-N1d3 "${testcvs} co -N -d dir 1mod" \
"${PROG} checkout: Updating dir/1mod
U dir/1mod/file1"
- dotest cvsadm-N1d3b "cat CVS/Repository" "\."
- dotest cvsadm-N1d3d "cat dir/CVS/Repository" "\."
- dotest cvsadm-N1d3f "cat dir/1mod/CVS/Repository" "mod1"
- rm -rf CVS dir
+ dotest cvsadm-N1d3b "cat CVS/Repository" "\."
+ dotest cvsadm-N1d3d "cat dir/CVS/Repository" "\."
+ dotest cvsadm-N1d3f "cat dir/1mod/CVS/Repository" "mod1"
+ rm -rf CVS dir
- dotest cvsadm-N1d4 "${testcvs} co -N -d dir 2mod" \
+ dotest cvsadm-N1d4 "${testcvs} co -N -d dir 2mod" \
"${PROG} checkout: Updating dir/2mod
U dir/2mod/file2"
- dotest cvsadm-N1d4b "cat CVS/Repository" "\."
- dotest cvsadm-N1d4d "cat dir/CVS/Repository" "mod2"
- dotest cvsadm-N1d4f "cat dir/2mod/CVS/Repository" "mod2/sub2"
- rm -rf CVS dir
+ dotest cvsadm-N1d4b "cat CVS/Repository" "\."
+ dotest cvsadm-N1d4d "cat dir/CVS/Repository" "mod2"
+ dotest cvsadm-N1d4f "cat dir/2mod/CVS/Repository" "mod2/sub2"
+ rm -rf CVS dir
- dotest cvsadm-N1d5 "${testcvs} co -N -d dir 1d1mod" \
+ dotest cvsadm-N1d5 "${testcvs} co -N -d dir 1d1mod" \
"${PROG} checkout: Updating dir/dir1d1
U dir/dir1d1/file1"
- dotest cvsadm-N1d5b "cat CVS/Repository" "\."
- dotest cvsadm-N1d5d "cat dir/CVS/Repository" "\."
- dotest cvsadm-N1d5d "cat dir/dir1d1/CVS/Repository" "mod1"
- rm -rf CVS dir
+ dotest cvsadm-N1d5b "cat CVS/Repository" "\."
+ dotest cvsadm-N1d5d "cat dir/CVS/Repository" "\."
+ dotest cvsadm-N1d5d "cat dir/dir1d1/CVS/Repository" "mod1"
+ rm -rf CVS dir
- dotest cvsadm-N1d6 "${testcvs} co -N -d dir 1d2mod" \
+ dotest cvsadm-N1d6 "${testcvs} co -N -d dir 1d2mod" \
"${PROG} checkout: Updating dir/dir1d2
U dir/dir1d2/file2"
- dotest cvsadm-N1d6b "cat CVS/Repository" "\."
- dotest cvsadm-N1d6d "cat dir/CVS/Repository" "mod2"
- dotest cvsadm-N1d6f "cat dir/dir1d2/CVS/Repository" "mod2/sub2"
- rm -rf CVS dir
+ dotest cvsadm-N1d6b "cat CVS/Repository" "\."
+ dotest cvsadm-N1d6d "cat dir/CVS/Repository" "mod2"
+ dotest cvsadm-N1d6f "cat dir/dir1d2/CVS/Repository" "mod2/sub2"
+ rm -rf CVS dir
- dotest cvsadm-N1d7 "${testcvs} co -N -d dir 2d1mod" \
+ dotest cvsadm-N1d7 "${testcvs} co -N -d dir 2d1mod" \
"${PROG} checkout: Updating dir/dir2d1/sub2d1
U dir/dir2d1/sub2d1/file1"
- dotest cvsadm-N1d7b "cat CVS/Repository" "\."
- dotest cvsadm-N1d7d "cat dir/CVS/Repository" "CVSROOT/Emptydir"
- dotest cvsadm-N1d7f "cat dir/dir2d1/CVS/Repository" "\."
- dotest cvsadm-N1d7h "cat dir/dir2d1/sub2d1/CVS/Repository" "mod1"
- rm -rf CVS dir
+ dotest cvsadm-N1d7b "cat CVS/Repository" "\."
+ dotest cvsadm-N1d7d "cat dir/CVS/Repository" "CVSROOT/Emptydir"
+ dotest cvsadm-N1d7f "cat dir/dir2d1/CVS/Repository" "\."
+ dotest cvsadm-N1d7h "cat dir/dir2d1/sub2d1/CVS/Repository" "mod1"
+ rm -rf CVS dir
- dotest cvsadm-N1d8 "${testcvs} co -N -d dir 2d2mod" \
+ dotest cvsadm-N1d8 "${testcvs} co -N -d dir 2d2mod" \
"${PROG} checkout: Updating dir/dir2d2/sub2d2
U dir/dir2d2/sub2d2/file2"
- dotest cvsadm-N1d8b "cat CVS/Repository" "\."
- dotest cvsadm-N1d8d "cat dir/CVS/Repository" "\."
- dotest cvsadm-N1d8d "cat dir/dir2d2/CVS/Repository" "mod2"
- dotest cvsadm-N1d8d "cat dir/dir2d2/sub2d2/CVS/Repository" \
+ dotest cvsadm-N1d8b "cat CVS/Repository" "\."
+ dotest cvsadm-N1d8d "cat dir/CVS/Repository" "\."
+ dotest cvsadm-N1d8d "cat dir/dir2d2/CVS/Repository" "mod2"
+ dotest cvsadm-N1d8d "cat dir/dir2d2/sub2d2/CVS/Repository" \
"mod2/sub2"
- rm -rf CVS dir
+ rm -rf CVS dir
- ## the ones in two-deep directories
+ ## the ones in two-deep directories
- mkdir dir
- dotest cvsadm-N2d3 "${testcvs} co -N -d dir/dir2 1mod" \
+ mkdir dir
+ dotest cvsadm-N2d3 "${testcvs} co -N -d dir/dir2 1mod" \
"${PROG} checkout: Updating dir/dir2/1mod
U dir/dir2/1mod/file1"
- dotest cvsadm-N2d3b "cat CVS/Repository" "\."
- dotest cvsadm-N2d3f "cat dir/dir2/CVS/Repository" "\."
- dotest cvsadm-N2d3h "cat dir/dir2/1mod/CVS/Repository" "mod1"
- rm -rf CVS dir
+ dotest cvsadm-N2d3b "cat CVS/Repository" "\."
+ dotest cvsadm-N2d3f "cat dir/dir2/CVS/Repository" "\."
+ dotest cvsadm-N2d3h "cat dir/dir2/1mod/CVS/Repository" "mod1"
+ rm -rf CVS dir
- mkdir dir
- dotest cvsadm-N2d4 "${testcvs} co -N -d dir/dir2 2mod" \
+ mkdir dir
+ dotest cvsadm-N2d4 "${testcvs} co -N -d dir/dir2 2mod" \
"${PROG} checkout: Updating dir/dir2/2mod
U dir/dir2/2mod/file2"
- dotest cvsadm-N2d4b "cat CVS/Repository" "\."
- dotest cvsadm-N2d4f "cat dir/dir2/CVS/Repository" "mod2"
- dotest cvsadm-N2d4h "cat dir/dir2/2mod/CVS/Repository" "mod2/sub2"
- rm -rf CVS dir
+ dotest cvsadm-N2d4b "cat CVS/Repository" "\."
+ dotest cvsadm-N2d4f "cat dir/dir2/CVS/Repository" "mod2"
+ dotest cvsadm-N2d4h "cat dir/dir2/2mod/CVS/Repository" "mod2/sub2"
+ rm -rf CVS dir
- mkdir dir
- dotest cvsadm-N2d5 "${testcvs} co -N -d dir/dir2 1d1mod" \
+ mkdir dir
+ dotest cvsadm-N2d5 "${testcvs} co -N -d dir/dir2 1d1mod" \
"${PROG} checkout: Updating dir/dir2/dir1d1
U dir/dir2/dir1d1/file1"
- dotest cvsadm-N2d5b "cat CVS/Repository" "\."
- dotest cvsadm-N2d5f "cat dir/dir2/CVS/Repository" "\."
- dotest cvsadm-N2d5h "cat dir/dir2/dir1d1/CVS/Repository" "mod1"
- rm -rf CVS dir
+ dotest cvsadm-N2d5b "cat CVS/Repository" "\."
+ dotest cvsadm-N2d5f "cat dir/dir2/CVS/Repository" "\."
+ dotest cvsadm-N2d5h "cat dir/dir2/dir1d1/CVS/Repository" "mod1"
+ rm -rf CVS dir
- mkdir dir
- dotest cvsadm-N2d6 "${testcvs} co -N -d dir/dir2 1d2mod" \
+ mkdir dir
+ dotest cvsadm-N2d6 "${testcvs} co -N -d dir/dir2 1d2mod" \
"${PROG} checkout: Updating dir/dir2/dir1d2
U dir/dir2/dir1d2/file2"
- dotest cvsadm-N2d6b "cat CVS/Repository" "\."
- dotest cvsadm-N2d6f "cat dir/dir2/CVS/Repository" "mod2"
- dotest cvsadm-N2d6h "cat dir/dir2/dir1d2/CVS/Repository" "mod2/sub2"
- rm -rf CVS dir
+ dotest cvsadm-N2d6b "cat CVS/Repository" "\."
+ dotest cvsadm-N2d6f "cat dir/dir2/CVS/Repository" "mod2"
+ dotest cvsadm-N2d6h "cat dir/dir2/dir1d2/CVS/Repository" "mod2/sub2"
+ rm -rf CVS dir
- mkdir dir
- dotest cvsadm-N2d7 "${testcvs} co -N -d dir/dir2 2d1mod" \
+ mkdir dir
+ dotest cvsadm-N2d7 "${testcvs} co -N -d dir/dir2 2d1mod" \
"${PROG} checkout: Updating dir/dir2/dir2d1/sub2d1
U dir/dir2/dir2d1/sub2d1/file1"
- dotest cvsadm-N2d7b "cat CVS/Repository" "\."
- dotest cvsadm-N2d7f "cat dir/dir2/CVS/Repository" "CVSROOT/Emptydir"
- dotest cvsadm-N2d7g "cat dir/dir2/dir2d1/CVS/Repository" "\."
- dotest cvsadm-N2d7h "cat dir/dir2/dir2d1/sub2d1/CVS/Repository" \
+ dotest cvsadm-N2d7b "cat CVS/Repository" "\."
+ dotest cvsadm-N2d7f "cat dir/dir2/CVS/Repository" "CVSROOT/Emptydir"
+ dotest cvsadm-N2d7g "cat dir/dir2/dir2d1/CVS/Repository" "\."
+ dotest cvsadm-N2d7h "cat dir/dir2/dir2d1/sub2d1/CVS/Repository" \
"mod1"
- rm -rf CVS dir
+ rm -rf CVS dir
- mkdir dir
- dotest cvsadm-N2d8 "${testcvs} co -N -d dir/dir2 2d2mod" \
+ mkdir dir
+ dotest cvsadm-N2d8 "${testcvs} co -N -d dir/dir2 2d2mod" \
"${PROG} checkout: Updating dir/dir2/dir2d2/sub2d2
U dir/dir2/dir2d2/sub2d2/file2"
- dotest cvsadm-N2d8b "cat CVS/Repository" "\."
- dotest cvsadm-N2d8f "cat dir/dir2/CVS/Repository" "\."
- dotest cvsadm-N2d8h "cat dir/dir2/dir2d2/CVS/Repository" "mod2"
- dotest cvsadm-N2d8j "cat dir/dir2/dir2d2/sub2d2/CVS/Repository" \
+ dotest cvsadm-N2d8b "cat CVS/Repository" "\."
+ dotest cvsadm-N2d8f "cat dir/dir2/CVS/Repository" "\."
+ dotest cvsadm-N2d8h "cat dir/dir2/dir2d2/CVS/Repository" "mod2"
+ dotest cvsadm-N2d8j "cat dir/dir2/dir2d2/sub2d2/CVS/Repository" \
"mod2/sub2"
- rm -rf CVS dir
-
- fi # end of tests to be skipped for remote
+ rm -rf CVS dir
+ # End of test that didn't work for remote prior to CVS 1.11.14.
##################################################
## That's enough of that, thank you very much.
@@ -13060,7 +13058,12 @@ ${PROG} checkout: Updating dir2d1/suba"
dotest emptydir-16 "${testcvs} co 2d1mod" \
"${PROG} checkout: Updating dir2d1/sub/sub2d1
U dir2d1/sub/sub2d1/file1"
- dotest emptydir-17 "test -d dir2d1/CVS"
+
+ if $remote; then
+ dotest emptydir-17 "cat dir2d1/CVS/Repository" "CVSROOT/Emptydir"
+ else
+ dotest_fail emptydir-17 "test -d dir2d1/CVS"
+ fi
# clean up
if $keep; then
@@ -13139,50 +13142,45 @@ U ${TESTDIR}/1/file1"
dotest abspath-2b "cat ${TESTDIR}/1/CVS/Repository" "mod1"
# Done. Clean up.
- rm -rf ${TESTDIR}/1
+ rm -r ${TESTDIR}/1
# Now try in a subdirectory. We're not covering any more
# code here, but we might catch a future error if someone
# changes the checkout code.
- # Note that for the same reason that the shell command
- # "touch 1/2/3" requires directories 1 and 1/2 to already
- # exist, we expect ${TESTDIR}/1 to already exist. I believe
- # this is the behavior of CVS 1.9 and earlier.
+ # Since CVS 1.11.14, CVS will create leading directories specified
+ # via co -d.
+ # I am unsure that this wasn't the behavior prior to CVS 1.9, but the
+ # comment that used to be here leads me to believe it was not.
if $remote; then :; else
- dotest_fail abspath-3.1 "${testcvs} co -d ${TESTDIR}/1/2 mod1" \
-"${PROG} \[checkout aborted\]: could not change directory to requested
checkout directory .${TESTDIR}/1.: No such file or directory"
+ dotest abspath-3.1 "${testcvs} -q co -d ${TESTDIR}/1/2 mod1" \
+"U $TESTDIR/1/2/file1"
+ rm -r $TESTDIR/1
fi
- dotest_fail abspath-3.2 "${testcvs} co -d 1/2 mod1" \
-"${PROG} \[checkout aborted\]: could not change directory to requested
checkout directory .1.: No such file or directory"
+ dotest abspath-3.2 "${testcvs} -q co -d 1/2 mod1" \
+"U 1/2/file1"
+ rm -r 1
+ # We don't to mess with an existing directory just to traverse it,
+ # for example by creating a CVS directory, but currently we can't
+ # avoid this in client/server mode.
mkdir 1
-
if $remote; then
- # The server wants the directory to exist, but that is
- # a bug, it should only need to exist on the client side.
- # See also cvsadm-2d3.
- dotest_fail abspath-3a "${testcvs} co -d 1/2 mod1" \
-"${PROG} \[checkout aborted\]: could not change directory to requested
checkout directory .1.: No such file or directory"
- cd 1
- dotest abspath-3a-try2 "${testcvs} co -d 2 mod1" \
-"${PROG} checkout: Updating 2
-U 2/file1"
- cd ..
- rm -rf 1/CVS
+ dotest abspath-3ar "${testcvs} co -d 1/2 mod1" \
+"${PROG} checkout: Updating 1/2
+U 1/2/file1"
+ dotest abspath-3br "cat 1/CVS/Repository" .
else
- dotest abspath-3a "${testcvs} co -d ${TESTDIR}/1/2 mod1" \
+ dotest abspath-3a "${testcvs} co -d ${TESTDIR}/1/2 mod1" \
"${PROG} checkout: Updating ${TESTDIR}/1/2
U ${TESTDIR}/1/2/file1"
- fi # remote workaround
- dotest abspath-3b "cat ${TESTDIR}/1/2/CVS/Repository" "mod1"
+ dotest_fail abspath-3b "test -d ${TESTDIR}/1/CVS"
+ fi
+
+ dotest abspath-3c "cat ${TESTDIR}/1/2/CVS/Repository" mod1
- # For all the same reasons that we want "1" to already
- # exist, we don't to mess with it to traverse it, for
- # example by creating a CVS directory.
- dotest_fail abspath-3c "test -d ${TESTDIR}/1/CVS" ''
# Done. Clean up.
rm -rf ${TESTDIR}/1
@@ -13272,10 +13270,10 @@ ${PROG} \[checkout aborted\]: than the 0
"U 3/file2"
cd 1/mod1
else
- dotest abspath-7d "${testcvs} -q co -d ${TESTDIR}/3 mod2" \
+ dotest abspath-7d "${testcvs} -q co -d ${TESTDIR}/3 mod2" \
"U ${TESTDIR}/3/file2"
fi # remote workaround
- dotest abspath-7e "${testcvs} -q update -d" ""
+ dotest abspath-7e "${testcvs} -q update -d"
cd ../..
rm -r 1 2 3
@@ -25652,14 +25650,14 @@ ${PLUS}change him too"
mkdir dir2
# OK, the problem is that CVS/Entries doesn't look quite right,
- # I suppose because of the "rm -r".
- # For local this fixes it up.
- dotest multiroot3-6 "${testcvs} -d ${CVSROOT1} -q co dir1" ""
- if $remote; then
- # For remote that doesn't do it. Use the quick and dirty fix.
- echo "D/dir1////" >CVS/Entries
- echo "D/dir2////" >>CVS/Entries
- fi
+ # I suppose because of the "rm -r". Then again, why *should* it
+ # look right? CVS/Root can only point to a single location, but
+ # we expect CVS/Entries to hold entries for two repositories? It
+ # just plain isn't part of the filespec yet.
+ #
+ # Use the quick and dirty fix.
+ echo "D/dir1////" >CVS/Entries
+ echo "D/dir2////" >>CVS/Entries
dotest multiroot3-7 "${testcvs} add dir2" \
"Directory ${TESTDIR}/root2/dir2 added to the repository"