If the -d option is used with cvs commit to override CVS/Root, then modified files in the directory that cvs is invoked from may get missed by the commit.
This is because the routine arg_should_not_be_sent_to_server() in client.c is erroneously throwing out the filename because CVS/Root does not match the server that it is connected to. This patch fixes that by giving the command-line cvs root priority over the value returned by Name_Root(). I'm not sure if this is the best way to fix it; perhaps Name_Root() should be changed instead. This fix seemed safer however. Simon Walton
Index: ChangeLog =================================================================== RCS file: /home/cvsroot/tools/cvs/ChangeLog,v retrieving revision 1.7 diff -u -r1.7 ChangeLog --- ChangeLog 2002/09/11 15:16:12 1.7 +++ ChangeLog 2002/09/21 00:23:54 @@ -1,3 +1,8 @@ +2002-09-20 Simon Walton <[EMAIL PROTECTED]> + + * Fix missed files in commit with -d global option + if -d value was different to working copy's. + 2002-09-11 Jim Meyering <[EMAIL PROTECTED]> * (all auto*-generated files): Regenerate using automake-1.6 and Index: src/client.c =================================================================== RCS file: /home/cvsroot/tools/cvs/src/client.c,v retrieving revision 1.11 diff -u -r1.11 client.c --- src/client.c 2002/09/11 12:49:03 1.11 +++ src/client.c 2002/09/21 00:23:54 @@ -247,7 +247,8 @@ { /* We're at the beginning of the string. Look at the CVSADM files in cwd. */ - this_root = Name_Root ((char *) NULL, (char *) NULL); + this_root = CVSroot_cmdline ? xstrdup(CVSroot_cmdline) : + Name_Root ((char *) NULL, (char *) NULL); } /* Now check the value for root. */ Index: src/sanity.sh =================================================================== RCS file: /home/cvsroot/tools/cvs/src/sanity.sh,v retrieving revision 1.17 diff -u -r1.17 sanity.sh --- src/sanity.sh 2002/09/17 19:45:49 1.17 +++ src/sanity.sh 2002/09/21 00:23:54 @@ -707,7 +707,7 @@ # Multiple root directories and low-level protocol tests. tests="${tests} multiroot multiroot2 multiroot3 multiroot4" tests="${tests} rmroot reposmv pserver server server2 client" - tests="${tests} fork" + tests="${tests} fork commit-d" else tests="$*" fi @@ -24331,6 +24331,31 @@ cd ../.. rm -rf 1 rm -rf ${CVSROOT_DIRNAME}/$module + ;; + + commit-d) + # Check that top-level commits work when CVS/Root + # is overridden by cvs -d. + + mkdir -p 1/subdir; cd 1 + touch file1 subdir/file2 + dotest commit-d-1 "$testcvs -Q import -m. c-d-c X Y" "" + dotest commit-d-2 "$testcvs -Q co c-d-c" "" + cd c-d-c + echo change >>file1; echo another change >>subdir/file2 + # Changing working root, then override with -d + echo nosuchhost:/cvs > CVS/Root + dotest commit-d-3 "$testcvs -Q -d $CVSROOT commit -m." \ +"Checking in file1; +${TESTDIR}/cvsroot/c-d-c/file1,v <-- file1 +new revision: 1.2; previous revision: 1.1 +done +Checking in subdir/file2; +${TESTDIR}/cvsroot/c-d-c/subdir/file2,v <-- file2 +new revision: 1.2; previous revision: 1.1 +done" + cd ../.. + rm -rf 1 cvsroot/c-d-c ;; *) Index: src/version.c =================================================================== RCS file: /home/cvsroot/tools/cvs/src/version.c,v retrieving revision 1.26 diff -u -r1.26 version.c --- src/version.c 2002/09/11 12:49:06 1.26 +++ src/version.c 2002/09/21 00:23:54 @@ -18,7 +18,8 @@ char *config_string = " (client/server)\n" " + loginfo-pipe patch\n" " + update -p patch\n" - " + commit-add-missing patch\n"; + " + commit-add-missing patch\n" + " + cvs -d patch\n"; #else char *config_string = " (client)\n";