1 #! /bin/sh 2 : 3 # sanity.sh -- a growing testsuite for cvs. 4 # 5 # The copyright notice said: "Copyright (C) 1992, 1993 Cygnus Support" 6 # I'm not adding new copyright notices for new years as our recent 7 # practice has been to include copying terms without copyright notices. 8 # 9 # This program is free software; you can redistribute it and/or modify 10 # it under the terms of the GNU General Public License as published by 11 # the Free Software Foundation; either version 2, or (at your option) 12 # any later version. 13 # 14 # This program is distributed in the hope that it will be useful, 15 # but WITHOUT ANY WARRANTY; without even the implied warranty of 16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 # GNU General Public License for more details. 18 # 19 # Original Author: K. Richard Pixley 20 21 # usage: 22 usage () 23 { 24 echo "Usage: `basename $0` --help" 25 echo "Usage: `basename $0` [--eklrw] [-c CONFIG-FILE] [-f FROM-TEST] \\" 26 echo " [-h HOSTNAME] [-s CVS-FOR-CVS-SERVER] CVS-TO-TEST \\" 27 echo " [TESTS-TO-RUN...]" 28 } 29 30 exit_usage () 31 { 32 usage 1>&2 33 exit 2 34 } 35 36 exit_help () 37 { 38 usage 39 echo 40 echo "-H|--help display this text" 41 echo "-c CONFIG-FILE" 42 echo "--config=CONFIG_FILE" 43 echo " use an alternate test suite config file (defaults to" 44 echo " \`sanity.config.sh' in the same directory as" 45 echo " CVS-TO-TEST is found in)" 46 echo "-e|--skipfail Treat tests that would otherwise be nonfatally skipped" 47 echo " for reasons like missing tools as failures, exiting" 48 echo " with an error message. Also treat warnings as" 49 echo " failures." 50 echo "-f FROM-TEST" 51 echo "--from-test=FROM-TEST" 52 echo " run TESTS-TO-RUN, skipping all tests in the list before" 53 echo " FROM-TEST" 54 echo "-h HOSTNAME" 55 echo "--hostname HOSTNAME" 56 echo " Use :ext:HOSTNAME to run remote tests rather than" 57 echo " :fork:. Implies --remote and assumes that \$TESTDIR" 58 echo " resolves to the same directory on both the client and" 59 echo " the server." 60 echo "-k|--keep try to keep directories created by individual tests" 61 echo " around, exiting after the first test which supports" 62 echo " --keep" 63 echo "-l|--link-root" 64 echo " test CVS using a symlink to a real CVSROOT" 65 echo "-n|--noredirect" 66 echo " test a secondary/primary CVS server (writeproxy)" 67 echo " configuration with the Redirect response disabled" 68 echo " (implies --proxy)." 69 echo "-p|--proxy test a secondary/primary CVS server (writeproxy)" 70 echo " configuration (implies --remote)." 71 echo "-r|--remote test client/server, as opposed to local, CVS" 72 echo "-w|--wait automatically sleep for a second before and after" 73 echo " checkouts, commits, and updates. Use this option" 74 echo " if you have fast cores and a slow disk. (For example," 75 echo " you may need this flag if you see tests fail because" 76 echo " they think they have nothing to commit.)" 77 echo "-s CVS-FOR-CVS-SERVER" 78 echo "--server=CVS-FOR-CVS-SERVER" 79 echo " use CVS-FOR-CVS-SERVER as the path to the CVS SERVER" 80 echo " executable to be tested (defaults to CVS-TO-TEST and" 81 echo " implies --remote)" 82 echo 83 echo "CVS-TO-TEST the path to the CVS executable to be tested; used as" 84 echo " the path to the CVS client when CVS-FOR-CVS-SERVER is" 85 echo " specified" 86 echo "TESTS-TO-RUN the names of the tests to run (defaults to all tests)" 87 exit 2 88 } 89 90 checklongoptarg() 91 { 92 if test "x$1" != xoptional && test -z "$OPTARG"; then 93 echo "option \`--$LONGOPT' requires an argument" >&2 94 exit_usage 95 fi 96 } 97 98 # See TODO list at end of file. 99 100 # required to make this script work properly. 101 unset CVSREAD 102 103 # We want to invoke a predictable set of i18n behaviors, not whatever 104 # the user running this script might have set. 105 # In particular: 106 # 'sort' and tabs and spaces (LC_COLLATE). 107 # Messages from getopt (LC_MESSAGES) (in the future, CVS itself might 108 # also alter its messages based on LC_MESSAGES). 109 LANG=C 110 export LANG 111 LC_ALL=C 112 export LC_ALL 113 114 # And a few tests want a predictable umask. 115 umask 0002 116 117 # 118 # Initialize the test counts. 119 # 120 passed=0 121 skipped=0 122 warnings=0 123 124 125 126 # 127 # read our options 128 # 129 unset configfile 130 unset fromtest 131 unset remotehost 132 unset rootoptions 133 keep=false 134 linkroot=false 135 noredirect=false 136 proxy=false 137 remote=false 138 servercvs=false 139 skipfail=false 140 waitforslowdisk=false 141 while getopts Hc:ef:h:klnprs:w-: option ; do 142 # convert the long opts to short opts 143 if test x$option = x-; then 144 # remove any argument 145 if echo "$OPTARG" |grep = >/dev/null; then 146 LONGOPT=`echo "$OPTARG" |sed 's/=.*$//'` 147 OPTARG=`echo "$OPTARG" |sed -e 's/^.*=//'` 148 else 149 LONGOPT=$OPTARG 150 OPTARG= 151 fi 152 # Convert LONGOPT to lower case 153 LONGOPT=`echo "$LONGOPT" |sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` 154 case "$LONGOPT" in 155 c|co|con|conf|confi|config) 156 option=c 157 checklongoptarg 158 ;; 159 f|fr|fro|from|from-|from-t|from-te|from-tes|from-test) 160 option=f 161 checklongoptarg 162 ;; 163 h) 164 echo "\`--h' is ambiguous. Could mean \`--help' or \`--hostname'" >&2 165 exit_usage 166 ;; 167 he|hel|help) 168 option=H 169 OPTARG= 170 ;; 171 ho|hos|host|hostn|hostna|hostnam|hostname) 172 option=h 173 checklongoptarg 174 ;; 175 k|ke|kee|keep) 176 option=k 177 OPTARG= 178 ;; 179 l|li|lin|link|link-|link-r]|link-ro|link-roo|link-root) 180 option=l 181 OPTARG= 182 ;; 183 n|no|nor|nore|nored|noredi|noredir|noredire|noredirec|noredirect) 184 option=n 185 OPTARG= 186 ;; 187 p|pr|pro|prox|proxy) 188 option=p 189 OPTARG= 190 ;; 191 r|re|rem|remo|remot|remote) 192 option=r 193 OPTARG= 194 ;; 195 s) 196 echo "\`--s' is ambiguous. Could mean \`--server' or \`--skipfail'" >&2 197 exit_usage 198 ;; 199 se|ser|serv|serve|server) 200 option=s 201 checklongoptarg 202 ;; 203 sk|ski|skip|skipf|skipfa|skipfai|skipfail) 204 option=e 205 OPTARG= 206 ;; 207 w|wa|wai|wait) 208 option=w 209 OPTARG= 210 ;; 211 *) 212 option=\? 213 OPTARG= 214 esac 215 fi 216 case "$option" in 217 c) 218 configfile="$OPTARG" 219 ;; 220 e) 221 skipfail=: 222 ;; 223 f) 224 fromtest="$OPTARG" 225 ;; 226 h) 227 # Set a remotehost to run the remote tests on via :ext: 228 # Implies `-r' and assumes that $TESTDIR resolves to the same 229 # directory on the client and the server. 230 remotehost="$OPTARG" 231 remote=: 232 ;; 233 H) 234 exit_help 235 ;; 236 k) 237 # The -k (keep) option will eventually cause all the tests to 238 # leave around the contents of the /tmp directory; right now only 239 # some implement it. Not originally intended to be useful with 240 # more than one test, but this should work if each test uses a 241 # uniquely named dir (use the name of the test). 242 keep=: 243 ;; 244 l) 245 linkroot=: 246 ;; 247 n) 248 proxy=: 249 noredirect=: 250 remote=: 251 ;; 252 p) 253 proxy=: 254 remote=: 255 ;; 256 r) 257 remote=: 258 ;; 259 s) 260 servercvs="$OPTARG" 261 remote=: 262 ;; 263 w) 264 waitforslowdisk=: 265 ;; 266 \?) 267 exit_usage 268 ;; 269 esac 270 done 271 272 # boot the arguments we used above 273 while test $OPTIND -gt 1 ; do 274 shift 275 OPTIND=`expr $OPTIND - 1` 276 done 277 278 # Use full path for CVS executable, so that CVS_SERVER gets set properly 279 # for remote. 280 case $1 in 281 "") 282 exit_usage 283 ;; 284 /*) 285 testcvs=$1 286 ;; 287 *) 288 testcvs=`pwd`/$1 289 ;; 290 esac 291 shift 292 293 # Verify that $testcvs looks like CVS. 294 # we can't use test -x since BSD 4.3 doesn't support it. 295 if test ! -f $testcvs || test ! -r $testcvs; then 296 echo "No such file or file not readable: $testcvs" >&2 297 exit 1 298 fi 299 if $testcvs --version </dev/null 2>/dev/null | 300 grep '^Concurrent Versions System' >/dev/null 2>&1; then :; else 301 echo "Not a CVS executable: $testcvs" >&2 302 exit 1 303 fi 304 305 # If $remotehost is set, warn if $TESTDIR isn't since we are pretty sure 306 # that its default value of `/tmp/cvs-sanity' will not resolve to the same 307 # directory on two different machines. 308 if test -n "$remotehost" && test -z "$TESTDIR"; then 309 echo "WARNING: CVS server hostname is set and \$TESTDIR is not. If" >&2 310 echo "$remotehost is not the local machine, then it is unlikely that" >&2 311 echo "the default value assigned to \$TESTDIR will resolve to the same" >&2 312 echo "directory on both this client and the CVS server." >&2 313 fi 314 315 # Read our config file if we can find it. 316 # 317 # The config file should always be located in the same directory as the CVS 318 # executable, unless we are testing an executable outside of the build 319 # directory. In this case, we echo a warning and attempt to assume the most 320 # portable configuration. 321 if test -z "$configfile"; then 322 configfile=`dirname $testcvs`/sanity.config.sh 323 fi 324 if test -r "$configfile"; then 325 . "$configfile" 326 else 327 echo "WARNING: Failed to locate test suite config file" >&2 328 echo " \`$configfile'." >&2 329 fi 330 331 332 333 # Set a default value for $CVS_RSH. The sanity.config.sh file will 334 # have the configured value in the RSH_DFLT variable. 335 # 336 : ${CVS_RSH=${RSH_DFLT:-ssh}}; export CVS_RSH 337 338 if test -n "$remotehost"; then 339 # Verify that $CVS_RSH $remotehost works. 340 result=`$CVS_RSH $remotehost 'echo test'` 341 if test $? != 0 || test "x$result" != "xtest"; then 342 echo "\`$CVS_RSH $remotehost' failed." >&2 343 exit 1 344 fi 345 fi 346 347 case "$servercvs" in 348 "") 349 exit_usage 350 ;; 351 false) 352 ;; 353 /*) 354 ;; 355 *) 356 servercvs=`pwd`/$servercvs 357 ;; 358 esac 359 360 if test false != $servercvs; then 361 # Allow command line to override $CVS_SERVER 362 CVS_SERVER=$servercvs 363 else 364 # default $CVS_SERVER to ${testcvs} 365 : ${CVS_SERVER=$testcvs} 366 # With the previous command, effectively defaults $servercvs to $CVS_SERVER, 367 # then $testcvs 368 servercvs=$CVS_SERVER 369 fi 370 export CVS_SERVER 371 servercvs_orig=$servercvs 372 373 # Fail in client/server mode if our ${servercvs} does not contain server 374 # support. 375 if $remote; then 376 if test -n "$remotehost"; then 377 if $CVS_RSH $remotehost "test ! -f ${servercvs} || test ! -r ${servercvs}" 378 then 379 echo "No such file or file not readable: $remotehost:${testcvs}" >&2 380 exit 1 381 fi 382 if $CVS_RSH $remotehost "${servercvs} --version </dev/null 2>/dev/null | 383 grep '^Concurrent Versions System' >/dev/null 2>&1"; then :; else 384 echo "Not a CVS executable: $remotehost:${servercvs}" >&2 385 exit 1 386 fi 387 if $CVS_RSH $remotehost "${servercvs} --version </dev/null | 388 grep '^Concurrent.*(.*server)$' >/dev/null 2>&1"; then :; else 389 echo "CVS executable \`$remotehost:${servercvs}' does not contain server support." >&2 390 exit 1 391 fi 392 else 393 if test ! -f ${servercvs} || test ! -r ${servercvs}; then 394 echo "No such file or file not readable: ${testcvs}" >&2 395 exit 1 396 fi 397 if ${servercvs} --version </dev/null 2>/dev/null | 398 grep '^Concurrent Versions System' >/dev/null 2>&1; then :; else 399 echo "Not a CVS executable: ${servercvs}" >&2 400 exit 1 401 fi 402 if ${servercvs} --version </dev/null | 403 grep '^Concurrent.*(.*server)$' >/dev/null 2>&1; then :; else 404 echo "CVS executable \`${servercvs}' does not contain server support." >&2 405 exit 1 406 fi 407 fi 408 fi 409 410 # Fail in client/server mode if our ${testcvs} does not contain client 411 # support. 412 if $remote; then 413 if ${testcvs} --version </dev/null | 414 grep '^Concurrent.*(client.*)$' >/dev/null 2>&1; then :; else 415 echo "CVS executable \`${testcvs}' does not contain client support." >&2 416 exit 1 417 fi 418 fi 419 420 # For the "fork" tests. 421 if ${testcvs} --version </dev/null | 422 grep '^Concurrent.*(.*server)$' >/dev/null 2>&1 423 then 424 testcvs_server_support=: 425 else 426 testcvs_server_support=false 427 fi 428 429 430 431 dokeep() 432 { 433 if ${keep}; then 434 echo "Keeping ${TESTDIR} for test case \`${what}' and exiting due to --keep" 435 exit 0 436 fi 437 } 438 439 440 441 ### 442 ### GUTS 443 ### 444 445 # "debugger" 446 #set -x 447 448 echo 'This test should produce no other output than this message, and a final "OK".' 449 echo '(Note that the test can take an hour or more to run and periodically stops' 450 echo 'for as long as one minute. Do not assume there is a problem just because' 451 echo 'nothing seems to happen for a long time. If you cannot live without' 452 echo "running status, try the command: \`tail -f check.log' from another window.)" 453 454 # Regexp to match what the CVS client will call itself in output that it prints. 455 # FIXME: we don't properly quote this--if the name contains . we'll 456 # just spuriously match a few things; if the name contains other regexp 457 # special characters we are probably in big trouble. 458 CPROG=`basename ${testcvs} |sed 's/\.exe$//'` 459 # And the regexp for the CVS server when we have one. In local mode, this 460 # defaults to $CPROG since $servercvs already did. 461 # FIXCVS: There are a few places in error messages where CVS suggests a command 462 # and outputs $SPROG as the suggested executable. This could hopefully use 463 # MT (tagged text - see doc/cvs-client.texi) to request that the client print 464 # its own name. 465 SPROG=`basename ${servercvs} |sed 's/\.exe$//'` 466 467 468 # Match the hostname 469 hostname="[-_.a-zA-Z0-9]*" 470 471 # Regexp to match a commitid 472 commitid="[a-zA-Z0-9]*" 473 474 # Regexp to match the name of a temporary file (from cvs_temp_name). 475 # This appears in certain diff output. 476 tempfile="cvs[-a-zA-Z0-9.%_]*" 477 # $tempname set after $TMPDIR, below. 478 479 # Regexp to match a date in RFC822 format (as amended by RFC1123). 480 RFCDATE="[a-zA-Z0-9 ][a-zA-Z0-9 ]* [0-9:][0-9:]* -0000" 481 RFCDATE_EPOCH="1 Jan 1970 00:00:00 -0000" 482 483 # Special times used in touch -t commands and the regular expresions 484 # to match them. Now that the tests set TZ=UTC0, it 485 # should be easier to be more exact in their regexp. 486 TOUCH1971="197107040343" 487 # This date regexp was 1971/07/0[3-5] [0-9][0-9]:43:[0-9][0-9] 488 ISO8601DATE1971="1971-07-04 03:43:[0-9][0-9] [+-]0000" 489 490 TOUCH2034="203412251801" 491 # This date regexp was 2034/12/2[4-6] [0-9][0-9]:01:[0-9][0-9] 492 ISO8601DATE2034="2034-12-25 18:01:[0-9][0-9] [+-]0000" 493 494 # Used in admin tests for exporting RCS files. 495 # The RAWRCSDATE..... format is for internal ,v files and 496 # the ISO8601DATE..... format is to allow for a regular expression in 497 # 'cvs log' output patterns. The tests that use this set of specific 498 # ${ISO8601DATE.....} variables also force TZ=UTC0 for the test. 499 RAWRCSDATE2000A="2000.11.24.15.58.37" 500 RAWRCSDATE1996A="96.11.24.15.57.41" 501 RAWRCSDATE1996B="96.11.24.15.56.05" 502 ISO8601DATE2000A="2000-11-24 15:58:37 [+-]0000" 503 ISO8601DATE1996A="1996-11-24 15:57:41 [+-]0000" 504 ISO8601DATE1996B="1996-11-24 15:56:05 [+-]0000" 505 506 # Regexp to match the date in cvs log command output 507 # This format has been enhanced in the future to accept either 508 # old-style cvs log output dates or new-style ISO8601 timezone 509 # information similar to the ISODATE format. The RCSKEYDATE is 510 # similar, but uses '/' instead of '-' to sepearate year/month/day 511 # and does not include the optional timezone offset. 512 ISO8601DATE="[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-6][0-9]:[0-6][0-9] [-+][0-1][0-9][0-6][0-9]" 513 514 # Regexp to match the dates found in rcs keyword strings 515 RCSKEYDATE="[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]" 516 517 # Regexp to match the date in the delta section of rcs format files. 518 # Dates in very old RCS files may not have included the century. 519 RCSDELTADATE="[0-9][0-9]*\.[0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]" 520 521 # Regexp to match a date in standard Unix format as used by rdiff 522 # FIXCVS: There's no reason for rdiff to use a different date format 523 # than diff does 524 DATE="[a-zA-Z]* [a-zA-Z]* [ 1-3][0-9] [0-9:]* [0-9]*" 525 # ISO 8601 format "yyyy-mm-dd hh:mm -0000" 526 ISODATE="[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9] [+-][0-9][0-9][0-9][0-9]" 527 # %p format is not well defined (nil) and hex digits are common. Using 528 # ..* is a bad idea as the tests take a very long time to run due to 529 # the complexity of the expressions. If you run into any other characters 530 # that are used in a %p format, add them here. 531 PFMT="[0-9a-zA-Z()][0-9a-zA-Z()]*" 532 533 # Which directories should Which and find_tool search for executables? 534 SEARCHPATH=$PATH:/usr/local/bin:/usr/contrib/bin:/usr/contrib:/usr/gnu/bin:/local/bin:/local/gnu/bin:/gnu/bin:/sw/bin:/usr/pkg/bin 535 536 # Do not assume that `type -p cmd` is portable 537 # Usage: Which [-a] [-x|-f|-r] prog [$SEARCHPATH:/with/directories:/to/search] 538 Which() { 539 # Optional first argument for file type, defaults to -x. 540 # Second argument is the file or directory to be found. 541 # Third argument is the PATH to search. 542 # By default, print only the first file that matches, 543 # -a will cause all matches to be printed. 544 notevery=: 545 if [ "x$1" = "x-a" ]; then notevery=false; shift; fi 546 case "$1" in 547 -*) t=$1; shift ;; 548 *) t=-x ;; 549 esac 550 case "$1" in 551 # FIXME: Someday this may need to be fixed 552 # to deal better with C:\some\path\to\ssh values... 553 /*) test $t $1 && echo $1 ;; 554 *) for d in `IFS=:; echo ${2-$SEARCHPATH}` 555 do 556 test $t $d/$1 && { echo $d/$1; if $notevery; then break; fi; } 557 done 558 ;; 559 esac 560 } 561 562 563 # On cygwin32, we may not have /bin/sh. 564 if test -r /bin/sh; then 565 TESTSHELL="/bin/sh" 566 else 567 TESTSHELL=`Which -f sh` 568 if test ! -r "$TESTSHELL"; then 569 TESTSHELL="/bin/sh" 570 fi 571 fi 572 573 # FIXME: try things (what things? checkins?) without -m. 574 # 575 # Some of these tests are written to expect -Q. But testing with 576 # -Q is kind of bogus, it is not the way users actually use CVS (usually). 577 # So new tests probably should invoke ${testcvs} directly, rather than ${CVS}. 578 # and then they've obviously got to do something with the output.... 579 # 580 CVS="${testcvs} -Q" 581 582 LOGFILE=`pwd`/check.log 583 584 # Save the previous log in case the person running the tests decides 585 # they want to look at it. The extension ".plog" is chosen for consistency 586 # with dejagnu. 587 test -f check.plog && mv check.plog check.plog~ 588 test -f check.log && mv check.log check.plog 589 590 # Create the log file so check.log can be tailed almost immediately after 591 # this script is started. Otherwise it can take up to a minute or two before 592 # the log file gets created when $remotehost is specified on some systems, 593 # which makes for a lot of failed `tail -f' attempts. 594 touch check.log 595 596 # Workaround any X11Forwarding by ssh. Otherwise this text: 597 # Warning: No xauth data; using fake authentication data for X11 forwarding. 598 # has been known to end up in the test results below 599 # causing the test to fail. 600 [ -n "$DISPLAY" ] && unset DISPLAY 601 602 # The default value of /tmp/cvs-sanity for TESTDIR is dubious, 603 # because it loses if two people/scripts try to run the tests 604 # at the same time. Some possible solutions: 605 # 1. Use /tmp/cvs-test$$. One disadvantage is that the old 606 # cvs-test* directories would pile up, because they wouldn't 607 # necessarily get removed. 608 # 2. Have everyone/everything running the testsuite set 609 # TESTDIR to some appropriate directory. 610 # 3. Have the default value of TESTDIR be some variation of 611 # `pwd`/cvs-sanity. The biggest problem here is that we have 612 # been fairly careful to test that CVS prints in messages the 613 # actual pathnames that we pass to it, rather than a different 614 # pathname for the same directory, as may come out of `pwd`. 615 # So this would be lost if everything was `pwd`-based. I suppose 616 # if we wanted to get baroque we could start making symlinks 617 # to ensure the two are different. 618 if test -n "$remotehost"; then 619 # We need to set $tmp on the server since $TMPDIR is compared against 620 # messages generated by the server. 621 tmp=`$CVS_RSH $remotehost 'cd /tmp; /bin/pwd || pwd' 2>/dev/null` 622 if test $? != 0; then 623 echo "$CVS_RSH $remotehost failed." >&2 624 exit 1 625 fi 626 else 627 tmp=`(cd /tmp; /bin/pwd || pwd) 2>/dev/null` 628 fi 629 630 # Now: 631 # 1) Set TESTDIR if it's not set already 632 # 2) Remove any old test remnants 633 # 3) Create $TESTDIR 634 # 4) Normalize TESTDIR with `cd && (/bin/pwd || pwd)` 635 # (This will match CVS output later) 636 : ${TESTDIR=$tmp/cvs-sanity} 637 # clean any old remnants (we need the chmod because some tests make 638 # directories read-only) 639 if test -d $TESTDIR; then 640 chmod -R a+wx $TESTDIR 641 rm -rf $TESTDIR 642 fi 643 # These exits are important. The first time I tried this, if the `mkdir && cd` 644 # failed then the build directory would get blown away. Some people probably 645 # wouldn't appreciate that. 646 mkdir $TESTDIR || exit 1 647 cd $TESTDIR || exit 1 648 # Ensure $TESTDIR is absolute 649 if echo "$TESTDIR" |grep '^[^/]'; then 650 # Don't resolve this unless we have to. This keeps symlinks intact. This 651 # is important at least when testing using -h $remotehost, because the same 652 # value for $TESTDIR must resolve to the same directory on the client and 653 # the server and we likely used Samba, and possibly symlinks, to do this. 654 TESTDIR=`(/bin/pwd || pwd) 2>/dev/null` 655 fi 656 657 if test -z "$TESTDIR" || echo "$TESTDIR" |grep '^[^/]'; then 658 echo "Unable to resolve TESTDIR to an absolute directory." >&2 659 exit 1 660 fi 661 cd $TESTDIR 662 663 664 665 : ${TIMING=false} 666 if $remote; then 667 # Now override our CVS_RSH in order to forward variables which affect the 668 # test suite through. This always needs to be done when $remotehost is 669 # set, needs to be done in $proxy mode for the crerepos tests, and needs to 670 # be done in $remote mode for the writeproxy-ssh tests. 671 if $TIMING; then 672 time="/usr/bin/time -ao'$TESTDIR/time.out'" 673 else 674 time= 675 fi 676 cat >$TESTDIR/ssh-wrapper-env <<EOF 677 #! $TESTSHELL 678 while [ \$# -gt 0 ] 679 do 680 case "\$1" in 681 *=*) 682 eval "\$1" 683 var=\`echo "\$1" | sed 's/^\\(.*\\)=.*\$/\\1/'\` 684 export \$var 685 ;; 686 *) break;; 687 esac 688 shift 689 done 690 exec \${1+"\$@"} 691 EOF 692 chmod a+x $TESTDIR/ssh-wrapper-env 693 cat >$TESTDIR/ssh-wrapper <<EOF 694 #! $TESTSHELL 695 hostname=\$1 696 shift 697 exec \ 698 $CVS_RSH \ 699 \$hostname \ 700 $TESTDIR/ssh-wrapper-env \ 701 "CVS_SERVER='\$CVS_SERVER'" \ 702 "CVS_SERVER_SLEEP='\$CVS_SERVER_SLEEP'" \ 703 "CVS_PARENT_SERVER_SLEEP='\$CVS_PARENT_SERVER_SLEEP'" \ 704 "CVS_SERVER_LOG='\$CVS_SERVER_LOG'" \ 705 "CVS_SECONDARY_LOG='\$CVS_SECONDARY_LOG'" \ 706 "TMPDIR='\$TMPDIR'" \ 707 "CVS_RSH='$TESTDIR/ssh-wrapper'" \ 708 "CVSUMASK='\$CVSUMASK'" \ 709 "CVS_PID='\$CVS_PID'" \ 710 $time \ 711 \${1+"\$@"} 712 EOF 713 chmod a+x $TESTDIR/ssh-wrapper 714 CVS_RSH=$TESTDIR/ssh-wrapper 715 fi # $remotehost 716 717 718 719 # Now set $TMPDIR if the user hasn't overridden it. 720 # 721 # We use a $TMPDIR under $TESTDIR by default so that two tests may be run at 722 # the same time without bumping heads without requiring the user to specify 723 # more than $TESTDIR. See the test for leftover cvs-serv* directories near the 724 # end of this script at the end of "The big loop". 725 : ${TMPDIR=$TESTDIR/tmp} 726 export TMPDIR 727 if test -d $TMPDIR; then :; else 728 mkdir $TMPDIR 729 fi 730 731 732 # Regexp to match the the full path to a temporary file (from cvs_temp_name). 733 # This appears in certain diff output. 734 tempname=$TMPDIR/$tempfile 735 736 # Make sure various tools work the way we expect, or try to find 737 # versions that do. 738 : ${AWK=awk} 739 : ${EXPR=expr} 740 : ${ID=id} 741 : ${TR=tr} 742 743 # Keep track of tools that are found, but do NOT work as we hope 744 # in order to avoid them in future 745 badtools= 746 set_bad_tool () 747 { 748 badtools=$badtools:$1 749 } 750 is_bad_tool () 751 { 752 case ":$badtools:" in *:$1:*) return 0 ;; *) return 1 ; esac 753 } 754 755 version_test () 756 { 757 vercmd=$1 758 verbad=: 759 if RES=`$vercmd --version </dev/null 2>&1`; then 760 if test "X$RES" != "X--version" && test "X$RES" != "X" ; then 761 echo "$RES" 762 verbad=false 763 fi 764 fi 765 if $verbad; then 766 echo "The command \`$vercmd' does not support the --version option." 767 fi 768 # It does not really matter that --version is not supported 769 return 0 770 } 771 772 # Try to find a tool that satisfies all of the tests. 773 # Usage: list:of:colon:separated:alternatives test1 test2 test3 test4... 774 # Example: find_tool awk:gawk:nawk awk_tooltest1 awk_tooltest2 775 find_tool () 776 { 777 default_TOOL=$1 778 echo find_tool: ${1+"$@"} >>$LOGFILE 779 cmds="`IFS=:; echo $1`"; shift; tooltests="${1+$@}" 780 if test -z "$tooltests"; then tooltests=version_test; fi 781 clist=; for cmd in $cmds; do clist="$clist `Which -a $cmd`"; done 782 # Make sure the default tool is just the first real command name 783 for default_TOOL in $clist `IFS=:; echo $default_TOOL`; do break; done 784 TOOL="" 785 for trytool in $clist ; do 786 pass=: 787 for tooltest in $tooltests; do 788 result=`eval $tooltest $trytool` 789 rc=$? 790 echo "Running $tooltest $trytool" >>$LOGFILE 791 if test -n "$result"; then 792 echo "$result" >>$LOGFILE 793 fi 794 if test "$rc" = "0"; then 795 echo "PASS: $tooltest $trytool" >>$LOGFILE 796 elif test "$rc" = "77"; then 797 echo "MARGINAL: $tooltest $trytool; rc=$rc" >>$LOGFILE 798 TOOL=$trytool 799 pass=false 800 else 801 set_bad_tool $trytool 802 echo "FAIL: $tooltest $trytool; rc=$rc" >>$LOGFILE 803 pass=false 804 fi 805 done 806 if $pass; then 807 echo $trytool 808 return 0 809 fi 810 done 811 if test -n "$TOOL"; then 812 echo "Notice: The default version of \`$default_TOOL' is defective." >>$LOGFILE 813 echo "using \`$TOOL' and hoping for the best." >>$LOGFILE 814 echo "Notice: The default version of \`$default_TOOL' is defective." >&2 815 echo "using \`$TOOL' and hoping for the best." >&2 816 echo $TOOL 817 else 818 echo $default_TOOL 819 fi 820 } 821 822 id_tool_test () 823 { 824 id=$1 825 if $id -u >/dev/null 2>&1 && $id -un >/dev/null 2>&1; then 826 return 0 827 else 828 echo "Running these tests requires an \`id' program that understands the" 829 echo "-u and -n flags. Make sure that such an id (GNU, or many but not" 830 echo "all vendor-supplied versions) is in your path." 831 return 1 832 fi 833 } 834 835 ID=`find_tool id version_test id_tool_test` 836 echo "Using ID=$ID" >>$LOGFILE 837 838 # You can't run CVS as root; print a nice error message here instead 839 # of somewhere later, after making a mess. 840 for pass in false :; do 841 case "`$ID -u 2>/dev/null`" in 842 "0") 843 echo "Test suite does not work correctly when run as root" >&2 844 exit 1 845 ;; 846 847 *) 848 break 849 ;; 850 esac 851 done 852 853 # Cause NextStep 3.3 users to lose in a more graceful fashion. 854 expr_tooltest1 () 855 { 856 expr=$1 857 if $expr 'abc 858 def' : 'abc 859 def' >/dev/null; then 860 # good, it works 861 return 0 862 else 863 echo 'Running these tests requires an "expr" program that can handle' 864 echo 'multi-line patterns. Make sure that such an expr (GNU, or many but' 865 echo 'not all vendor-supplied versions) is in your path.' 866 return 1 867 fi 868 } 869 870 # Warn SunOS, SysVr3.2, etc., users that they may be partially losing 871 # if we can't find a GNU expr to ease their troubles... 872 expr_tooltest2 () 873 { 874 expr=$1 875 if $expr 'a 876 b' : 'a 877 c' >/dev/null; then 878 echo 'Warning: you are using a version of expr that does not correctly' 879 echo 'match multi-line patterns. Some tests may spuriously pass or fail.' 880 echo 'You may wish to make sure GNU expr is in your path.' 881 return 1 882 else 883 return 0 884 fi 885 } 886 887 expr_create_bar () 888 { 889 echo 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' >${TESTDIR}/foo 890 cat ${TESTDIR}/foo ${TESTDIR}/foo ${TESTDIR}/foo ${TESTDIR}/foo >${TESTDIR}/bar 891 cat ${TESTDIR}/bar ${TESTDIR}/bar ${TESTDIR}/bar ${TESTDIR}/bar >${TESTDIR}/foo 892 cat ${TESTDIR}/foo ${TESTDIR}/foo ${TESTDIR}/foo ${TESTDIR}/foo >${TESTDIR}/bar 893 rm -f ${TESTDIR}/foo 894 } 895 896 expr_tooltest3 () 897 { 898 expr=$1 899 # More SunOS lossage... 900 test ! -f ${TESTDIR}/bar && expr_create_bar 901 if $expr "`cat ${TESTDIR}/bar`" : "`cat ${TESTDIR}/bar`" >/dev/null; then 902 : good, it works 903 else 904 echo 'Warning: you are using a version of expr that does not correctly' 905 echo 'match large patterns. Some tests may spuriously pass or fail.' 906 echo 'You may wish to make sure GNU expr is in your path.' 907 return 1 908 fi 909 if $expr "`cat ${TESTDIR}/bar`x" : "`cat ${TESTDIR}/bar`y" >/dev/null; then 910 echo 'Warning: you are using a version of expr that does not correctly' 911 echo 'match large patterns. Some tests may spuriously pass or fail.' 912 echo 'You may wish to make sure GNU expr is in your path.' 913 return 1 914 fi 915 # good, it works 916 return 0 917 } 918 919 # That we should have to do this is total bogosity, but GNU expr 920 # version 1.9.4-1.12 uses the emacs definition of "$" instead of the unix 921 # (e.g. SunOS 4.1.3 expr) one. Rumor has it this will be fixed in the 922 # next release of GNU expr after 1.12 (but we still have to cater to the old 923 # ones for some time because they are in many linux distributions). 924 ENDANCHOR="$" 925 expr_set_ENDANCHOR () 926 { 927 expr=$1 928 ENDANCHOR="$" 929 if $expr 'abc 930 def' : 'abc$' >/dev/null; then 931 ENDANCHOR='\'\' 932 echo "Notice: An ENDANCHOR of dollar does not work." 933 echo "Using a workaround for GNU expr versions 1.9.4 thru 1.12" 934 fi 935 return 0 936 } 937 938 # Work around another GNU expr (version 1.10-1.12) bug/incompatibility. 939 # "." doesn't appear to match a newline (it does with SunOS 4.1.3 expr). 940 # Note that the workaround is not a complete equivalent of .* because 941 # the first parenthesized expression in the regexp must match something 942 # in order for expr to return a successful exit status. 943 # Rumor has it this will be fixed in the 944 # next release of GNU expr after 1.12 (but we still have to cater to the old 945 # ones for some time because they are in many linux distributions). 946 DOTSTAR='.*' 947 expr_set_DOTSTAR () 948 { 949 expr=$1 950 DOTSTAR='.*' 951 if $expr 'abc 952 def' : "a${DOTSTAR}f" >/dev/null; then 953 : good, it works 954 else 955 DOTSTAR='\(.\| 956 \)*' 957 echo "Notice: DOTSTAR changed from sane \`.*' value to \`$DOTSTAR\`" 958 echo "to workaround GNU expr version 1.10 thru 1.12 bug where \`.'" 959 echo "does not match a newline." 960 fi 961 return 0 962 } 963 964 # Now that we have DOTSTAR, make sure it works with big matches 965 expr_tooltest_DOTSTAR () 966 { 967 expr=$1 968 test ! -f ${TESTDIR}/bar && expr_create_bar 969 if $expr "`cat ${TESTDIR}/bar`" : "${DOTSTAR}xyzABC${DOTSTAR}$" >/dev/null; then 970 # good, it works 971 return 0 972 else 973 echo 'Warning: you are using a version of expr that does not correctly' 974 echo 'match large patterns. Some tests may spuriously pass or fail.' 975 echo 'You may wish to make sure GNU expr is in your path.' 976 return 77 977 fi 978 } 979 980 EXPR=`find_tool ${EXPR}:gexpr \ 981 version_test expr_tooltest1 expr_tooltest2 expr_tooltest3 \ 982 expr_set_ENDANCHOR expr_set_DOTSTAR expr_tooltest_DOTSTAR` 983 984 # Set the ENDANCHOR and DOTSTAR for the chosen expr version. 985 expr_set_ENDANCHOR ${EXPR} >/dev/null 986 expr_tooltest_DOTSTAR ${EXPR} >/dev/null 987 988 echo "Using EXPR=$EXPR" >>$LOGFILE 989 echo "Using ENDANCHOR=$ENDANCHOR" >>$LOGFILE 990 echo "Using DOTSTAR=$DOTSTAR" >>$LOGFILE 991 992 # Cleanup 993 rm -f ${TESTDIR}/bar 994 995 # Work around yet another GNU expr (version 1.10) bug/incompatibility. 996 # "+" is a special character, yet for unix expr (e.g. SunOS 4.1.3) 997 # it is not. I doubt that POSIX allows us to use \+ and assume it means 998 # (non-special) +, so here is another workaround 999 # Rumor has it this will be fixed in the 1000 # next release of GNU expr after 1.12 (but we still have to cater to the old 1001 # ones for some time because they are in many linux distributions). 1002 PLUS='+' 1003 if $EXPR 'a +b' : "a ${PLUS}b" >/dev/null; then 1004 : good, it works 1005 else 1006 PLUS='\+' 1007 fi 1008 1009 # Likewise, for ? 1010 QUESTION='?' 1011 if $EXPR 'a?b' : "a${QUESTION}b" >/dev/null; then 1012 : good, it works 1013 else 1014 QUESTION='\?' 1015 fi 1016 1017 # Now test the username to make sure it contains only valid characters 1018 username=`$ID -un` 1019 if $EXPR "${username}" : "${username}" >/dev/null; then 1020 : good, it works 1021 else 1022 echo "Test suite does not work correctly when run by a username" >&2 1023 echo "containing regular expression meta-characters." >&2 1024 exit 1 1025 fi 1026 1027 # Only 8 characters of $username appear in some output. 1028 if test `echo $username |wc -c` -gt 8; then 1029 username8=`echo $username |sed 's/^\(........\).*/\1/'` 1030 else 1031 username8=$username 1032 fi 1033 1034 # Rarely, we need to match any username, not just the name of the user 1035 # running this test. This variable usually shouldn't be used. $username 1036 # contains the name of the user actually running this test. 1037 # 1038 # I believe this only ever actually gets compared to usernames created by this 1039 # test. It used to be compared to the username of the user running this test, 1040 # but this hasn't been true for a long time. Regardless, I tried to get the 1041 # allowed character set right, based on a list in a private email from Mark 1042 # Baushke, basically the allowed names from Linux systems (plus `.', which is 1043 # only allowed on Gentoo Linux as of 2005-09-13). 1044 anyusername="[_a-zA-Z0-9][-_.$a-zA-Z0-9]*" 1045 1046 # now make sure that tr works on NULs 1047 tr_tooltest1 () 1048 { 1049 tr=$1 1050 if $EXPR `echo "123" | $tr '2' '\0'` : "123" >/dev/null 2>&1; then 1051 echo 'Warning: you are using a version of tr which does not correctly' 1052 echo 'handle NUL bytes. Some tests may spuriously pass or fail.' 1053 echo 'You may wish to make sure GNU tr is in your path.' 1054 return 77 1055 fi 1056 # good, it works 1057 return 0 1058 } 1059 1060 TR=`find_tool ${TR}:gtr version_test tr_tooltest1` 1061 echo "Using TR=$TR" >>$LOGFILE 1062 1063 # MacOS X (10.2.8) has a /bin/ls that does not work correctly in that 1064 # it will return true even if the wildcard argument does not match any 1065 # files. 1066 ls_tooltest () 1067 { 1068 ls=$1 1069 # Force cleanup 1070 if test -d $TESTDIR/ls-test; then 1071 chmod -R a+wx $TESTDIR/ls-test 1072 rm -rf $TESTDIR/ls-test 1073 fi 1074 if $ls $TESTDIR/ls-test >/dev/null 2>&1; then 1075 echo "Notice: \`$ls' is defective." 1076 echo 'This is a version of ls which does not correctly' 1077 echo 'return false for files that do not exist. Some tests may' 1078 echo 'spuriously pass or fail.' 1079 echo 'You may wish to put a an ls from GNU coreutils into your path.' 1080 return 77 1081 else 1082 return 0 1083 fi 1084 } 1085 LS=`find_tool ls:gls version_test ls_tooltest` 1086 echo "Using LS=$LS" >>$LOGFILE 1087 1088 # Awk testing 1089 1090 awk_tooltest1 () 1091 { 1092 awk=$1 1093 $awk 'BEGIN {printf("one\ntwo\nthree\nfour\nfive\nsix")}' </dev/null >abc 1094 if $EXPR "`cat abc`" : \ 1095 'one 1096 two 1097 three 1098 four 1099 five 1100 six'; then 1101 rm abc 1102 return 0 1103 else 1104 rm abc 1105 echo "Notice: awk BEGIN clause or printf is not be working properly." 1106 return 1 1107 fi 1108 } 1109 1110 # Format item %c check 1111 awk_tooltest2 () 1112 { 1113 awk=$1 1114 $awk 'BEGIN { printf "%c%c%c", 2, 3, 4 }' </dev/null \ 1115 | ${TR} '\002\003\004' '123' >abc 1116 if $EXPR "`cat abc`" : "123" ; then 1117 : good, found it 1118 else 1119 echo "Notice: awk format %c string may not be working properly." 1120 rm abc 1121 return 77 1122 fi 1123 rm abc 1124 return 0 1125 } 1126 1127 AWK=`find_tool gawk:nawk:awk version_test awk_tooltest1 awk_tooltest2` 1128 echo "Using AWK=$AWK" >>$LOGFILE 1129 1130 1131 ### 1132 ### Functions used by tests. 1133 ### 1134 1135 # Execute a command on the repository, syncing when done if necessary. 1136 # 1137 # Syntax is as `eval'. 1138 modify_repo () 1139 { 1140 eval "$*" 1141 if $proxy; then 1142 # And now resync the secondary. 1143 $TESTDIR/sync-secondary "repo modification" modify_repo ALL "$@" 1144 fi 1145 } 1146 1147 # Restore changes to CVSROOT admin files. 1148 restore_adm () 1149 { 1150 modify_repo rm -rf $CVSROOT_DIRNAME/CVSROOT 1151 modify_repo cp -Rp $TESTDIR/CVSROOT.save $CVSROOT_DIRNAME/CVSROOT 1152 } 1153 1154 # Test that $RSYNC supports the options we need or try to find a 1155 # replacement. If $RSYNC works or we replace it, and return 0. 1156 # Otherwise, set $skipreason and return 77. 1157 require_rsync () 1158 { 1159 rsyncworks=false 1160 # rsync is NOT a GNU tool, so do NOT use find_tool for name munging. 1161 for rsync in ${RSYNC} `Which -a rsync`; 1162 do 1163 1164 if is_bad_tool `Which $rsync` ; then continue ; fi 1165 # Make some data to test rsync on. 1166 mkdir $TESTDIR/rsync-test 1167 mkdir $TESTDIR/rsync-test/Attic && touch $TESTDIR/rsync-test/Attic/6 1168 mkdir $TESTDIR/rsync-test/otherdir && touch $TESTDIR/rsync-test/otherdir/7 1169 for file in 1 2 3 4 5; do 1170 touch $TESTDIR/rsync-test/$file 1171 done 1172 1173 if test -f "$rsync" && test -r "$rsync" \ 1174 && $rsync -rglop --delete $TESTDIR/rsync-test/ $TESTDIR/rsync-test-copy \ 1175 >/dev/null 2>&1 \ 1176 && $rsync -rglop --delete --include Attic --exclude '*/' \ 1177 $TESTDIR/rsync-test/ $TESTDIR/rsync-test-copy2 \ 1178 >/dev/null 2>&1 \ 1179 && test -f $TESTDIR/rsync-test/5 \ 1180 && mv $TESTDIR/rsync-test/5 $TESTDIR/rsync-test/Attic/5 \ 1181 && test -f $TESTDIR/rsync-test-copy/Attic/6 \ 1182 && $rsync -rglop --delete $TESTDIR/rsync-test/ $TESTDIR/rsync-test-copy \ 1183 >/dev/null 2>&1 \ 1184 && $rsync -rglop --delete --include Attic --exclude '*/' \ 1185 $TESTDIR/rsync-test/ $TESTDIR/rsync-test-copy2 \ 1186 >/dev/null 2>&1 \ 1187 && test ! -f $TESTDIR/rsync-test-copy/5 \ 1188 && test ! -f $TESTDIR/rsync-test-copy2/5 \ 1189 && test -f $TESTDIR/rsync-test-copy2/Attic/5 \ 1190 && test ! -f $TESTDIR/rsync-test-copy2/otherdir/7 1191 then 1192 # good, it works 1193 rsyncworks=: 1194 RSYNC=$rsync 1195 else 1196 # Only use Which because of ${RSYNC} in the for loop. 1197 set_bad_tool `Which $rsync` 1198 fi 1199 1200 rm -rf $TESTDIR/rsync-test $TESTDIR/rsync-test-copy \ 1201 $TESTDIR/rsync-test-copy2 1202 1203 if $rsyncworks; then 1204 return 0 1205 else 1206 (echo $rsync failed to work properly;\ 1207 echo "$rsync --version"; $rsync --version) >>$LOGFILE 2>&1 1208 fi 1209 done 1210 1211 unset RSYNC 1212 skipreason="unusable or no rsync found" 1213 return 77 1214 } 1215 1216 # Test that $1 works as a remote shell. If so, set $host, $CVS_RSH, & 1217 # $save_CVS_RSH to match and return 0. Otherwise, set $skipreason and return 1218 # 77. 1219 require_rsh () 1220 { 1221 host=${remotehost-"`hostname`"} 1222 result=`$1 $host 'echo test'` 1223 rc=$? 1224 if test $? != 0 || test "x$result" != "xtest"; then 1225 skipreason="\`$1 $host' failed rc=$rc result=$result" 1226 return 77 1227 fi 1228 1229 save_CVS_RSH=$CVS_RSH 1230 CVS_RSH=$1; export CVS_RSH 1231 return 0 1232 } 1233 1234 # Find a usable SSH. When a usable ssh is found, set $host, $CVS_RSH, and 1235 # $save_CVS_RSH and return 0. Otherwise, set $skipreason and return 77. 1236 require_ssh () 1237 { 1238 case "$CVS_RSH" in 1239 *ssh*|*putty*) 1240 tryssh=`Which $CVS_RSH` 1241 if [ ! -n "$tryssh" ]; then 1242 skipreason="Unable to find CVS_RSH=$CVS_RSH executable" 1243 return 77 1244 elif [ ! -x "$tryssh" ]; then 1245 skipreason="Unable to execute $tryssh program" 1246 return 77 1247 fi 1248 ;; 1249 *) 1250 # Look in the user's PATH for "ssh" 1251 tryssh=`Which ssh` 1252 if test ! -r "$tryssh"; then 1253 skipreason="Unable to find ssh program" 1254 return 77 1255 fi 1256 ;; 1257 esac 1258 1259 require_rsh "$tryssh" 1260 return $? 1261 } 1262 1263 pass () 1264 { 1265 echo "PASS: $1" >>${LOGFILE} 1266 passed=`expr $passed + 1` 1267 } 1268 1269 # Like skip(), but don't fail when $skipfail is set. 1270 skip_always () 1271 { 1272 echo "SKIP: $1${2+ ($2)}" >>$LOGFILE 1273 skipped=`expr $skipped + 1` 1274 } 1275 1276 skip () 1277 { 1278 if $skipfail; then 1279 # exits 1280 fail "$1${2+ ($2)}" 1281 fi 1282 1283 skip_always ${1+"$@"} 1284 } 1285 1286 # Convenience function for skipping tests run only in remote mode. 1287 remoteonly () 1288 { 1289 skip_always $1 "only tested in remote mode" 1290 } 1291 1292 # Convenience function for skipping tests not run in proxy mode. 1293 notproxy () 1294 { 1295 skip_always $1 "not tested in proxy mode" 1296 } 1297 1298 # Convenience function for skipping tests not run in proxy mode. 1299 notnoredirect () 1300 { 1301 skip_always $1 "not tested in proxy-noredirect mode" 1302 } 1303 1304 warn () 1305 { 1306 if $skipfail; then 1307 fail "$1${2+ ($2)}" 1308 else 1309 echo "WARNING: $1${2+ ($2)}" >>$LOGFILE 1310 fi 1311 warnings=`expr $warnings + 1` 1312 } 1313 1314 fail () 1315 { 1316 echo "FAIL: $1" | tee -a ${LOGFILE} 1317 echo "*** Please see the \`TESTS' and \`check.log' files for more information." >&2 1318 # This way the tester can go and see what remnants were left 1319 exit 1 1320 } 1321 1322 verify_tmp_empty () 1323 { 1324 # Test our temp directory for cvs-serv* directories and cvsXXXXXX temp 1325 # files. We would like to not leave any behind. 1326 if $remote && $LS $TMPDIR/cvs-serv* >/dev/null 2>&1; then 1327 # A true value means ls found files/directories with these names. 1328 # Give the server some time to finish, then retry. 1329 sleep 1 1330 if $LS $TMPDIR/cvs-serv* >/dev/null 2>&1; then 1331 warn "$1" "Found cvs-serv* directories in $TMPDIR." 1332 # The above will exit if $skipfail 1333 rm -rf $TMPDIR/cvs-serv* 1334 fi 1335 fi 1336 if $LS $TMPDIR/cvs?????? >/dev/null 2>&1; then 1337 # A true value means ls found files/directories with these names. 1338 warn "$1" "Found cvsXXXXXX temp files in $TMPDIR." 1339 # The above will exit if $skipfail 1340 rm -f ls $TMPDIR/cvs?????? 1341 fi 1342 } 1343 1344 # See dotest and dotest_fail for explanation (this is the parts 1345 # of the implementation common to the two). 1346 dotest_internal () 1347 { 1348 if $EXPR "`cat ${TESTDIR}/dotest.tmp`" : "$3${ENDANCHOR}" >/dev/null; then 1349 # Why, I hear you ask, do we write this to the logfile 1350 # even when the test passes? The reason is that the test 1351 # may give us the regexp which we were supposed to match, 1352 # but sometimes it may be useful to look at the exact 1353 # text which was output. For example, suppose one wants 1354 # to grep for a particular warning, and make _sure_ that 1355 # CVS never hits it (even in cases where the tests might 1356 # match it with .*). Or suppose one wants to see the exact 1357 # date format output in a certain case (where the test will 1358 # surely use a somewhat non-specific pattern). 1359 cat ${TESTDIR}/dotest.tmp >>${LOGFILE} 1360 pass "$1" 1361 verify_tmp_empty "$1" 1362 # expr can't distinguish between "zero characters matched" and "no match", 1363 # so special-case it. 1364 elif test -z "$3" && test ! -s ${TESTDIR}/dotest.tmp; then 1365 pass "$1" 1366 verify_tmp_empty "$1" 1367 elif test x"$4" != x; then 1368 if $EXPR "`cat ${TESTDIR}/dotest.tmp`" : "$4${ENDANCHOR}" >/dev/null; then 1369 cat ${TESTDIR}/dotest.tmp >>${LOGFILE} 1370 pass "$1" 1371 verify_tmp_empty "$1" 1372 else 1373 echo "** expected: " >>${LOGFILE} 1374 echo "$3" >>${LOGFILE} 1375 echo "$3" > ${TESTDIR}/dotest.ex1 1376 echo "** or: " >>${LOGFILE} 1377 echo "$4" >>${LOGFILE} 1378 echo "$4" > ${TESTDIR}/dotest.ex2 1379 echo "** got: " >>${LOGFILE} 1380 cat ${TESTDIR}/dotest.tmp >>${LOGFILE} 1381 fail "$1" 1382 fi 1383 else 1384 echo "** expected: " >>${LOGFILE} 1385 echo "$3" >>${LOGFILE} 1386 echo "$3" > ${TESTDIR}/dotest.exp 1387 echo "** got: " >>${LOGFILE} 1388 cat ${TESTDIR}/dotest.tmp >>${LOGFILE} 1389 fail "$1" 1390 fi 1391 } 1392 1393 dotest_all_in_one () 1394 { 1395 if $EXPR "`cat ${TESTDIR}/dotest.tmp`" : \ 1396 "`cat ${TESTDIR}/dotest.exp`" >/dev/null; then 1397 return 0 1398 fi 1399 return 1 1400 } 1401 1402 # WARNING: this won't work with REs that match newlines.... 1403 # 1404 dotest_line_by_line () 1405 { 1406 line=1 1407 while [ $line -le `wc -l <${TESTDIR}/dotest.tmp` ] ; do 1408 if $EXPR "`sed -n ${line}p ${TESTDIR}/dotest.tmp`" : \ 1409 "`sed -n ${line}p ${TESTDIR}/dotest.exp`" >/dev/null; then 1410 : 1411 elif test -z "`sed -n ${line}p ${TESTDIR}/dotest.tmp`" && 1412 test -z "`sed -n ${line}p ${TESTDIR}/dotest.exp`"; then 1413 : 1414 else 1415 echo "Line $line:" >> ${LOGFILE} 1416 echo "**** expected: " >>${LOGFILE} 1417 sed -n ${line}p ${TESTDIR}/dotest.exp >>${LOGFILE} 1418 echo "**** got: " >>${LOGFILE} 1419 sed -n ${line}p ${TESTDIR}/dotest.tmp >>${LOGFILE} 1420 unset line 1421 return 1 1422 fi 1423 line=`expr $line + 1` 1424 done 1425 unset line 1426 return 0 1427 } 1428 1429 # If you are having trouble telling which line of a multi-line 1430 # expression is not being matched, replace calls to dotest_internal() 1431 # with calls to this function: 1432 # 1433 dotest_internal_debug () 1434 { 1435 if test -z "$3"; then 1436 if test -s ${TESTDIR}/dotest.tmp; then 1437 echo "** expected: " >>${LOGFILE} 1438 echo "$3" >>${LOGFILE} 1439 echo "$3" > ${TESTDIR}/dotest.exp 1440 rm -f ${TESTDIR}/dotest.ex2 1441 echo "** got: " >>${LOGFILE} 1442 cat ${TESTDIR}/dotest.tmp >>${LOGFILE} 1443 fail "$1" 1444 else 1445 pass "$1" 1446 verify_tmp_empty "$1" 1447 fi 1448 else 1449 echo "$3" > ${TESTDIR}/dotest.exp 1450 if dotest_line_by_line "$1" "$2"; then 1451 pass "$1" 1452 verify_tmp_empty "$1" 1453 else 1454 if test x"$4" != x; then 1455 mv ${TESTDIR}/dotest.exp ${TESTDIR}/dotest.ex1 1456 echo "$4" > ${TESTDIR}/dotest.exp 1457 if dotest_line_by_line "$1" "$2"; then 1458 pass "$1" 1459 verify_tmp_empty "$1" 1460 else 1461 mv ${TESTDIR}/dotest.exp ${TESTDIR}/dotest.ex2 1462 echo "** expected: " >>${LOGFILE} 1463 echo "$3" >>${LOGFILE} 1464 echo "** or: " >>${LOGFILE} 1465 echo "$4" >>${LOGFILE} 1466 echo "** got: " >>${LOGFILE} 1467 cat ${TESTDIR}/dotest.tmp >>${LOGFILE} 1468 fail "$1" 1469 fi 1470 else 1471 echo "** expected: " >>${LOGFILE} 1472 echo "$3" >>${LOGFILE} 1473 echo "** got: " >>${LOGFILE} 1474 cat ${TESTDIR}/dotest.tmp >>${LOGFILE} 1475 fail "$1" 1476 fi 1477 fi 1478 fi 1479 } 1480 1481 # This function allows the test output to be filtered before being verified. 1482 # The dotest_* functions all call this function, which runs the command 1483 # in the env var $TEST_FILTER on its argument if $TEST_FILTER is set. If 1484 # $TEST_FILTER is not set, this function does nothing. 1485 # 1486 # I found this primarily useful when running the test suite on a CVS 1487 # executable linked with memory and function profilers which can generate 1488 # spurious output. 1489 run_filter () 1490 { 1491 if test -n "$TEST_FILTER"; then 1492 # Make sure there is an EOL 1493 echo >>$1 1494 sed '${/^$/d}' <$1 >$1.filter1 1495 # Run the filter 1496 eval "$TEST_FILTER" <$1.filter1 >$1.filter2 1497 diff -u $1 $1.filter2 \ 1498 >$1.diff 1499 mv $1.filter2 $1 1500 rm $1.filter1 1501 fi 1502 } 1503 1504 maybe_sleep_if_ci_co_or_up () 1505 { 1506 if $waitforslowdisk; then 1507 case "$@" in 1508 *" ci "*|*" ci"|*" commit "*|*" commit") sleep 1;; 1509 *" co "*|*" co"|*" checkout "*|*" checkout") sleep 1;; 1510 *" up "*|*" up"|*" update "*|*" update") sleep 1;; 1511 esac 1512 fi 1513 } 1514 1515 # Usage: 1516 # dotest TESTNAME COMMAND OUTPUT [OUTPUT2] 1517 # TESTNAME is the name used in the log to identify the test. 1518 # COMMAND is the command to run; for the test to pass, it exits with 1519 # exitstatus zero. 1520 # OUTPUT is a regexp which is compared against the output (stdout and 1521 # stderr combined) from the test. It is anchored to the start and end 1522 # of the output, so should start or end with ".*" if that is what is desired. 1523 # Trailing newlines are stripped from the command's actual output before 1524 # matching against OUTPUT. 1525 # If OUTPUT2 is specified and the output matches it, then it is also 1526 # a pass (partial workaround for the fact that some versions of expr 1527 # lack \|). 1528 dotest () 1529 { 1530 maybe_sleep_if_ci_co_or_up "$2" 1531 rm -f $TESTDIR/dotest.ex? 2>&1 1532 eval "$2" >$TESTDIR/dotest.tmp 2>&1 1533 status=$? 1534 run_filter $TESTDIR/dotest.tmp 1535 if test "$status" != 0; then 1536 cat $TESTDIR/dotest.tmp >>$LOGFILE 1537 echo "exit status was $status" >>${LOGFILE} 1538 fail "$1" 1539 fi 1540 maybe_sleep_if_ci_co_or_up "$2" 1541 dotest_internal "$@" 1542 } 1543 1544 # Like dotest except only 2 args and result must exactly match stdin 1545 dotest_lit () 1546 { 1547 maybe_sleep_if_ci_co_or_up "$2" 1548 rm -f $TESTDIR/dotest.ex? 2>&1 1549 eval "$2" >$TESTDIR/dotest.tmp 2>&1 1550 status=$? 1551 run_filter $TESTDIR/dotest.tmp 1552 if test "$status" != 0; then 1553 cat $TESTDIR/dotest.tmp >>$LOGFILE 1554 echo "exit status was $status" >>$LOGFILE 1555 fail "$1" 1556 fi 1557 maybe_sleep_if_ci_co_or_up "$2" 1558 cat >$TESTDIR/dotest.exp 1559 if cmp $TESTDIR/dotest.exp $TESTDIR/dotest.tmp >/dev/null 2>&1; then 1560 pass "$1" 1561 verify_tmp_empty "$1" 1562 else 1563 echo "** expected: " >>$LOGFILE 1564 cat $TESTDIR/dotest.exp >>$LOGFILE 1565 echo "** got: " >>$LOGFILE 1566 cat $TESTDIR/dotest.tmp >>$LOGFILE 1567 fail "$1" 1568 fi 1569 } 1570 1571 # Like dotest except exitstatus should be nonzero. 1572 dotest_fail () 1573 { 1574 maybe_sleep_if_ci_co_or_up "$2" 1575 rm -f $TESTDIR/dotest.ex? 2>&1 1576 eval "$2" >$TESTDIR/dotest.tmp 2>&1 1577 status=$? 1578 run_filter $TESTDIR/dotest.tmp 1579 if test "$status" = 0; then 1580 cat $TESTDIR/dotest.tmp >>$LOGFILE 1581 echo "exit status was $status" >>$LOGFILE 1582 fail "$1" 1583 fi 1584 maybe_sleep_if_ci_co_or_up "$2" 1585 dotest_internal "$@" 1586 } 1587 1588 # Like dotest except output is sorted. 1589 dotest_sort () 1590 { 1591 maybe_sleep_if_ci_co_or_up "$2" 1592 rm -f $TESTDIR/dotest.ex? 2>&1 1593 eval "$2" >$TESTDIR/dotest.tmp1 2>&1 1594 status=$? 1595 run_filter $TESTDIR/dotest.tmp1 1596 if test "$status" != 0; then 1597 cat $TESTDIR/dotest.tmp1 >>$LOGFILE 1598 echo "exit status was $status" >>$LOGFILE 1599 fail "$1" 1600 fi 1601 $TR ' ' ' ' < $TESTDIR/dotest.tmp1 | sort > $TESTDIR/dotest.tmp 1602 maybe_sleep_if_ci_co_or_up "$2" 1603 dotest_internal "$@" 1604 } 1605 1606 # Like dotest_fail except output is sorted. 1607 dotest_fail_sort () 1608 { 1609 maybe_sleep_if_ci_co_or_up "$2" 1610 rm -f $TESTDIR/dotest.ex? 2>&1 1611 eval "$2" >$TESTDIR/dotest.tmp1 2>&1 1612 status=$? 1613 run_filter $TESTDIR/dotest.tmp1 1614 if test "$status" = 0; then 1615 cat $TESTDIR/dotest.tmp1 >>$LOGFILE 1616 echo "exit status was $status" >>$LOGFILE 1617 fail "$1" 1618 fi 1619 $TR ' ' ' ' < $TESTDIR/dotest.tmp1 | sort > $TESTDIR/dotest.tmp 1620 maybe_sleep_if_ci_co_or_up "$2" 1621 dotest_internal "$@" 1622 } 1623 1624 # A function for fetching the timestamp of a revison of a file 1625 getrlogdate () { 1626 ${testcvs} -n rlog -N ${1+"$@"} | 1627 while read token value; do 1628 case "$token" in 1629 date:) 1630 echo $value | sed "s,;.*,," 1631 break; 1632 ;; 1633 esac 1634 done 1635 } 1636 1637 # Avoid picking up any stray .cvsrc, etc., from the user running the tests 1638 mkdir home 1639 HOME=$TESTDIR/home; export HOME 1640 1641 # Make sure this variable is not defined to anything that would 1642 # change the format of rcs dates. Otherwise people using e.g., 1643 # RCSINIT=-zLT get lots of spurious failures. 1644 RCSINIT=; export RCSINIT 1645 1646 # Remaining arguments are the names of tests to run. 1647 # 1648 # The testsuite is broken up into (hopefully manageably-sized) 1649 # independently runnable tests, so that one can quickly get a result 1650 # from a cvs or testsuite change, and to facilitate understanding the 1651 # tests. 1652 1653 if test x"$*" = x; then 1654 # Basic/miscellaneous functionality 1655 tests="version basica basicb basicc basic1 deep basic2 ls" 1656 tests="$tests parseroot parseroot2 parseroot3 files spacefiles" 1657 tests="${tests} commit-readonly commit-add-missing" 1658 tests="${tests} status" 1659 # Branching, tagging, removing, adding, multiple directories 1660 tests="${tests} rdiff rdiff-short" 1661 tests="${tests} rdiff2 diff diffnl death death2" 1662 tests="${tests} rm-update-message rmadd rmadd2 rmadd3 resurrection" 1663 tests="${tests} dirs dirs2 branches branches2 branches3" 1664 tests="${tests} branches4 tagc tagf tag-space" 1665 tests="${tests} rcslib multibranch import importb importc importX" 1666 tests="$tests importX2 import-CVS import-quirks" 1667 tests="${tests} update-p import-after-initial branch-after-import" 1668 tests="${tests} join join2 join3 join4 join5 join6 join7" 1669 tests="${tests} join-readonly-conflict join-admin join-admin-2" 1670 tests="${tests} join-rm" 1671 tests="${tests} new newb conflicts conflicts2 conflicts3" 1672 tests="${tests} clean" 1673 tests="${tests} keywordexpand" 1674 # Checking out various places (modules, checkout -d, &c) 1675 tests="${tests} modules modules2 modules3 modules4 modules5 modules6" 1676 tests="${tests} modules7 mkmodules co-d" 1677 tests="${tests} cvsadm emptydir abspath abspath2 toplevel toplevel2" 1678 tests="${tests} rstar-toplevel trailingslashes checkout_repository" 1679 # Log messages, error messages. 1680 tests="${tests} mflag editor env errmsg1 errmsg2 adderrmsg opterrmsg" 1681 tests="${tests} errmsg3" 1682 tests="${tests} close-stdout" 1683 tests="$tests debug-log-nonfatal" 1684 # Watches, binary files, history browsing, &c. 1685 tests="${tests} devcom devcom2 devcom3 watch4 watch5 watch6-0 watch6" 1686 tests="${tests} edit-check" 1687 tests="${tests} unedit-without-baserev" 1688 tests="${tests} ignore ignore-on-branch binfiles binfiles2 binfiles3" 1689 tests="${tests} mcopy binwrap binwrap2" 1690 tests="${tests} binwrap3 mwrap info taginfo posttag" 1691 tests="$tests config config2 config3 config4" 1692 tests="${tests} serverpatch log log2 logopt ann ann-id" 1693 # Repository Storage (RCS file format, CVS lock files, creating 1694 # a repository without "cvs init", &c). 1695 tests="${tests} crerepos rcs rcs2 rcs3 rcs4 rcs5" 1696 tests="$tests lockfiles backuprecover" 1697 tests="${tests} sshstdio" 1698 # More history browsing, &c. 1699 tests="${tests} history" 1700 tests="${tests} big modes modes2 modes3 stamps" 1701 # PreservePermissions stuff: permissions, symlinks et al. 1702 # tests="${tests} perms symlinks symlinks2 hardlinks" 1703 # More tag and branch tests, keywords. 1704 tests="${tests} sticky keyword keywordlog keywordname keyword2" 1705 tests="${tests} head tagdate multibranch2 tag8k" 1706 # "cvs admin", reserved checkouts. 1707 tests="${tests} admin reserved" 1708 # Nuts and bolts of diffing/merging (diff library, &c) 1709 tests="${tests} diffmerge1 diffmerge2" 1710 # Release of multiple directories 1711 tests="${tests} release" 1712 tests="${tests} recase" 1713 # Multiple root directories and low-level protocol tests. 1714 tests="${tests} multiroot multiroot2 multiroot3 multiroot4" 1715 tests="${tests} rmroot reposmv pserver server server2 client" 1716 tests="${tests} dottedroot fork commit-d template" 1717 tests="${tests} writeproxy writeproxy-noredirect writeproxy-ssh" 1718 tests="${tests} writeproxy-ssh-noredirect" 1719 else 1720 tests="$*" 1721 fi 1722 1723 # Now check the -f argument for validity. 1724 if test -n "$fromtest"; then 1725 # Don't allow spaces - they are our delimiters in tests 1726 count=0 1727 for sub in $fromtest; do 1728 count=`expr $count + 1` 1729 done 1730 if test $count != 1; then 1731 echo "No such test \`$fromtest'." >&2 1732 exit 2 1733 fi 1734 # make sure it is in $tests 1735 case " $tests " in 1736 *" $fromtest "*) 1737 ;; 1738 *) 1739 echo "No such test \`$fromtest'." >&2 1740 exit 2 1741 ;; 1742 esac 1743 fi 1744 1745 1746 1747 # a simple function to compare directory contents 1748 # 1749 # Returns: 0 for same, 1 for different 1750 # 1751 directory_cmp () 1752 { 1753 OLDPWD=`pwd` 1754 DIR_1=$1 1755 DIR_2=$2 1756 1757 cd $DIR_1 1758 find . -print | fgrep -v /CVS | sort > $TESTDIR/dc$$d1 1759 1760 # go back where we were to avoid symlink hell... 1761 cd $OLDPWD 1762 cd $DIR_2 1763 find . -print | fgrep -v /CVS | sort > $TESTDIR/dc$$d2 1764 1765 if diff $TESTDIR/dc$$d1 $TESTDIR/dc$$d2 >/dev/null 2>&1 1766 then 1767 : 1768 else 1769 return 1 1770 fi 1771 cd $OLDPWD 1772 while read a 1773 do 1774 if test -f $DIR_1/"$a" ; then 1775 cmp -s $DIR_1/"$a" $DIR_2/"$a" 1776 if test $? -ne 0 ; then 1777 return 1 1778 fi 1779 fi 1780 done < $TESTDIR/dc$$d1 1781 rm -f $TESTDIR/dc$$* 1782 return 0 1783 } 1784 1785 1786 1787 # 1788 # The following 4 functions are used by the diffmerge1 test case. They set up, 1789 # respectively, the four versions of the files necessary: 1790 # 1791 # 1. Ancestor revisions. 1792 # 2. "Your" changes. 1793 # 3. "My" changes. 1794 # 4. Expected merge result. 1795 # 1796 1797 # Create ancestor revisions for diffmerge1 1798 diffmerge_create_older_files() { 1799 # This test case was supplied by Noah Friedman: 1800 cat >testcase01 <<EOF 1801 // Button.java 1802 1803 package random.application; 1804 1805 import random.util.*; 1806 1807 public class Button 1808 { 1809 /* Instantiates a Button with origin (0, 0) and zero width and height. 1810 * You must call an initializer method to properly initialize the Button. 1811 */ 1812 public Button () 1813 { 1814 super (); 1815 1816 _titleColor = Color.black; 1817 _disabledTitleColor = Color.gray; 1818 _titleFont = Font.defaultFont (); 1819 } 1820 1821 /* Convenience constructor for instantiating a Button with 1822 * bounds x, y, width, and height. Equivalent to 1823 * foo = new Button (); 1824 * foo.init (x, y, width, height); 1825 */ 1826 public Button (int x, int y, int width, int height) 1827 { 1828 this (); 1829 init (x, y, width, height); 1830 } 1831 } 1832 EOF 1833 1834 # This test case was supplied by Jacob Burckhardt: 1835 cat >testcase02 <<EOF 1836 a 1837 a 1838 a 1839 a 1840 a 1841 EOF 1842 1843 # This test case was supplied by Karl Tomlinson who also wrote the 1844 # patch which lets CVS correctly handle this and several other cases: 1845 cat >testcase03 <<EOF 1846 x 1847 s 1848 a 1849 b 1850 s 1851 y 1852 EOF 1853 1854 # This test case was supplied by Karl Tomlinson: 1855 cat >testcase04 <<EOF 1856 s 1857 x 1858 m 1859 m 1860 x 1861 s 1862 v 1863 s 1864 x 1865 m 1866 m 1867 x 1868 s 1869 EOF 1870 1871 # This test case was supplied by Karl Tomlinson: 1872 cat >testcase05 <<EOF 1873 s 1874 x 1875 m 1876 m 1877 x 1878 x 1879 x 1880 x 1881 x 1882 x 1883 x 1884 x 1885 x 1886 x 1887 s 1888 s 1889 s 1890 s 1891 s 1892 s 1893 s 1894 s 1895 s 1896 s 1897 v 1898 EOF 1899 1900 # This test case was supplied by Jacob Burckhardt: 1901 cat >testcase06 <<EOF 1902 g 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 i 1915 EOF 1916 1917 # This test is supposed to verify that the horizon lines are the same 1918 # for both 2-way diffs, but unfortunately, it does not fail with the 1919 # old version of cvs. However, Karl Tomlinson still thought it would 1920 # be good to test it anyway: 1921 cat >testcase07 <<EOF 1922 h 1923 f 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 g 1934 r 1935 1936 1937 1938 i 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 i 1950 EOF 1951 1952 # This test case was supplied by Jacob Burckhardt: 1953 cat >testcase08 <<EOF 1954 Both changes move this line to the end of the file. 1955 1956 no 1957 changes 1958 here 1959 1960 First change will delete this line. 1961 1962 First change will also delete this line. 1963 1964 no 1965 changes 1966 here 1967 1968 Second change will change it here. 1969 1970 no 1971 changes 1972 here 1973 EOF 1974 1975 # This test case was supplied by Jacob Burckhardt. Note that I do not 1976 # think cvs has ever failed with this case, but I include it anyway, 1977 # since I think it is a hard case. It is hard because Peter Miller's 1978 # fmerge utility fails on it: 1979 cat >testcase09 <<EOF 1980 m 1981 a 1982 { 1983 } 1984 b 1985 { 1986 } 1987 EOF 1988 1989 # This test case was supplied by Martin Dorey and simplified by Jacob 1990 # Burckhardt: 1991 cat >testcase10 <<EOF 1992 1993 petRpY ( MtatRk ); 1994 fV ( MtatRk != Zy ) UDTXUK_DUUZU ( BGKT_ZFDK_qjT_HGTG ); 1995 1996 MtatRk = MQfr_GttpfIRte_MtpeaL ( &acI, jfle_Uecopd_KRLIep * jfle_Uecopd_MfJe_fY_nEtek ); 1997 OjZy MtatRk = Uead_GttpfIRte_MtpeaL ( &acI, jfle_Uecopd_MfJe_fY_nEtek, nRVVep ); 1998 1999 Bloke_GttpfIRte_MtpeaL ( &acI ); 2000 MTGTXM Uead_Ktz_qjT_jfle_Uecopd ( fYt Y, uofd *nRVVep ) 2001 { 2002 fV ( Y < 16 ) 2003 { 2004 petRpY ( Uead_Mectopk ( noot_Uecopd.qVtHatabcY0 * noot_Uecopd.MectopkFepBlRktep + 2005 Y * jfle_Uecopd_MfJe_fY_Mectopk, 2006 jfle_Uecopd_MfJe_fY_Mectopk, 2007 nRVVep ) ); 2008 } 2009 elke 2010 { 2011 petRpY ( Uead_Mectopk ( noot_Uecopd.qVtqfppHatabcY0 * noot_Uecopd.MectopkFepBlRktep + 2012 ( Y - 16 ) * jfle_Uecopd_MfJe_fY_Mectopk, 2013 jfle_Uecopd_MfJe_fY_Mectopk, 2014 nRVVep ) ); 2015 } 2016 2017 } 2018 2019 2020 /**************************************************************************** 2021 * * 2022 * Uead Mectopk ( Uelatfue to tze cRppeYt raptftfoY ) * 2023 * * 2024 ****************************************************************************/ 2025 2026 MTGTXM Uead_Mectopk ( RfYt64 Mtapt_Mectop, RfYt64 KRL_Mectopk, uofd *nRVVep ) 2027 { 2028 MTGTXM MtatRk = Zy; 2029 2030 MtatRk = Uead_HfkQ ( FaptftfoY_TaIle.Uelatfue_Mectop + Mtapt_Mectop, KRL_Mectopk, nRVVep ); 2031 2032 petRpY ( MtatRk ); 2033 2034 } 2035 HfkQipfte ( waYdle, /* waYdle */ 2036 waYdleFok, /* ZVVket VpoL ktapt oV dfkQ */ 2037 (coYkt RfYt8*) nRVVep, /* nRVVep */ 2038 0, /* MRrepVlRoRk KfxoYfkL */ 2039 beYgtz /* nEtek to Apfte */ 2040 ); 2041 2042 petRpY ( Zy ); 2043 } 2044 EOF 2045 } 2046 2047 # Create "your" revisions for diffmerge1 2048 diffmerge_create_your_files() { 2049 # remove the Button() method 2050 cat >testcase01 <<\EOF 2051 // Button.java 2052 2053 package random.application; 2054 2055 import random.util.*; 2056 2057 public class Button 2058 { 2059 /* Instantiates a Button with origin (0, 0) and zero width and height. 2060 * You must call an initializer method to properly initialize the Button. 2061 */ 2062 public Button () 2063 { 2064 super (); 2065 2066 _titleColor = Color.black; 2067 _disabledTitleColor = Color.gray; 2068 _titleFont = Font.defaultFont (); 2069 } 2070 } 2071 EOF 2072 2073 cat >testcase02 <<\EOF 2074 y 2075 a 2076 a 2077 a 2078 a 2079 EOF 2080 2081 cat >testcase03 <<\EOF 2082 x 2083 s 2084 a 2085 b 2086 s 2087 b 2088 s 2089 y 2090 EOF 2091 2092 cat >testcase04 <<\EOF 2093 s 2094 m 2095 s 2096 v 2097 s 2098 m 2099 s 2100 EOF 2101 2102 cat >testcase05 <<\EOF 2103 v 2104 s 2105 m 2106 s 2107 s 2108 s 2109 s 2110 s 2111 s 2112 s 2113 s 2114 s 2115 s 2116 v 2117 EOF 2118 2119 # Test case 6 and test case 7 both use the same input files, but they 2120 # order the input files differently. In one case, a certain file is 2121 # used as the older file, but in the other test case, that same file 2122 # is used as the file which has changes. I could have put echo 2123 # commands here, but since the echo lines would be the same as those 2124 # in the previous function, I decided to save space and avoid repeating 2125 # several lines of code. Instead, I merely swap the files: 2126 mv testcase07 tmp 2127 mv testcase06 testcase07 2128 mv tmp testcase06 2129 2130 # Make the date newer so that cvs thinks that the files are changed: 2131 touch testcase06 testcase07 2132 2133 cat >testcase08 <<\EOF 2134 no 2135 changes 2136 here 2137 2138 First change has now added this in. 2139 2140 no 2141 changes 2142 here 2143 2144 Second change will change it here. 2145 2146 no 2147 changes 2148 here 2149 2150 Both changes move this line to the end of the file. 2151 EOF 2152 2153 cat >testcase09 <<\EOF 2154 2155 m 2156 a 2157 { 2158 } 2159 b 2160 { 2161 } 2162 c 2163 { 2164 } 2165 EOF 2166 2167 cat >testcase10 <<\EOF 2168 2169 fV ( BzQkV_URYYfYg ) (*jfle_Uecopdk)[0].jfle_Uecopd_KRLIep = ZpfgfYal_jUK; 2170 2171 petRpY ( MtatRk ); 2172 fV ( MtatRk != Zy ) UDTXUK_DUUZU ( BGKT_ZFDK_qjT_HGTG ); 2173 2174 fV ( jfle_Uecopd_KRLIep < 16 ) 2175 { 2176 MtatRk = Uead_Ktz_qjT_jfle_Uecopd ( jfle_Uecopd_KRLIep, (uofd*)nRVVep ); 2177 } 2178 elke 2179 { 2180 MtatRk = ZreY_GttpfIRte_MtpeaL ( qjT_jfle_Uecopdk, qjT_jfle_Uecopd_BoRYt, HGTG_TvFD, KXbb, KXbb, &acI ); 2181 fV ( MtatRk != Zy ) UDTXUK_DUUZU ( BGKT_ZFDK_qjT_HGTG ); 2182 2183 MtatRk = MQfr_GttpfIRte_MtpeaL ( &acI, jfle_Uecopd_KRLIep * jfle_Uecopd_MfJe_fY_nEtek ); 2184 OjZy MtatRk = Uead_GttpfIRte_MtpeaL ( &acI, jfle_Uecopd_MfJe_fY_nEtek, nRVVep ); 2185 2186 Bloke_GttpfIRte_MtpeaL ( &acI ); 2187 MTGTXM Uead_Ktz_qjT_jfle_Uecopd ( fYt Y, uofd *nRVVep ) 2188 { 2189 MTGTXM MtatRk = Zy; 2190 2191 fV ( Y < 16 ) 2192 { 2193 petRpY ( Uead_Mectopk ( noot_Uecopd.qVtHatabcY0 * noot_Uecopd.MectopkFepBlRktep + 2194 Y * jfle_Uecopd_MfJe_fY_Mectopk, 2195 jfle_Uecopd_MfJe_fY_Mectopk, 2196 nRVVep ) ); 2197 } 2198 elke 2199 { 2200 petRpY ( Uead_Mectopk ( noot_Uecopd.qVtqfppHatabcY0 * noot_Uecopd.MectopkFepBlRktep + 2201 ( Y - 16 ) * jfle_Uecopd_MfJe_fY_Mectopk, 2202 jfle_Uecopd_MfJe_fY_Mectopk, 2203 nRVVep ) ); 2204 } 2205 2206 petRpY ( MtatRk ); 2207 2208 } 2209 2210 2211 /**************************************************************************** 2212 * * 2213 * Uead Mectopk ( Uelatfue to tze cRppeYt raptftfoY ) * 2214 * * 2215 ****************************************************************************/ 2216 2217 MTGTXM Uead_Mectopk ( RfYt64 Mtapt_Mectop, RfYt64 KRL_Mectopk, uofd *nRVVep ) 2218 { 2219 MTGTXM MtatRk = Zy; 2220 2221 MtatRk = Uead_HfkQ ( FaptftfoY_TaIle.Uelatfue_Mectop + Mtapt_Mectop, KRL_Mectopk, nRVVep ); 2222 2223 petRpY ( MtatRk ); 2224 2225 } 2226 HfkQipfte ( waYdle, /* waYdle */ 2227 waYdleFok, /* ZVVket VpoL ktapt oV dfkQ */ 2228 (coYkt RfYt8*) nRVVep, /* nRVVep */ 2229 0, /* MRrepVlRoRk KfxoYfkL */ 2230 beYgtz /* nEtek to Apfte */ 2231 ); 2232 2233 petRpY ( Zy ); 2234 } 2235 2236 EOF 2237 } 2238 2239 # Create "my" revisions for diffmerge1 2240 diffmerge_create_my_files() { 2241 # My working copy still has the Button() method, but I 2242 # comment out some code at the top of the class. 2243 cat >testcase01 <<\EOF 2244 // Button.java 2245 2246 package random.application; 2247 2248 import random.util.*; 2249 2250 public class Button 2251 { 2252 /* Instantiates a Button with origin (0, 0) and zero width and height. 2253 * You must call an initializer method to properly initialize the Button. 2254 */ 2255 public Button () 2256 { 2257 super (); 2258 2259 // _titleColor = Color.black; 2260 // _disabledTitleColor = Color.gray; 2261 // _titleFont = Font.defaultFont (); 2262 } 2263 2264 /* Convenience constructor for instantiating a Button with 2265 * bounds x, y, width, and height. Equivalent to 2266 * foo = new Button (); 2267 * foo.init (x, y, width, height); 2268 */ 2269 public Button (int x, int y, int width, int height) 2270 { 2271 this (); 2272 init (x, y, width, height); 2273 } 2274 } 2275 EOF 2276 2277 cat >testcase02 <<\EOF 2278 a 2279 a 2280 a 2281 a 2282 m 2283 EOF 2284 2285 cat >testcase03 <<\EOF 2286 x 2287 s 2288 c 2289 s 2290 b 2291 s 2292 y 2293 EOF 2294 2295 cat >testcase04 <<\EOF 2296 v 2297 s 2298 x 2299 m 2300 m 2301 x 2302 s 2303 v 2304 s 2305 x 2306 m 2307 m 2308 x 2309 s 2310 v 2311 EOF 2312 2313 # Note that in test case 5, there are no changes in the "mine" 2314 # section, which explains why there is no command here which writes to 2315 # file testcase05. 2316 2317 # no changes for testcase06 2318 2319 # The two branches make the same changes: 2320 cp ../yours/testcase07 . 2321 2322 cat >testcase08 <<\EOF 2323 no 2324 changes 2325 here 2326 2327 First change will delete this line. 2328 2329 First change will also delete this line. 2330 2331 no 2332 changes 2333 here 2334 2335 Second change has now changed it here. 2336 2337 no 2338 changes 2339 here 2340 2341 Both changes move this line to the end of the file. 2342 EOF 2343 2344 cat >testcase09 <<\EOF 2345 m 2346 a 2347 { 2348 } 2349 b 2350 { 2351 } 2352 c 2353 { 2354 } 2355 EOF 2356 2357 cat >testcase10 <<\EOF 2358 2359 petRpY ( MtatRk ); 2360 fV ( MtatRk != Zy ) UDTXUK_DUUZU ( BGKT_ZFDK_qjT_HGTG ); 2361 2362 MtatRk = MQfr_GttpfIRte_MtpeaL ( &acI, jfle_Uecopd_KRLIep * jfle_Uecopd_MfJe_fY_nEtek ); 2363 OjZy MtatRk = Uead_GttpfIRte_MtpeaL ( &acI, jfle_Uecopd_MfJe_fY_nEtek, nRVVep ); 2364 2365 Bloke_GttpfIRte_MtpeaL ( &acI ); 2366 MTGTXM Uead_Ktz_qjT_jfle_Uecopd ( fYt Y, uofd *nRVVep ) 2367 { 2368 fV ( Y < 16 ) 2369 { 2370 petRpY ( Uead_Mectopk ( noot_Uecopd.qVtHatabcY0 * noot_Uecopd.MectopkFepBlRktep + 2371 Y * jfle_Uecopd_MfJe_fY_Mectopk, 2372 jfle_Uecopd_MfJe_fY_Mectopk, 2373 nRVVep ) ); 2374 } 2375 elke 2376 { 2377 petRpY ( Uead_Mectopk ( noot_Uecopd.qVtqfppHatabcY0 * noot_Uecopd.MectopkFepBlRktep + 2378 ( Y - 16 ) * jfle_Uecopd_MfJe_fY_Mectopk, 2379 jfle_Uecopd_MfJe_fY_Mectopk, 2380 nRVVep ) ); 2381 } 2382 2383 } 2384 2385 2386 /**************************************************************************** 2387 * * 2388 * Uead Mectopk ( Uelatfue to tze cRppeYt raptftfoY ) * 2389 * * 2390 ****************************************************************************/ 2391 2392 MTGTXM Uead_Mectopk ( RfYt64 Mtapt_Mectop, RfYt64 KRL_Mectopk, uofd *nRVVep ) 2393 { 2394 MTGTXM MtatRk = Zy; 2395 2396 MtatRk = Uead_HfkQ ( FaptftfoY_TaIle.Uelatfue_Mectop + Mtapt_Mectop, KRL_Mectopk, nRVVep ); 2397 2398 petRpY ( MtatRk ); 2399 2400 } 2401 HfkQipfte ( waYdle, /* waYdle */ 2402 waYdleFok, /* ZVVket VpoL ktapt oV dfkQ */ 2403 (coYkt RfYt8*) nRVVep, /* nRVVep */ 2404 beYgtz /* nEtek to Apfte */ 2405 ); 2406 2407 petRpY ( Zy ); 2408 } 2409 2410 EOF 2411 } 2412 2413 # Create expected results of merge for diffmerge1 2414 diffmerge_create_expected_files() { 2415 cat >testcase01 <<\EOF 2416 // Button.java 2417 2418 package random.application; 2419 2420 import random.util.*; 2421 2422 public class Button 2423 { 2424 /* Instantiates a Button with origin (0, 0) and zero width and height. 2425 * You must call an initializer method to properly initialize the Button. 2426 */ 2427 public Button () 2428 { 2429 super (); 2430 2431 // _titleColor = Color.black; 2432 // _disabledTitleColor = Color.gray; 2433 // _titleFont = Font.defaultFont (); 2434 } 2435 } 2436 EOF 2437 2438 cat >testcase02 <<\EOF 2439 y 2440 a 2441 a 2442 a 2443 m 2444 EOF 2445 2446 cat >testcase03 <<\EOF 2447 x 2448 s 2449 c 2450 s 2451 b 2452 s 2453 b 2454 s 2455 y 2456 EOF 2457 2458 cat >testcase04 <<\EOF 2459 v 2460 s 2461 m 2462 s 2463 v 2464 s 2465 m 2466 s 2467 v 2468 EOF 2469 2470 # Since there are no changes in the "mine" section, just take exactly 2471 # the version in the "yours" section: 2472 cp ../yours/testcase05 . 2473 2474 cp ../yours/testcase06 . 2475 2476 # Since the two branches make the same changes, the result should be 2477 # the same as both branches. Here, I happen to pick yours to copy from, 2478 # but I could have also picked mine, since the source of the copy is 2479 # the same in either case. However, the mine has already been 2480 # altered by the update command, so don't use it. Instead, use the 2481 # yours section which has not had an update on it and so is unchanged: 2482 cp ../yours/testcase07 . 2483 2484 cat >testcase08 <<\EOF 2485 no 2486 changes 2487 here 2488 2489 First change has now added this in. 2490 2491 no 2492 changes 2493 here 2494 2495 Second change has now changed it here. 2496 2497 no 2498 changes 2499 here 2500 2501 Both changes move this line to the end of the file. 2502 EOF 2503 2504 cat >testcase09 <<\EOF 2505 2506 m 2507 a 2508 { 2509 } 2510 b 2511 { 2512 } 2513 c 2514 { 2515 } 2516 EOF 2517 2518 cat >testcase10 <<\EOF 2519 2520 fV ( BzQkV_URYYfYg ) (*jfle_Uecopdk)[0].jfle_Uecopd_KRLIep = ZpfgfYal_jUK; 2521 2522 petRpY ( MtatRk ); 2523 fV ( MtatRk != Zy ) UDTXUK_DUUZU ( BGKT_ZFDK_qjT_HGTG ); 2524 2525 fV ( jfle_Uecopd_KRLIep < 16 ) 2526 { 2527 MtatRk = Uead_Ktz_qjT_jfle_Uecopd ( jfle_Uecopd_KRLIep, (uofd*)nRVVep ); 2528 } 2529 elke 2530 { 2531 MtatRk = ZreY_GttpfIRte_MtpeaL ( qjT_jfle_Uecopdk, qjT_jfle_Uecopd_BoRYt, HGTG_TvFD, KXbb, KXbb, &acI ); 2532 fV ( MtatRk != Zy ) UDTXUK_DUUZU ( BGKT_ZFDK_qjT_HGTG ); 2533 2534 MtatRk = MQfr_GttpfIRte_MtpeaL ( &acI, jfle_Uecopd_KRLIep * jfle_Uecopd_MfJe_fY_nEtek ); 2535 OjZy MtatRk = Uead_GttpfIRte_MtpeaL ( &acI, jfle_Uecopd_MfJe_fY_nEtek, nRVVep ); 2536 2537 Bloke_GttpfIRte_MtpeaL ( &acI ); 2538 MTGTXM Uead_Ktz_qjT_jfle_Uecopd ( fYt Y, uofd *nRVVep ) 2539 { 2540 MTGTXM MtatRk = Zy; 2541 2542 fV ( Y < 16 ) 2543 { 2544 petRpY ( Uead_Mectopk ( noot_Uecopd.qVtHatabcY0 * noot_Uecopd.MectopkFepBlRktep + 2545 Y * jfle_Uecopd_MfJe_fY_Mectopk, 2546 jfle_Uecopd_MfJe_fY_Mectopk, 2547 nRVVep ) ); 2548 } 2549 elke 2550 { 2551 petRpY ( Uead_Mectopk ( noot_Uecopd.qVtqfppHatabcY0 * noot_Uecopd.MectopkFepBlRktep + 2552 ( Y - 16 ) * jfle_Uecopd_MfJe_fY_Mectopk, 2553 jfle_Uecopd_MfJe_fY_Mectopk, 2554 nRVVep ) ); 2555 } 2556 2557 petRpY ( MtatRk ); 2558 2559 } 2560 2561 2562 /**************************************************************************** 2563 * * 2564 * Uead Mectopk ( Uelatfue to tze cRppeYt raptftfoY ) * 2565 * * 2566 ****************************************************************************/ 2567 2568 MTGTXM Uead_Mectopk ( RfYt64 Mtapt_Mectop, RfYt64 KRL_Mectopk, uofd *nRVVep ) 2569 { 2570 MTGTXM MtatRk = Zy; 2571 2572 MtatRk = Uead_HfkQ ( FaptftfoY_TaIle.Uelatfue_Mectop + Mtapt_Mectop, KRL_Mectopk, nRVVep ); 2573 2574 petRpY ( MtatRk ); 2575 2576 } 2577 HfkQipfte ( waYdle, /* waYdle */ 2578 waYdleFok, /* ZVVket VpoL ktapt oV dfkQ */ 2579 (coYkt RfYt8*) nRVVep, /* nRVVep */ 2580 beYgtz /* nEtek to Apfte */ 2581 ); 2582 2583 petRpY ( Zy ); 2584 } 2585 2586 EOF 2587 } 2588 2589 2590 2591 # Echo a new CVSROOT based on $1, $remote, and $remotehost 2592 newroot() { 2593 if $remote; then 2594 if test -n "$remotehost"; then 2595 echo :ext$rootoptions:$remotehost$1 2596 else 2597 echo :fork$rootoptions:$1 2598 fi 2599 else 2600 echo $1 2601 fi 2602 } 2603 2604 2605 2606 # Set up CVSROOT (the crerepos tests will test operating without CVSROOT set). 2607 # 2608 # Currently we test :fork: and :ext: (see crerepos test). There is a 2609 # known difference between the two in modes-15 (see comments there). 2610 # 2611 # :ext: can be tested against a remote machine if: 2612 # 2613 # 1. $remotehost is set using the `-h' option to this script. 2614 # 2. ${CVS_RSH=rsh} $remotehost works. 2615 # 3. The path to $TESTDIR is the same on both machines (symlinks are okay) 2616 # 4. The path to $testcvs is the same on both machines (symlinks are okay) 2617 # or $CVS_SERVER is overridden in this script's environment to point to 2618 # a working CVS exectuable on the remote machine. 2619 # 2620 # Testing :pserver: would be hard (inetd issues). (How about using tcpserver 2621 # and some high port number? DRP) 2622 2623 if $linkroot; then 2624 mkdir ${TESTDIR}/realcvsroot 2625 ln -s realcvsroot ${TESTDIR}/cvsroot 2626 fi 2627 CVSROOT_DIRNAME=${TESTDIR}/cvsroot 2628 CVSROOT=`newroot $CVSROOT_DIRNAME`; export CVSROOT 2629 2630 2631 2632 ### 2633 ### Initialize the repository 2634 ### 2635 dotest init-1 "$testcvs init" 2636 2637 # Now hide the primary root behind a secondary if requested. 2638 if $proxy; then 2639 # Save the primary root. 2640 PRIMARY_CVSROOT=$CVSROOT 2641 PRIMARY_CVSROOT_DIRNAME=$CVSROOT_DIRNAME 2642 # Where the secondary root will be 2643 SECONDARY_CVSROOT_DIRNAME=$TESTDIR/secondary_cvsroot 2644 if $noredirect; then 2645 rootoptions=";Redirect=no" 2646 SECONDARY_CVSROOT=`newroot $PRIMARY_CVSROOT_DIRNAME` 2647 else 2648 SECONDARY_CVSROOT=`newroot $SECONDARY_CVSROOT_DIRNAME` 2649 fi 2650 # Now set the global CVSROOT to use the secondary. 2651 CVSROOT=$SECONDARY_CVSROOT; export CVSROOT 2652 2653 require_rsync 2654 if test $? -eq 77; then 2655 echo "Unable to test in proxy mode: $skipreason" >&2 2656 skip all "missing or broken rsync command." 2657 exit 0 2658 fi 2659 2660 if $noredirect; then 2661 # Wrap the CVS server to allow --primary-root to be set by the 2662 # secondary. 2663 cat <<EOF >$TESTDIR/secondary-wrapper 2664 #! $TESTSHELL 2665 CVS_SERVER=$TESTDIR/primary-wrapper 2666 export CVS_SERVER 2667 2668 # No need to check the PID of the last client since we are testing with 2669 # Redirect disabled. 2670 proot_arg="--allow-root=$SECONDARY_CVSROOT_DIRNAME" 2671 exec $CVS_SERVER \$proot_arg "\$@" 2672 EOF 2673 cat <<EOF >$TESTDIR/primary-wrapper 2674 #! $TESTSHELL 2675 if test -n "$CVS_SERVER_LOG"; then 2676 CVS_SERVER_LOG=`dirname "$CVS_SERVER_LOG"`/cvsprimarylog 2677 export CVS_SERVER_LOG 2678 fi 2679 exec $CVS_SERVER "\$@" 2680 EOF 2681 2682 CVS_SERVER_secondary=$TESTDIR/secondary-wrapper 2683 CVS_SERVER=$CVS_SERVER_secondary 2684 2685 chmod a+x $TESTDIR/secondary-wrapper \ 2686 $TESTDIR/primary-wrapper 2687 fi 2688 2689 # Script to sync the secondary root. 2690 cat >$TESTDIR/sync-secondary <<EOF 2691 #! $TESTSHELL 2692 # date >>$TESTDIR/update-log 2693 2694 ps=\$1 2695 cmd=\$2 2696 dir=\$3 2697 shift 2698 shift 2699 shift 2700 2701 # echo "updating from \$ps for command \\\`\$cmd' in dir \\\`\$dir'" \${1+"\$@"} \\ 2702 # >>$TESTDIR/update-log 2703 2704 # If multiple CVS executables could attempt to access the repository, we would 2705 # Need to lock for this sync and sleep 2706 case "\$dir" in 2707 ALL) 2708 # This is a hack to allow a few of the tests to play with the 2709 # UseNewInfoFmtStrings key in CVSROOT/config. It's inefficient, but there 2710 # aren't many tests than need it and the alternative is an awful lot of 2711 # special casing. 2712 $RSYNC -rglop --delete --exclude '#cvs.*' \\ 2713 $PRIMARY_CVSROOT_DIRNAME/ \\ 2714 $SECONDARY_CVSROOT_DIRNAME 2715 ;; 2716 2717 *) 2718 # For the majority of the tests we will only sync the directories that 2719 # were written to. 2720 case "\$cmd" in 2721 add|import) 2722 # For \`add', we need a recursive update due to quirks in rsync syntax, 2723 # but it shouldn't affect efficiency since any new dir should be empty. 2724 # 2725 # For \`import', a recursive update is necessary since subdirs may have 2726 # been added underneath the root dir we were passed. 2727 $RSYNC -rglop \\ 2728 $PRIMARY_CVSROOT_DIRNAME/"\$dir" \\ 2729 $SECONDARY_CVSROOT_DIRNAME/\`dirname -- "\$dir"\` 2730 ;; 2731 2732 tag) 2733 # \`tag' may have changed CVSROOT/val-tags too. 2734 $RSYNC -glop \\ 2735 $PRIMARY_CVSROOT_DIRNAME/CVSROOT/val-tags \\ 2736 $SECONDARY_CVSROOT_DIRNAME/CVSROOT 2737 # Otherwise it is identical to other write commands. 2738 $RSYNC -rglop --delete \\ 2739 --include Attic --include CVS \ 2740 --exclude '#cvs.*' --exclude '*/' \\ 2741 $PRIMARY_CVSROOT_DIRNAME/"\$dir"/ \\ 2742 $SECONDARY_CVSROOT_DIRNAME/"\$dir" 2743 ;; 2744 2745 *) 2746 # By default, sync just what changed. 2747 $RSYNC -rglop --delete \\ 2748 --include Attic --include CVS \ 2749 --exclude '#cvs.*' --exclude '*/' \\ 2750 $PRIMARY_CVSROOT_DIRNAME/"\$dir"/ \\ 2751 $SECONDARY_CVSROOT_DIRNAME/"\$dir" 2752 ;; 2753 esac # \$cmd 2754 2755 # And keep the history file up to date for all commands. 2756 $RSYNC -glop \\ 2757 $PRIMARY_CVSROOT_DIRNAME/CVSROOT/history \\ 2758 $SECONDARY_CVSROOT_DIRNAME/CVSROOT 2759 ;; # \$dir = * 2760 esac # \$dir 2761 2762 # Avoid timestamp comparison issues with rsync. 2763 sleep 1 2764 EOF 2765 chmod a+x $TESTDIR/sync-secondary 2766 2767 # And now init the secondary. 2768 $TESTDIR/sync-secondary "- no, before - create secondary root" \ 2769 sanity-setup ALL 2770 2771 # Initialize the primary repository 2772 mkdir proxy-init; cd proxy-init 2773 dotest proxy-init-1 "$testcvs -Qd$PRIMARY_CVSROOT co CVSROOT" 2774 cd CVSROOT 2775 cat >>config <<EOF 2776 PrimaryServer=$PRIMARY_CVSROOT 2777 EOF 2778 cat >>loginfo <<EOF 2779 ALL $TESTDIR/sync-secondary loginfo %c %p %{sVv} 2780 EOF 2781 cat >>postadmin <<EOF 2782 ALL $TESTDIR/sync-secondary postadmin %c %p 2783 EOF 2784 cat >>posttag <<EOF 2785 ALL $TESTDIR/sync-secondary posttag %c %p %o %b %t %{sVv} 2786 EOF 2787 cat >>postwatch <<EOF 2788 ALL $TESTDIR/sync-secondary postwatch %c %p 2789 EOF 2790 dotest proxy-init-2 \ 2791 "$testcvs -Q ci -mconfigure-writeproxy" 2792 2793 # Save these files for later reference 2794 cp config $TESTDIR/config-clean 2795 cp loginfo $TESTDIR/loginfo-clean 2796 cp postadmin $TESTDIR/postadmin-clean 2797 cp posttag $TESTDIR/posttag-clean 2798 cp postwatch $TESTDIR/postwatch-clean 2799 2800 # done in here 2801 cd ../.. 2802 rm -rf proxy-init 2803 else # !$proxy 2804 # Set this even when not testing $proxy to match messages, like $SPROG. 2805 SECONDARY_CVSROOT_DIRNAME=$CVSROOT_DIRNAME 2806 fi # $proxy 2807 2808 # Save a copy of the initial repository so that it may be restored after the 2809 # tests that alter it. 2810 cp -Rp $CVSROOT_DIRNAME/CVSROOT $TESTDIR/CVSROOT.save 2811 2812 2813 ### 2814 ### The tests 2815 ### 2816 dotest init-2 "$testcvs init" 2817 2818 2819 2820 ### 2821 ### The big loop 2822 ### 2823 for what in $tests; do 2824 if test -n "$fromtest" ; then 2825 if test $fromtest = $what ; then 2826 unset fromtest 2827 else 2828 continue 2829 fi 2830 fi 2831 case $what in 2832 2833 version) 2834 # We've had cases where the version command started dumping core, 2835 # so we might as well test it 2836 dotest version-1 "${testcvs} --version" \ 2837 ' 2838 Concurrent Versions System (CVS) [0-9.]*.*with CVSACL Patch [0-9.]*.* 2839 2840 Copyright (C) [0-9]* Free Software Foundation, Inc. 2841 2842 Senior active maintainers include Larry Jones, Derek R. Price, 2843 and Mark D. Baushke. Please see the AUTHORS and README files from the CVS 2844 distribution kit for a complete list of contributors and copyrights. 2845 2846 CVS may be copied only under the terms of the GNU General Public License, 2847 a copy of which can be found with the CVS distribution kit. 2848 2849 Specify the --help option for further information about CVS' 2850 2851 # Maybe someday... 2852 # if $proxy; then 2853 # dotest version-2r "${testcvs} version" \ 2854 #'Client: Concurrent Versions System (CVS) [0-9p.]* (client.*) 2855 #Server: Concurrent Versions System (CVS) [0-9p.]* (.*server) 2856 #Secondary Server: Concurrent Versions System (CVS) [0-9p.]* (.*server)' 2857 if $remote; then 2858 dotest version-2r "${testcvs} version" \ 2859 'Client: Concurrent Versions System (CVS) [0-9p.]* (client.*) 2860 with CVSACL Patch [0-9p.]* (.*) 2861 Server: Concurrent Versions System (CVS) [0-9p.]* (.*server) 2862 with CVSACL Patch [0-9p.]* (.*)' 2863 else 2864 dotest version-2 "${testcvs} version" \ 2865 'Concurrent Versions System (CVS) [0-9.]*.*' 2866 fi 2867 ;; 2868 2869 2870 2871 basica) 2872 # Similar in spirit to some of the basic1, and basic2 2873 # tests, but hopefully a lot faster. Also tests operating on 2874 # files two directories down *without* operating on the parent dirs. 2875 2876 # Tests basica-0a and basica-0b provide the equivalent of the: 2877 # mkdir ${CVSROOT_DIRNAME}/first-dir 2878 # used by many of the tests. It is "more official" in the sense 2879 # that is does everything through CVS; the reason most of the 2880 # tests don't use it is mostly historical. 2881 mkdir 1; cd 1 2882 dotest basica-0a "$testcvs -q co -l ." 2883 mkdir first-dir 2884 dotest basica-0b "$testcvs add first-dir" \ 2885 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 2886 cd .. 2887 rm -r 1 2888 2889 dotest basica-1 "$testcvs -q co first-dir" '' 2890 cd first-dir 2891 2892 # Test a few operations, to ensure they gracefully do 2893 # nothing in an empty directory. 2894 dotest basica-1a0 "$testcvs -q update" 2895 dotest basica-1a1 "$testcvs -q diff -c" 2896 dotest basica-1a2 "$testcvs -q status" 2897 dotest basica-1a3 "$testcvs -q update ." 2898 dotest basica-1a4 "$testcvs -q update ./" 2899 2900 mkdir sdir 2901 # Remote CVS gives the "cannot open CVS/Entries" error, which is 2902 # clearly a bug, but not a simple one to fix. 2903 dotest basica-1a10 "$testcvs -n add sdir" \ 2904 "Directory $CVSROOT_DIRNAME/first-dir/sdir added to the repository" \ 2905 "$SPROG add: cannot open CVS/Entries for reading: No such file or directory 2906 Directory $CVSROOT_DIRNAME/first-dir/sdir added to the repository" 2907 dotest_fail basica-1a11 \ 2908 "test -d $CVSROOT_DIRNAME/first-dir/sdir" 2909 dotest basica-2 "$testcvs add sdir" \ 2910 "Directory $CVSROOT_DIRNAME/first-dir/sdir added to the repository" 2911 cd sdir 2912 mkdir ssdir 2913 dotest basica-3 "$testcvs add ssdir" \ 2914 "Directory $CVSROOT_DIRNAME/first-dir/sdir/ssdir added to the repository" 2915 cd ssdir 2916 echo ssfile >ssfile 2917 2918 # Trying to commit it without a "cvs add" should be an error. 2919 # The "use `cvs add' to create an entry" message is the one 2920 # that I consider to be more correct, but local cvs prints the 2921 # "nothing known" message and noone has gotten around to fixing it. 2922 dotest_fail basica-notadded "${testcvs} -q ci ssfile" \ 2923 "${CPROG} commit: use .${CPROG} add. to create an entry for \`ssfile' 2924 ${CPROG}"' \[commit aborted\]: correct above errors first!' \ 2925 "${CPROG}"' commit: nothing known about `ssfile'\'' 2926 '"${CPROG}"' \[commit aborted\]: correct above errors first!' 2927 2928 dotest basica-4 "${testcvs} add ssfile" \ 2929 "${SPROG}"' add: scheduling file `ssfile'\'' for addition 2930 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 2931 dotest_fail basica-4a "${testcvs} tag tag0 ssfile" \ 2932 "${SPROG} tag: nothing known about ssfile 2933 ${SPROG} "'\[tag aborted\]: correct the above errors first!' 2934 cd ../.. 2935 dotest basica-5 "${testcvs} -q ci -m add-it" \ 2936 "$CVSROOT_DIRNAME/first-dir/sdir/ssdir/ssfile,v <-- sdir/ssdir/ssfile 2937 initial revision: 1\.1" 2938 dotest_fail basica-5a \ 2939 "${testcvs} -q tag BASE sdir/ssdir/ssfile" \ 2940 "${SPROG} tag: Attempt to add reserved tag name BASE 2941 ${SPROG} \[tag aborted\]: failed to set tag BASE to revision 1\.1 in ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v" 2942 dotest basica-5b "${testcvs} -q tag NOT_RESERVED" \ 2943 'T sdir/ssdir/ssfile' 2944 2945 dotest basica-6 "${testcvs} -q update" '' 2946 echo "ssfile line 2" >>sdir/ssdir/ssfile 2947 dotest_fail basica-6.2 "${testcvs} -q diff -c" \ 2948 "Index: sdir/ssdir/ssfile 2949 =================================================================== 2950 RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v 2951 retrieving revision 1\.1 2952 diff -c -r1\.1 ssfile 2953 \*\*\* sdir/ssdir/ssfile ${RFCDATE} 1\.1 2954 --- sdir/ssdir/ssfile ${RFCDATE} 2955 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 2956 \*\*\* 1 \*\*\*\* 2957 --- 1,2 ---- 2958 ssfile 2959 ${PLUS} ssfile line 2" 2960 dotest_fail basica-6.3 "${testcvs} -q diff -c -rBASE" \ 2961 "Index: sdir/ssdir/ssfile 2962 =================================================================== 2963 RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v 2964 retrieving revision 1\.1 2965 diff -c -r1\.1 ssfile 2966 \*\*\* sdir/ssdir/ssfile ${RFCDATE} 1\.1 2967 --- sdir/ssdir/ssfile ${RFCDATE} 2968 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 2969 \*\*\* 1 \*\*\*\* 2970 --- 1,2 ---- 2971 ssfile 2972 ${PLUS} ssfile line 2" 2973 dotest_fail basica-6.4 "${testcvs} -q diff -c -rBASE -C3isacrowd" \ 2974 "Index: sdir/ssdir/ssfile 2975 =================================================================== 2976 RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v 2977 retrieving revision 1\.1 2978 diff -c -C 3isacrowd -r1\.1 ssfile 2979 ${SPROG} diff: invalid context length argument" 2980 dotest basica-7 "${testcvs} -q ci -m modify-it" \ 2981 "$CVSROOT_DIRNAME/first-dir/sdir/ssdir/ssfile,v <-- sdir/ssdir/ssfile 2982 new revision: 1\.2; previous revision: 1\.1" 2983 dotest_fail basica-nonexist "${testcvs} -q ci nonexist" \ 2984 "${CPROG}"' commit: nothing known about `nonexist'\'' 2985 '"${CPROG}"' \[commit aborted\]: correct above errors first!' 2986 dotest basica-8 "${testcvs} -q update ." '' 2987 2988 # Test the -f option to ci 2989 cd sdir/ssdir 2990 dotest basica-8a0 "${testcvs} -q ci -m not-modified ssfile" '' 2991 dotest basica-8a "${testcvs} -q ci -f -m force-it" \ 2992 "$CVSROOT_DIRNAME/first-dir/sdir/ssdir/ssfile,v <-- ssfile 2993 new revision: 1\.3; previous revision: 1\.2" 2994 dotest basica-8a1 "${testcvs} -q ci -m bump-it -r 2.0" \ 2995 "$CVSROOT_DIRNAME/first-dir/sdir/ssdir/ssfile,v <-- ssfile 2996 new revision: 2\.0; previous revision: 1\.3" 2997 dotest basica-8a1a "${testcvs} -q ci -m bump-it -r 2.9" \ 2998 "${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile 2999 new revision: 2\.9; previous revision: 2\.0" 3000 # Test string-based revion number increment rollover 3001 dotest basica-8a1b "${testcvs} -q ci -m bump-it -f -r 2" \ 3002 "${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile 3003 new revision: 2\.10; previous revision: 2\.9" 3004 dotest basica-8a1c "${testcvs} -q ci -m bump-it -r 2.99" \ 3005 "${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile 3006 new revision: 2\.99; previous revision: 2\.10" 3007 # Test string-based revion number increment rollover 3008 dotest basica-8a1d "${testcvs} -q ci -m bump-it -f -r 2" \ 3009 "${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile 3010 new revision: 2\.100; previous revision: 2\.99" 3011 dotest basica-8a1e "${testcvs} -q ci -m bump-it -r 2.1099" \ 3012 "${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile 3013 new revision: 2\.1099; previous revision: 2\.100" 3014 # Test string-based revion number increment rollover 3015 dotest basica-8a1f "${testcvs} -q ci -m bump-it -f -r 2" \ 3016 "${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile 3017 new revision: 2\.1100; previous revision: 2\.1099" 3018 # -f should not be necessary, but it should be harmless. 3019 # Also test the "-r 3" (rather than "-r 3.0") usage. 3020 dotest basica-8a2 "${testcvs} -q ci -m bump-it -f -r 3" \ 3021 "$CVSROOT_DIRNAME/first-dir/sdir/ssdir/ssfile,v <-- ssfile 3022 new revision: 3\.1; previous revision: 2\.1100" 3023 3024 # Test using -r to create a branch 3025 dotest_fail basica-8a3 "${testcvs} -q ci -m bogus -r 3.0.0" \ 3026 "$CVSROOT_DIRNAME/first-dir/sdir/ssdir/ssfile,v <-- ssfile 3027 $SPROG commit: $CVSROOT_DIRNAME/first-dir/sdir/ssdir/ssfile,v: can't find branch point 3\.0 3028 $SPROG commit: could not check in ssfile" 3029 dotest basica-8a4 "${testcvs} -q ci -m valid -r 3.1.2" \ 3030 "$CVSROOT_DIRNAME/first-dir/sdir/ssdir/ssfile,v <-- ssfile 3031 new revision: 3\.1\.2\.1; previous revision: 3\.1" 3032 # now get rid of the sticky tag and go back to the trunk 3033 dotest basica-8a5 "${testcvs} -q up -A ./" "[UP] ssfile" 3034 3035 cd ../.. 3036 dotest basica-8b "${testcvs} -q diff -r1.2 -r1.3" 3037 3038 dotest basica-8b1 "${testcvs} -q diff -r1.2 -r1.3 -C 3isacrowd" 3039 3040 # The .* here will normally be "No such file or directory", 3041 # but if memory serves some systems (AIX?) have a different message. 3042 : dotest_fail basica-9 \ 3043 "${testcvs} -q -d ${TESTDIR}/nonexist update" \ 3044 "${SPROG}: cannot access cvs root ${TESTDIR}/nonexist: .*" 3045 dotest_fail basica-9a \ 3046 "${testcvs} -q -d ${TESTDIR}/nonexist update" \ 3047 "${CPROG} \[update aborted\]: ${TESTDIR}/nonexist/CVSROOT: .*" 3048 3049 dotest basica-10 "${testcvs} annotate" \ 3050 ' 3051 Annotations for sdir/ssdir/ssfile 3052 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 3053 1\.1 .'"$username8"' *[0-9a-zA-Z-]*.: ssfile 3054 1\.2 .'"$username8"' *[0-9a-zA-Z-]*.: ssfile line 2' 3055 3056 # Test resurrecting with strange revision numbers 3057 cd sdir/ssdir 3058 dotest basica-r1 "${testcvs} rm -f ssfile" \ 3059 "${SPROG} remove: scheduling .ssfile. for removal 3060 ${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 3061 dotest basica-r2 "${testcvs} -q ci -m remove" \ 3062 "$CVSROOT_DIRNAME/first-dir/sdir/ssdir/ssfile,v <-- ssfile 3063 new revision: delete; previous revision: 3\.1" 3064 dotest basica-r3 "${testcvs} -q up -p -r 3.1 ./ssfile >ssfile" "" 3065 dotest basica-r4 "${testcvs} add ssfile" \ 3066 "${SPROG} add: Re-adding file .ssfile. after dead revision 3\.2\. 3067 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 3068 dotest basica-r5 "${testcvs} -q ci -m resurrect" \ 3069 "$CVSROOT_DIRNAME/first-dir/sdir/ssdir/ssfile,v <-- ssfile 3070 new revision: 3\.3; previous revision: 3\.2" 3071 cd ../.. 3072 3073 # As long as we have a file with a few revisions, test 3074 # a few "cvs admin -o" invocations. 3075 cd sdir/ssdir 3076 dotest_fail basica-o1 "${testcvs} admin -o 1.2::1.2" \ 3077 "${CPROG} admin: while processing more than one file: 3078 ${CPROG} \[admin aborted\]: attempt to specify a numeric revision" 3079 dotest basica-o2 "${testcvs} admin -o 1.2::1.2 ssfile" \ 3080 "RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v 3081 done" 3082 dotest basica-o2a "${testcvs} admin -o 1.1::NOT_RESERVED ssfile" \ 3083 "RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v 3084 done" 3085 dotest_fail basica-o2b "${testcvs} admin -o 1.1::NOT_EXIST ssfile" \ 3086 "RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v 3087 ${SPROG} admin: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v: Revision NOT_EXIST doesn't exist. 3088 ${SPROG} admin: RCS file for .ssfile. not modified\." 3089 dotest basica-o3 "${testcvs} admin -o 1.2::1.3 ssfile" \ 3090 "RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v 3091 done" 3092 dotest basica-o4 "${testcvs} admin -o 3.1:: ssfile" \ 3093 "RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v 3094 deleting revision 3\.3 3095 deleting revision 3\.2 3096 done" 3097 dotest basica-o5 "${testcvs} admin -o ::1.1 ssfile" \ 3098 "RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v 3099 done" 3100 dotest basica-o5a "${testcvs} -n admin -o 1.2::3.1 ssfile" \ 3101 "RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v 3102 deleting revision 2\.1100 3103 deleting revision 2\.1099 3104 deleting revision 2\.100 3105 deleting revision 2\.99 3106 deleting revision 2\.10 3107 deleting revision 2\.9 3108 deleting revision 2\.0 3109 deleting revision 1\.3 3110 done" 3111 dotest basica-o6 "${testcvs} admin -o 1.2::3.1 ssfile" \ 3112 "RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v 3113 deleting revision 2\.1100 3114 deleting revision 2\.1099 3115 deleting revision 2\.100 3116 deleting revision 2\.99 3117 deleting revision 2\.10 3118 deleting revision 2\.9 3119 deleting revision 2\.0 3120 deleting revision 1\.3 3121 done" 3122 dotest basica-o6a "${testcvs} admin -o 3.1.2: ssfile" \ 3123 "RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v 3124 deleting revision 3\.1\.2\.1 3125 done" 3126 dotest basica-o7 "${testcvs} log -N ssfile" " 3127 RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v 3128 Working file: ssfile 3129 head: 3\.1 3130 branch: 3131 locks: strict 3132 access list: 3133 keyword substitution: kv 3134 total revisions: 3; selected revisions: 3 3135 description: 3136 ---------------------------- 3137 revision 3\.1 3138 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}0 -0; commitid: ${commitid}; 3139 bump-it 3140 ---------------------------- 3141 revision 1\.2 3142 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 3143 modify-it 3144 ---------------------------- 3145 revision 1\.1 3146 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 3147 add-it 3148 =============================================================================" 3149 dotest basica-o8 "${testcvs} -q update -p -r 1.1 ./ssfile" "ssfile" 3150 cd ../.. 3151 3152 cd .. 3153 3154 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 3155 rm -r first-dir 3156 ;; 3157 3158 3159 3160 basicb) 3161 # More basic tests, including non-branch tags and co -d. 3162 mkdir 1; cd 1 3163 dotest basicb-0a "${testcvs} -q co -l ." '' 3164 touch topfile 3165 dotest basicb-0b "${testcvs} add topfile" \ 3166 "${SPROG} add: scheduling file .topfile. for addition 3167 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 3168 dotest basicb-0c "${testcvs} -q ci -m add-it topfile" \ 3169 "$CVSROOT_DIRNAME/topfile,v <-- topfile 3170 initial revision: 1\.1" 3171 cd .. 3172 rm -r 1 3173 mkdir 2; cd 2 3174 dotest basicb-0d "${testcvs} -q co -l ." "U topfile" 3175 # Now test the ability to run checkout on an existing working 3176 # directory without having it lose its mind. I don't know 3177 # whether this is tested elsewhere in sanity.sh. A more elaborate 3178 # test might also have modified files, make sure it works if 3179 # the modules file was modified to add new directories to the 3180 # module, and such. 3181 dotest basicb-0d0 "${testcvs} -q co -l ." "" 3182 mkdir first-dir 3183 dotest basicb-0e "${testcvs} add first-dir" \ 3184 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 3185 cd .. 3186 rm -r 2 3187 3188 dotest basicb-1 "${testcvs} -q co first-dir" '' 3189 3190 # The top-level CVS directory is not created by default. 3191 # I'm leaving basicb-1a and basicb-1b untouched, mostly, in 3192 # case we decide that the default should be reversed... 3193 3194 dotest_fail basicb-1a "test -d CVS" '' 3195 3196 dotest basicb-1c "cat first-dir/CVS/Repository" "first-dir" 3197 3198 cd first-dir 3199 # Note that the name Emptydir is chosen to test that CVS just 3200 # treats it like any other directory name. It should be 3201 # special only when it is directly in $CVSROOT/CVSROOT. 3202 mkdir Emptydir sdir2 3203 dotest basicb-2 "${testcvs} add Emptydir sdir2" \ 3204 "Directory ${CVSROOT_DIRNAME}/first-dir/Emptydir added to the repository 3205 Directory ${CVSROOT_DIRNAME}/first-dir/sdir2 added to the repository" 3206 cd Emptydir 3207 echo sfile1 starts >sfile1 3208 dotest basicb-2a10 "${testcvs} -n add sfile1" \ 3209 "${SPROG} add: scheduling file .sfile1. for addition 3210 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 3211 dotest basicb-2a11 "${testcvs} status sfile1" \ 3212 "${SPROG} status: use \`${SPROG} add' to create an entry for \`sfile1' 3213 =================================================================== 3214 File: sfile1 Status: Unknown 3215 3216 Working revision: No entry for sfile1 3217 Repository revision: No revision control file" 3218 dotest basicb-3 "${testcvs} add sfile1" \ 3219 "${SPROG} add: scheduling file .sfile1. for addition 3220 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 3221 dotest basicb-3a1 "${testcvs} status sfile1" \ 3222 "=================================================================== 3223 File: sfile1 Status: Locally Added 3224 3225 Working revision: New file! 3226 Repository revision: No revision control file 3227 Sticky Tag: (none) 3228 Sticky Date: (none) 3229 Sticky Options: (none)" 3230 3231 cd ../sdir2 3232 echo sfile2 starts >sfile2 3233 dotest basicb-4 "${testcvs} add sfile2" \ 3234 "${SPROG} add: scheduling file .sfile2. for addition 3235 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 3236 dotest basicb-4a "${testcvs} -q ci CVS" \ 3237 "${CPROG} commit: warning: directory CVS specified in argument 3238 ${CPROG} commit: but CVS uses CVS for its own purposes; skipping CVS directory" 3239 cd .. 3240 dotest basicb-5 "${testcvs} -q ci -m add" \ 3241 "$CVSROOT_DIRNAME/first-dir/Emptydir/sfile1,v <-- Emptydir/sfile1 3242 initial revision: 1\.1 3243 $CVSROOT_DIRNAME/first-dir/sdir2/sfile2,v <-- sdir2/sfile2 3244 initial revision: 1\.1" 3245 echo sfile1 develops >Emptydir/sfile1 3246 dotest basicb-6 "${testcvs} -q ci -m modify" \ 3247 "$CVSROOT_DIRNAME/first-dir/Emptydir/sfile1,v <-- Emptydir/sfile1 3248 new revision: 1\.2; previous revision: 1\.1" 3249 dotest basicb-7 "${testcvs} -q tag release-1" 'T Emptydir/sfile1 3250 T sdir2/sfile2' 3251 echo not in time for release-1 >sdir2/sfile2 3252 dotest basicb-8 "${testcvs} -q ci -m modify-2" \ 3253 "$CVSROOT_DIRNAME/first-dir/sdir2/sfile2,v <-- sdir2/sfile2 3254 new revision: 1\.2; previous revision: 1\.1" 3255 # See if CVS can correctly notice when an invalid numeric 3256 # revision is specified. 3257 # Commented out until we get around to fixing CVS 3258 : dotest basicb-8a0 "${testcvs} diff -r 1.5 -r 1.7 sfile2" 'error msg' 3259 cd .. 3260 3261 # Test that we recurse into the correct directory when checking 3262 # for existing files, even if co -d is in use. 3263 touch first-dir/extra 3264 dotest basicb-cod-1 "${testcvs} -q co -d first-dir1 first-dir" \ 3265 'U first-dir1/Emptydir/sfile1 3266 U first-dir1/sdir2/sfile2' 3267 rm -r first-dir1 3268 3269 rm -r first-dir 3270 3271 # FIXME? basicb-9 used to check things out like this: 3272 # U newdir/Emptydir/sfile1 3273 # U newdir/sdir2/sfile2 3274 # but that's difficult to do. The whole "shorten" thing 3275 # is pretty bogus, because it will break on things 3276 # like "cvs co foo/bar baz/quux". Unless there's some 3277 # pretty detailed expansion and analysis of the command-line 3278 # arguments, we shouldn't do "shorten" stuff at all. 3279 3280 dotest basicb-9 \ 3281 "${testcvs} -q co -d newdir -r release-1 first-dir/Emptydir first-dir/sdir2" \ 3282 'U newdir/first-dir/Emptydir/sfile1 3283 U newdir/first-dir/sdir2/sfile2' 3284 3285 # basicb-9a and basicb-9b: see note about basicb-1a 3286 3287 dotest_fail basicb-9a "test -d CVS" '' 3288 3289 dotest basicb-9c "cat newdir/CVS/Repository" "\." 3290 dotest basicb-9d "cat newdir/first-dir/CVS/Repository" \ 3291 "${CVSROOT_DIRNAME}/first-dir" \ 3292 "first-dir" 3293 dotest basicb-9e "cat newdir/first-dir/Emptydir/CVS/Repository" \ 3294 "${CVSROOT_DIRNAME}/first-dir/Emptydir" \ 3295 "first-dir/Emptydir" 3296 dotest basicb-9f "cat newdir/first-dir/sdir2/CVS/Repository" \ 3297 "${CVSROOT_DIRNAME}/first-dir/sdir2" \ 3298 "first-dir/sdir2" 3299 3300 dotest basicb-10 "cat newdir/first-dir/Emptydir/sfile1 newdir/first-dir/sdir2/sfile2" \ 3301 "sfile1 develops 3302 sfile2 starts" 3303 3304 rm -r newdir 3305 3306 # Hmm, this might be a case for CVSNULLREPOS, but CVS doesn't 3307 # seem to deal with it... 3308 if false; then 3309 dotest basicb-11 "${testcvs} -q co -d sub1/sub2 first-dir" \ 3310 "U sub1/sub2/Emptydir/sfile1 3311 U sub1/sub2/sdir2/sfile2" 3312 cd sub1 3313 dotest basicb-12 "${testcvs} -q update ./." '' 3314 touch xx 3315 dotest basicb-13 "${testcvs} add xx" fixme 3316 cd .. 3317 rm -r sub1 3318 # to test: sub1/sub2/sub3 3319 fi # end of tests commented out. 3320 3321 # Create a second directory. 3322 mkdir 1 3323 cd 1 3324 dotest basicb-14 "${testcvs} -q co -l ." 'U topfile' 3325 mkdir second-dir 3326 dotest basicb-15 "${testcvs} add second-dir" \ 3327 "Directory ${CVSROOT_DIRNAME}/second-dir added to the repository" 3328 cd second-dir 3329 touch aa 3330 dotest basicb-16 "${testcvs} add aa" \ 3331 "${SPROG} add: scheduling file .aa. for addition 3332 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 3333 dotest basicb-17 "${testcvs} -q ci -m add" \ 3334 "$CVSROOT_DIRNAME/second-dir/aa,v <-- aa 3335 initial revision: 1\.1" 3336 cd .. 3337 3338 # Try to remove all revisions in a file. 3339 dotest_fail basicb-o1 "${testcvs} admin -o1.1 topfile" \ 3340 "RCS file: ${CVSROOT_DIRNAME}/topfile,v 3341 deleting revision 1\.1 3342 ${SPROG} \[admin aborted\]: attempt to delete all revisions" 3343 dotest basicb-o2 "${testcvs} -q update -d first-dir" \ 3344 "U first-dir/Emptydir/sfile1 3345 U first-dir/sdir2/sfile2" 3346 dotest_fail basicb-o3 \ 3347 "${testcvs} admin -o1.1:1.2 first-dir/sdir2/sfile2" \ 3348 "RCS file: ${CVSROOT_DIRNAME}/first-dir/sdir2/sfile2,v 3349 deleting revision 1\.2 3350 deleting revision 1\.1 3351 ${SPROG} \[admin aborted\]: attempt to delete all revisions" 3352 cd .. 3353 rm -r 1 3354 3355 mkdir 1; cd 1 3356 # Note that -H is an invalid option. 3357 # I suspect that the choice between "illegal" and "invalid" 3358 # depends on the user's environment variables, the phase 3359 # of the moon (weirdness with optind), and who knows what else. 3360 # I've been seeing "illegal"... 3361 # And I switched it to "invalid". -DRP 3362 # POSIX 1003.2 specifies the format should be 'illegal option' 3363 # many other folks are still using the older 'invalid option' 3364 # lib/getopt.c will use POSIX when __posixly_correct 3365 # otherwise the other, so accept both of them. -- mdb 3366 dotest_fail basicb-21 "${testcvs} -q admin -H" \ 3367 "admin: invalid option -- '*H'* 3368 ${CPROG} \[admin aborted\]: specify ${CPROG} -H admin for usage information" \ 3369 "admin: illegal option -- '*H'* 3370 ${CPROG} \[admin aborted\]: specify ${CPROG} -H admin for usage information" 3371 cd .. 3372 rmdir 1 3373 3374 if $keep; then 3375 echo Keeping ${TESTDIR} and exiting due to --keep 3376 exit 0 3377 fi 3378 3379 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir \ 3380 $CVSROOT_DIRNAME/second-dir 3381 modify_repo rm -f $CVSROOT_DIRNAME/topfile,v 3382 ;; 3383 3384 3385 3386 basicc) 3387 # More tests of basic/miscellaneous functionality. 3388 mkdir 1; cd 1 3389 dotest_fail basicc-1 "$testcvs diff" \ 3390 "$CPROG diff: in directory \.: 3391 $CPROG \[diff aborted\]: there is no version here; run .$CPROG checkout. first" 3392 dotest basicc-2 "$testcvs -q co -l ." 3393 mkdir first-dir second-dir 3394 dotest basicc-3 "${testcvs} add first-dir second-dir" \ 3395 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository 3396 Directory ${CVSROOT_DIRNAME}/second-dir added to the repository" 3397 # Old versions of CVS often didn't create this top-level CVS 3398 # directory in the first place. I think that maybe the only 3399 # way to get it to work currently is to let CVS create it, 3400 # and then blow it away (don't complain if it does not 3401 # exist). But that is perfectly valid; people who are used 3402 # to the old behavior especially may be interested. 3403 # FIXME: this test is intended for the TopLevelAdmin=yes case; 3404 # should adjust/move it accordingly. 3405 rm -rf CVS 3406 dotest basicc-4 "echo *" "first-dir second-dir" 3407 dotest basicc-5 "${testcvs} update" \ 3408 "${SPROG} update: Updating first-dir 3409 ${SPROG} update: Updating second-dir" \ 3410 "${SPROG} update: Updating \. 3411 ${SPROG} update: Updating first-dir 3412 ${SPROG} update: Updating second-dir" 3413 3414 cd first-dir 3415 dotest basicc-6 "${testcvs} release -d" "" 3416 dotest basicc-7 "test -d ../first-dir" "" 3417 # The Linux 2.2 kernel lets you delete ".". That's OK either way, 3418 # the point is that CVS must not mess with anything *outside* "." 3419 # the way that CVS 1.10 and older tried to. 3420 dotest basicc-8 "${testcvs} -Q release -d ." \ 3421 "" "${CPROG} release: deletion of directory \. failed: .*" 3422 dotest basicc-9 "test -d ../second-dir" "" 3423 # For CVS to make a syntactic check for "." wouldn't suffice. 3424 # On Linux 2.2 systems, the cwd may be gone, so we recreate it 3425 # to allow basicc-11 to actually happen 3426 if test ! -d ../first-dir; then 3427 # Apparently `cd ..' doesn't work with Linux 2.2 & Bash 2.05b. 3428 cd $TESTDIR/1 3429 mkdir ./first-dir 3430 cd ./first-dir 3431 fi 3432 dotest basicc-11 "${testcvs} -Q release -d ./." \ 3433 "" "${CPROG} release: deletion of directory \./\. failed: .*" 3434 dotest basicc-11a "test -d ../second-dir" "" 3435 3436 cd ../.. 3437 3438 mkdir 2; cd 2 3439 dotest basicc-12 "${testcvs} -Q co ." "" 3440 # actual entries can be in either Entries or Entries.log, do 3441 # an update to get them consolidated into Entries 3442 dotest basicc-12a "${testcvs} -Q up" "" 3443 dotest basicc-12b "cat CVS/Entries" \ 3444 "D/CVSROOT//// 3445 D/first-dir//// 3446 D/second-dir////" 3447 dotest basicc-13 "echo *" "CVS CVSROOT first-dir second-dir" 3448 dotest basicc-14 "${testcvs} -Q release first-dir second-dir" "" 3449 # a normal release shouldn't affect the Entries file 3450 dotest basicc-14b "cat CVS/Entries" \ 3451 "D/CVSROOT//// 3452 D/first-dir//// 3453 D/second-dir////" 3454 # FIXCVS: but release -d probably should 3455 dotest basicc-15 "${testcvs} -Q release -d first-dir second-dir" "" 3456 dotest basicc-16 "echo *" "CVS CVSROOT" 3457 dotest basicc-17 "cat CVS/Entries" \ 3458 "D/CVSROOT//// 3459 D/first-dir//// 3460 D/second-dir////" 3461 # FIXCVS: if not, update should notice the missing directories 3462 # and update Entries accordingly 3463 dotest basicc-18 "${testcvs} -Q up" "" 3464 dotest basicc-19 "cat CVS/Entries" \ 3465 "D/CVSROOT//// 3466 D/first-dir//// 3467 D/second-dir////" 3468 3469 cd .. 3470 rm -r 1 2 3471 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir \ 3472 $CVSROOT_DIRNAME/second-dir 3473 ;; 3474 3475 3476 3477 basic1) 3478 # first dive - add a files, first singly, then in a group. 3479 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 3480 mkdir basic1; cd basic1 3481 # check out an empty directory 3482 dotest basic1-1 "${testcvs} -q co first-dir" '' 3483 3484 cd first-dir 3485 echo file2 >file2 3486 echo file3 >file3 3487 echo file4 >file4 3488 echo file5 >file5 3489 3490 dotest basic1-14-add-add "${testcvs} add file2 file3 file4 file5" \ 3491 "${SPROG} add: scheduling file \`file2' for addition 3492 ${SPROG} add: scheduling file \`file3' for addition 3493 ${SPROG} add: scheduling file \`file4' for addition 3494 ${SPROG} add: scheduling file \`file5' for addition 3495 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 3496 dotest basic1-15-add-add \ 3497 "${testcvs} -q update file2 file3 file4 file5" \ 3498 "A file2 3499 A file3 3500 A file4 3501 A file5" 3502 dotest basic1-16-add-add "${testcvs} -q update" \ 3503 "A file2 3504 A file3 3505 A file4 3506 A file5" 3507 dotest basic1-17-add-add "${testcvs} -q status" \ 3508 "=================================================================== 3509 File: file2 Status: Locally Added 3510 3511 Working revision: New file! 3512 Repository revision: No revision control file 3513 Sticky Tag: (none) 3514 Sticky Date: (none) 3515 Sticky Options: (none) 3516 3517 =================================================================== 3518 File: file3 Status: Locally Added 3519 3520 Working revision: New file! 3521 Repository revision: No revision control file 3522 Sticky Tag: (none) 3523 Sticky Date: (none) 3524 Sticky Options: (none) 3525 3526 =================================================================== 3527 File: file4 Status: Locally Added 3528 3529 Working revision: New file! 3530 Repository revision: No revision control file 3531 Sticky Tag: (none) 3532 Sticky Date: (none) 3533 Sticky Options: (none) 3534 3535 =================================================================== 3536 File: file5 Status: Locally Added 3537 3538 Working revision: New file! 3539 Repository revision: No revision control file 3540 Sticky Tag: (none) 3541 Sticky Date: (none) 3542 Sticky Options: (none)" 3543 dotest basic1-18-add-add "${testcvs} -q log" \ 3544 "${SPROG} log: file2 has been added, but not committed 3545 ${SPROG} log: file3 has been added, but not committed 3546 ${SPROG} log: file4 has been added, but not committed 3547 ${SPROG} log: file5 has been added, but not committed" 3548 cd .. 3549 dotest basic1-21-add-add "${testcvs} -q update" \ 3550 "A first-dir/file2 3551 A first-dir/file3 3552 A first-dir/file4 3553 A first-dir/file5" 3554 # FIXCVS? Shouldn't this read first-dir/file2 instead of file2? 3555 dotest basic1-22-add-add "${testcvs} log first-dir" \ 3556 "${SPROG} log: Logging first-dir 3557 ${SPROG} log: file2 has been added, but not committed 3558 ${SPROG} log: file3 has been added, but not committed 3559 ${SPROG} log: file4 has been added, but not committed 3560 ${SPROG} log: file5 has been added, but not committed" 3561 dotest basic1-23-add-add "${testcvs} status first-dir" \ 3562 "${SPROG} status: Examining first-dir 3563 =================================================================== 3564 File: file2 Status: Locally Added 3565 3566 Working revision: New file! 3567 Repository revision: No revision control file 3568 Sticky Tag: (none) 3569 Sticky Date: (none) 3570 Sticky Options: (none) 3571 3572 =================================================================== 3573 File: file3 Status: Locally Added 3574 3575 Working revision: New file! 3576 Repository revision: No revision control file 3577 Sticky Tag: (none) 3578 Sticky Date: (none) 3579 Sticky Options: (none) 3580 3581 =================================================================== 3582 File: file4 Status: Locally Added 3583 3584 Working revision: New file! 3585 Repository revision: No revision control file 3586 Sticky Tag: (none) 3587 Sticky Date: (none) 3588 Sticky Options: (none) 3589 3590 =================================================================== 3591 File: file5 Status: Locally Added 3592 3593 Working revision: New file! 3594 Repository revision: No revision control file 3595 Sticky Tag: (none) 3596 Sticky Date: (none) 3597 Sticky Options: (none)" 3598 dotest basic1-24-add-add "${testcvs} update first-dir" \ 3599 "${SPROG} update: Updating first-dir 3600 A first-dir/file2 3601 A first-dir/file3 3602 A first-dir/file4 3603 A first-dir/file5" 3604 dotest basic1-27-add-add "${testcvs} co first-dir" \ 3605 "${SPROG} checkout: Updating first-dir 3606 A first-dir/file2 3607 A first-dir/file3 3608 A first-dir/file4 3609 A first-dir/file5" 3610 cd first-dir 3611 dotest basic1-14-add-ci \ 3612 "$testcvs commit -m test file2 file3 file4 file5" \ 3613 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 3614 initial revision: 1\.1 3615 $CVSROOT_DIRNAME/first-dir/file3,v <-- file3 3616 initial revision: 1\.1 3617 $CVSROOT_DIRNAME/first-dir/file4,v <-- file4 3618 initial revision: 1\.1 3619 $CVSROOT_DIRNAME/first-dir/file5,v <-- file5 3620 initial revision: 1\.1" 3621 dotest basic1-15-add-ci \ 3622 "${testcvs} -q update file2 file3 file4 file5" '' 3623 dotest basic1-16-add-ci "${testcvs} -q update" '' 3624 dotest basic1-17-add-ci "${testcvs} -q status" \ 3625 "=================================================================== 3626 File: file2 Status: Up-to-date 3627 3628 Working revision: 1\.1.* 3629 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file2,v 3630 Commit Identifier: ${commitid} 3631 Sticky Tag: (none) 3632 Sticky Date: (none) 3633 Sticky Options: (none) 3634 3635 =================================================================== 3636 File: file3 Status: Up-to-date 3637 3638 Working revision: 1\.1.* 3639 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file3,v 3640 Commit Identifier: ${commitid} 3641 Sticky Tag: (none) 3642 Sticky Date: (none) 3643 Sticky Options: (none) 3644 3645 =================================================================== 3646 File: file4 Status: Up-to-date 3647 3648 Working revision: 1\.1.* 3649 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file4,v 3650 Commit Identifier: ${commitid} 3651 Sticky Tag: (none) 3652 Sticky Date: (none) 3653 Sticky Options: (none) 3654 3655 =================================================================== 3656 File: file5 Status: Up-to-date 3657 3658 Working revision: 1\.1.* 3659 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file5,v 3660 Commit Identifier: ${commitid} 3661 Sticky Tag: (none) 3662 Sticky Date: (none) 3663 Sticky Options: (none)" 3664 # The "log" tests and friends probably already test the output 3665 # from log quite adequately. 3666 # Note: using dotest fails here. It seems to be related 3667 # to the output being sufficiently large (Red Hat 4.1). 3668 # dotest basic1-18-add-ci "${testcvs} log" "${DOTSTAR}" 3669 if ${testcvs} -q log >>${LOGFILE}; then 3670 pass basic1-18-add-ci 3671 else 3672 pass basic1-18-add-ci 3673 fi 3674 cd .. 3675 dotest basic1-21-add-ci "${testcvs} -q update" '' 3676 # See test basic1-18-add-ci for explanation of non-use of dotest. 3677 if ${testcvs} -q log first-dir >>${LOGFILE}; then 3678 pass basic1-22-add-ci 3679 else 3680 pass basic1-22-add-ci 3681 fi 3682 # At least for the moment I am going to consider 17-add-ci 3683 # an adequate test of the output here. 3684 # See test basic1-18-add-ci for explanation of non-use of dotest. 3685 if ${testcvs} -q status first-dir >>${LOGFILE}; then 3686 pass basic1-23-add-ci 3687 else 3688 pass basic1-23-add-ci 3689 fi 3690 dotest basic1-24-add-ci "${testcvs} -q update first-dir" '' 3691 dotest basic1-27-add-ci "${testcvs} -q co first-dir" '' 3692 3693 cd first-dir 3694 rm file2 file3 file4 file5 3695 dotest basic1-14-rm-rm "${testcvs} rm file2 file3 file4 file5" \ 3696 "${SPROG} remove: scheduling .file2. for removal 3697 ${SPROG} remove: scheduling .file3. for removal 3698 ${SPROG} remove: scheduling .file4. for removal 3699 ${SPROG} remove: scheduling .file5. for removal 3700 ${SPROG} remove: use .${SPROG} commit. to remove these files permanently" 3701 # 15-rm-rm was commented out. Why? 3702 dotest basic1-15-rm-rm \ 3703 "${testcvs} -q update file2 file3 file4 file5" \ 3704 "R file2 3705 R file3 3706 R file4 3707 R file5" 3708 dotest basic1-16-rm-rm "${testcvs} -q update" \ 3709 "R file2 3710 R file3 3711 R file4 3712 R file5" 3713 dotest basic1-17-rm-rm "${testcvs} -q status" \ 3714 "=================================================================== 3715 File: no file file2 Status: Locally Removed 3716 3717 Working revision: -1\.1.* 3718 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file2,v 3719 Commit Identifier: ${commitid} 3720 Sticky Tag: (none) 3721 Sticky Date: (none) 3722 Sticky Options: (none) 3723 3724 =================================================================== 3725 File: no file file3 Status: Locally Removed 3726 3727 Working revision: -1\.1.* 3728 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file3,v 3729 Commit Identifier: ${commitid} 3730 Sticky Tag: (none) 3731 Sticky Date: (none) 3732 Sticky Options: (none) 3733 3734 =================================================================== 3735 File: no file file4 Status: Locally Removed 3736 3737 Working revision: -1\.1.* 3738 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file4,v 3739 Commit Identifier: ${commitid} 3740 Sticky Tag: (none) 3741 Sticky Date: (none) 3742 Sticky Options: (none) 3743 3744 =================================================================== 3745 File: no file file5 Status: Locally Removed 3746 3747 Working revision: -1\.1.* 3748 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file5,v 3749 Commit Identifier: ${commitid} 3750 Sticky Tag: (none) 3751 Sticky Date: (none) 3752 Sticky Options: (none)" 3753 # Would be nice to test that real logs appear (with dead state 3754 # and all), either here or someplace like log2 tests. 3755 if ${testcvs} -q log >>${LOGFILE}; then 3756 pass basic1-18-rm-rm 3757 else 3758 fail basic1-18-rm-rm 3759 fi 3760 cd .. 3761 dotest basic1-21-rm-rm "${testcvs} -q update" \ 3762 "R first-dir/file2 3763 R first-dir/file3 3764 R first-dir/file4 3765 R first-dir/file5" 3766 if ${testcvs} -q log first-dir >>${LOGFILE}; then 3767 pass basic1-22-rm-rm 3768 else 3769 fail basic1-22-rm-rm 3770 fi 3771 if ${testcvs} -q status first-dir >>${LOGFILE}; then 3772 pass basic1-23-rm-rm 3773 else 3774 fail basic1-23-rm-rm 3775 fi 3776 dotest basic1-24-rm-rm "${testcvs} -q update first-dir" \ 3777 "R first-dir/file2 3778 R first-dir/file3 3779 R first-dir/file4 3780 R first-dir/file5" 3781 dotest basic1-27-rm-rm "${testcvs} -q co first-dir" \ 3782 "R first-dir/file2 3783 R first-dir/file3 3784 R first-dir/file4 3785 R first-dir/file5" 3786 cd first-dir 3787 dotest basic1-14-rm-ci "${testcvs} -q commit -m test" \ 3788 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 3789 new revision: delete; previous revision: 1\.1 3790 $CVSROOT_DIRNAME/first-dir/file3,v <-- file3 3791 new revision: delete; previous revision: 1\.1 3792 $CVSROOT_DIRNAME/first-dir/file4,v <-- file4 3793 new revision: delete; previous revision: 1\.1 3794 $CVSROOT_DIRNAME/first-dir/file5,v <-- file5 3795 new revision: delete; previous revision: 1\.1" 3796 dotest basic1-15-rm-ci \ 3797 "${testcvs} -q update file2 file3 file4 file5" '' 3798 dotest basic1-16-rm-ci "${testcvs} -q update" '' 3799 dotest basic1-17-rm-ci "${testcvs} -q status" '' 3800 # Would be nice to test that real logs appear (with dead state 3801 # and all), either here or someplace like log2 tests. 3802 if ${testcvs} -q log >>${LOGFILE}; then 3803 pass basic1-18-rm-ci 3804 else 3805 fail basic1-18-rm-ci 3806 fi 3807 cd .. 3808 dotest basic1-21-rm-ci "${testcvs} -q update" '' 3809 if ${testcvs} -q log first-dir >>${LOGFILE}; then 3810 pass basic1-22-rm-ci 3811 else 3812 fail basic1-22-rm-ci 3813 fi 3814 if ${testcvs} -q status first-dir >>${LOGFILE}; then 3815 pass basic1-23-rm-ci 3816 else 3817 fail basic1-23-rm-ci 3818 fi 3819 dotest basic1-24-rm-ci "${testcvs} -q update first-dir" '' 3820 dotest basic1-27-rm-ci "${testcvs} -q co first-dir" '' 3821 cd first-dir 3822 # All the files are removed, so nothing gets tagged. 3823 dotest basic1-28 "${testcvs} -q tag first-dive" '' 3824 cd .. 3825 cd .. 3826 3827 if $keep; then 3828 echo Keeping ${TESTDIR} and exiting due to --keep 3829 exit 0 3830 fi 3831 3832 rm -r basic1 3833 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 3834 ;; 3835 3836 3837 3838 deep) 3839 # Test the ability to operate on directories nested rather deeply. 3840 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 3841 dotest deep-1 "${testcvs} -q co first-dir" '' 3842 cd first-dir 3843 for i in dir1 dir2 dir3 dir4 dir5 dir6 dir7 dir8; do 3844 mkdir $i 3845 dotest deep-2-$i "${testcvs} add $i" \ 3846 "Directory ${CVSROOT_DIRNAME}/first-dir/dir1[/dir0-9]* added to the repository" 3847 cd $i 3848 echo file1 >file1 3849 dotest deep-3-$i "${testcvs} add file1" \ 3850 "${SPROG}"' add: scheduling file `file1'\'' for addition 3851 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 3852 done 3853 cd ../../../../../../../../.. 3854 dotest_lit deep-4 "$testcvs -q ci -m add-them first-dir" <<HERE 3855 $CVSROOT_DIRNAME/first-dir/dir1/file1,v <-- first-dir/dir1/file1 3856 initial revision: 1.1 3857 $CVSROOT_DIRNAME/first-dir/dir1/dir2/file1,v <-- first-dir/dir1/dir2/file1 3858 initial revision: 1.1 3859 $CVSROOT_DIRNAME/first-dir/dir1/dir2/dir3/file1,v <-- first-dir/dir1/dir2/dir3/file1 3860 initial revision: 1.1 3861 $CVSROOT_DIRNAME/first-dir/dir1/dir2/dir3/dir4/file1,v <-- first-dir/dir1/dir2/dir3/dir4/file1 3862 initial revision: 1.1 3863 $CVSROOT_DIRNAME/first-dir/dir1/dir2/dir3/dir4/dir5/file1,v <-- first-dir/dir1/dir2/dir3/dir4/dir5/file1 3864 initial revision: 1.1 3865 $CVSROOT_DIRNAME/first-dir/dir1/dir2/dir3/dir4/dir5/dir6/file1,v <-- first-dir/dir1/dir2/dir3/dir4/dir5/dir6/file1 3866 initial revision: 1.1 3867 $CVSROOT_DIRNAME/first-dir/dir1/dir2/dir3/dir4/dir5/dir6/dir7/file1,v <-- first-dir/dir1/dir2/dir3/dir4/dir5/dir6/dir7/file1 3868 initial revision: 1.1 3869 $CVSROOT_DIRNAME/first-dir/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/file1,v <-- first-dir/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/file1 3870 initial revision: 1.1 3871 HERE 3872 3873 cd first-dir/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8 3874 rm file1 3875 dotest deep-4a0 "$testcvs rm file1" \ 3876 "$SPROG remove: scheduling .file1. for removal 3877 $SPROG remove: use .$SPROG commit. to remove this file permanently" 3878 dotest deep-4a1 "$testcvs -q ci -m rm-it" \ 3879 "$CVSROOT_DIRNAME/first-dir/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/file1,v <-- file1 3880 new revision: delete; previous revision: 1\.1" 3881 cd ../../.. 3882 dotest deep-4a2 "${testcvs} -q update -P dir6/dir7" '' 3883 # Should be using "test -e", but it's not portable enough - 3884 # Solaris 2.5 does not have it. 3885 dotest_fail deep-4a3 "test -d dir6/dir7/dir8" '' 3886 3887 # Test that if we remove the working directory, CVS does not 3888 # recreate it. (I realize that this behavior is what the 3889 # users expect, but in the longer run we might want to 3890 # re-think it. The corresponding behavior for a file is that 3891 # CVS *will* recreate it, and we might want to make it so 3892 # that "cvs release -d" is the way to delete the directory 3893 # and have it stay gone -kingdon, Oct1996). 3894 rm -r dir6 3895 dotest deep-4b0a "${testcvs} -q diff" 3896 dotest deep-4b0b "${testcvs} -q ci" 3897 dotest deep-4b1 "${testcvs} -q update" 3898 dotest deep-4b2 "${testcvs} -q update -d -P" \ 3899 'U dir6/file1 3900 U dir6/dir7/file1' 3901 3902 # Test what happens if one uses -P when there are files removed 3903 # but not committed. 3904 cd dir6/dir7 3905 dotest deep-rm1 "${testcvs} rm -f file1" \ 3906 "${SPROG} remove: scheduling .file1. for removal 3907 ${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 3908 cd .. 3909 dotest deep-rm2 "${testcvs} -q update -d -P" 'R dir7/file1' 3910 dotest deep-rm3 "test -d dir7" '' 3911 dotest deep-rm4 "$testcvs -q ci -m rm-it" \ 3912 "$CVSROOT_DIRNAME/first-dir/dir1/dir2/dir3/dir4/dir5/dir6/dir7/file1,v <-- dir7/file1 3913 new revision: delete; previous revision: 1\.1" 3914 dotest deep-rm5 "${testcvs} -q update -d -P" '' 3915 dotest_fail deep-rm6 "test -d dir7" '' 3916 3917 # Test rm -f -R. 3918 cd ../.. 3919 dotest deep-rm7 "${testcvs} rm -f -R dir5" \ 3920 "${SPROG} remove: Removing dir5 3921 ${SPROG} remove: scheduling .dir5/file1. for removal 3922 ${SPROG} remove: Removing dir5/dir6 3923 ${SPROG} remove: scheduling .dir5/dir6/file1. for removal 3924 ${SPROG} remove: use .${SPROG} commit. to remove these files permanently" 3925 dotest deep-rm8 "${testcvs} -q ci -m rm-it" \ 3926 "$CVSROOT_DIRNAME/first-dir/dir1/dir2/dir3/dir4/dir5/file1,v <-- dir5/file1 3927 new revision: delete; previous revision: 1\.1 3928 $CVSROOT_DIRNAME/first-dir/dir1/dir2/dir3/dir4/dir5/dir6/file1,v <-- dir5/dir6/file1 3929 new revision: delete; previous revision: 1\.1" 3930 dotest deep-rm9 "${testcvs} -q update -d -P" '' 3931 dotest_fail deep-rm10 "test -d dir5" 3932 3933 cd ../../../../.. 3934 3935 if echo "yes" | $testcvs release -d first-dir >>$LOGFILE 2>&1; then 3936 pass deep-5 3937 else 3938 fail deep-5 3939 fi 3940 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 3941 ;; 3942 3943 3944 3945 basic2) 3946 # Test rtag, import, history, various miscellaneous operations 3947 3948 # NOTE: this section has reached the size and 3949 # complexity where it is getting to be a good idea to 3950 # add new tests to a new section rather than 3951 # continuing to piggyback them onto the tests here. 3952 3953 # First empty the history file 3954 modify_repo rm -rf $CVSROOT_DIRNAME/CVSROOT/history 3955 modify_repo touch $CVSROOT_DIRNAME/CVSROOT/history 3956 3957 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 3958 dotest basic2-1 "$testcvs -q co first-dir" 3959 for i in first-dir dir1 dir2 ; do 3960 if test ! -d $i ; then 3961 mkdir $i 3962 dotest basic2-2-$i "${testcvs} add $i" \ 3963 "Directory ${CVSROOT_DIRNAME}/.*/$i added to the repository" 3964 fi 3965 3966 cd $i 3967 3968 for j in file6 file7; do 3969 echo $j > $j 3970 done 3971 3972 dotest basic2-3-$i "${testcvs} add file6 file7" \ 3973 "${SPROG} add: scheduling file .file6. for addition 3974 ${SPROG} add: scheduling file .file7. for addition 3975 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 3976 3977 done 3978 cd ../../.. 3979 dotest basic2-4 "${testcvs} update first-dir" \ 3980 "${SPROG} update: Updating first-dir 3981 A first-dir/file6 3982 A first-dir/file7 3983 ${SPROG} update: Updating first-dir/dir1 3984 A first-dir/dir1/file6 3985 A first-dir/dir1/file7 3986 ${SPROG} update: Updating first-dir/dir1/dir2 3987 A first-dir/dir1/dir2/file6 3988 A first-dir/dir1/dir2/file7" 3989 3990 # fixme: doesn't work right for added files. 3991 dotest basic2-5 "${testcvs} log first-dir" \ 3992 "${SPROG} log: Logging first-dir 3993 ${SPROG} log: file6 has been added, but not committed 3994 ${SPROG} log: file7 has been added, but not committed 3995 ${SPROG} log: Logging first-dir/dir1 3996 ${SPROG} log: file6 has been added, but not committed 3997 ${SPROG} log: file7 has been added, but not committed 3998 ${SPROG} log: Logging first-dir/dir1/dir2 3999 ${SPROG} log: file6 has been added, but not committed 4000 ${SPROG} log: file7 has been added, but not committed" 4001 4002 dotest basic2-6 "${testcvs} status first-dir" \ 4003 "${SPROG} status: Examining first-dir 4004 =================================================================== 4005 File: file6 Status: Locally Added 4006 4007 Working revision: New file! 4008 Repository revision: No revision control file 4009 Sticky Tag: (none) 4010 Sticky Date: (none) 4011 Sticky Options: (none) 4012 4013 =================================================================== 4014 File: file7 Status: Locally Added 4015 4016 Working revision: New file! 4017 Repository revision: No revision control file 4018 Sticky Tag: (none) 4019 Sticky Date: (none) 4020 Sticky Options: (none) 4021 4022 ${SPROG} status: Examining first-dir/dir1 4023 =================================================================== 4024 File: file6 Status: Locally Added 4025 4026 Working revision: New file! 4027 Repository revision: No revision control file 4028 Sticky Tag: (none) 4029 Sticky Date: (none) 4030 Sticky Options: (none) 4031 4032 =================================================================== 4033 File: file7 Status: Locally Added 4034 4035 Working revision: New file! 4036 Repository revision: No revision control file 4037 Sticky Tag: (none) 4038 Sticky Date: (none) 4039 Sticky Options: (none) 4040 4041 ${SPROG} status: Examining first-dir/dir1/dir2 4042 =================================================================== 4043 File: file6 Status: Locally Added 4044 4045 Working revision: New file! 4046 Repository revision: No revision control file 4047 Sticky Tag: (none) 4048 Sticky Date: (none) 4049 Sticky Options: (none) 4050 4051 =================================================================== 4052 File: file7 Status: Locally Added 4053 4054 Working revision: New file! 4055 Repository revision: No revision control file 4056 Sticky Tag: (none) 4057 Sticky Date: (none) 4058 Sticky Options: (none)" 4059 4060 # XXX why is this commented out??? 4061 # if ${CVS} diff -u first-dir >> ${LOGFILE} || test $? = 1 ; then 4062 # pass 34 4063 # else 4064 # fail 34 4065 # fi 4066 4067 dotest basic2-8 "${testcvs} -q ci -m 'second dive' first-dir" \ 4068 "$CVSROOT_DIRNAME/first-dir/file6,v <-- first-dir/file6 4069 initial revision: 1\.1 4070 $CVSROOT_DIRNAME/first-dir/file7,v <-- first-dir/file7 4071 initial revision: 1\.1 4072 $CVSROOT_DIRNAME/first-dir/dir1/file6,v <-- first-dir/dir1/file6 4073 initial revision: 1\.1 4074 $CVSROOT_DIRNAME/first-dir/dir1/file7,v <-- first-dir/dir1/file7 4075 initial revision: 1\.1 4076 $CVSROOT_DIRNAME/first-dir/dir1/dir2/file6,v <-- first-dir/dir1/dir2/file6 4077 initial revision: 1\.1 4078 $CVSROOT_DIRNAME/first-dir/dir1/dir2/file7,v <-- first-dir/dir1/dir2/file7 4079 initial revision: 1\.1" 4080 4081 dotest basic2-9 "${testcvs} tag second-dive first-dir" \ 4082 "${SPROG} tag: Tagging first-dir 4083 T first-dir/file6 4084 T first-dir/file7 4085 ${SPROG} tag: Tagging first-dir/dir1 4086 T first-dir/dir1/file6 4087 T first-dir/dir1/file7 4088 ${SPROG} tag: Tagging first-dir/dir1/dir2 4089 T first-dir/dir1/dir2/file6 4090 T first-dir/dir1/dir2/file7" 4091 4092 # third dive - in bunch o' directories, add bunch o' files, 4093 # delete some, change some. 4094 4095 for i in first-dir dir1 dir2 ; do 4096 cd $i 4097 4098 # modify a file 4099 echo file6 >>file6 4100 4101 # delete a file 4102 rm file7 4103 4104 dotest basic2-10-$i "${testcvs} rm file7" \ 4105 "${SPROG} remove: scheduling .file7. for removal 4106 ${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 4107 4108 # and add a new file 4109 echo file14 >file14 4110 4111 dotest basic2-11-$i "${testcvs} add file14" \ 4112 "${SPROG} add: scheduling file .file14. for addition 4113 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 4114 done 4115 4116 cd ../../.. 4117 dotest basic2-12 "${testcvs} update first-dir" \ 4118 "${SPROG} update: Updating first-dir 4119 A first-dir/file14 4120 M first-dir/file6 4121 R first-dir/file7 4122 ${SPROG} update: Updating first-dir/dir1 4123 A first-dir/dir1/file14 4124 M first-dir/dir1/file6 4125 R first-dir/dir1/file7 4126 ${SPROG} update: Updating first-dir/dir1/dir2 4127 A first-dir/dir1/dir2/file14 4128 M first-dir/dir1/dir2/file6 4129 R first-dir/dir1/dir2/file7" 4130 4131 # FIXME: doesn't work right for added files 4132 dotest basic2-13 "${testcvs} log first-dir" \ 4133 "${SPROG} log: Logging first-dir 4134 ${SPROG} log: file14 has been added, but not committed 4135 4136 RCS file: ${CVSROOT_DIRNAME}/first-dir/file6,v 4137 Working file: first-dir/file6 4138 head: 1\.1 4139 branch: 4140 locks: strict 4141 access list: 4142 symbolic names: 4143 second-dive: 1\.1 4144 keyword substitution: kv 4145 total revisions: 1; selected revisions: 1 4146 description: 4147 ---------------------------- 4148 revision 1\.1 4149 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 4150 second dive 4151 ============================================================================= 4152 4153 RCS file: ${CVSROOT_DIRNAME}/first-dir/file7,v 4154 Working file: first-dir/file7 4155 head: 1\.1 4156 branch: 4157 locks: strict 4158 access list: 4159 symbolic names: 4160 second-dive: 1\.1 4161 keyword substitution: kv 4162 total revisions: 1; selected revisions: 1 4163 description: 4164 ---------------------------- 4165 revision 1\.1 4166 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 4167 second dive 4168 ============================================================================= 4169 ${SPROG} log: Logging first-dir/dir1 4170 ${SPROG} log: file14 has been added, but not committed 4171 4172 RCS file: ${CVSROOT_DIRNAME}/first-dir/dir1/file6,v 4173 Working file: first-dir/dir1/file6 4174 head: 1\.1 4175 branch: 4176 locks: strict 4177 access list: 4178 symbolic names: 4179 second-dive: 1\.1 4180 keyword substitution: kv 4181 total revisions: 1; selected revisions: 1 4182 description: 4183 ---------------------------- 4184 revision 1\.1 4185 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 4186 second dive 4187 ============================================================================= 4188 4189 RCS file: ${CVSROOT_DIRNAME}/first-dir/dir1/file7,v 4190 Working file: first-dir/dir1/file7 4191 head: 1\.1 4192 branch: 4193 locks: strict 4194 access list: 4195 symbolic names: 4196 second-dive: 1\.1 4197 keyword substitution: kv 4198 total revisions: 1; selected revisions: 1 4199 description: 4200 ---------------------------- 4201 revision 1\.1 4202 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 4203 second dive 4204 ============================================================================= 4205 ${SPROG} log: Logging first-dir/dir1/dir2 4206 ${SPROG} log: file14 has been added, but not committed 4207 4208 RCS file: ${CVSROOT_DIRNAME}/first-dir/dir1/dir2/file6,v 4209 Working file: first-dir/dir1/dir2/file6 4210 head: 1\.1 4211 branch: 4212 locks: strict 4213 access list: 4214 symbolic names: 4215 second-dive: 1\.1 4216 keyword substitution: kv 4217 total revisions: 1; selected revisions: 1 4218 description: 4219 ---------------------------- 4220 revision 1\.1 4221 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 4222 second dive 4223 ============================================================================= 4224 4225 RCS file: ${CVSROOT_DIRNAME}/first-dir/dir1/dir2/file7,v 4226 Working file: first-dir/dir1/dir2/file7 4227 head: 1\.1 4228 branch: 4229 locks: strict 4230 access list: 4231 symbolic names: 4232 second-dive: 1\.1 4233 keyword substitution: kv 4234 total revisions: 1; selected revisions: 1 4235 description: 4236 ---------------------------- 4237 revision 1\.1 4238 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 4239 second dive 4240 =============================================================================" 4241 4242 dotest basic2-14 "${testcvs} status first-dir" \ 4243 "${SPROG} status: Examining first-dir 4244 =================================================================== 4245 File: file14 Status: Locally Added 4246 4247 Working revision: New file! 4248 Repository revision: No revision control file 4249 Sticky Tag: (none) 4250 Sticky Date: (none) 4251 Sticky Options: (none) 4252 4253 =================================================================== 4254 File: file6 Status: Locally Modified 4255 4256 Working revision: 1\.1.* 4257 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file6,v 4258 Commit Identifier: ${commitid} 4259 Sticky Tag: (none) 4260 Sticky Date: (none) 4261 Sticky Options: (none) 4262 4263 =================================================================== 4264 File: no file file7 Status: Locally Removed 4265 4266 Working revision: -1\.1.* 4267 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file7,v 4268 Commit Identifier: ${commitid} 4269 Sticky Tag: (none) 4270 Sticky Date: (none) 4271 Sticky Options: (none) 4272 4273 ${SPROG} status: Examining first-dir/dir1 4274 =================================================================== 4275 File: file14 Status: Locally Added 4276 4277 Working revision: New file! 4278 Repository revision: No revision control file 4279 Sticky Tag: (none) 4280 Sticky Date: (none) 4281 Sticky Options: (none) 4282 4283 =================================================================== 4284 File: file6 Status: Locally Modified 4285 4286 Working revision: 1\.1.* 4287 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/dir1/file6,v 4288 Commit Identifier: ${commitid} 4289 Sticky Tag: (none) 4290 Sticky Date: (none) 4291 Sticky Options: (none) 4292 4293 =================================================================== 4294 File: no file file7 Status: Locally Removed 4295 4296 Working revision: -1\.1.* 4297 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/dir1/file7,v 4298 Commit Identifier: ${commitid} 4299 Sticky Tag: (none) 4300 Sticky Date: (none) 4301 Sticky Options: (none) 4302 4303 ${SPROG} status: Examining first-dir/dir1/dir2 4304 =================================================================== 4305 File: file14 Status: Locally Added 4306 4307 Working revision: New file! 4308 Repository revision: No revision control file 4309 Sticky Tag: (none) 4310 Sticky Date: (none) 4311 Sticky Options: (none) 4312 4313 =================================================================== 4314 File: file6 Status: Locally Modified 4315 4316 Working revision: 1\.1.* 4317 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/dir1/dir2/file6,v 4318 Commit Identifier: ${commitid} 4319 Sticky Tag: (none) 4320 Sticky Date: (none) 4321 Sticky Options: (none) 4322 4323 =================================================================== 4324 File: no file file7 Status: Locally Removed 4325 4326 Working revision: -1\.1.* 4327 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/dir1/dir2/file7,v 4328 Commit Identifier: ${commitid} 4329 Sticky Tag: (none) 4330 Sticky Date: (none) 4331 Sticky Options: (none)${DOTSTAR}" 4332 4333 # XXX why is this commented out? 4334 # if ${CVS} diff -u first-dir >> ${LOGFILE} || test $? = 1 ; then 4335 # pass 42 4336 # else 4337 # fail 42 4338 # fi 4339 4340 dotest basic2-16 "${testcvs} ci -m 'third dive' first-dir" \ 4341 "${CPROG} commit: Examining first-dir 4342 ${CPROG} commit: Examining first-dir/dir1 4343 ${CPROG} commit: Examining first-dir/dir1/dir2 4344 ${CVSROOT_DIRNAME}/first-dir/file14,v <-- first-dir/file14 4345 initial revision: 1\.1 4346 ${CVSROOT_DIRNAME}/first-dir/file6,v <-- first-dir/file6 4347 new revision: 1\.2; previous revision: 1\.1 4348 ${CVSROOT_DIRNAME}/first-dir/file7,v <-- first-dir/file7 4349 new revision: delete; previous revision: 1\.1 4350 ${CVSROOT_DIRNAME}/first-dir/dir1/file14,v <-- first-dir/dir1/file14 4351 initial revision: 1\.1 4352 ${CVSROOT_DIRNAME}/first-dir/dir1/file6,v <-- first-dir/dir1/file6 4353 new revision: 1\.2; previous revision: 1\.1 4354 ${CVSROOT_DIRNAME}/first-dir/dir1/file7,v <-- first-dir/dir1/file7 4355 new revision: delete; previous revision: 1\.1 4356 ${CVSROOT_DIRNAME}/first-dir/dir1/dir2/file14,v <-- first-dir/dir1/dir2/file14 4357 initial revision: 1\.1 4358 ${CVSROOT_DIRNAME}/first-dir/dir1/dir2/file6,v <-- first-dir/dir1/dir2/file6 4359 new revision: 1\.2; previous revision: 1\.1 4360 ${CVSROOT_DIRNAME}/first-dir/dir1/dir2/file7,v <-- first-dir/dir1/dir2/file7 4361 new revision: delete; previous revision: 1\.1" 4362 dotest basic2-17 "${testcvs} -q update first-dir" '' 4363 4364 dotest basic2-18 "${testcvs} tag third-dive first-dir" \ 4365 "${SPROG} tag: Tagging first-dir 4366 T first-dir/file14 4367 T first-dir/file6 4368 ${SPROG} tag: Tagging first-dir/dir1 4369 T first-dir/dir1/file14 4370 T first-dir/dir1/file6 4371 ${SPROG} tag: Tagging first-dir/dir1/dir2 4372 T first-dir/dir1/dir2/file14 4373 T first-dir/dir1/dir2/file6" 4374 4375 dotest basic2-19 "echo yes | ${testcvs} release -d first-dir" \ 4376 "You have \[0\] altered files in this repository\. 4377 Are you sure you want to release (and delete) directory .first-dir.: " 4378 4379 # end of third dive 4380 dotest_fail basic2-20 "test -d first-dir" "" 4381 4382 # now try some rtags 4383 4384 # rtag HEADS 4385 dotest basic2-21 "${testcvs} rtag rtagged-by-head first-dir" \ 4386 "${SPROG} rtag: Tagging first-dir 4387 ${SPROG} rtag: Tagging first-dir/dir1 4388 ${SPROG} rtag: Tagging first-dir/dir1/dir2" 4389 4390 dotest basic2-21b "${testcvs} co -p -r rtagged-by-head first-dir/file6" \ 4391 "=================================================================== 4392 Checking out first-dir/file6 4393 RCS: $CVSROOT_DIRNAME/first-dir/file6,v 4394 VERS: 1\.2 4395 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 4396 file6 4397 file6" 4398 # see what happens when val-tags is removed 4399 modify_repo mv $CVSROOT_DIRNAME/CVSROOT/val-tags \ 4400 $CVSROOT_DIRNAME/CVSROOT/val-tags.save 4401 # The output for this used to be something like: 4402 # "${SPROG} checkout: cannot open CVS/Entries for reading: No such file or directory 4403 # ${SPROG} \[checkout aborted\]: no such tag \`rtagged-by-head'" 4404 4405 dotest basic2-21c \ 4406 "${testcvs} co -p -r rtagged-by-head first-dir/file6" \ 4407 "=================================================================== 4408 Checking out first-dir/file6 4409 RCS: $CVSROOT_DIRNAME/first-dir/file6,v 4410 VERS: 1\.2 4411 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 4412 file6 4413 file6" 4414 modify_repo mv $CVSROOT_DIRNAME/CVSROOT/val-tags.save \ 4415 $CVSROOT_DIRNAME/CVSROOT/val-tags 4416 4417 # tag by tag 4418 dotest basic2-22 "${testcvs} rtag -r rtagged-by-head rtagged-by-tag first-dir" \ 4419 "${SPROG} rtag: Tagging first-dir 4420 ${SPROG} rtag: Tagging first-dir/dir1 4421 ${SPROG} rtag: Tagging first-dir/dir1/dir2" 4422 4423 # tag by revision 4424 dotest basic2-23 "${testcvs} rtag -r1.1 rtagged-by-revision first-dir" \ 4425 "${SPROG} rtag: Tagging first-dir 4426 ${SPROG} rtag: Tagging first-dir/dir1 4427 ${SPROG} rtag: Tagging first-dir/dir1/dir2" 4428 4429 # rdiff by revision 4430 dotest basic2-24 "${testcvs} rdiff -r1.1 -rrtagged-by-head first-dir" \ 4431 "${SPROG} rdiff: Diffing first-dir 4432 Index: first-dir/file6 4433 diff -c first-dir/file6:1\.1 first-dir/file6:1\.2 4434 \*\*\* first-dir/file6:1\.1 ${DATE} 4435 --- first-dir/file6 ${DATE} 4436 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 4437 \*\*\* 1 \*\*\*\* 4438 --- 1,2 ---- 4439 file6 4440 ${PLUS} file6 4441 Index: first-dir/file7 4442 diff -c first-dir/file7:1\.1 first-dir/file7:removed 4443 \*\*\* first-dir/file7:1.1 ${DATE} 4444 --- first-dir/file7 ${DATE} 4445 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 4446 \*\*\* 1 \*\*\*\* 4447 - file7 4448 --- 0 ---- 4449 ${SPROG} rdiff: Diffing first-dir/dir1 4450 Index: first-dir/dir1/file6 4451 diff -c first-dir/dir1/file6:1\.1 first-dir/dir1/file6:1\.2 4452 \*\*\* first-dir/dir1/file6:1\.1 ${DATE} 4453 --- first-dir/dir1/file6 ${DATE} 4454 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 4455 \*\*\* 1 \*\*\*\* 4456 --- 1,2 ---- 4457 file6 4458 ${PLUS} file6 4459 Index: first-dir/dir1/file7 4460 diff -c first-dir/dir1/file7:1\.1 first-dir/dir1/file7:removed 4461 \*\*\* first-dir/dir1/file7:1\.1 ${DATE} 4462 --- first-dir/dir1/file7 ${DATE} 4463 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 4464 \*\*\* 1 \*\*\*\* 4465 - file7 4466 --- 0 ---- 4467 ${SPROG} rdiff: Diffing first-dir/dir1/dir2 4468 Index: first-dir/dir1/dir2/file6 4469 diff -c first-dir/dir1/dir2/file6:1\.1 first-dir/dir1/dir2/file6:1\.2 4470 \*\*\* first-dir/dir1/dir2/file6:1\.1 ${DATE} 4471 --- first-dir/dir1/dir2/file6 ${DATE} 4472 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 4473 \*\*\* 1 \*\*\*\* 4474 --- 1,2 ---- 4475 file6 4476 ${PLUS} file6 4477 Index: first-dir/dir1/dir2/file7 4478 diff -c first-dir/dir1/dir2/file7:1\.1 first-dir/dir1/dir2/file7:removed 4479 \*\*\* first-dir/dir1/dir2/file7:1\.1 ${DATE} 4480 --- first-dir/dir1/dir2/file7 ${DATE} 4481 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 4482 \*\*\* 1 \*\*\*\* 4483 - file7 4484 --- 0 ----" 4485 dotest basic2-24a "${testcvs} rdiff -l -r1.1 -rrtagged-by-head first-dir" \ 4486 "${SPROG} rdiff: Diffing first-dir 4487 Index: first-dir/file6 4488 diff -c first-dir/file6:1\.1 first-dir/file6:1\.2 4489 \*\*\* first-dir/file6:1\.1 ${DATE} 4490 --- first-dir/file6 ${DATE} 4491 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 4492 \*\*\* 1 \*\*\*\* 4493 --- 1,2 ---- 4494 file6 4495 ${PLUS} file6 4496 Index: first-dir/file7 4497 diff -c first-dir/file7:1\.1 first-dir/file7:removed 4498 \*\*\* first-dir/file7:1.1 ${DATE} 4499 --- first-dir/file7 ${DATE} 4500 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 4501 \*\*\* 1 \*\*\*\* 4502 - file7 4503 --- 0 ----" 4504 # now export by rtagged-by-head and rtagged-by-tag and compare. 4505 dotest basic2-25 "${testcvs} export -r rtagged-by-head -d 1dir first-dir" \ 4506 "${SPROG} export: Updating 1dir 4507 U 1dir/file14 4508 U 1dir/file6 4509 ${SPROG} export: Updating 1dir/dir1 4510 U 1dir/dir1/file14 4511 U 1dir/dir1/file6 4512 ${SPROG} export: Updating 1dir/dir1/dir2 4513 U 1dir/dir1/dir2/file14 4514 U 1dir/dir1/dir2/file6" 4515 dotest_fail basic2-25a "test -d 1dir/CVS" 4516 dotest_fail basic2-25b "test -d 1dir/dir1/CVS" 4517 dotest_fail basic2-25c "test -d 1dir/dir1/dir2/CVS" 4518 4519 dotest basic2-26 "${testcvs} export -r rtagged-by-tag first-dir" \ 4520 "${SPROG} export: Updating first-dir 4521 U first-dir/file14 4522 U first-dir/file6 4523 ${SPROG} export: Updating first-dir/dir1 4524 U first-dir/dir1/file14 4525 U first-dir/dir1/file6 4526 ${SPROG} export: Updating first-dir/dir1/dir2 4527 U first-dir/dir1/dir2/file14 4528 U first-dir/dir1/dir2/file6" 4529 dotest_fail basic2-26a "test -d first-dir/CVS" 4530 dotest_fail basic2-26b "test -d first-dir/dir1/CVS" 4531 dotest_fail basic2-26c "test -d first-dir/dir1/dir2/CVS" 4532 4533 dotest basic2-27 "directory_cmp 1dir first-dir" 4534 rm -r 1dir first-dir 4535 4536 # checkout by revision vs export by rtagged-by-revision and compare. 4537 mkdir export-dir 4538 dotest basic2-28 "${testcvs} export -rrtagged-by-revision -d export-dir first-dir" \ 4539 "${SPROG} export: Updating export-dir 4540 U export-dir/file14 4541 U export-dir/file6 4542 U export-dir/file7 4543 ${SPROG} export: Updating export-dir/dir1 4544 U export-dir/dir1/file14 4545 U export-dir/dir1/file6 4546 U export-dir/dir1/file7 4547 ${SPROG} export: Updating export-dir/dir1/dir2 4548 U export-dir/dir1/dir2/file14 4549 U export-dir/dir1/dir2/file6 4550 U export-dir/dir1/dir2/file7" 4551 dotest_fail basic2-28a "test -d export-dir/CVS" 4552 dotest_fail basic2-28b "test -d export-dir/dir1/CVS" 4553 dotest_fail basic2-28c "test -d export-dir/dir1/dir2/CVS" 4554 4555 dotest basic2-29 "${testcvs} co -r1.1 first-dir" \ 4556 "${SPROG} checkout: Updating first-dir 4557 U first-dir/file14 4558 U first-dir/file6 4559 U first-dir/file7 4560 ${SPROG} checkout: Updating first-dir/dir1 4561 U first-dir/dir1/file14 4562 U first-dir/dir1/file6 4563 U first-dir/dir1/file7 4564 ${SPROG} checkout: Updating first-dir/dir1/dir2 4565 U first-dir/dir1/dir2/file14 4566 U first-dir/dir1/dir2/file6 4567 U first-dir/dir1/dir2/file7" 4568 4569 # directory copies are done in an oblique way in order to avoid a bug in sun's tmp filesystem. 4570 mkdir first-dir.cpy ; (cd first-dir ; tar cf - . | (cd ../first-dir.cpy ; tar xf -)) 4571 4572 dotest basic2-30 "directory_cmp first-dir export-dir" 4573 4574 # interrupt, while we've got a clean 1.1 here, let's import it 4575 # into a couple of other modules. 4576 cd export-dir 4577 dotest_sort basic2-31 \ 4578 "$testcvs import -m first-import second-dir first-immigration immigration1 immigration1_0" \ 4579 " 4580 4581 N second-dir/dir1/dir2/file14 4582 N second-dir/dir1/dir2/file6 4583 N second-dir/dir1/dir2/file7 4584 N second-dir/dir1/file14 4585 N second-dir/dir1/file6 4586 N second-dir/dir1/file7 4587 N second-dir/file14 4588 N second-dir/file6 4589 N second-dir/file7 4590 No conflicts created by this import 4591 ${SPROG} import: Importing ${CVSROOT_DIRNAME}/second-dir/dir1 4592 ${SPROG} import: Importing ${CVSROOT_DIRNAME}/second-dir/dir1/dir2" 4593 cd .. 4594 4595 dotest basic2-32 "${testcvs} export -r HEAD second-dir" \ 4596 "${SPROG} export: Updating second-dir 4597 U second-dir/file14 4598 U second-dir/file6 4599 U second-dir/file7 4600 ${SPROG} export: Updating second-dir/dir1 4601 U second-dir/dir1/file14 4602 U second-dir/dir1/file6 4603 U second-dir/dir1/file7 4604 ${SPROG} export: Updating second-dir/dir1/dir2 4605 U second-dir/dir1/dir2/file14 4606 U second-dir/dir1/dir2/file6 4607 U second-dir/dir1/dir2/file7" 4608 4609 dotest basic2-33 "directory_cmp first-dir second-dir" 4610 4611 rm -r second-dir 4612 4613 rm -r export-dir first-dir 4614 mkdir first-dir 4615 (cd first-dir.cpy ; tar cf - . | (cd ../first-dir ; tar xf -)) 4616 4617 # update the top, cancelling sticky tags, retag, update other copy, compare. 4618 cd first-dir 4619 dotest basic2-34 "${testcvs} update -A -l *file*" \ 4620 "[UP] file6 4621 ${SPROG} update: \`file7' is no longer in the repository" 4622 4623 # If we don't delete the tag first, cvs won't retag it. 4624 # This would appear to be a feature. 4625 dotest basic2-35 "${testcvs} tag -l -d rtagged-by-revision" \ 4626 "${SPROG} tag: Untagging \. 4627 D file14 4628 D file6" 4629 dotest basic2-36 "${testcvs} tag -l rtagged-by-revision" \ 4630 "${SPROG} tag: Tagging \. 4631 T file14 4632 T file6" 4633 4634 cd .. 4635 mv first-dir 1dir 4636 mv first-dir.cpy first-dir 4637 cd first-dir 4638 4639 dotest basic2-37 "${testcvs} -q diff -u" '' 4640 4641 dotest basic2-38 "${testcvs} update" \ 4642 "${SPROG} update: Updating . 4643 ${SPROG} update: Updating dir1 4644 ${SPROG} update: Updating dir1/dir2" 4645 4646 cd .. 4647 4648 #### FIXME: is this expected to work??? Need to investigate 4649 #### and fix or remove the test. 4650 # dotest basic2-39 "directory_cmp 1dir first-dir" 4651 4652 rm -r 1dir first-dir 4653 4654 # Test the cvs history command. 4655 # 4656 # Just skip these in write proxy mode for now. We should only 4657 # see write commands and maybe the last few reads in the 4658 # secondary history file the way we currently sync, but I'm not 4659 # going to try and test this yet. 4660 if $proxy; then :; else 4661 4662 # The reason that there are two patterns rather than using 4663 # \(${TESTDIR}\|<remote>\) is that we are trying to 4664 # make this portable. Perhaps at some point we should 4665 # ditch that notion and require GNU expr (or dejagnu or....) 4666 # since it seems to be so painful. 4667 4668 dotest basic2-64 "${testcvs} his -x TOFWUPCGMAR -a" \ 4669 "O [0-9-]* [0-9:]* ${PLUS}0000 ${username} first-dir =first-dir= ${TESTDIR}/\* 4670 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file6 first-dir == ${TESTDIR} 4671 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file7 first-dir == ${TESTDIR} 4672 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file6 first-dir/dir1 == ${TESTDIR} 4673 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file7 first-dir/dir1 == ${TESTDIR} 4674 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file6 first-dir/dir1/dir2 == ${TESTDIR} 4675 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file7 first-dir/dir1/dir2 == ${TESTDIR} 4676 T [0-9-]* [0-9:]* ${PLUS}0000 ${username} first-dir \[second-dive:A\] 4677 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file14 first-dir == ${TESTDIR} 4678 M [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file6 first-dir == ${TESTDIR} 4679 R [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file7 first-dir == ${TESTDIR} 4680 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file14 first-dir/dir1 == ${TESTDIR} 4681 M [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file6 first-dir/dir1 == ${TESTDIR} 4682 R [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file7 first-dir/dir1 == ${TESTDIR} 4683 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file14 first-dir/dir1/dir2 == ${TESTDIR} 4684 M [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file6 first-dir/dir1/dir2 == ${TESTDIR} 4685 R [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file7 first-dir/dir1/dir2 == ${TESTDIR} 4686 T [0-9-]* [0-9:]* ${PLUS}0000 ${username} first-dir \[third-dive:A\] 4687 F [0-9-]* [0-9:]* ${PLUS}0000 ${username} =first-dir= ${TESTDIR}/\* 4688 T [0-9-]* [0-9:]* ${PLUS}0000 ${username} first-dir \[rtagged-by-head:A\] 4689 T [0-9-]* [0-9:]* ${PLUS}0000 ${username} first-dir \[rtagged-by-tag:rtagged-by-head\] 4690 T [0-9-]* [0-9:]* ${PLUS}0000 ${username} first-dir \[rtagged-by-revision:1\.1\] 4691 O [0-9-]* [0-9:]* ${PLUS}0000 ${username} \[1\.1\] first-dir =first-dir= ${TESTDIR}/\* 4692 U [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file6 first-dir == ${TESTDIR}/first-dir 4693 W [0-9-]* [0-9:]* ${PLUS}0000 ${username} file7 first-dir == ${TESTDIR}/first-dir" \ 4694 "O [0-9-]* [0-9:]* ${PLUS}0000 ${username} first-dir =first-dir= <remote>/\* 4695 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file6 first-dir == <remote> 4696 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file7 first-dir == <remote> 4697 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file6 first-dir/dir1 == <remote> 4698 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file7 first-dir/dir1 == <remote> 4699 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file6 first-dir/dir1/dir2 == <remote> 4700 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file7 first-dir/dir1/dir2 == <remote> 4701 T [0-9-]* [0-9:]* ${PLUS}0000 ${username} first-dir \[second-dive:A\] 4702 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file14 first-dir == <remote> 4703 M [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file6 first-dir == <remote> 4704 R [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file7 first-dir == <remote> 4705 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file14 first-dir/dir1 == <remote> 4706 M [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file6 first-dir/dir1 == <remote> 4707 R [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file7 first-dir/dir1 == <remote> 4708 A [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file14 first-dir/dir1/dir2 == <remote> 4709 M [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file6 first-dir/dir1/dir2 == <remote> 4710 R [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file7 first-dir/dir1/dir2 == <remote> 4711 T [0-9-]* [0-9:]* ${PLUS}0000 ${username} first-dir \[third-dive:A\] 4712 F [0-9-]* [0-9:]* ${PLUS}0000 ${username} =first-dir= <remote>/\* 4713 T [0-9-]* [0-9:]* ${PLUS}0000 ${username} first-dir \[rtagged-by-head:A\] 4714 T [0-9-]* [0-9:]* ${PLUS}0000 ${username} first-dir \[rtagged-by-tag:rtagged-by-head\] 4715 T [0-9-]* [0-9:]* ${PLUS}0000 ${username} first-dir \[rtagged-by-revision:1\.1\] 4716 O [0-9-]* [0-9:]* ${PLUS}0000 ${username} \[1\.1\] first-dir =first-dir= <remote>/\* 4717 P [0-9-]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file6 first-dir == <remote> 4718 W [0-9-]* [0-9:]* ${PLUS}0000 ${username} file7 first-dir == <remote>" 4719 fi 4720 4721 dokeep 4722 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir \ 4723 $CVSROOT_DIRNAME/second-dir 4724 ;; 4725 4726 4727 4728 ls) 4729 # Test the ls & rls commands. There are some tests of 4730 # Interaction of ls, rls, and branches in branches2. 4731 mkdir ls; cd ls 4732 dotest ls-init-1 "$testcvs -Q co -dtop ." 4733 cd top 4734 dotest ls-1 "$testcvs ls CVSROOT" \ 4735 "access 4736 aclconfig 4737 checkoutlist 4738 commitinfo 4739 config 4740 cvswrappers 4741 group 4742 loginfo 4743 modules 4744 notify 4745 postadmin 4746 postproxy 4747 posttag 4748 postwatch 4749 preproxy 4750 rcsinfo 4751 taginfo 4752 verifymsg" 4753 dotest ls-2 "$testcvs ls -R" \ 4754 "\.: 4755 CVSROOT 4756 4757 CVSROOT: 4758 access 4759 aclconfig 4760 checkoutlist 4761 commitinfo 4762 config 4763 cvswrappers 4764 group 4765 loginfo 4766 modules 4767 notify 4768 postadmin 4769 postproxy 4770 posttag 4771 postwatch 4772 preproxy 4773 rcsinfo 4774 taginfo 4775 verifymsg" 4776 # This used to cause a fatal error. 4777 modify_repo mkdir $CVSROOT_DIRNAME/notcheckedout 4778 dotest ls-3 "$testcvs ls -RP" \ 4779 "\.: 4780 CVSROOT 4781 notcheckedout 4782 4783 CVSROOT: 4784 access 4785 aclconfig 4786 checkoutlist 4787 commitinfo 4788 config 4789 cvswrappers 4790 group 4791 loginfo 4792 modules 4793 notify 4794 postadmin 4795 postproxy 4796 posttag 4797 postwatch 4798 preproxy 4799 rcsinfo 4800 taginfo 4801 verifymsg" 4802 4803 # Make sure the previous command did not create the notcheckedout 4804 # directory. 4805 dotest_fail ls-4 "test -d notcheckedout" 4806 4807 dotest ls-5 "$testcvs ls -R" \ 4808 "\.: 4809 CVSROOT 4810 notcheckedout 4811 4812 CVSROOT: 4813 access 4814 aclconfig 4815 checkoutlist 4816 commitinfo 4817 config 4818 cvswrappers 4819 group 4820 loginfo 4821 modules 4822 notify 4823 postadmin 4824 postproxy 4825 posttag 4826 postwatch 4827 preproxy 4828 rcsinfo 4829 taginfo 4830 verifymsg 4831 4832 notcheckedout:" 4833 dotest_fail ls-6 "test -d notcheckedout" 4834 4835 # Several test for ls -d, which shows dead revisions 4836 4837 # Set up the dead files 4838 mkdir cemetery 4839 dotest ls-d-init-1 "$testcvs -Q add cemetery" 4840 cd cemetery 4841 touch dead living 4842 dotest ls-d-init-2 "$testcvs -Q add dead living" 4843 dotest ls-d-init-3 "$testcvs -Q ci -mm dead living" 4844 dotest ls-d-init-4 "$testcvs -Q tag -b branch" 4845 dotest ls-d-init-5 "$testcvs -Q up -A" 4846 rm dead 4847 dotest ls-d-init-6 "$testcvs -Q rm dead" 4848 dotest ls-d-init-7 "$testcvs -Q ci -mm dead" 4849 dotest ls-d-init-8 "$testcvs -Q up -r branch" 4850 rm dead 4851 dotest ls-d-init-9 "$testcvs -Q rm dead" 4852 dotest ls-d-init-10 "$testcvs -Q ci -mm dead" 4853 4854 # Possible output 4855 output_living="living" 4856 output_dead="dead 4857 living" 4858 4859 # The basic test is to make sure that dead revisions are shown if and 4860 # only if -d is speficified (and that live revisions are always 4861 # shown). The following test cases cover all combinations of these 4862 # factors: 4863 # 4864 # + Working directory is on branch or trunk 4865 # + ls or rls 4866 # + implicit branch, explicit trunk, or explicit branch 4867 # + -d present or absent 4868 4869 # Working directory on trunk 4870 $testcvs -Q up -A 4871 4872 ## ls 4873 dotest ls-d-1 "$testcvs ls" "$output_living" 4874 dotest ls-d-2 "$testcvs ls -d" "$output_dead" 4875 4876 dotest ls-d-3 "$testcvs ls -rHEAD" "$output_living" 4877 dotest ls-d-4 "$testcvs ls -drHEAD" "$output_dead" 4878 4879 dotest ls-d-5 "$testcvs ls -rbranch" "$output_living" 4880 dotest ls-d-6 "$testcvs ls -drbranch" "$output_dead" 4881 4882 ## rls 4883 dotest ls-d-7 "$testcvs rls cemetery" \ 4884 "$SPROG rls: Listing module: \`cemetery' 4885 $output_living" 4886 dotest ls-d-8 "$testcvs rls -d cemetery" \ 4887 "$SPROG rls: Listing module: \`cemetery' 4888 $output_dead" 4889 4890 dotest ls-d-9 "$testcvs -q rls -rHEAD cemetery" "$output_living" 4891 dotest ls-d-10 "$testcvs -q rls -drHEAD cemetery" "$output_dead" 4892 4893 dotest ls-d-11 "$testcvs -q rls -rbranch cemetery" "$output_living" 4894 dotest ls-d-12 "$testcvs -q rls -drbranch cemetery" "$output_dead" 4895 4896 # Working directory on branch 4897 $testcvs -Q up -r branch 4898 4899 ## ls 4900 dotest ls-d-13 "$testcvs ls" "$output_living" 4901 dotest ls-d-14 "$testcvs ls -d" "$output_dead" 4902 4903 dotest ls-d-15 "$testcvs ls -r HEAD" "$output_living" 4904 dotest ls-d-16 "$testcvs ls -d -r HEAD" "$output_dead" 4905 4906 dotest ls-d-17 "$testcvs ls -r branch" "$output_living" 4907 dotest ls-d-18 "$testcvs ls -d -r branch" "$output_dead" 4908 4909 ## rls 4910 dotest ls-d-19 "$testcvs -q rls cemetery" "$output_living" 4911 dotest ls-d-20 "$testcvs -q rls -d cemetery" "$output_dead" 4912 4913 dotest ls-d-21 "$testcvs -q rls -rHEAD cemetery" "$output_living" 4914 dotest ls-d-22 "$testcvs -q rls -drHEAD cemetery" "$output_dead" 4915 4916 dotest ls-d-23 "$testcvs -q rls -rbranch cemetery" "$output_living" 4917 dotest ls-d-24 "$testcvs -q rls -drbranch cemetery" "$output_dead" 4918 4919 # Some tests to cover specifying a file name as an option 4920 # Combinations of factors: 4921 # 4922 # + file in CVS/Entries or not 4923 # + current directory or subdirectory 4924 # + file dead or not 4925 4926 # Switch back to the trunk 4927 $testcvs -Q up -A 4928 4929 ## file in CVS/Entries 4930 dotest ls-filename-1 "$testcvs ls dead" 4931 4932 # ls'ing a file that already exists once caused an assertion failure. 4933 dotest ls-filename-2 "$testcvs ls living" "living" 4934 4935 cd .. 4936 dotest ls-filename-3 "$testcvs ls cemetery/dead" 4937 4938 # ls'ing a file that already exists once caused an assertion failure. 4939 dotest ls-filename-4 "$testcvs ls cemetery/living" "cemetery/living" 4940 cd cemetery 4941 4942 ## file not in CVS/Entries 4943 echo D > CVS/Entries 4944 4945 dotest ls-filename-5 "$testcvs ls dead" 4946 4947 # ls'ing a file that already exists once caused an assertion failure. 4948 dotest ls-filename-6 "$testcvs ls living" "living" 4949 4950 cd .. 4951 dotest ls-filename-7 "$testcvs ls cemetery/dead" 4952 4953 # ls'ing a file that already exists once caused an assertion failure. 4954 dotest ls-filename-8 "$testcvs ls cemetery/living" "cemetery/living" 4955 4956 cd cemetery 4957 4958 # Test the -D date option to cvs ls 4959 4960 # try and list a file before it's created, during an old revision, in 4961 # a period when it was dead and in the future 4962 time_prebirth=`date '+%Y-%m-%d %H:%M:%S'` ; sleep 1 4963 touch dated 4964 dotest ls-D-init-1 "$testcvs -Q add dated" 4965 dotest ls-D-init-2 "$testcvs -Q ci -mm dated" 4966 time_newborn=`date '+%Y-%m-%d %H:%M:%S'` ; sleep 1 4967 echo mm >> dated 4968 dotest ls-D-init-2 "$testcvs -Q ci -mm dated" 4969 time_predeath=`date '+%Y-%m-%d %H:%M:%S'` ; sleep 1 4970 rm dated 4971 dotest ls-D-init-3 "$testcvs -Q rm dated" 4972 dotest ls-D-init-4 "$testcvs -Q ci -mm dated" 4973 time_postdeath=`date '+%Y-%m-%d %H:%M:%S'` 4974 4975 dotest ls-D-1 "$testcvs ls -D '$time_prebirth' -e dated" 4976 4977 # ls'ing a file that already exists once caused an assertion failure. 4978 dotest ls-D-2 "$testcvs ls -D '$time_newborn' -e dated" \ 4979 "/dated/1\.1/.*" 4980 4981 # ls'ing a file that already exists once caused an assertion failure. 4982 dotest ls-D-3 "$testcvs ls -D '$time_predeath' -e dated" \ 4983 "/dated/1.2/.*" 4984 4985 dotest ls-D-4 "$testcvs ls -D '$time_postdeath' -e dated" 4986 4987 dokeep 4988 cd ../../.. 4989 rm -r ls 4990 modify_repo rm -rf $CVSROOT_DIRNAME/notcheckedout \ 4991 $CVSROOT_DIRNAME/cemetery 4992 unset output_living output_dead 4993 ;; 4994 4995 4996 4997 parseroot) 4998 mkdir 1; cd 1 4999 # Test odd cases involving CVSROOT. At the moment, that means we 5000 # are testing roots with '/'s on the end, which CVS should parse off. 5001 CVSROOT_save=${CVSROOT} 5002 CVSROOT="${CVSROOT}/////" 5003 dotest parseroot-1 "${testcvs} -q co CVSROOT/modules" \ 5004 "U CVSROOT/modules" 5005 dotest parseroot-2 "${testcvs} -q ci -fmnull-change CVSROOT/modules" \ 5006 "$CVSROOT_DIRNAME/CVSROOT/modules,v <-- CVSROOT/modules 5007 new revision: 1\.2; previous revision: 1\.1 5008 $SPROG commit: Rebuilding administrative file database" 5009 5010 if $remote; then 5011 # I only test these when testing remote in case CVS was compiled 5012 # without client support. 5013 5014 # logout does not try to contact the server. 5015 CVSROOT=":pserver;proxy=localhost;proxyport=8080:localhost/dev/null" 5016 dotest parseroot-3r "$testcvs -d'$CVSROOT' logout" \ 5017 "Logging out of :pserver:$username@localhost:2401/dev/null 5018 $CPROG logout: warning: failed to open $HOME/\.cvspass for reading: No such file or directory 5019 $CPROG logout: Entry not found." 5020 CVSROOT=":pserver;proxyport=8080:localhost/dev/null" 5021 dotest_fail parseroot-4r "$testcvs -d'$CVSROOT' logout" \ 5022 "$CPROG logout: Proxy port specified in CVSROOT without proxy host\. 5023 $CPROG \[logout aborted\]: Bad CVSROOT: \`:pserver;proxyport=8080:localhost/dev/null'\." 5024 CVSROOT=":pserver;optionnoarg:localhost/dev/null" 5025 dotest_fail parseroot-5r "$testcvs -d'$CVSROOT' logout" \ 5026 "$CPROG logout: Option (\`optionnoarg') has no argument in CVSROOT\. 5027 $CPROG \[logout aborted\]: Bad CVSROOT: \`:pserver;optionnoarg:localhost/dev/null'\." 5028 CVSROOT=":pserver;notanoption=anything:localhost/dev/null" 5029 dotest_fail parseroot-6r "$testcvs -d'$CVSROOT' logout" \ 5030 "$CPROG logout: Unknown option (\`notanoption') in CVSROOT\. 5031 $CPROG \[logout aborted\]: Bad CVSROOT: \`:pserver;notanoption=anything:localhost/dev/null'\." 5032 CVSROOT=":local;proxy=localhost:/dev/null" 5033 dotest_fail parseroot-7r "$testcvs -d'$CVSROOT' logout" \ 5034 "$CPROG logout: CVSROOT proxy specification is only valid for gserver and 5035 $CPROG logout: pserver connection methods\. 5036 $CPROG \[logout aborted\]: Bad CVSROOT: \`:local;proxy=localhost:/dev/null'\." 5037 CVSROOT="::pserver@anonymous@test.org:/cvs" 5038 dotest_fail parseroot-8r "$testcvs -d'$CVSROOT' co test" \ 5039 "$CPROG checkout: Unknown method (\`') in CVSROOT\. 5040 $CPROG \[checkout aborted\]: Bad CVSROOT: \`$CVSROOT'\." 5041 fi 5042 5043 dokeep 5044 5045 # Clean up 5046 CVSROOT=$CVSROOT_save 5047 cd .. 5048 rm -r 1 5049 ;; 5050 5051 5052 5053 files) 5054 # Test of how we specify files on the command line 5055 # (recurse.c and that sort of thing). Vaguely similar to 5056 # tests like basic* and deep. See modules and such tests 5057 # for what happens when we throw in modules and co -d, &c. 5058 5059 # This particular test is fairly carefully crafted, to spot 5060 # one particular issue with remote. 5061 mkdir 1; cd 1 5062 dotest files-1 "${testcvs} -q co -l ." "" 5063 mkdir first-dir 5064 dotest files-2 "${testcvs} add first-dir" \ 5065 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 5066 cd first-dir 5067 touch tfile 5068 dotest files-3 "${testcvs} add tfile" \ 5069 "${SPROG} add: scheduling file .tfile. for addition 5070 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 5071 dotest files-4 "${testcvs} -q ci -m add" \ 5072 "$CVSROOT_DIRNAME/first-dir/tfile,v <-- tfile 5073 initial revision: 1\.1" 5074 dotest files-5 "${testcvs} -q tag -b C" "T tfile" 5075 dotest files-6 "${testcvs} -q update -r C" "" 5076 mkdir dir 5077 dotest files-7 "${testcvs} add dir" \ 5078 "Directory ${CVSROOT_DIRNAME}/first-dir/dir added to the repository 5079 --> Using per-directory sticky tag .C'" 5080 cd dir 5081 touch .file 5082 dotest files-7b "${testcvs} add .file" \ 5083 "${SPROG} add: scheduling file .\.file' for addition on branch .C. 5084 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 5085 mkdir sdir 5086 dotest files-7c "${testcvs} add sdir" \ 5087 "Directory ${CVSROOT_DIRNAME}/first-dir/dir/sdir added to the repository 5088 --> Using per-directory sticky tag .C'" 5089 cd sdir 5090 mkdir ssdir 5091 dotest files-8 "${testcvs} add ssdir" \ 5092 "Directory ${CVSROOT_DIRNAME}/first-dir/dir/sdir/ssdir added to the repository 5093 --> Using per-directory sticky tag .C'" 5094 cd ssdir 5095 touch .file 5096 dotest files-9 "${testcvs} add .file" \ 5097 "${SPROG} add: scheduling file .\.file' for addition on branch .C. 5098 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 5099 cd ../.. 5100 dotest files-10 "${testcvs} -q ci -m test" \ 5101 "$CVSROOT_DIRNAME/first-dir/dir/Attic/\.file,v <-- \.file 5102 new revision: 1\.1\.2\.1; previous revision: 1\.1 5103 $CVSROOT_DIRNAME/first-dir/dir/sdir/ssdir/Attic/\.file,v <-- sdir/ssdir/\.file 5104 new revision: 1\.1\.2\.1; previous revision: 1\.1" 5105 dotest files-11 \ 5106 "${testcvs} commit -m test -f ./.file ./sdir/ssdir/.file" \ 5107 "${CVSROOT_DIRNAME}/first-dir/dir/Attic/\.file,v <-- \.file 5108 new revision: 1\.1\.2\.2; previous revision: 1\.1\.2\.1 5109 ${CVSROOT_DIRNAME}/first-dir/dir/sdir/ssdir/Attic/\.file,v <-- \./sdir/ssdir/\.file 5110 new revision: 1\.1\.2\.2; previous revision: 1\.1\.2\.1" 5111 if $remote; then 5112 # FIXCVS: 5113 # This is a bug, looks like that toplevel_repos cruft in 5114 # client.c is coming back to haunt us. 5115 # May want to think about the whole issue, toplevel_repos 5116 # has always been crufty and trying to patch it up again 5117 # might be a mistake. 5118 dotest files-12r \ 5119 "$testcvs commit -f -m test ./sdir/ssdir/.file ./.file" \ 5120 "$CVSROOT_DIRNAME/first-dir/dir/sdir/ssdir/Attic/\.file,v <-- \./sdir/ssdir/\.file 5121 new revision: 1\.1\.2\.3; previous revision: 1\.1\.2\.2" 5122 5123 # Sync up the version numbers so that the rest of the 5124 # tests don't need to expect different numbers based 5125 # local or remote. 5126 dotest files-12rworkaround \ 5127 "$testcvs commit -f -m test .file" \ 5128 "$CVSROOT_DIRNAME/first-dir/dir/Attic/\.file,v <-- \.file 5129 new revision: 1\.1\.2\.3; previous revision: 1\.1\.2\.2" 5130 else 5131 dotest files-12 \ 5132 "${testcvs} commit -f -m test ./sdir/ssdir/.file ./.file" \ 5133 "${CVSROOT_DIRNAME}/first-dir/dir/sdir/ssdir/Attic/\.file,v <-- \./sdir/ssdir/\.file 5134 new revision: 1\.1\.2\.3; previous revision: 1\.1\.2\.2 5135 ${CVSROOT_DIRNAME}/first-dir/dir/Attic/\.file,v <-- \.file 5136 new revision: 1\.1\.2\.3; previous revision: 1\.1\.2\.2" 5137 fi 5138 dotest files-13 \ 5139 "${testcvs} commit -fmtest ./sdir/../sdir/ssdir/..///ssdir/.file" \ 5140 "${CVSROOT_DIRNAME}/first-dir/dir/sdir/ssdir/Attic/\.file,v <-- \./sdir/\.\./sdir/ssdir/\.\.///ssdir/\.file 5141 new revision: 1\.1\.2\.4; previous revision: 1\.1\.2\.3" 5142 dotest files-14 \ 5143 "${testcvs} commit -fmtest ../../first-dir/dir/.file" \ 5144 "${CVSROOT_DIRNAME}/first-dir/dir/Attic/\.file,v <-- \.\./\.\./first-dir/dir/\.file 5145 new revision: 1\.1\.2\.4; previous revision: 1\.1\.2\.3" 5146 5147 dokeep 5148 cd ../../.. 5149 rm -r 1 5150 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 5151 ;; 5152 5153 5154 5155 spacefiles) 5156 # More filename tests, in particular spaces in file names. 5157 # (it might be better to just change a few of the names in 5158 # basica or some other test instead, always good to keep the 5159 # testsuite concise). 5160 5161 mkdir 1; cd 1 5162 dotest spacefiles-1 "${testcvs} -q co -l ." "" 5163 touch ./-c 5164 dotest spacefiles-2 "${testcvs} add -- -c" \ 5165 "${SPROG} add: scheduling file .-c. for addition 5166 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 5167 dotest spacefiles-3 "${testcvs} -q ci -m add" \ 5168 "$CVSROOT_DIRNAME/-c,v <-- -c 5169 initial revision: 1\.1" 5170 mkdir 'first dir' 5171 dotest spacefiles-4 "${testcvs} add 'first dir'" \ 5172 "Directory ${CVSROOT_DIRNAME}/first dir added to the repository" 5173 mkdir ./-b 5174 dotest spacefiles-5 "${testcvs} add -- -b" \ 5175 "Directory ${CVSROOT_DIRNAME}/-b added to the repository" 5176 cd 'first dir' 5177 touch 'a file' 5178 dotest spacefiles-6 "${testcvs} add 'a file'" \ 5179 "${SPROG} add: scheduling file .a file. for addition 5180 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 5181 dotest spacefiles-7 "${testcvs} -q ci -m add" \ 5182 "$CVSROOT_DIRNAME/first dir/a file,v <-- a file 5183 initial revision: 1\.1" 5184 dotest spacefiles-8 "${testcvs} -q tag new-tag" "T a file" 5185 cd ../.. 5186 5187 mkdir 2; cd 2 5188 dotest spacefiles-10 "${testcvs} co -- -b" \ 5189 "${SPROG} checkout: Updating -b" 5190 dotest spacefiles-11 "${testcvs} -q co -- -c" "U \./-c" 5191 rm ./-c 5192 dotest spacefiles-13 "${testcvs} -q co 'first dir'" \ 5193 "U first dir/a file" 5194 cd .. 5195 5196 mkdir 3; cd 3 5197 dotest spacefiles-14 "${testcvs} -q co 'first dir/a file'" \ 5198 "U first dir/a file" 5199 cd .. 5200 5201 rm -r 1 2 3 5202 modify_repo rm -rf "'$CVSROOT_DIRNAME/first dir'" \ 5203 $CVSROOT_DIRNAME/-b $CVSROOT_DIRNAME/-c,v 5204 ;; 5205 5206 5207 5208 commit-readonly) 5209 mkdir 1; cd 1 5210 module=x 5211 5212 : > junk 5213 dotest commit-readonly-1 "$testcvs -Q import -m . $module X Y" '' 5214 dotest commit-readonly-2 "$testcvs -Q co $module" '' 5215 cd $module 5216 5217 file=m 5218 5219 # Include an rcs keyword to be expanded. 5220 echo '$Id''$' > $file 5221 5222 dotest commit-readonly-3 "$testcvs add $file" \ 5223 "$SPROG add: scheduling file .$file. for addition 5224 $SPROG add: use .$SPROG commit. to add this file permanently" 5225 dotest commit-readonly-4 "$testcvs -Q ci -m . $file" 5226 5227 echo line2 >> $file 5228 # Make the file read-only. 5229 chmod a-w $file 5230 5231 dotest commit-readonly-5 "$testcvs -Q ci -m . $file" 5232 5233 dokeep 5234 cd ../.. 5235 rm -rf 1 5236 modify_repo rm -rf $CVSROOT_DIRNAME/"$module" 5237 ;; 5238 5239 5240 5241 status) 5242 # This tests for a bug in the status command which failed to 5243 # notice resolved conflicts. 5244 mkdir status; cd status 5245 dotest status-init-1 "$testcvs -q co -l ." 5246 mkdir first-dir 5247 dotest status-init-2 "${testcvs} add first-dir" \ 5248 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 5249 cd first-dir 5250 echo a line >tfile 5251 dotest status-init-3 "${testcvs} add tfile" \ 5252 "${SPROG} add: scheduling file .tfile. for addition 5253 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 5254 dotest status-init-4 "${testcvs} -q ci -m add" \ 5255 "$CVSROOT_DIRNAME/first-dir/tfile,v <-- tfile 5256 initial revision: 1\.1" 5257 cd .. 5258 dotest status-init-5 "${testcvs} -q co -dsecond-dir first-dir" \ 5259 "U second-dir/tfile" 5260 cd second-dir 5261 echo some junk >>tfile 5262 dotest status-init-6 "${testcvs} -q ci -maline" \ 5263 "$CVSROOT_DIRNAME/first-dir/tfile,v <-- tfile 5264 new revision: 1\.2; previous revision: 1\.1" 5265 cd ../first-dir 5266 echo force a conflict >>tfile 5267 dotest status-init-7 "${testcvs} -q up" \ 5268 "RCS file: ${CVSROOT_DIRNAME}/first-dir/tfile,v 5269 retrieving revision 1\.1 5270 retrieving revision 1\.2 5271 Merging differences between 1\.1 and 1\.2 into tfile 5272 rcsmerge: warning: conflicts during merge 5273 ${SPROG} update: conflicts found in tfile 5274 C tfile" 5275 5276 # Now note our status 5277 dotest status-1 "${testcvs} status tfile" \ 5278 "=================================================================== 5279 File: tfile Status: Unresolved Conflict 5280 5281 Working revision: 1\.2.* 5282 Repository revision: 1\.2 ${CVSROOT_DIRNAME}/first-dir/tfile,v 5283 Commit Identifier: ${commitid} 5284 Sticky Tag: (none) 5285 Sticky Date: (none) 5286 Sticky Options: (none)" 5287 5288 # touch the file, leaving conflict markers in place 5289 # and note our status 5290 touch tfile 5291 dotest status-2 "${testcvs} status tfile" \ 5292 "=================================================================== 5293 File: tfile Status: File had conflicts on merge 5294 5295 Working revision: 1\.2.* 5296 Repository revision: 1\.2 ${CVSROOT_DIRNAME}/first-dir/tfile,v 5297 Commit Identifier: ${commitid} 5298 Sticky Tag: (none) 5299 Sticky Date: (none) 5300 Sticky Options: (none)" 5301 5302 # resolve the conflict 5303 echo resolution >tfile 5304 dotest status-3 "${testcvs} status tfile" \ 5305 "=================================================================== 5306 File: tfile Status: Locally Modified 5307 5308 Working revision: 1\.2.* 5309 Repository revision: 1\.2 ${CVSROOT_DIRNAME}/first-dir/tfile,v 5310 Commit Identifier: ${commitid} 5311 Sticky Tag: (none) 5312 Sticky Date: (none) 5313 Sticky Options: (none)" 5314 5315 # Check that there are no problems just using CVS/Root too. 5316 save_CVSROOT=$CVSROOT 5317 unset CVSROOT 5318 dotest status-3a "${testcvs} status tfile" \ 5319 "=================================================================== 5320 File: tfile Status: Locally Modified 5321 5322 Working revision: 1\.2.* 5323 Repository revision: 1\.2 ${CVSROOT_DIRNAME}/first-dir/tfile,v 5324 Commit Identifier: ${commitid} 5325 Sticky Tag: (none) 5326 Sticky Date: (none) 5327 Sticky Options: (none)" 5328 CVSROOT=$save_CVSROOT 5329 export CVSROOT 5330 5331 # FIXCVS: 5332 # Update is supposed to re-Register() the file when it 5333 # finds resolved conflicts: 5334 dotest status-4 "grep 'Result of merge' CVS/Entries" \ 5335 "/tfile/1\.2/Result of merge${PLUS}[a-zA-Z0-9 :]*//" 5336 5337 cd .. 5338 mkdir fourth-dir 5339 dotest status-init-8 "$testcvs add fourth-dir" \ 5340 "Directory $CVSROOT_DIRNAME/fourth-dir added to the repository" 5341 cd fourth-dir 5342 echo yet another line >t3file 5343 dotest status-init-9 "$testcvs add t3file" \ 5344 "$SPROG add: scheduling file .t3file. for addition 5345 $SPROG add: use .$SPROG commit. to add this file permanently" 5346 dotest status-init-10 "$testcvs -q ci -m add" \ 5347 "$CVSROOT_DIRNAME/fourth-dir/t3file,v <-- t3file 5348 initial revision: 1\.1" 5349 cd ../first-dir 5350 mkdir third-dir 5351 dotest status-init-11 "$testcvs add third-dir" \ 5352 "Directory $CVSROOT_DIRNAME/first-dir/third-dir added to the repository" 5353 cd third-dir 5354 echo another line >t2file 5355 dotest status-init-12 "$testcvs add t2file" \ 5356 "$SPROG add: scheduling file .t2file. for addition 5357 $SPROG add: use .$SPROG commit. to add this file permanently" 5358 dotest status-init-13 "$testcvs -q ci -m add" \ 5359 "$CVSROOT_DIRNAME/first-dir/third-dir/t2file,v <-- t2file 5360 initial revision: 1\.1" 5361 dotest status-5 "$testcvs status ../tfile" \ 5362 "=================================================================== 5363 File: tfile Status: Locally Modified 5364 5365 Working revision: 1\.2.* 5366 Repository revision: 1\.2 $CVSROOT_DIRNAME/first-dir/tfile,v 5367 Commit Identifier: ${commitid} 5368 Sticky Tag: (none) 5369 Sticky Date: (none) 5370 Sticky Options: (none)" 5371 dotest status-6 "$testcvs status ../../fourth-dir/t3file" \ 5372 "=================================================================== 5373 File: t3file Status: Up-to-date 5374 5375 Working revision: 1\.1.* 5376 Repository revision: 1\.1 $CVSROOT_DIRNAME/fourth-dir/t3file,v 5377 Commit Identifier: ${commitid} 5378 Sticky Tag: (none) 5379 Sticky Date: (none) 5380 Sticky Options: (none)" 5381 5382 dokeep 5383 cd ../../.. 5384 rm -rf status 5385 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir \ 5386 $CVSROOT_DIRNAME/fourth-dir 5387 ;; 5388 5389 5390 5391 commit-readonlyfs) 5392 mkdir 1; cd 1 5393 module=x 5394 : > junk 5395 dotest commit-readonlyfs-1 "${testcvs} -Q import -m . $module X Y" '' 5396 if $remote; then 5397 dotest_fail commit-readonlyfs-2r1 "${testcvs} -Q -R co $module" \ 5398 "${CPROG} \[checkout aborted\]: Read-only repository feature unavailable with remote roots (cvsroot = ${CVSROOT_DIRNAME})" 5399 dotest commit-readonlyfs-2r2 "${testcvs} -Q co $module" '' 5400 else 5401 dotest commit-readonlyfs-2 "${testcvs} -Q -R co $module" '' 5402 rm -rf $module 5403 dotest commit-readonlyfs-2r3 "${testcvs} -q -R co $module" \ 5404 "U $module/junk" 5405 rm -rf $module 5406 dotest commit-readonlyfs-2r4 "${testcvs} -R co $module" \ 5407 "${SPROG}: WARNING: Read-only repository access mode selected via \`cvs -R'\. 5408 Using this option to access a repository which some users write to may 5409 cause intermittent sandbox corruption\. 5410 ${SPROG} checkout: Updating $module 5411 U $module/junk" 5412 fi 5413 cd $module 5414 echo test > junk 5415 if $remote; then 5416 dotest_fail commit-readonlyfs-3r "${testcvs} -Q -R ci -m. junk" \ 5417 "${SPROG} \[commit aborted\]: Read-only repository feature unavailable with remote roots (cvsroot = ${CVSROOT_DIRNAME})" 5418 else 5419 dotest_fail commit-readonlyfs-3 "${testcvs} -Q -R ci -m. junk" \ 5420 "${SPROG} commit: write lock failed\. 5421 WARNING: Read-only repository access mode selected via \`cvs -R'\. 5422 Attempting to write to a read-only filesystem is not allowed\. 5423 ${SPROG} \[commit aborted\]: lock failed - giving up" 5424 fi 5425 5426 dokeep 5427 cd ../.. 5428 rm -rf 1 5429 modify_repo rm -rf $CVSROOT_DIRNAME/"$module" 5430 ;; 5431 5432 5433 5434 rdiff) 5435 # Test rdiff 5436 # XXX for now this is just the most essential test... 5437 cd ${TESTDIR} 5438 5439 mkdir testimport 5440 cd testimport 5441 echo '$''Id$' > foo 5442 echo '$''Name$' >> foo 5443 echo '$''Id$' > bar 5444 echo '$''Name$' >> bar 5445 dotest_sort rdiff-1 \ 5446 "${testcvs} import -I ! -m test-import-with-keyword trdiff TRDIFF T1" \ 5447 ' 5448 5449 N trdiff/bar 5450 N trdiff/foo 5451 No conflicts created by this import' 5452 dotest rdiff-2 \ 5453 "${testcvs} co -ko trdiff" \ 5454 "${SPROG} checkout: Updating trdiff 5455 U trdiff/bar 5456 U trdiff/foo" 5457 cd trdiff 5458 echo something >> foo 5459 dotest rdiff-3 \ 5460 "${testcvs} ci -m added-something foo" \ 5461 "${CVSROOT_DIRNAME}/trdiff/foo,v <-- foo 5462 new revision: 1\.2; previous revision: 1\.1" 5463 echo '#ident "@(#)trdiff:$''Name$:$''Id$"' > new 5464 echo "new file" >> new 5465 dotest rdiff-4 \ 5466 "${testcvs} add -m new-file-description new" \ 5467 "${SPROG} add: scheduling file \`new' for addition 5468 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 5469 dotest rdiff-5 \ 5470 "${testcvs} commit -m added-new-file new" \ 5471 "${CVSROOT_DIRNAME}/trdiff/new,v <-- new 5472 initial revision: 1\.1" 5473 dotest rdiff-6 \ 5474 "${testcvs} tag local-v0" \ 5475 "${SPROG} tag: Tagging . 5476 T bar 5477 T foo 5478 T new" 5479 dotest rdiff-7 \ 5480 "${testcvs} status -v foo" \ 5481 "=================================================================== 5482 File: foo Status: Up-to-date 5483 5484 Working revision: 1\.2.* 5485 Repository revision: 1\.2 ${CVSROOT_DIRNAME}/trdiff/foo,v 5486 Commit Identifier: ${commitid} 5487 Sticky Tag: (none) 5488 Sticky Date: (none) 5489 Sticky Options: -ko 5490 5491 Existing Tags: 5492 local-v0 (revision: 1\.2) 5493 T1 (revision: 1\.1\.1\.1) 5494 TRDIFF (branch: 1\.1\.1)" 5495 5496 cd .. 5497 rm -r trdiff 5498 5499 dotest rdiff-8 \ 5500 "${testcvs} rdiff -r T1 -r local-v0 trdiff" \ 5501 "${SPROG}"' rdiff: Diffing trdiff 5502 Index: trdiff/foo 5503 diff -c trdiff/foo:1\.1\.1\.1 trdiff/foo:1\.2 5504 \*\*\* trdiff/foo:1\.1\.1\.1 '"${DATE}"' 5505 --- trdiff/foo '"${DATE}"' 5506 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 5507 \*\*\* 1,2 \*\*\*\* 5508 ! \$''Id: foo,v 1\.1\.1\.1 [0-9/]* [0-9:]* '"${username}"' Exp \$ 5509 ! \$''Name: T1 \$ 5510 --- 1,3 ---- 5511 ! \$''Id: foo,v 1\.2 [0-9/]* [0-9:]* '"${username}"' Exp \$ 5512 ! \$''Name: local-v0 \$ 5513 ! something 5514 Index: trdiff/new 5515 diff -c /dev/null trdiff/new:1\.1 5516 \*\*\* /dev/null '"${DATE}"' 5517 --- trdiff/new '"${DATE}"' 5518 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 5519 \*\*\* 0 \*\*\*\* 5520 --- 1,2 ---- 5521 '"${PLUS}"' #ident "@(#)trdiff:\$''Name: local-v0 \$:\$''Id: new,v 1\.1 [0-9/]* [0-9:]* '"${username}"' Exp \$" 5522 '"${PLUS}"' new file' 5523 5524 dokeep 5525 cd .. 5526 rm -r testimport 5527 modify_repo rm -rf $CVSROOT_DIRNAME/trdiff 5528 ;; 5529 5530 5531 5532 rdiff-short) 5533 # Test that the short patch behaves as expected 5534 # 1) Added file. 5535 # 2) Removed file. 5536 # 3) Different revision number with no difference. 5537 # 4) Different revision number with changes. 5538 # 5) Against trunk. 5539 # 6) Same revision number (no difference). 5540 mkdir rdiff-short; cd rdiff-short 5541 mkdir abc 5542 dotest rdiff-short-init-1 \ 5543 "${testcvs} -q import -I ! -m initial-import abc vendor initial" \ 5544 ' 5545 No conflicts created by this import' 5546 5547 dotest rdiff-short-init-2 "${testcvs} -q get abc" '' 5548 cd abc 5549 echo "abc" >file1.txt 5550 dotest rdiff-short-init-3 "${testcvs} add file1.txt" \ 5551 "${SPROG} add: scheduling file .file1\.txt' for addition 5552 ${SPROG} add: use \`${SPROG} commit' to add this file permanently" 5553 dotest rdiff-short-init-4 \ 5554 "${testcvs} commit -madd-file1 file1.txt" \ 5555 "${CVSROOT_DIRNAME}/abc/file1\.txt,v <-- file1\.txt 5556 initial revision: 1\.1" 5557 echo def >>file1.txt 5558 dotest rdiff-short-init-5 \ 5559 "${testcvs} commit -mchange-file1 file1.txt" \ 5560 "${CVSROOT_DIRNAME}/abc/file1\.txt,v <-- file1\.txt 5561 new revision: 1\.2; previous revision: 1\.1" 5562 echo "abc" >file1.txt 5563 dotest rdiff-short-init-6 \ 5564 "${testcvs} commit -mrestore-file1-rev1 file1.txt" \ 5565 "${CVSROOT_DIRNAME}/abc/file1\.txt,v <-- file1\.txt 5566 new revision: 1\.3; previous revision: 1\.2" 5567 dotest rdiff-short-init-7 \ 5568 "${testcvs} tag -r 1.1 tag1 file1.txt" \ 5569 "T file1\.txt" 5570 dotest rdiff-short-init-8 \ 5571 "${testcvs} tag -r 1.2 tag2 file1.txt" \ 5572 "T file1\.txt" 5573 dotest rdiff-short-init-9 \ 5574 "${testcvs} tag -r 1.3 tag3 file1.txt" \ 5575 "T file1\.txt" 5576 echo "abc" >file2.txt 5577 dotest rdiff-short-init-10 \ 5578 "${testcvs} add file2.txt" \ 5579 "${SPROG} add: scheduling file .file2\.txt' for addition 5580 ${SPROG} add: use \`${SPROG} commit' to add this file permanently" 5581 dotest rdiff-add-remove-nodiff-init-11 \ 5582 "${testcvs} commit -madd-file2 file2.txt" \ 5583 "${CVSROOT_DIRNAME}/abc/file2\.txt,v <-- file2\.txt 5584 initial revision: 1\.1" 5585 dotest rdiff-short-init-12 \ 5586 "${testcvs} tag -r 1.1 tag4 file2.txt" \ 5587 "T file2\.txt" 5588 dotest rdiff-short-init-13 \ 5589 "${testcvs} tag -r 1.1 tag5 file2.txt" \ 5590 "T file2\.txt" 5591 cd ../.. 5592 rm -fr rdiff-short 5593 5594 # 3) Different revision number with no difference. 5595 dotest rdiff-short-no-real-change \ 5596 "${testcvs} -q rdiff -s -r tag1 -r tag3 abc" 5597 5598 # 4) Different revision number with changes. 5599 dotest rdiff-short-real-change \ 5600 "${testcvs} -q rdiff -s -r tag1 -r tag2 abc" \ 5601 'File abc/file1.txt changed from revision 1\.1 to 1\.2' 5602 5603 # 1) Added file. 5604 # 2) Removed file. 5605 dotest_sort rdiff-short-remove-add \ 5606 "${testcvs} -q rdiff -s -r tag2 -r tag4 abc" \ 5607 'File abc/file1\.txt is removed; tag2 revision 1\.2 5608 File abc/file2\.txt is new; tag4 revision 1\.1' 5609 5610 # 6) Same revision number (no difference). 5611 dotest rdiff-short-no-change \ 5612 "${testcvs} -q rdiff -s -r tag4 -r tag5 abc" 5613 5614 # 5) Against trunk. 5615 # Check that the messages change when we diff against the trunk 5616 # rather than a tag or date. 5617 dotest rdiff-short-against-trunk-1 \ 5618 "${testcvs} -q rdiff -s -rtag4 abc" \ 5619 "File abc/file1\.txt is new; current revision 1\.3" 5620 5621 dotest rdiff-short-against-trunk-2 \ 5622 "${testcvs} -q rdiff -s -rtag2 abc" \ 5623 "File abc/file1\.txt changed from revision 1\.2 to 1\.3 5624 File abc/file2\.txt is new; current revision 1\.1" 5625 5626 modify_repo rm -rf $CVSROOT_DIRNAME/abc 5627 ;; 5628 5629 5630 5631 rdiff2) 5632 # Test for the segv problem reported by James Cribb 5633 # Somewhere to work 5634 mkdir rdiff2; cd rdiff2 5635 # Create a module "m" with files "foo" and "d/bar" 5636 mkdir m; cd m 5637 echo foo >foo 5638 mkdir d 5639 echo bar >d/bar 5640 dotest_sort rdiff2-1 \ 5641 "${testcvs} -q import -I ! -m initial-import m vendor initial" \ 5642 ' 5643 5644 N m/d/bar 5645 N m/foo 5646 No conflicts created by this import' 5647 5648 cd .. 5649 rm -r m 5650 5651 # Remove "foo" 5652 dotest rdiff2-2 "${testcvs} get m" \ 5653 "${SPROG} checkout: Updating m 5654 U m/foo 5655 ${SPROG} checkout: Updating m/d 5656 U m/d/bar" 5657 cd m 5658 dotest rdiff2-3 "${testcvs} rm -f foo" \ 5659 "${SPROG} remove: scheduling .foo. for removal 5660 ${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 5661 5662 dotest rdiff2-4 "${testcvs} commit -m Removed foo" \ 5663 "${CVSROOT_DIRNAME}/m/foo,v <-- foo 5664 new revision: delete; previous revision: 1\.1\.1\.1" 5665 5666 # Modify "d/bar" 5667 echo foo >d/bar 5668 dotest rdiff2-5 "${testcvs} commit -m Changed d/bar" \ 5669 "${CVSROOT_DIRNAME}/m/d/bar,v <-- d/bar 5670 new revision: 1\.2; previous revision: 1\.1" 5671 5672 # Crash before showing d/bar diffs 5673 dotest_fail rdiff2-6 "${testcvs} rdiff -t m" \ 5674 "${SPROG} rdiff: Diffing m 5675 ${SPROG} rdiff: Diffing m/d 5676 Index: m/d/bar 5677 diff -c m/d/bar:1\.1\.1\.1 m/d/bar:1\.2 5678 \*\*\* m/d/bar:1\.1\.1\.1 ${DATE} 5679 --- m/d/bar ${DATE} 5680 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 5681 \*\*\* 1 \*\*\*\* 5682 ! bar 5683 --- 1 ---- 5684 ! foo" 5685 5686 dokeep 5687 cd ../.. 5688 rm -rf rdiff2 5689 modify_repo rm -rf $CVSROOT_DIRNAME/m 5690 ;; 5691 5692 5693 5694 diff) 5695 # Various tests specific to the "cvs diff" command. 5696 # Related tests: 5697 # death2: -N 5698 # rcslib: cvs diff and $Name. 5699 # rdiff: cvs rdiff. 5700 # diffmerge*: nuts and bolts (stuff within diff library) 5701 mkdir 1; cd 1 5702 dotest diff-1 "$testcvs -q co -l ." 5703 mkdir first-dir 5704 dotest diff-2 "$testcvs add first-dir" \ 5705 "Directory $CVSROOT_DIRNAME/first-dir added to the repository" 5706 cd first-dir 5707 5708 # diff is anomalous. Most CVS commands print the "nothing 5709 # known" message (or worse yet, no message in some cases) but 5710 # diff says "I know nothing". Shrug. 5711 dotest_fail diff-3 "${testcvs} diff xyzpdq" \ 5712 "${SPROG} diff: I know nothing about xyzpdq" 5713 touch abc 5714 dotest diff-4 "${testcvs} add abc" \ 5715 "${SPROG} add: scheduling file .abc. for addition 5716 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 5717 dotest diff-5 "${testcvs} -q ci -mtest" \ 5718 "$CVSROOT_DIRNAME/first-dir/abc,v <-- abc 5719 initial revision: 1\.1" 5720 echo "extern int gethostname ();" >abc 5721 dotest diff-6 "${testcvs} -q ci -mtest" \ 5722 "$CVSROOT_DIRNAME/first-dir/abc,v <-- abc 5723 new revision: 1\.2; previous revision: 1\.1" 5724 echo "#include <winsock.h>" >abc 5725 # check the behavior of the --ifdef=MACRO option 5726 dotest_fail diff-7 "${testcvs} -q diff --ifdef=HAVE_WINSOCK_H" \ 5727 "Index: abc 5728 =================================================================== 5729 RCS file: ${CVSROOT_DIRNAME}/first-dir/abc,v 5730 retrieving revision 1\.2 5731 diff --ifdef HAVE_WINSOCK_H -r1\.2 abc 5732 #ifndef HAVE_WINSOCK_H 5733 extern int gethostname (); 5734 #else /\* HAVE_WINSOCK_H \*/ 5735 #include <winsock\.h> 5736 #endif /\* HAVE_WINSOCK_H \*/" 5737 5738 dokeep 5739 cd ../.. 5740 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 5741 rm -r 1 5742 ;; 5743 5744 5745 5746 diffnl) 5747 # Test handling of 'cvs diff' of files without newlines 5748 mkdir 1; cd 1 5749 dotest diffnl-000 "${testcvs} -q co -l ." '' 5750 mkdir first-dir 5751 dotest diffnl-001 "${testcvs} add first-dir" \ 5752 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 5753 cd first-dir 5754 5755 ${AWK} 'BEGIN {printf("one\ntwo\nthree\nfour\nfive\nsix")}' </dev/null >abc 5756 dotest diffnl-002 "${testcvs} add abc" \ 5757 "${SPROG} add: scheduling file .abc. for addition 5758 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 5759 dotest diffnl-003 "${testcvs} -q ci -mtest" \ 5760 "$CVSROOT_DIRNAME/first-dir/abc,v <-- abc 5761 initial revision: 1\.1" 5762 5763 # change to line near EOF 5764 ${AWK} 'BEGIN {printf("one\ntwo\nthree\nfour\nsix")}' </dev/null >abc 5765 dotest_fail diffnl-100 "${testcvs} diff abc" \ 5766 "Index: abc 5767 =================================================================== 5768 RCS file: ${CVSROOT_DIRNAME}/first-dir/abc,v 5769 retrieving revision 1\.1 5770 diff -r1\.1 abc 5771 5d4 5772 < five" 5773 dotest_fail diffnl-101 "${testcvs} diff -u abc" \ 5774 "Index: abc 5775 =================================================================== 5776 RCS file: ${CVSROOT_DIRNAME}/first-dir/abc,v 5777 retrieving revision 1\.1 5778 diff -u -r1\.1 abc 5779 --- abc ${RFCDATE} 1\.1 5780 +++ abc ${RFCDATE} 5781 @@ -2,5 +2,4 @@ 5782 two 5783 three 5784 four 5785 -five 5786 six 5787 \\\\ No newline at end of file" 5788 dotest diffnl-102 "${testcvs} -q ci -mtest abc" \ 5789 "$CVSROOT_DIRNAME/first-dir/abc,v <-- abc 5790 new revision: 1\.2; previous revision: 1\.1" 5791 5792 # Change to last line 5793 ${AWK} 'BEGIN {printf("one\ntwo\nthree\nfour\nseven")}' </dev/null >abc 5794 dotest_fail diffnl-200 "${testcvs} diff abc" \ 5795 "Index: abc 5796 =================================================================== 5797 RCS file: ${CVSROOT_DIRNAME}/first-dir/abc,v 5798 retrieving revision 1\.2 5799 diff -r1\.2 abc 5800 5c5 5801 < six 5802 \\\\ No newline at end of file 5803 --- 5804 > seven 5805 \\\\ No newline at end of file" 5806 dotest_fail diffnl-201 "${testcvs} diff -u abc" \ 5807 "Index: abc 5808 =================================================================== 5809 RCS file: ${CVSROOT_DIRNAME}/first-dir/abc,v 5810 retrieving revision 1\.2 5811 diff -u -r1\.2 abc 5812 --- abc ${RFCDATE} 1\.2 5813 +++ abc ${RFCDATE} 5814 @@ -2,4 +2,4 @@ 5815 two 5816 three 5817 four 5818 -six 5819 \\\\ No newline at end of file 5820 +seven 5821 \\\\ No newline at end of file" 5822 dotest diffnl-202 "${testcvs} ci -mtest abc" \ 5823 "${CVSROOT_DIRNAME}/first-dir/abc,v <-- abc 5824 new revision: 1\.3; previous revision: 1\.2" 5825 5826 # Addition of newline 5827 echo "one 5828 two 5829 three 5830 four 5831 seven" > abc 5832 dotest_fail diffnl-300 "${testcvs} diff abc" \ 5833 "Index: abc 5834 =================================================================== 5835 RCS file: ${CVSROOT_DIRNAME}/first-dir/abc,v 5836 retrieving revision 1\.3 5837 diff -r1\.3 abc 5838 5c5 5839 < seven 5840 \\\\ No newline at end of file 5841 --- 5842 > seven" 5843 dotest_fail diffnl-301 "${testcvs} diff -u abc" \ 5844 "Index: abc 5845 =================================================================== 5846 RCS file: ${CVSROOT_DIRNAME}/first-dir/abc,v 5847 retrieving revision 1\.3 5848 diff -u -r1\.3 abc 5849 --- abc ${RFCDATE} 1\.3 5850 +++ abc ${RFCDATE} 5851 @@ -2,4 +2,4 @@ 5852 two 5853 three 5854 four 5855 -seven 5856 \\\\ No newline at end of file 5857 +seven" 5858 dotest diffnl-302 "${testcvs} ci -mtest abc" \ 5859 "${CVSROOT_DIRNAME}/first-dir/abc,v <-- abc 5860 new revision: 1\.4; previous revision: 1\.3" 5861 5862 # Removal of newline 5863 ${AWK} 'BEGIN {printf("one\ntwo\nthree\nfour\nseven")}' </dev/null >abc 5864 dotest_fail diffnl-400 "${testcvs} diff abc" \ 5865 "Index: abc 5866 =================================================================== 5867 RCS file: ${CVSROOT_DIRNAME}/first-dir/abc,v 5868 retrieving revision 1\.4 5869 diff -r1\.4 abc 5870 5c5 5871 < seven 5872 --- 5873 > seven 5874 \\\\ No newline at end of file" 5875 dotest_fail diffnl-401 "${testcvs} diff -u abc" \ 5876 "Index: abc 5877 =================================================================== 5878 RCS file: ${CVSROOT_DIRNAME}/first-dir/abc,v 5879 retrieving revision 1\.4 5880 diff -u -r1\.4 abc 5881 --- abc ${RFCDATE} 1\.4 5882 +++ abc ${RFCDATE} 5883 @@ -2,4 +2,4 @@ 5884 two 5885 three 5886 four 5887 -seven 5888 +seven 5889 \\\\ No newline at end of file" 5890 5891 dokeep 5892 cd ../.. 5893 rm -r 1 5894 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 5895 ;; 5896 5897 5898 5899 death) 5900 # next dive. test death support. 5901 5902 # NOTE: this section has reached the size and 5903 # complexity where it is getting to be a good idea to 5904 # add new death support tests to a new section rather 5905 # than continuing to piggyback them onto the tests here. 5906 5907 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 5908 dotest death-init-1 "$testcvs -Q co first-dir" 5909 5910 cd first-dir 5911 5912 # Create a directory with only dead files, to make sure CVS 5913 # doesn't get confused by it. 5914 mkdir subdir 5915 dotest 65a0 "${testcvs} add subdir" \ 5916 "Directory ${CVSROOT_DIRNAME}/first-dir/subdir added to the repository" 5917 cd subdir 5918 echo file in subdir >sfile 5919 dotest 65a1 "${testcvs} add sfile" \ 5920 "${SPROG}"' add: scheduling file `sfile'\'' for addition 5921 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 5922 dotest 65a2 "${testcvs} -q ci -m add-it" \ 5923 "$CVSROOT_DIRNAME/first-dir/subdir/sfile,v <-- sfile 5924 initial revision: 1\.1" 5925 rm sfile 5926 dotest 65a3 "${testcvs} rm sfile" \ 5927 "${SPROG}"' remove: scheduling `sfile'\'' for removal 5928 '"${SPROG}"' remove: use .'"${SPROG}"' commit. to remove this file permanently' 5929 dotest 65a4 "${testcvs} -q ci -m remove-it" \ 5930 "$CVSROOT_DIRNAME/first-dir/subdir/sfile,v <-- sfile 5931 new revision: delete; previous revision: 1\.1" 5932 cd .. 5933 dotest 65a5 "${testcvs} -q update -P" '' 5934 dotest_fail 65a6 "test -d subdir" '' 5935 5936 # add a file. 5937 touch file1 5938 if ${CVS} add file1 2>> ${LOGFILE}; then 5939 pass 66 5940 else 5941 fail 66 5942 fi 5943 5944 # commit 5945 if ${CVS} ci -m test >> ${LOGFILE} 2>&1; then 5946 pass 67 5947 else 5948 fail 67 5949 fi 5950 5951 # remove 5952 rm file1 5953 if ${CVS} rm file1 2>> ${LOGFILE}; then 5954 pass 68 5955 else 5956 fail 68 5957 fi 5958 5959 # commit 5960 if ${CVS} ci -m test >>${LOGFILE} ; then 5961 pass 69 5962 else 5963 fail 69 5964 fi 5965 5966 dotest_fail 69a0 "test -f file1" '' 5967 # get the old contents of file1 back 5968 if ${testcvs} update -p -r 1.1 file1 >file1 2>>${LOGFILE}; then 5969 pass 69a1 5970 else 5971 fail 69a1 5972 fi 5973 dotest 69a2 "cat file1" '' 5974 5975 # create second file 5976 touch file2 5977 if ${CVS} add file1 file2 2>> ${LOGFILE}; then 5978 pass 70 5979 else 5980 fail 70 5981 fi 5982 5983 # commit 5984 if ${CVS} ci -m test >> ${LOGFILE} 2>&1; then 5985 pass 71 5986 else 5987 fail 71 5988 fi 5989 5990 # log 5991 if ${CVS} log file1 >> ${LOGFILE}; then 5992 pass 72 5993 else 5994 fail 72 5995 fi 5996 5997 # file4 will be dead at the time of branching and stay dead. 5998 echo file4 > file4 5999 dotest death-file4-add "${testcvs} add file4" \ 6000 "${SPROG}"' add: scheduling file `file4'\'' for addition 6001 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 6002 dotest death-file4-ciadd "${testcvs} -q ci -m add file4" \ 6003 "$CVSROOT_DIRNAME/first-dir/file4,v <-- file4 6004 initial revision: 1\.1" 6005 rm file4 6006 dotest death-file4-rm "${testcvs} remove file4" \ 6007 "${SPROG}"' remove: scheduling `file4'\'' for removal 6008 '"${SPROG}"' remove: use .'"${SPROG}"' commit. to remove this file permanently' 6009 dotest death-file4-cirm "${testcvs} -q ci -m remove file4" \ 6010 "$CVSROOT_DIRNAME/first-dir/file4,v <-- file4 6011 new revision: delete; previous revision: 1\.1" 6012 6013 # Tag the branchpoint. 6014 dotest death-72a "${testcvs} -q tag bp_branch1" 'T file1 6015 T file2' 6016 6017 # branch1 6018 if ${CVS} tag -b branch1 ; then 6019 pass 73 6020 else 6021 fail 73 6022 fi 6023 6024 # and move to the branch. 6025 if ${CVS} update -r branch1 ; then 6026 pass 74 6027 else 6028 fail 74 6029 fi 6030 6031 dotest_fail death-file4-3 "test -f file4" '' 6032 6033 # add a file in the branch 6034 echo line1 from branch1 >> file3 6035 if ${CVS} add file3 2>> ${LOGFILE}; then 6036 pass 75 6037 else 6038 fail 75 6039 fi 6040 6041 # commit 6042 if ${CVS} ci -m test >> ${LOGFILE} 2>&1; then 6043 pass 76 6044 else 6045 fail 76 6046 fi 6047 6048 dotest death-76a0 \ 6049 "${testcvs} -q rdiff -r bp_branch1 -r branch1 first-dir" \ 6050 "Index: first-dir/file3 6051 diff -c /dev/null first-dir/file3:1\.1\.2\.1 6052 \*\*\* /dev/null ${DATE} 6053 --- first-dir/file3 ${DATE} 6054 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 6055 \*\*\* 0 \*\*\*\* 6056 --- 1 ---- 6057 ${PLUS} line1 from branch1" 6058 dotest death-76a1 \ 6059 "${testcvs} -q rdiff -r branch1 -r bp_branch1 first-dir" \ 6060 "Index: first-dir/file3 6061 diff -c first-dir/file3:1\.1\.2\.1 first-dir/file3:removed 6062 \*\*\* first-dir/file3:1\.1\.2\.1 ${DATE} 6063 --- first-dir/file3 ${DATE} 6064 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 6065 \*\*\* 1 \*\*\*\* 6066 - line1 from branch1 6067 --- 0 ----" 6068 6069 # remove 6070 rm file3 6071 if ${CVS} rm file3 2>> ${LOGFILE}; then 6072 pass 77 6073 else 6074 fail 77 6075 fi 6076 6077 # commit 6078 if ${CVS} ci -m test >>${LOGFILE} ; then 6079 pass 78 6080 else 6081 fail 78 6082 fi 6083 6084 # add again 6085 echo line1 from branch1 >> file3 6086 if ${CVS} add file3 2>> ${LOGFILE}; then 6087 pass 79 6088 else 6089 fail 79 6090 fi 6091 6092 # commit 6093 if ${CVS} ci -m test >> ${LOGFILE} 2>&1; then 6094 pass 80 6095 else 6096 fail 80 6097 fi 6098 6099 # change the first file 6100 echo line2 from branch1 >> file1 6101 6102 # commit 6103 if ${CVS} ci -m test >> ${LOGFILE} 2>&1; then 6104 pass 81 6105 else 6106 fail 81 6107 fi 6108 6109 # remove the second 6110 rm file2 6111 if ${CVS} rm file2 2>> ${LOGFILE}; then 6112 pass 82 6113 else 6114 fail 82 6115 fi 6116 6117 # commit 6118 if ${CVS} ci -m test >>${LOGFILE}; then 6119 pass 83 6120 else 6121 fail 83 6122 fi 6123 6124 # back to the trunk. 6125 if ${CVS} update -A 2>> ${LOGFILE}; then 6126 pass 84 6127 else 6128 fail 84 6129 fi 6130 6131 dotest_fail death-file4-4 "test -f file4" '' 6132 6133 if test -f file3 ; then 6134 fail 85 6135 else 6136 pass 85 6137 fi 6138 6139 # join 6140 dotest death-86 "$testcvs -q update -j branch1" \ 6141 "RCS file: $CVSROOT_DIRNAME/first-dir/file1,v 6142 retrieving revision 1\.3 6143 retrieving revision 1\.3\.2\.1 6144 Merging differences between 1\.3 and 1\.3\.2\.1 into file1 6145 ${SPROG} update: scheduling \`file2' for removal 6146 U file3" 6147 6148 dotest_fail death-file4-5 "test -f file4" '' 6149 6150 if test -f file3 ; then 6151 pass 87 6152 else 6153 fail 87 6154 fi 6155 6156 # Make sure that we joined the correct change to file1 6157 if echo line2 from branch1 | cmp - file1 >/dev/null; then 6158 pass 87a 6159 else 6160 fail 87a 6161 fi 6162 6163 # update 6164 if ${CVS} update ; then 6165 pass 88 6166 else 6167 fail 88 6168 fi 6169 6170 # commit 6171 dotest 89 "${testcvs} -q ci -m test" \ 6172 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 6173 new revision: 1\.4; previous revision: 1\.3 6174 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 6175 new revision: delete; previous revision: 1\.1 6176 $CVSROOT_DIRNAME/first-dir/file3,v <-- file3 6177 new revision: 1\.2; previous revision: 1\.1" 6178 cd .. 6179 mkdir 2 6180 cd 2 6181 dotest 89a "${testcvs} -q co first-dir" 'U first-dir/file1 6182 U first-dir/file3' 6183 cd .. 6184 rm -r 2 6185 cd first-dir 6186 6187 # remove first file. 6188 rm file1 6189 if ${CVS} rm file1 2>> ${LOGFILE}; then 6190 pass 90 6191 else 6192 fail 90 6193 fi 6194 6195 # commit 6196 if ${CVS} ci -m test >>${LOGFILE}; then 6197 pass 91 6198 else 6199 fail 91 6200 fi 6201 6202 if test -f file1 ; then 6203 fail 92 6204 else 6205 pass 92 6206 fi 6207 6208 # typo; try to get to the branch and fail 6209 dotest_fail 92.1a "$testcvs update -r brnach1" \ 6210 "$SPROG \[update aborted\]: no such tag \`brnach1'" 6211 # Make sure we are still on the trunk 6212 if test -f file1 ; then 6213 fail 92.1b 6214 else 6215 pass 92.1b 6216 fi 6217 if test -f file3 ; then 6218 pass 92.1c 6219 else 6220 fail 92.1c 6221 fi 6222 6223 # back to branch1 6224 if ${CVS} update -r branch1 2>> ${LOGFILE}; then 6225 pass 93 6226 else 6227 fail 93 6228 fi 6229 6230 dotest_fail death-file4-6 "test -f file4" '' 6231 6232 if test -f file1 ; then 6233 pass 94 6234 else 6235 fail 94 6236 fi 6237 6238 # and join 6239 dotest 95 "${testcvs} -q update -j HEAD" \ 6240 "${SPROG}"' update: file file1 has been modified, but has been removed in revision HEAD 6241 '"${SPROG}"' update: file file3 exists, but has been added in revision HEAD' 6242 6243 dotest_fail death-file4-7 "test -f file4" '' 6244 6245 # file2 should not have been recreated. It was 6246 # deleted on the branch, and has not been modified on 6247 # the trunk. That means that there have been no 6248 # changes between the greatest common ancestor (the 6249 # trunk version) and HEAD. 6250 dotest_fail death-file2-1 "test -f file2" '' 6251 6252 dokeep 6253 cd .. 6254 rm -r first-dir 6255 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 6256 ;; 6257 6258 6259 6260 death2) 6261 # More tests of death support. 6262 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 6263 dotest death2-1 "$testcvs -q co first-dir" 6264 6265 cd first-dir 6266 6267 # Add two files on the trunk. 6268 echo "first revision" > file1 6269 echo "file4 first revision" > file4 6270 dotest death2-2 "${testcvs} add file1 file4" \ 6271 "${SPROG}"' add: scheduling file `file1'\'' for addition 6272 '"${SPROG}"' add: scheduling file `file4'\'' for addition 6273 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add these files permanently' 6274 6275 dotest death2-3 "${testcvs} -q commit -m add" \ 6276 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 6277 initial revision: 1\.1 6278 $CVSROOT_DIRNAME/first-dir/file4,v <-- file4 6279 initial revision: 1\.1" 6280 6281 # Make a branch and a non-branch tag. 6282 dotest death2-4 "${testcvs} -q tag -b branch" \ 6283 'T file1 6284 T file4' 6285 dotest death2-5 "${testcvs} -q tag tag" \ 6286 'T file1 6287 T file4' 6288 6289 # Switch over to the branch. 6290 dotest death2-6 "${testcvs} -q update -r branch" '' 6291 6292 # Delete the file on the branch. 6293 rm file1 6294 dotest death2-7 "${testcvs} rm file1" \ 6295 "${SPROG} remove: scheduling .file1. for removal 6296 ${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 6297 6298 # Test diff of the removed file before it is committed. 6299 dotest_fail death2-diff-1 "${testcvs} -q diff file1" \ 6300 "${SPROG} diff: file1 was removed, no comparison available" 6301 6302 dotest_fail death2-diff-2 "${testcvs} -q diff -N -c file1" \ 6303 "Index: file1 6304 =================================================================== 6305 RCS file: file1 6306 diff -N file1 6307 \*\*\* file1 ${RFCDATE} [0-9.]* 6308 --- /dev/null ${RFCDATE_EPOCH} 6309 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 6310 \*\*\* 1 \*\*\*\* 6311 - first revision 6312 --- 0 ----" 6313 6314 dotest death2-8 "${testcvs} -q ci -m removed" \ 6315 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 6316 new revision: delete; previous revision: 1\.1" 6317 6318 # Test diff of a dead file. 6319 dotest_fail death2-diff-3 \ 6320 "${testcvs} -q diff -r1.1 -rbranch -c file1" \ 6321 "${SPROG} diff: Tag branch refers to a dead (removed) revision in file .file1.\. 6322 ${SPROG} diff: No comparison available\. Pass .-N. to .${SPROG} diff.${QUESTION}" 6323 # and in reverse 6324 dotest_fail death2-diff-3a \ 6325 "${testcvs} -q diff -rbranch -r1.1 -c file1" \ 6326 "${SPROG} diff: Tag branch refers to a dead (removed) revision in file .file1.\. 6327 ${SPROG} diff: No comparison available\. Pass .-N. to .${SPROG} diff.${QUESTION}" 6328 6329 dotest_fail death2-diff-4 \ 6330 "${testcvs} -q diff -r1.1 -rbranch -N -c file1" \ 6331 "Index: file1 6332 =================================================================== 6333 RCS file: file1 6334 diff -N file1 6335 \*\*\* file1 ${RFCDATE} [0-9.]* 6336 --- /dev/null ${RFCDATE_EPOCH} 6337 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 6338 \*\*\* 1 \*\*\*\* 6339 - first revision 6340 --- 0 ----" 6341 # and in reverse 6342 dotest_fail death2-diff-4a \ 6343 "${testcvs} -q diff -rbranch -r1.1 -N -c file1" \ 6344 "Index: file1 6345 =================================================================== 6346 RCS file: file1 6347 diff -N file1 6348 \*\*\* /dev/null ${RFCDATE_EPOCH} 6349 --- file1 ${RFCDATE} [0-9.]* 6350 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 6351 \*\*\* 0 \*\*\*\* 6352 --- 1 ---- 6353 + first revision" 6354 6355 6356 dotest_fail death2-diff-5 "${testcvs} -q diff -rtag -c ." \ 6357 "${SPROG} diff: file1 no longer exists, no comparison available" 6358 6359 dotest_fail death2-diff-6 "${testcvs} -q diff -rtag -N -c ." \ 6360 "Index: file1 6361 =================================================================== 6362 RCS file: file1 6363 diff -N file1 6364 \*\*\* file1 [-a-zA-Z0-9: ]* [0-9.]* 6365 --- /dev/null ${RFCDATE_EPOCH} 6366 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 6367 \*\*\* 1 \*\*\*\* 6368 - first revision 6369 --- 0 ----" 6370 6371 # Test rdiff of a dead file. 6372 dotest death2-rdiff-1 \ 6373 "${testcvs} -q rtag -rbranch rdiff-tag first-dir" '' 6374 6375 dotest death2-rdiff-2 "${testcvs} -q rdiff -rtag -rbranch first-dir" \ 6376 "Index: first-dir/file1 6377 diff -c first-dir/file1:1\.1 first-dir/file1:removed 6378 \*\*\* first-dir/file1:1\.1 [a-zA-Z0-9: ]* 6379 --- first-dir/file1 [a-zA-Z0-9: ]* 6380 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 6381 \*\*\* 1 \*\*\*\* 6382 - first revision 6383 --- 0 ----" 6384 6385 # Readd the file to the branch. 6386 echo "second revision" > file1 6387 dotest death2-9 "${testcvs} add file1" \ 6388 "${SPROG} add: Re-adding file \`file1' on branch \`branch' after dead revision 1\.1\.2\.1\. 6389 ${SPROG} add: use \`${SPROG} commit' to add this file permanently" 6390 6391 # Test diff of the added file before it is committed. 6392 dotest_fail death2-diff-7 "${testcvs} -q diff file1" \ 6393 "${SPROG} diff: file1 is a new entry, no comparison available" 6394 6395 dotest_fail death2-diff-8 "${testcvs} -q diff -N -c file1" \ 6396 "Index: file1 6397 =================================================================== 6398 RCS file: file1 6399 diff -N file1 6400 \*\*\* /dev/null ${RFCDATE_EPOCH} 6401 --- file1 ${RFCDATE} 6402 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 6403 \*\*\* 0 \*\*\*\* 6404 --- 1 ---- 6405 ${PLUS} second revision" 6406 6407 dotest death2-10 "${testcvs} -q commit -m add" \ 6408 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 6409 new revision: 1\.1\.2\.2; previous revision: 1\.1\.2\.1" 6410 6411 # Delete file4 from the branch 6412 dotest death2-10a "${testcvs} rm -f file4" \ 6413 "${SPROG} remove: scheduling .file4. for removal 6414 ${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 6415 dotest death2-10b "${testcvs} -q ci -m removed" \ 6416 "$CVSROOT_DIRNAME/first-dir/file4,v <-- file4 6417 new revision: delete; previous revision: 1\.1" 6418 6419 # Back to the trunk. 6420 dotest death2-11 "${testcvs} -q update -A" \ 6421 "[UP] file1 6422 U file4" 6423 6424 # Add another file on the trunk. 6425 echo "first revision" > file2 6426 dotest death2-12 "${testcvs} add file2" \ 6427 "${SPROG}"' add: scheduling file `file2'\'' for addition 6428 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 6429 dotest death2-13 "${testcvs} -q commit -m add" \ 6430 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 6431 initial revision: 1\.1" 6432 6433 # Modify file4 on the trunk. 6434 echo "new file4 revision" > file4 6435 dotest death2-13a "${testcvs} -q commit -m mod" \ 6436 "$CVSROOT_DIRNAME/first-dir/file4,v <-- file4 6437 new revision: 1\.2; previous revision: 1\.1" 6438 6439 # Back to the branch. 6440 # The ``no longer in the repository'' message doesn't really 6441 # look right to me, but that's what CVS currently prints for 6442 # this case. 6443 dotest death2-14 "${testcvs} -q update -r branch" \ 6444 "[UP] file1 6445 ${SPROG} update: \`file2' is no longer in the repository 6446 ${SPROG} update: \`file4' is no longer in the repository" 6447 6448 # Add a file on the branch with the same name. 6449 echo "branch revision" > file2 6450 dotest death2-15 "${testcvs} add file2" \ 6451 "${SPROG}"' add: scheduling file `file2'\'' for addition on branch `branch'\'' 6452 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 6453 dotest death2-16 "${testcvs} -q commit -m add" \ 6454 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 6455 new revision: 1\.1\.2\.2; previous revision: 1\.1\.2\.1" 6456 6457 # Add a new file on the branch. 6458 echo "first revision" > file3 6459 dotest death2-17 "${testcvs} add file3" \ 6460 "${SPROG}"' add: scheduling file `file3'\'' for addition on branch `branch'\'' 6461 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 6462 dotest death2-18 "${testcvs} -q commit -m add" \ 6463 "$CVSROOT_DIRNAME/first-dir/Attic/file3,v <-- file3 6464 new revision: 1\.1\.2\.1; previous revision: 1\.1" 6465 6466 # Test diff of a nonexistent tag 6467 dotest_fail death2-diff-9 "$testcvs -q diff -rtag -c file3" \ 6468 "$SPROG diff: tag tag is not in file file3" 6469 6470 dotest_fail death2-diff-10 "${testcvs} -q diff -rtag -N -c file3" \ 6471 "Index: file3 6472 =================================================================== 6473 RCS file: file3 6474 diff -N file3 6475 \*\*\* /dev/null ${RFCDATE_EPOCH} 6476 --- file3 ${RFCDATE} [0-9.]* 6477 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 6478 \*\*\* 0 \*\*\*\* 6479 --- 1 ---- 6480 ${PLUS} first revision" 6481 6482 dotest_fail death2-diff-11 "${testcvs} -q diff -rtag -c ." \ 6483 "Index: file1 6484 =================================================================== 6485 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 6486 retrieving revision 1\.1 6487 retrieving revision 1\.1\.2\.2 6488 diff -c -r1\.1 -r1\.1\.2\.2 6489 \*\*\* file1 ${RFCDATE} [0-9.]* 6490 --- file1 ${RFCDATE} [0-9.]* 6491 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 6492 \*\*\* 1 \*\*\*\* 6493 ! first revision 6494 --- 1 ---- 6495 ! second revision 6496 ${SPROG} diff: tag tag is not in file file2 6497 ${SPROG} diff: tag tag is not in file file3 6498 ${SPROG} diff: file4 no longer exists, no comparison available" 6499 6500 dotest_fail death2-diff-12 "${testcvs} -q diff -rtag -c -N ." \ 6501 "Index: file1 6502 =================================================================== 6503 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 6504 retrieving revision 1\.1 6505 retrieving revision 1\.1\.2\.2 6506 diff -c -r1\.1 -r1\.1\.2\.2 6507 \*\*\* file1 ${RFCDATE} [0-9.]* 6508 --- file1 ${RFCDATE} [0-9.]* 6509 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 6510 \*\*\* 1 \*\*\*\* 6511 ! first revision 6512 --- 1 ---- 6513 ! second revision 6514 Index: file2 6515 =================================================================== 6516 RCS file: file2 6517 diff -N file2 6518 \*\*\* /dev/null ${RFCDATE_EPOCH} 6519 --- file2 ${RFCDATE} [0-9.]* 6520 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 6521 \*\*\* 0 \*\*\*\* 6522 --- 1 ---- 6523 ${PLUS} branch revision 6524 Index: file3 6525 =================================================================== 6526 RCS file: file3 6527 diff -N file3 6528 \*\*\* /dev/null ${RFCDATE_EPOCH} 6529 --- file3 ${RFCDATE} [0-9.]* 6530 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 6531 \*\*\* 0 \*\*\*\* 6532 --- 1 ---- 6533 ${PLUS} first revision 6534 Index: file4 6535 =================================================================== 6536 RCS file: file4 6537 diff -N file4 6538 \*\*\* file4 ${RFCDATE} [0-9.]* 6539 --- /dev/null ${RFCDATE_EPOCH} 6540 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 6541 \*\*\* 1 \*\*\*\* 6542 - file4 first revision 6543 --- 0 ----" 6544 6545 # Switch to the nonbranch tag. 6546 dotest death2-19 "${testcvs} -q update -r tag" \ 6547 "[UP] file1 6548 ${SPROG} update: \`file2' is no longer in the repository 6549 ${SPROG} update: \`file3' is no longer in the repository 6550 U file4" 6551 6552 dotest_fail death2-20 "test -f file2" 6553 6554 # Make sure diff only reports appropriate files. 6555 dotest_fail death2-diff-13 "${testcvs} -q diff -r rdiff-tag" \ 6556 "${SPROG} diff: Tag rdiff-tag refers to a dead (removed) revision in file .file1.\. 6557 ${SPROG} diff: No comparison available\. Pass .-N. to .${SPROG} diff.${QUESTION}" 6558 6559 dotest_fail death2-diff-14 "${testcvs} -q diff -r rdiff-tag -c -N" \ 6560 "Index: file1 6561 =================================================================== 6562 RCS file: file1 6563 diff -N file1 6564 \*\*\* /dev/null ${RFCDATE_EPOCH} 6565 --- file1 ${RFCDATE} [0-9.]* 6566 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 6567 \*\*\* 0 \*\*\*\* 6568 --- 1 ---- 6569 ${PLUS} first revision" 6570 6571 # now back to the trunk 6572 dotest death2-21 "${testcvs} -q update -A" \ 6573 "U file2 6574 [UP] file4" 6575 6576 # test merging with a dead file 6577 dotest death2-22 "${testcvs} -q co first-dir" \ 6578 "U first-dir/file1 6579 U first-dir/file2 6580 U first-dir/file4" 6581 6582 cd first-dir 6583 dotest death2-23 "${testcvs} rm -f file4" \ 6584 "${SPROG} remove: scheduling .file4. for removal 6585 ${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 6586 dotest death2-24 "${testcvs} -q ci -m removed file4" \ 6587 "$CVSROOT_DIRNAME/first-dir/file4,v <-- file4 6588 new revision: delete; previous revision: 1\.2" 6589 cd .. 6590 echo "new stuff" >file4 6591 dotest_fail death2-25 "${testcvs} up file4" \ 6592 "${SPROG} update: conflict: \`file4' is modified but no longer in the repository 6593 C file4" 6594 6595 dokeep 6596 cd .. 6597 rm -r first-dir 6598 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 6599 ;; 6600 6601 6602 6603 rm-update-message) 6604 # FIXME 6605 # local CVS prints a warning message when update notices a missing 6606 # file and client/server CVS doesn't. These should be identical. 6607 mkdir rm-update-message; cd rm-update-message 6608 modify_repo mkdir $CVSROOT_DIRNAME/rm-update-message 6609 dotest rm-update-message-setup-1 "$testcvs -q co rm-update-message" '' 6610 cd rm-update-message 6611 file=x 6612 echo >$file 6613 dotest rm-update-message-setup-2 "$testcvs -q add $file" \ 6614 "${SPROG} add: use .${SPROG} commit. to add this file permanently" 6615 dotest rm-update-message-setup-3 "$testcvs -q ci -mcreate $file" \ 6616 "$CVSROOT_DIRNAME/rm-update-message/$file,v <-- $file 6617 initial revision: 1\.1" 6618 6619 rm $file 6620 dotest rm-update-message-1 "$testcvs up $file" \ 6621 "${SPROG} update: warning: \`$file' was lost 6622 U $file" 6623 6624 dokeep 6625 cd ../.. 6626 rm -r rm-update-message 6627 modify_repo rm -rf $CVSROOT_DIRNAME/rm-update-message 6628 ;; 6629 6630 6631 6632 rmadd) 6633 # More tests of adding and removing files. 6634 # In particular ci -r. 6635 # Other ci -r tests: 6636 # * editor-9: checking in a modified file, 6637 # where "ci -r" means a branch. 6638 # * basica-8a1: checking in a modified file with numeric revision. 6639 # * basica-8a2: likewise. 6640 # * keywordlog-4: adding a new file with numeric revision. 6641 mkdir 1; cd 1 6642 dotest rmadd-1 "$testcvs -q co -l ." 6643 mkdir first-dir 6644 dotest rmadd-2 "${testcvs} add first-dir" \ 6645 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 6646 cd first-dir 6647 echo first file1 >file1 6648 dotest rmadd-3 "${testcvs} add file1" \ 6649 "${SPROG} add: scheduling file .file1. for addition 6650 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 6651 6652 dotest_fail rmadd-4 "${testcvs} -q ci -r 1.2.2.4 -m add" \ 6653 "${SPROG} commit: cannot add file .file1' with revision .1\.2\.2\.4'; must be on trunk 6654 ${SPROG} \[commit aborted\]: correct above errors first!" 6655 dotest_fail rmadd-5 "${testcvs} -q ci -r 1.2.2 -m add" \ 6656 "${SPROG} commit: cannot add file .file1' with revision .1\.2\.2'; must be on trunk 6657 ${SPROG} \[commit aborted\]: correct above errors first!" 6658 dotest_fail rmadd-6 "$testcvs -q ci -r mybranch -m add" \ 6659 "$SPROG \[commit aborted\]: no such tag \`mybranch'" 6660 6661 # The thing with the trailing periods strikes me as a very 6662 # bizarre behavior, but it would seem to be intentional 6663 # (see commit.c). It probably could go away.... 6664 dotest rmadd-7 "${testcvs} -q ci -r 7.... -m add" \ 6665 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 6666 initial revision: 7\.1" 6667 if $remote; then 6668 # I guess remote doesn't set a sticky tag in this case. 6669 # Kind of odd, in the sense that rmadd-24a does set one 6670 # both local and remote. 6671 dotest_fail rmadd-7a "test -f CVS/Tag" 6672 echo T7 >CVS/Tag 6673 else 6674 dotest rmadd-7a "cat CVS/Tag" "T7" 6675 fi 6676 6677 dotest rmadd-8 "${testcvs} -q tag -b mybranch" "T file1" 6678 dotest rmadd-9 "${testcvs} -q tag mynonbranch" "T file1" 6679 6680 touch file2 6681 # The previous "cvs ci -r" set a sticky tag of '7'. Seems a 6682 # bit odd, and I guess commit.c (findmaxrev) makes '7' sticky 6683 # tags unnecessary (?). I kind of suspect that it should be 6684 # saying "sticky tag is not a branch" like keywordlog-4b. 6685 # Or something. 6686 dotest rmadd-10 "${testcvs} add file2" \ 6687 "${SPROG} add: scheduling file .file2. for addition on branch .7' 6688 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 6689 # As in the previous example, CVS is confused.... 6690 dotest rmadd-11 "${testcvs} -q ci -m add" \ 6691 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 6692 initial revision: 7\.1" 6693 6694 dotest rmadd-12 "${testcvs} -q update -A" "" 6695 touch file3 6696 dotest rmadd-13 "${testcvs} add file3" \ 6697 "${SPROG} add: scheduling file .file3. for addition 6698 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 6699 # Huh? file2 is not up to date? Seems buggy to me.... 6700 dotest_fail rmadd-14 "${testcvs} -q ci -r mybranch -m add" \ 6701 "${SPROG} commit: Up-to-date check failed for .file2' 6702 ${SPROG} \[commit aborted\]: correct above errors first!" 6703 # Whatever, let's not let file2 distract us.... 6704 dotest rmadd-15 "${testcvs} -q ci -r mybranch -m add file3" \ 6705 "$CVSROOT_DIRNAME/first-dir/Attic/file3,v <-- file3 6706 new revision: 1\.1\.2\.1; previous revision: 1\.1" 6707 6708 touch file4 6709 dotest rmadd-16 "${testcvs} add file4" \ 6710 "${SPROG} add: scheduling file .file4. for addition 6711 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 6712 # Prior to CVS 1.12.10, this would fail with a, "no such tag" message 6713 # since val-tags used to be updated the first time the tag was used 6714 # rather than when it was created. 6715 6716 # Try to make CVS write val-tags. 6717 if $proxy; then :; else 6718 # First remove the tag. 6719 grep -v mynonbranch $CVSROOT_DIRNAME/CVSROOT/val-tags \ 6720 >$CVSROOT_DIRNAME/CVSROOT/val-tags-tmp 6721 mv $CVSROOT_DIRNAME/CVSROOT/val-tags-tmp \ 6722 $CVSROOT_DIRNAME/CVSROOT/val-tags 6723 6724 dotest rmadd-18 "$testcvs -q update -p -r mynonbranch file1" \ 6725 "first file1" 6726 # Oops, -p suppresses writing val-tags (probably a questionable 6727 # behavior). 6728 dotest_fail rmadd-19 \ 6729 "$testcvs -q ci -r mynonbranch -m add file4" \ 6730 "$SPROG \[commit aborted\]: no such tag \`mynonbranch'" 6731 # Now make CVS write val-tags for real. 6732 dotest rmadd-20 "$testcvs -q update -r mynonbranch file1" 6733 fi # !$proxy 6734 6735 # Oops - CVS isn't distinguishing between a branch tag and 6736 # a non-branch tag. 6737 dotest rmadd-21 \ 6738 "${testcvs} -q ci -r mynonbranch -m add file4" \ 6739 "$CVSROOT_DIRNAME/first-dir/Attic/file4,v <-- file4 6740 new revision: 1\.1\.2\.1; previous revision: 1\.1" 6741 6742 # OK, we add this one in a vanilla way, but then check in 6743 # a modification with ci -r and sniff around for sticky tags. 6744 echo file5 >file5 6745 dotest rmadd-22 "${testcvs} add file5" \ 6746 "${SPROG} add: scheduling file .file5. for addition 6747 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 6748 if $remote; then 6749 # Interesting bug (or missing feature) here. findmaxrev 6750 # gets the major revision from the Entries. Well, remote 6751 # doesn't send the entries for files which are not involved. 6752 dotest rmadd-23r "${testcvs} -q ci -m add" \ 6753 "$CVSROOT_DIRNAME/first-dir/file5,v <-- file5 6754 initial revision: 1\.1" 6755 dotest rmadd-23-workaroundr \ 6756 "${testcvs} -q ci -r 7 -m bump-it file5" \ 6757 "$CVSROOT_DIRNAME/first-dir/file5,v <-- file5 6758 new revision: 7\.1; previous revision: 1\.1" 6759 else 6760 dotest rmadd-23 "${testcvs} -q ci -m add" \ 6761 "$CVSROOT_DIRNAME/first-dir/file5,v <-- file5 6762 initial revision: 7\.1" 6763 fi 6764 echo change it >file5 6765 dotest_fail rmadd-24 "$testcvs -q ci -r 4.8 -m change file5" \ 6766 "$CVSROOT_DIRNAME/first-dir/file5,v <-- file5 6767 $SPROG commit: $CVSROOT_DIRNAME/first-dir/file5,v: revision 4\.8 too low; must be higher than 7\.1 6768 $SPROG commit: could not check in file5" 6769 dotest rmadd-24a "${testcvs} -q ci -r 8.4 -m change file5" \ 6770 "$CVSROOT_DIRNAME/first-dir/file5,v <-- file5 6771 new revision: 8\.4; previous revision: 7\.1" 6772 # I'm not really sure that a sticky tag make sense here. 6773 # It seems to be longstanding behavior for what that is worth. 6774 dotest rmadd-25 "${testcvs} status file5" \ 6775 "=================================================================== 6776 File: file5 Status: Up-to-date 6777 6778 Working revision: 8\.4.* 6779 Repository revision: 8\.4 ${CVSROOT_DIRNAME}/first-dir/file5,v 6780 Commit Identifier: ${commitid} 6781 Sticky Tag: 8\.4 6782 Sticky Date: (none) 6783 Sticky Options: (none)" 6784 6785 # now try forced revision with recursion 6786 mkdir sub 6787 dotest rmadd-26 "${testcvs} -q add sub" \ 6788 "Directory ${CVSROOT_DIRNAME}/first-dir/sub added to the repository" 6789 echo hello >sub/subfile 6790 dotest rmadd-27 "${testcvs} -q add sub/subfile" \ 6791 "${SPROG} add: use .${SPROG} commit. to add this file permanently" 6792 6793 dotest rmadd-28 "${testcvs} -q ci -m. sub" \ 6794 "$CVSROOT_DIRNAME/first-dir/sub/subfile,v <-- sub/subfile 6795 initial revision: 1\.1" 6796 6797 # lose the branch 6798 dotest rmadd-29 "${testcvs} -q up -A" \ 6799 "${SPROG} update: \`file3' is no longer in the repository 6800 ${SPROG} update: \`file4' is no longer in the repository" 6801 6802 # -f disables recursion 6803 dotest rmadd-30 "${testcvs} -q ci -f -r9 -m." \ 6804 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 6805 new revision: 9\.1; previous revision: 7\.1 6806 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 6807 new revision: 9\.1; previous revision: 7\.1 6808 $CVSROOT_DIRNAME/first-dir/file5,v <-- file5 6809 new revision: 9\.1; previous revision: 8\.4" 6810 6811 # add -R to force recursion 6812 dotest rmadd-31 "${testcvs} -q ci -f -r9 -R -m." \ 6813 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 6814 new revision: 9\.2; previous revision: 9\.1 6815 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 6816 new revision: 9\.2; previous revision: 9\.1 6817 $CVSROOT_DIRNAME/first-dir/file5,v <-- file5 6818 new revision: 9\.2; previous revision: 9\.1 6819 $CVSROOT_DIRNAME/first-dir/sub/subfile,v <-- sub/subfile 6820 new revision: 9\.1; previous revision: 1\.1" 6821 6822 if $remote; then 6823 # as noted above, remote doesn't set a sticky tag 6824 : 6825 else 6826 dotest rmadd-32 "cat CVS/Tag" "T9" 6827 dotest rmadd-33 "cat sub/CVS/Tag" "T9" 6828 fi 6829 6830 dokeep 6831 cd ../.. 6832 rm -r 1 6833 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 6834 ;; 6835 6836 6837 6838 rmadd2) 6839 # Tests of undoing commits, including in the presence of 6840 # adding and removing files. See join for a list of -j tests. 6841 mkdir 1; cd 1 6842 dotest rmadd2-1 "${testcvs} -q co -l ." '' 6843 mkdir first-dir 6844 dotest rmadd2-2 "${testcvs} add first-dir" \ 6845 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 6846 cd first-dir 6847 echo 'initial contents' >file1 6848 dotest rmadd2-3 "${testcvs} add file1" \ 6849 "${SPROG} add: scheduling file .file1. for addition 6850 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 6851 dotest rmadd2-4 "${testcvs} -q ci -m add" \ 6852 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 6853 initial revision: 1\.1" 6854 dotest rmadd2-4a "${testcvs} -Q tag tagone" "" 6855 dotest rmadd2-5 "${testcvs} rm -f file1" \ 6856 "${SPROG} remove: scheduling .file1. for removal 6857 ${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 6858 dotest rmadd2-6 "${testcvs} -q ci -m remove" \ 6859 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 6860 new revision: delete; previous revision: 1\.1" 6861 dotest rmadd2-7 "$testcvs -q update -j 1.2 -j 1.1 file1" "U file1" 6862 dotest rmadd2-8 "${testcvs} -q ci -m readd" \ 6863 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 6864 new revision: 1\.3; previous revision: 1\.2" 6865 echo 'new contents' >file1 6866 dotest rmadd2-9 "${testcvs} -q ci -m modify" \ 6867 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 6868 new revision: 1\.4; previous revision: 1\.3" 6869 dotest rmadd2-10 "${testcvs} -q update -j 1.4 -j 1.3 file1" \ 6870 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 6871 retrieving revision 1\.4 6872 retrieving revision 1\.3 6873 Merging differences between 1\.4 and 1\.3 into file1" 6874 dotest rmadd2-11 "${testcvs} -q ci -m undo" \ 6875 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 6876 new revision: 1\.5; previous revision: 1\.4" 6877 dotest rmadd2-12 "cat file1" "initial contents" 6878 dotest rmadd2-13 "${testcvs} -q update -p -r 1.3" "initial contents" 6879 6880 # Hmm, might be a bit odd that this works even if 1.3 is not 6881 # the head. 6882 dotest rmadd2-14 "${testcvs} -q update -j 1.3 -j 1.2 file1" \ 6883 "${SPROG} update: scheduling \`file1' for removal" 6884 6885 # Check that -p can get arbitrary revisions of a removed file 6886 dotest rmadd2-14a "${testcvs} -q update -p" "initial contents" 6887 dotest rmadd2-14b "${testcvs} -q update -p -r 1.5" "initial contents" 6888 dotest rmadd2-14c "${testcvs} -q update -p -r 1.3" "initial contents" 6889 6890 dotest rmadd2-15 "${testcvs} -q ci -m re-remove" \ 6891 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 6892 new revision: delete; previous revision: 1\.5" 6893 dotest rmadd2-16 "${testcvs} log -h file1" " 6894 RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file1,v 6895 Working file: file1 6896 head: 1\.6 6897 branch: 6898 locks: strict 6899 access list: 6900 symbolic names: 6901 tagone: 1\.1 6902 keyword substitution: kv 6903 total revisions: 6 6904 =============================================================================" 6905 dotest rmadd2-17 "${testcvs} status -v file1" \ 6906 "=================================================================== 6907 File: no file file1 Status: Up-to-date 6908 6909 Working revision: No entry for file1 6910 Repository revision: 1\.6 ${CVSROOT_DIRNAME}/first-dir/Attic/file1,v 6911 Commit Identifier: ${commitid} 6912 6913 Existing Tags: 6914 tagone (revision: 1.1)" 6915 6916 dokeep 6917 cd ../.. 6918 rm -r 1 6919 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 6920 ;; 6921 6922 6923 6924 rmadd3) 6925 # This test demonstrates that CVS notices that file1 exists rather 6926 # that deleting or writing over it after: 6927 # 6928 # cvs remove -f file1; touch file1; cvs add file1. 6929 # 6930 # According to the manual, this should work for: 6931 # 6932 # rm file1; cvs remove file1; cvs add file1 6933 # 6934 # but in past version of CVS, new content in file1 would be 6935 # erroneously deleted when file1 reappeared between the remove and 6936 # the add. 6937 # 6938 # Later versions of CVS would refuse to perform the add, but still 6939 # allow a subsequent local commit to erase the file from the 6940 # workspace, possibly losing data. 6941 mkdir 1; cd 1 6942 dotest rmadd3-init1 "${testcvs} -q co -l ." '' 6943 mkdir first-dir 6944 dotest rmadd3-init2 "${testcvs} add first-dir" \ 6945 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 6946 cd first-dir 6947 6948 echo initial content for file1 >file1 6949 dotest rmadd3-init3 "${testcvs} add file1" \ 6950 "${SPROG} add: scheduling file \`file1' for addition 6951 ${SPROG} add: use \`${SPROG} commit' to add this file permanently" 6952 dotest rmadd3-init4 "${testcvs} -q ci -m add" \ 6953 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 6954 initial revision: 1\.1" 6955 6956 # Here begins the guts of this test, as detailed above. 6957 dotest rmadd3-1 "${testcvs} rm -f file1" \ 6958 "${SPROG} remove: scheduling \`file1' for removal 6959 ${SPROG} remove: use \`${SPROG} commit' to remove this file permanently" 6960 6961 # Now recreate the file: 6962 echo desired future contents for file1 >file1 6963 6964 # And attempt to resurrect it at the same time: 6965 dotest_fail rmadd3-2 "${testcvs} add file1" \ 6966 "${SPROG} add: \`file1' should be removed and is still there (or is back again)" 6967 6968 # Now prove that commit knows that it shouldn't erase files. 6969 dotest_fail rmadd3-3 "${testcvs} -q ci -m." \ 6970 "$CPROG commit: \`file1' should be removed and is still there (or is back again) 6971 $CPROG \[commit aborted\]: correct above errors first!" 6972 6973 # Then these should pass too: 6974 dotest rmadd3-4 "test -f file1" 6975 dotest rmadd3-5 "cat file1" "desired future contents for file1" 6976 6977 if $keep; then 6978 echo Keeping ${TESTDIR} and exiting due to --keep 6979 exit 0 6980 fi 6981 6982 dokeep 6983 cd ../.. 6984 rm -r 1 6985 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 6986 ;; 6987 6988 6989 6990 resurrection) 6991 # This test tests a few file resurrection scenarios. 6992 mkdir 1; cd 1 6993 dotest resurrection-init1 "$testcvs -q co -l ." '' 6994 mkdir first-dir 6995 dotest resurrection-init2 "$testcvs add first-dir" \ 6996 "Directory $CVSROOT_DIRNAME/first-dir added to the repository" 6997 cd first-dir 6998 6999 echo initial content for file1 >file1 7000 dotest resurrection-init3 "$testcvs add file1" \ 7001 "$SPROG add: scheduling file \`file1' for addition 7002 $SPROG add: use \`$SPROG commit' to add this file permanently" 7003 dotest resurrection-init4 "$testcvs -q ci -m add" \ 7004 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 7005 initial revision: 1\.1" 7006 7007 dotest resurrection-init5 "$testcvs -Q rm -f file1" 7008 7009 # The first test is that `cvs add' will resurrect a file before its 7010 # removal has been committed. 7011 dotest_sort resurrection-1 "$testcvs add file1" \ 7012 "U file1 7013 $SPROG add: \`file1', version 1\.1, resurrected" 7014 dotest resurrection-2 "$testcvs -Q diff file1" "" 7015 7016 dotest resurrection-init6 "$testcvs -Q tag -b resurrection" 7017 dotest resurrection-init7 "$testcvs -Q rm -f file1" 7018 dotest resurrection-init8 "$testcvs -Q ci -mrm" 7019 7020 # The next test is that CVS will resurrect a committed removal. 7021 dotest_sort resurrection-3 "$testcvs add file1" \ 7022 "U file1 7023 $SPROG add: Re-adding file \`file1' after dead revision 1\.2\. 7024 $SPROG add: Resurrecting file \`file1' from revision 1\.1\. 7025 $SPROG add: use \`$SPROG commit' to add this file permanently" 7026 dotest resurrection-4 "$testcvs -q diff -r1.1 file1" "" 7027 dotest resurrection-5 "$testcvs -q ci -mreadd" \ 7028 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 7029 new revision: 1\.3; previous revision: 1\.2" 7030 7031 dotest resurrection-init9 "$testcvs -Q up -rresurrection" 7032 dotest resurrection-init10 "$testcvs -Q rm -f file1" 7033 dotest resurrection-init11 "$testcvs -Q ci -mrm-on-resurrection" 7034 7035 # The next test is that CVS will resurrect a committed removal to a 7036 # branch. 7037 dotest_sort resurrection-6 "$testcvs -r add file1" \ 7038 "U file1 7039 $SPROG add: Re-adding file \`file1' on branch \`resurrection' after dead revision 1\.1\.2\.1\. 7040 $SPROG add: Resurrecting file \`file1' from revision 1\.1\. 7041 $SPROG add: use \`$SPROG commit' to add this file permanently" 7042 # If the file is modified, it had better be read-write 7043 # regardless of what the user has requested with the CVSREAD 7044 # environment variable or the global -r switch 7045 dotest resurrection-6b 'test -w file1' '' 7046 dotest resurrection-7 "$testcvs -Q diff -r1.1 file1" "" 7047 dotest resurrection-8 "$testcvs -q ci -mreadd" \ 7048 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 7049 new revision: 1\.1\.2\.2; previous revision: 1\.1\.2\.1" 7050 7051 # The next few tests verify that an attempted resurrection of a file 7052 # with no previous revision on the trunk fails. 7053 touch file2 7054 dotest resurrection-9 "$testcvs -Q add file2" 7055 dotest resurrection-10 "$testcvs -Q ci -mnew-file2" 7056 dotest resurrection-11 "$testcvs -Q up -A" 7057 7058 # This command once caused an assertion failure. 7059 dotest resurrection-12 "$testcvs add file2" \ 7060 "$SPROG add: File \`file2' has no previous revision to resurrect\." 7061 7062 # Check what 'cvs -r add' does with resurrected files. 7063 dotest resurrection-13 "$testcvs -Q rm -f file1" 7064 dotest_sort resurrection-14 "$testcvs -r add file1" \ 7065 "U file1 7066 $SPROG add: \`file1', version 1\.3, resurrected" 7067 dotest_fail resurrection-15 'test -w file1' '' 7068 7069 dokeep 7070 cd ../.. 7071 rm -rf 1 7072 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 7073 ;; 7074 7075 7076 7077 dirs) 7078 # Tests related to removing and adding directories. 7079 # See also: 7080 # conflicts (especially dir1 in conflicts-130): What happens if 7081 # directory exists in repository and a non-CVS-controlled 7082 # directory in the working directory? 7083 # conflicts3-15. More cases, especially where CVS directory 7084 # exists but without CVS/Repository and friends. 7085 # conflicts3-22. Similar to conflicts-130 but there is a file 7086 # in the directory. 7087 # dirs2. Sort of similar to conflicts3-22 but somewhat different. 7088 mkdir imp-dir; cd imp-dir 7089 echo file1 >file1 7090 mkdir sdir 7091 echo sfile >sdir/sfile 7092 dotest_sort dirs-1 \ 7093 "${testcvs} import -m import-it dir1 vend rel" " 7094 7095 N dir1/file1 7096 N dir1/sdir/sfile 7097 No conflicts created by this import 7098 ${SPROG} import: Importing ${CVSROOT_DIRNAME}/dir1/sdir" 7099 cd .. 7100 7101 mkdir 1; cd 1 7102 dotest dirs-2 "$testcvs -Q co dir1" "" 7103 7104 # Various CVS administrators are in the habit of removing 7105 # the repository directory for things they don't want any 7106 # more. I've even been known to do it myself (on rare 7107 # occasions). Not the usual recommended practice, but we want 7108 # to try to come up with some kind of reasonable/documented/sensible 7109 # behavior. 7110 modify_repo rm -rf $CVSROOT_DIRNAME/dir1/sdir 7111 7112 dotest dirs-3 "${testcvs} update" \ 7113 "${SPROG} update: Updating dir1 7114 ${SPROG} update: Updating dir1/sdir 7115 ${SPROG} update: cannot open directory ${CVSROOT_DIRNAME}/dir1/sdir: No such file or directory 7116 ${SPROG} update: skipping directory dir1/sdir" 7117 dotest dirs-3a "${testcvs} update -d" \ 7118 "${SPROG} update: Updating dir1 7119 ${SPROG} update: Updating dir1/sdir 7120 ${SPROG} update: cannot open directory ${CVSROOT_DIRNAME}/dir1/sdir: No such file or directory 7121 ${SPROG} update: skipping directory dir1/sdir" 7122 7123 # If we say "yes", then CVS gives errors about not being able to 7124 # create lock files. 7125 # The fact that it says "skipping directory " rather than 7126 # "skipping directory dir1/sdir" is some kind of bug. 7127 dotest dirs-4 "echo no | ${testcvs} release -d dir1/sdir" \ 7128 "${SPROG} update: cannot open directory ${CVSROOT_DIRNAME}/dir1/sdir: No such file or directory 7129 ${SPROG} update: skipping directory 7130 You have \[0\] altered files in this repository\. 7131 Are you sure you want to release (and delete) directory .dir1/sdir': .. .release' aborted by user choice." 7132 7133 # OK, if "cvs release" won't help, we'll try it the other way... 7134 rm -r dir1/sdir 7135 7136 dotest dirs-5 "cat dir1/CVS/Entries" \ 7137 "/file1/1.1.1.1/[a-zA-Z0-9 :]*// 7138 D/sdir////" 7139 dotest dirs-6 "${testcvs} update" "${SPROG} update: Updating dir1" 7140 dotest dirs-7 "cat dir1/CVS/Entries" \ 7141 "/file1/1.1.1.1/[a-zA-Z0-9 :]*// 7142 D/sdir////" 7143 dotest dirs-8 "${testcvs} update -d dir1" \ 7144 "${SPROG} update: Updating dir1" 7145 7146 dokeep 7147 cd .. 7148 rm -r imp-dir 1 7149 modify_repo rm -rf $CVSROOT_DIRNAME/dir1 7150 ;; 7151 7152 7153 7154 dirs2) 7155 # See "dirs" for a list of tests involving adding and 7156 # removing directories. 7157 mkdir 1; cd 1 7158 dotest dirs2-1 "$testcvs -q co -l ." 7159 mkdir first-dir 7160 dotest dirs2-2 "${testcvs} add first-dir" \ 7161 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 7162 cd first-dir 7163 mkdir sdir 7164 dotest dirs2-3 "${testcvs} add sdir" \ 7165 "Directory ${CVSROOT_DIRNAME}/first-dir/sdir added to the repository" 7166 touch sdir/file1 7167 dotest dirs2-4 "${testcvs} add sdir/file1" \ 7168 "${SPROG} add: scheduling file .sdir/file1. for addition 7169 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 7170 dotest dirs2-5 "${testcvs} -q ci -m add" \ 7171 "$CVSROOT_DIRNAME/first-dir/sdir/file1,v <-- sdir/file1 7172 initial revision: 1\.1" 7173 rm -r sdir/CVS 7174 if $remote; then 7175 # This is just like conflicts3-23 7176 dotest_fail dirs2-6r "${testcvs} update -d" \ 7177 "${QUESTION} sdir 7178 ${SPROG} update: Updating \. 7179 ${SPROG} update: Updating sdir 7180 ${CPROG} update: move away \`sdir/file1'; it is in the way 7181 C sdir/file1" 7182 rm sdir/file1 7183 rm -r sdir/CVS 7184 7185 # This is where things are not just like conflicts3-23 7186 dotest dirs2-7r "${testcvs} update -d" \ 7187 "${QUESTION} sdir 7188 ${SPROG} update: Updating \. 7189 ${SPROG} update: Updating sdir 7190 U sdir/file1" 7191 else 7192 dotest dirs2-6 "${testcvs} update -d" \ 7193 "${CPROG} update: Updating \. 7194 ${QUESTION} sdir" 7195 rm sdir/file1 7196 dotest dirs2-7 "${testcvs} update -d" \ 7197 "${CPROG} update: Updating \. 7198 ${QUESTION} sdir" 7199 fi 7200 cd ../.. 7201 7202 # Now, the same thing (more or less) on a branch. 7203 mkdir 2; cd 2 7204 dotest dirs2-8 "${testcvs} -q co first-dir" 'U first-dir/sdir/file1' 7205 cd first-dir 7206 dotest dirs2-9 "${testcvs} -q tag -b br" "T sdir/file1" 7207 rm -r sdir/CVS 7208 7209 if $remote; then 7210 # val-tags used to have a cute little quirk; if an update didn't 7211 # recurse into the directories where the tag is defined, val-tags 7212 # wouldn't get updated. This is no longer a problem as of 1.12.10. 7213 dotest_fail dirs2-10-againr "$testcvs update -d -r br" \ 7214 "$QUESTION sdir 7215 $SPROG update: Updating \. 7216 $SPROG update: Updating sdir 7217 $CPROG update: move away \`sdir/file1'; it is in the way 7218 C sdir/file1" 7219 else 7220 dotest dirs2-10 "${testcvs} update -d -r br" \ 7221 "$SPROG update: Updating \. 7222 $QUESTION sdir" 7223 # This is what used to happen. I'm not sure why it changed with 1.12.10, but 7224 # as near as I can tell from the comments in update_direntproc, the new 7225 # behavior was the intended behavior. 7226 #"$CPROG update: in directory \`sdir': 7227 #$CPROG \[update aborted\]: there is no version here; do \`$CPROG checkout' first" 7228 fi 7229 cd ../.. 7230 7231 # OK, the above tests make the situation somewhat harder 7232 # than it might be, in the sense that they actually have a 7233 # file which is alive on the branch we are updating. Let's 7234 # try it where it is just a directory where all the files 7235 # have been removed. 7236 mkdir 3; cd 3 7237 dotest dirs2-11 "${testcvs} -q co -r br first-dir" \ 7238 "U first-dir/sdir/file1" 7239 cd first-dir 7240 # Hmm, this doesn't mention the branch like add does. That's 7241 # an odd non-orthogonality. 7242 dotest dirs2-12 "${testcvs} rm -f sdir/file1" \ 7243 "${SPROG} remove: scheduling .sdir/file1. for removal 7244 ${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 7245 dotest dirs2-13 "${testcvs} -q ci -m remove" \ 7246 "$CVSROOT_DIRNAME/first-dir/sdir/file1,v <-- sdir/file1 7247 new revision: delete; previous revision: 1\.1" 7248 cd ../../2/first-dir 7249 if $remote; then 7250 dotest dirs2-14 "${testcvs} update -d -r br" \ 7251 "${QUESTION} sdir/file1 7252 ${SPROG} update: Updating \. 7253 ${SPROG} update: Updating sdir" 7254 else 7255 dotest dirs2-14 "${testcvs} update -d -r br" \ 7256 "${CPROG} update: Updating \. 7257 ${QUESTION} sdir" 7258 fi 7259 7260 dokeep 7261 cd ../.. 7262 rm -r 1 2 3 7263 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 7264 ;; 7265 7266 7267 7268 branches) 7269 # More branch tests, including branches off of branches 7270 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 7271 dotest branches-1 "$testcvs -q co first-dir" 7272 cd first-dir 7273 echo 1:ancest >file1 7274 echo 2:ancest >file2 7275 echo 3:ancest >file3 7276 echo 4:trunk-1 >file4 7277 dotest branches-2 "${testcvs} add file1 file2 file3 file4" \ 7278 "$SPROG add: scheduling file \`file1' for addition 7279 $SPROG add: scheduling file \`file2' for addition 7280 $SPROG add: scheduling file \`file3' for addition 7281 $SPROG add: scheduling file \`file4' for addition 7282 $SPROG add: use .$SPROG commit. to add these files permanently" 7283 dotest branches-2a "$testcvs -n -q ci -m dont-commit" 7284 dotest_lit branches-3 "$testcvs -q ci -m add-it" <<HERE 7285 $CVSROOT_DIRNAME/first-dir/file1,v <-- file1 7286 initial revision: 1.1 7287 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 7288 initial revision: 1.1 7289 ${CVSROOT_DIRNAME}/first-dir/file3,v <-- file3 7290 initial revision: 1.1 7291 ${CVSROOT_DIRNAME}/first-dir/file4,v <-- file4 7292 initial revision: 1.1 7293 HERE 7294 echo 4:trunk-2 >file4 7295 dotest branches-3.2 "${testcvs} -q ci -m trunk-before-branch" \ 7296 "$CVSROOT_DIRNAME/first-dir/file4,v <-- file4 7297 new revision: 1\.2; previous revision: 1\.1" 7298 # The "cvs log file4" in test branches-14.3 will test that we 7299 # didn't really add the tag. 7300 dotest branches-3.3 "${testcvs} -qn tag dont-tag" \ 7301 "T file1 7302 T file2 7303 T file3 7304 T file4" 7305 # Modify this file before branching, to deal with the case where 7306 # someone is hacking along, says "oops, I should be doing this on 7307 # a branch", and only then creates the branch. 7308 echo 1:br1 >file1 7309 dotest branches-4 "${testcvs} tag -b br1" "${SPROG}"' tag: Tagging \. 7310 T file1 7311 T file2 7312 T file3 7313 T file4' 7314 dotest branches-5 "${testcvs} update -r br1" \ 7315 "${SPROG} update: Updating \. 7316 M file1" 7317 echo 2:br1 >file2 7318 echo 4:br1 >file4 7319 dotest branches-6 "${testcvs} -q ci -m modify" \ 7320 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 7321 new revision: 1\.1\.2\.1; previous revision: 1\.1 7322 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 7323 new revision: 1\.1\.2\.1; previous revision: 1\.1 7324 $CVSROOT_DIRNAME/first-dir/file4,v <-- file4 7325 new revision: 1\.2\.2\.1; previous revision: 1\.2" 7326 dotest branches-7 "${testcvs} -q tag -b brbr" 'T file1 7327 T file2 7328 T file3 7329 T file4' 7330 dotest branches-8 "${testcvs} -q update -r brbr" '' 7331 echo 1:brbr >file1 7332 echo 4:brbr >file4 7333 dotest branches-9 "${testcvs} -q ci -m modify" \ 7334 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 7335 new revision: 1\.1\.2\.1\.2\.1; previous revision: 1\.1\.2\.1 7336 $CVSROOT_DIRNAME/first-dir/file4,v <-- file4 7337 new revision: 1\.2\.2\.1\.2\.1; previous revision: 1\.2\.2\.1" 7338 dotest branches-10 "cat file1 file2 file3 file4" '1:brbr 7339 2:br1 7340 3:ancest 7341 4:brbr' 7342 dotest branches-11 "${testcvs} -q update -r br1" \ 7343 '[UP] file1 7344 [UP] file4' 7345 dotest branches-12 "cat file1 file2 file3 file4" '1:br1 7346 2:br1 7347 3:ancest 7348 4:br1' 7349 echo 4:br1-2 >file4 7350 dotest branches-12.2 "${testcvs} -q ci -m change-on-br1" \ 7351 "$CVSROOT_DIRNAME/first-dir/file4,v <-- file4 7352 new revision: 1\.2\.2\.2; previous revision: 1\.2\.2\.1" 7353 dotest branches-13 "${testcvs} -q update -A" '[UP] file1 7354 [UP] file2 7355 [UP] file4' 7356 dotest branches-14 "cat file1 file2 file3 file4" '1:ancest 7357 2:ancest 7358 3:ancest 7359 4:trunk-2' 7360 echo 4:trunk-3 >file4 7361 dotest branches-14.2 \ 7362 "${testcvs} -q ci -m trunk-change-after-branch" \ 7363 "$CVSROOT_DIRNAME/first-dir/file4,v <-- file4 7364 new revision: 1\.3; previous revision: 1\.2" 7365 dotest branches-14.3 "${testcvs} log file4" \ 7366 " 7367 RCS file: ${CVSROOT_DIRNAME}/first-dir/file4,v 7368 Working file: file4 7369 head: 1\.3 7370 branch: 7371 locks: strict 7372 access list: 7373 symbolic names: 7374 brbr: 1\.2\.2\.1\.0\.2 7375 br1: 1\.2\.0\.2 7376 keyword substitution: kv 7377 total revisions: 6; selected revisions: 6 7378 description: 7379 ---------------------------- 7380 revision 1\.3 7381 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -1; commitid: ${commitid}; 7382 trunk-change-after-branch 7383 ---------------------------- 7384 revision 1\.2 7385 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -1; commitid: ${commitid}; 7386 branches: 1\.2\.2; 7387 trunk-before-branch 7388 ---------------------------- 7389 revision 1\.1 7390 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 7391 add-it 7392 ---------------------------- 7393 revision 1\.2\.2\.2 7394 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -1; commitid: ${commitid}; 7395 change-on-br1 7396 ---------------------------- 7397 revision 1\.2\.2\.1 7398 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -1; commitid: ${commitid}; 7399 branches: 1\.2\.2\.1\.2; 7400 modify 7401 ---------------------------- 7402 revision 1\.2\.2\.1\.2\.1 7403 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -1; commitid: ${commitid}; 7404 modify 7405 =============================================================================" 7406 dotest_fail branches-14.4 \ 7407 "${testcvs} diff -c -r 1.1 -r 1.3 file4" \ 7408 "Index: file4 7409 =================================================================== 7410 RCS file: ${CVSROOT_DIRNAME}/first-dir/file4,v 7411 retrieving revision 1\.1 7412 retrieving revision 1\.3 7413 diff -c -r1\.1 -r1\.3 7414 \*\*\* file4 ${RFCDATE} 1\.1 7415 --- file4 ${RFCDATE} 1\.3 7416 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 7417 \*\*\* 1 \*\*\*\* 7418 ! 4:trunk-1 7419 --- 1 ---- 7420 ! 4:trunk-3" 7421 dotest_fail branches-14.5 \ 7422 "${testcvs} diff -c -r 1.1 -r 1.2.2.1 file4" \ 7423 "Index: file4 7424 =================================================================== 7425 RCS file: ${CVSROOT_DIRNAME}/first-dir/file4,v 7426 retrieving revision 1\.1 7427 retrieving revision 1\.2\.2\.1 7428 diff -c -r1\.1 -r1\.2\.2\.1 7429 \*\*\* file4 ${RFCDATE} 1\.1 7430 --- file4 ${RFCDATE} 1\.2\.2\.1 7431 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 7432 \*\*\* 1 \*\*\*\* 7433 ! 4:trunk-1 7434 --- 1 ---- 7435 ! 4:br1" 7436 dotest branches-15 \ 7437 "${testcvs} update -j 1.1.2.1 -j 1.1.2.1.2.1 file1" \ 7438 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 7439 retrieving revision 1\.1\.2\.1 7440 retrieving revision 1\.1\.2\.1\.2\.1 7441 Merging differences between 1\.1\.2\.1 and 1\.1\.2\.1\.2\.1 into file1 7442 rcsmerge: warning: conflicts during merge" 7443 dotest branches-16 "cat file1" '<<<<<<< file1 7444 1:ancest 7445 [=]====== 7446 1:brbr 7447 [>]>>>>>> 1\.1\.2\.1\.2\.1' 7448 7449 dotest branches-o1 "${testcvs} -q admin -o ::brbr" \ 7450 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 7451 done 7452 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 7453 done 7454 RCS file: ${CVSROOT_DIRNAME}/first-dir/file3,v 7455 done 7456 RCS file: ${CVSROOT_DIRNAME}/first-dir/file4,v 7457 done" 7458 7459 dokeep 7460 cd .. 7461 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 7462 rm -r first-dir 7463 ;; 7464 7465 7466 7467 branches2) 7468 # More branch tests. 7469 # Test that when updating a new subdirectory in a directory 7470 # which was checked out on a branch, the new subdirectory is 7471 # created on the appropriate branch. Test this when joining 7472 # as well. 7473 7474 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 7475 mkdir trunk; cd trunk 7476 7477 # Create a file. 7478 dotest branches2-1 "${testcvs} -q co first-dir" 7479 cd first-dir 7480 echo "file1 first revision" > file1 7481 dotest branches2-2 "${testcvs} add file1" \ 7482 "${SPROG} add: scheduling file .file1. for addition 7483 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 7484 dotest branches2-3 "${testcvs} commit -m add file1" \ 7485 "${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1 7486 initial revision: 1\.1" 7487 7488 # Tag the file. 7489 dotest branches2-4 "${testcvs} -q tag tag1" 'T file1' 7490 7491 # Make two branches. 7492 dotest branches2-5 "${testcvs} -q rtag -b -r tag1 b1 first-dir" '' 7493 dotest branches2-6 "${testcvs} -q rtag -b -r tag1 b2 first-dir" '' 7494 7495 # Create some files and a subdirectory on branch b1. 7496 cd ../.. 7497 mkdir b1; cd b1 7498 dotest branches2-7 "${testcvs} -q co -r b1 first-dir" \ 7499 "U first-dir/file1" 7500 cd first-dir 7501 echo "file2 first revision" > file2 7502 dotest branches2-8 "${testcvs} add file2" \ 7503 "${SPROG}"' add: scheduling file `file2'\'' for addition on branch `b1'\'' 7504 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 7505 mkdir dir1 7506 dotest branches2-9 "${testcvs} add dir1" \ 7507 "Directory ${CVSROOT_DIRNAME}/first-dir/dir1 added to the repository 7508 --> Using per-directory sticky tag "'`'"b1'" 7509 echo "file3 first revision" > dir1/file3 7510 dotest branches2-10 "${testcvs} add dir1/file3" \ 7511 "${SPROG}"' add: scheduling file `dir1/file3'\'' for addition on branch `b1'\'' 7512 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 7513 dotest branches2-11 "${testcvs} -q ci -madd ." \ 7514 "$CVSROOT_DIRNAME/first-dir/Attic/file2,v <-- file2 7515 new revision: 1\.1\.2\.1; previous revision: 1\.1 7516 $CVSROOT_DIRNAME/first-dir/dir1/Attic/file3,v <-- dir1/file3 7517 new revision: 1\.1\.2\.1; previous revision: 1\.1" 7518 7519 # Check out the second branch, and update the working 7520 # directory to the first branch, to make sure the right 7521 # happens with dir1. 7522 cd ../.. 7523 mkdir b2; cd b2 7524 dotest branches2-12 "${testcvs} -q co -r b2 first-dir" \ 7525 'U first-dir/file1' 7526 cd first-dir 7527 dotest branches2-13 "${testcvs} update -d -r b1 dir1" \ 7528 "${SPROG} update: Updating dir1 7529 U dir1/file3" 7530 dotest branches2-14 "${testcvs} -q status" \ 7531 "=================================================================== 7532 File: file1 Status: Up-to-date 7533 7534 Working revision: 1\.1.* 7535 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file1,v 7536 Commit Identifier: ${commitid} 7537 Sticky Tag: b2 (branch: 1\.1\.4) 7538 Sticky Date: (none) 7539 Sticky Options: (none) 7540 7541 =================================================================== 7542 File: file3 Status: Up-to-date 7543 7544 Working revision: 1\.1\.2\.1.* 7545 Repository revision: 1\.1\.2\.1 ${CVSROOT_DIRNAME}/first-dir/dir1/Attic/file3,v 7546 Commit Identifier: ${commitid} 7547 Sticky Tag: b1 (branch: 1\.1\.2) 7548 Sticky Date: (none) 7549 Sticky Options: (none)" 7550 7551 # Test some calls to rls here because we can. These should probably 7552 # be somewhere else, but we already have some directories set up. 7553 dotest branches2-14-rls-1 "$testcvs rls" \ 7554 "$SPROG rls: Listing module: \`.' 7555 CVSROOT 7556 first-dir" 7557 dotest branches2-14-rls-2 "$testcvs rls -R" \ 7558 "$SPROG rls: Listing module: \`.' 7559 \.: 7560 CVSROOT 7561 first-dir 7562 7563 CVSROOT: 7564 access 7565 aclconfig 7566 checkoutlist 7567 commitinfo 7568 config 7569 cvswrappers 7570 group 7571 loginfo 7572 modules 7573 notify 7574 postadmin 7575 postproxy 7576 posttag 7577 postwatch 7578 preproxy 7579 rcsinfo 7580 taginfo 7581 verifymsg 7582 Emptydir 7583 7584 CVSROOT/Emptydir: 7585 7586 first-dir: 7587 file1 7588 dir1 7589 7590 first-dir/dir1:" 7591 dotest branches2-14-rls-3 "$testcvs rls -l -R" \ 7592 "$SPROG rls: Listing module: \`.' 7593 \.: 7594 d--- $ISO8601DATE CVSROOT 7595 d--- $ISO8601DATE first-dir 7596 7597 CVSROOT: 7598 ---- $ISO8601DATE 1\.[0-9][0-9]* access 7599 ---- $ISO8601DATE 1\.[0-9][0-9]* aclconfig 7600 ---- $ISO8601DATE 1\.[0-9][0-9]* checkoutlist 7601 ---- $ISO8601DATE 1\.[0-9][0-9]* commitinfo 7602 ---- $ISO8601DATE 1\.[0-9][0-9]* config 7603 ---- $ISO8601DATE 1\.[0-9][0-9]* cvswrappers 7604 ---- $ISO8601DATE 1\.[0-9][0-9]* group 7605 ---- $ISO8601DATE 1\.[0-9][0-9]* loginfo 7606 ---- $ISO8601DATE 1\.[0-9][0-9]* modules 7607 ---- $ISO8601DATE 1\.[0-9][0-9]* notify 7608 ---- $ISO8601DATE 1\.[0-9][0-9]* postadmin 7609 ---- $ISO8601DATE 1\.[0-9][0-9]* postproxy 7610 ---- $ISO8601DATE 1\.[0-9][0-9]* posttag 7611 ---- $ISO8601DATE 1\.[0-9][0-9]* postwatch 7612 ---- $ISO8601DATE 1\.[0-9][0-9]* preproxy 7613 ---- $ISO8601DATE 1\.[0-9][0-9]* rcsinfo 7614 ---- $ISO8601DATE 1\.[0-9][0-9]* taginfo 7615 ---- $ISO8601DATE 1\.[0-9][0-9]* verifymsg 7616 d--- $ISO8601DATE Emptydir 7617 7618 CVSROOT/Emptydir: 7619 7620 first-dir: 7621 ---- $ISO8601DATE 1\.1 file1 7622 d--- $ISO8601DATE dir1 7623 7624 first-dir/dir1:" 7625 dotest branches2-14-rls-4 "$testcvs rls -eR" \ 7626 "$SPROG rls: Listing module: \`.' 7627 \.: 7628 D/CVSROOT//// 7629 D/first-dir//// 7630 7631 CVSROOT: 7632 /access/1\.[0-9][0-9]*/$DATE// 7633 /aclconfig/1\.[0-9][0-9]*/$DATE// 7634 /checkoutlist/1\.[0-9][0-9]*/$DATE// 7635 /commitinfo/1\.[0-9][0-9]*/$DATE// 7636 /config/1\.[0-9][0-9]*/$DATE// 7637 /cvswrappers/1\.[0-9][0-9]*/$DATE// 7638 /group/1\.[0-9][0-9]*/$DATE// 7639 /loginfo/1\.[0-9][0-9]*/$DATE// 7640 /modules/1\.[0-9][0-9]*/$DATE// 7641 /notify/1\.[0-9][0-9]*/$DATE// 7642 /postadmin/1\.[0-9][0-9]*/$DATE// 7643 /postproxy/1\.[0-9][0-9]*/$DATE// 7644 /posttag/1\.[0-9][0-9]*/$DATE// 7645 /postwatch/1\.[0-9][0-9]*/$DATE// 7646 /preproxy/1\.[0-9][0-9]*/$DATE// 7647 /rcsinfo/1\.[0-9][0-9]*/$DATE// 7648 /taginfo/1\.[0-9][0-9]*/$DATE// 7649 /verifymsg/1\.[0-9][0-9]*/$DATE// 7650 D/Emptydir//// 7651 7652 CVSROOT/Emptydir: 7653 7654 first-dir: 7655 /file1/1\.1/$DATE// 7656 D/dir1//// 7657 7658 first-dir/dir1:" 7659 dotest branches2-14-rls-5 "$testcvs -q rls -R" \ 7660 "\.: 7661 CVSROOT 7662 first-dir 7663 7664 CVSROOT: 7665 access 7666 aclconfig 7667 checkoutlist 7668 commitinfo 7669 config 7670 cvswrappers 7671 group 7672 loginfo 7673 modules 7674 notify 7675 postadmin 7676 postproxy 7677 posttag 7678 postwatch 7679 preproxy 7680 rcsinfo 7681 taginfo 7682 verifymsg 7683 Emptydir 7684 7685 CVSROOT/Emptydir: 7686 7687 first-dir: 7688 file1 7689 dir1 7690 7691 first-dir/dir1:" 7692 dotest branches2-14-rls-6 "$testcvs -q rls -lRrb1" \ 7693 "\.: 7694 d--- $ISO8601DATE CVSROOT 7695 d--- $ISO8601DATE first-dir 7696 7697 CVSROOT: 7698 d--- $ISO8601DATE Emptydir 7699 7700 CVSROOT/Emptydir: 7701 7702 first-dir: 7703 ---- $ISO8601DATE 1\.1 file1 7704 ---- $ISO8601DATE 1\.1\.2\.1 file2 7705 d--- $ISO8601DATE dir1 7706 7707 first-dir/dir1: 7708 ---- $ISO8601DATE 1\.1\.2\.1 file3" 7709 dotest branches2-14-rls-7 "$testcvs -q rls -lRrb2" \ 7710 "\.: 7711 d--- $ISO8601DATE CVSROOT 7712 d--- $ISO8601DATE first-dir 7713 7714 CVSROOT: 7715 d--- $ISO8601DATE Emptydir 7716 7717 CVSROOT/Emptydir: 7718 7719 first-dir: 7720 ---- $ISO8601DATE 1\.1 file1 7721 d--- $ISO8601DATE dir1 7722 7723 first-dir/dir1:" 7724 7725 # Now some calls to ls. These are more appropriate here. 7726 dotest branches2-14-ls-1 "$testcvs ls" \ 7727 "file1 7728 dir1" 7729 dotest branches2-14-ls-2 "$testcvs ls -e" \ 7730 "/file1/1\.1/$DATE// 7731 D/dir1////" 7732 dotest branches2-14-ls-3 "$testcvs ls -R" \ 7733 "\.: 7734 file1 7735 dir1 7736 7737 dir1: 7738 file3" 7739 dotest branches2-14-ls-4 "$testcvs ls -eRrHEAD" \ 7740 "\.: 7741 /file1/1\.1/$DATE//THEAD 7742 D/dir1//// 7743 7744 dir1:" 7745 dotest branches2-14-ls-5 "$testcvs ls -eRrb1" \ 7746 "\.: 7747 /file1/1\.1/$DATE//Tb1 7748 /file2/1\.1\.2\.1/$DATE//Tb1 7749 D/dir1//// 7750 7751 dir1: 7752 /file3/1\.1\.2\.1/$DATE//Tb1" 7753 dotest branches2-14-ls-6 "$testcvs ls -eRrb2" \ 7754 "\.: 7755 /file1/1.1/$DATE//Tb2 7756 D/dir1//// 7757 7758 dir1:" 7759 # Nonexistant tags used to cause assertion failures. 7760 dotest_fail branches2-14-ls-7 "$testcvs ls -eRrnosuchtag" \ 7761 "$SPROG \[ls aborted\]: no such tag \`nosuchtag'" 7762 7763 # FIXME: Just clobbering the directory like this is a bit 7764 # tacky, although people generally expect it to work. Maybe 7765 # we should release it instead. We do it a few other places 7766 # below as well. 7767 rm -r dir1 7768 dotest branches2-15 "${testcvs} update -d -j b1 dir1" \ 7769 "${SPROG} update: Updating dir1 7770 U dir1/file3" 7771 # FIXCVS: The `No revision control file' stuff seems to be 7772 # CVS's way of telling us that we're adding the file on a 7773 # branch, and the file is not on that branch yet. This 7774 # should be nicer. 7775 dotest branches2-16 "${testcvs} -q status" \ 7776 "=================================================================== 7777 File: file1 Status: Up-to-date 7778 7779 Working revision: 1\.1.* 7780 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file1,v 7781 Commit Identifier: ${commitid} 7782 Sticky Tag: b2 (branch: 1\.1\.4) 7783 Sticky Date: (none) 7784 Sticky Options: (none) 7785 7786 =================================================================== 7787 File: file3 Status: Locally Added 7788 7789 Working revision: New file! 7790 Repository revision: No revision control file 7791 Sticky Tag: b2 - MISSING from RCS file! 7792 Sticky Date: (none) 7793 Sticky Options: (none)" 7794 7795 cd ../../trunk/first-dir 7796 dotest branches2-17 "${testcvs} update -d -P dir1" \ 7797 "${SPROG} update: Updating dir1" 7798 dotest_fail branches2-18 "test -d dir1" 7799 dotest branches2-19 "${testcvs} update -d -P -r b1 dir1" \ 7800 "${SPROG} update: Updating dir1 7801 U dir1/file3" 7802 dotest branches2-20 "${testcvs} -q status" \ 7803 "=================================================================== 7804 File: file1 Status: Up-to-date 7805 7806 Working revision: 1\.1.* 7807 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file1,v 7808 Commit Identifier: ${commitid} 7809 Sticky Tag: (none) 7810 Sticky Date: (none) 7811 Sticky Options: (none) 7812 7813 =================================================================== 7814 File: file3 Status: Up-to-date 7815 7816 Working revision: 1\.1\.2\.1.* 7817 Repository revision: 1\.1\.2\.1 ${CVSROOT_DIRNAME}/first-dir/dir1/Attic/file3,v 7818 Commit Identifier: ${commitid} 7819 Sticky Tag: b1 (branch: 1\.1\.2) 7820 Sticky Date: (none) 7821 Sticky Options: (none)" 7822 7823 rm -r dir1 7824 dotest branches2-21 "${testcvs} update -d -P -j b1 dir1" \ 7825 "${SPROG} update: Updating dir1 7826 U dir1/file3" 7827 dotest branches2-22 "${testcvs} -q status" \ 7828 "=================================================================== 7829 File: file1 Status: Up-to-date 7830 7831 Working revision: 1\.1.* 7832 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file1,v 7833 Commit Identifier: ${commitid} 7834 Sticky Tag: (none) 7835 Sticky Date: (none) 7836 Sticky Options: (none) 7837 7838 =================================================================== 7839 File: file3 Status: Locally Added 7840 7841 Working revision: New file! 7842 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/dir1/Attic/file3,v 7843 Commit Identifier: ${commitid} 7844 Sticky Tag: (none) 7845 Sticky Date: (none) 7846 Sticky Options: (none)" 7847 7848 cd ../.. 7849 rm -r b1 b2 7850 7851 # Check out branch b1 twice. Crate a new directory in one 7852 # working directory, then do a cvs update in the other 7853 # working directory and see if the tags are right. 7854 mkdir b1a 7855 mkdir b1b 7856 cd b1b 7857 dotest branches2-23 "${testcvs} -q co -r b1 first-dir" \ 7858 'U first-dir/file1 7859 U first-dir/file2 7860 U first-dir/dir1/file3' 7861 cd ../b1a 7862 dotest branches2-24 "${testcvs} -q co -r b1 first-dir" \ 7863 'U first-dir/file1 7864 U first-dir/file2 7865 U first-dir/dir1/file3' 7866 cd first-dir 7867 mkdir dir2 7868 dotest branches2-25 "${testcvs} add dir2" \ 7869 "Directory ${CVSROOT_DIRNAME}/first-dir/dir2 added to the repository 7870 --> Using per-directory sticky tag "'`'"b1'" 7871 echo "file4 first revision" > dir2/file4 7872 dotest branches2-26 "${testcvs} add dir2/file4" \ 7873 "${SPROG}"' add: scheduling file `dir2/file4'\'' for addition on branch `b1'\'' 7874 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 7875 dotest branches2-27 "${testcvs} -q commit -madd" \ 7876 "$CVSROOT_DIRNAME/first-dir/dir2/Attic/file4,v <-- dir2/file4 7877 new revision: 1\.1\.2\.1; previous revision: 1\.1" 7878 7879 cd ../../b1b/first-dir 7880 dotest branches2-28 "${testcvs} update -d dir2" \ 7881 "${SPROG} update: Updating dir2 7882 U dir2/file4" 7883 cd dir2 7884 dotest branches2-29 "${testcvs} -q status" \ 7885 "=================================================================== 7886 File: file4 Status: Up-to-date 7887 7888 Working revision: 1\.1\.2\.1.* 7889 Repository revision: 1\.1\.2\.1 ${CVSROOT_DIRNAME}/first-dir/dir2/Attic/file4,v 7890 Commit Identifier: ${commitid} 7891 Sticky Tag: b1 (branch: 1\.1\.2) 7892 Sticky Date: (none) 7893 Sticky Options: (none)" 7894 dotest branches2-30 "cat CVS/Tag" 'Tb1' 7895 7896 # Test update -A on a subdirectory 7897 cd .. 7898 rm -r dir2 7899 dotest branches2-31 "${testcvs} update -A -d dir2" \ 7900 "${SPROG} update: Updating dir2" 7901 cd dir2 7902 dotest branches2-32 "${testcvs} -q status" '' 7903 dotest_fail branches2-33 "test -f CVS/Tag" 7904 7905 # Add a file on the trunk. 7906 echo "file5 first revision" > file5 7907 dotest branches2-34 "${testcvs} add file5" \ 7908 "${SPROG}"' add: scheduling file `file5'\'' for addition 7909 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 7910 dotest branches2-35 "${testcvs} -q commit -madd" \ 7911 "$CVSROOT_DIRNAME/first-dir/dir2/file5,v <-- file5 7912 initial revision: 1\.1" 7913 7914 cd ../../../trunk/first-dir 7915 dotest branches2-36 "${testcvs} -q update -d dir2" 'U dir2/file5' 7916 cd dir2 7917 dotest branches2-37 "${testcvs} -q status" \ 7918 "=================================================================== 7919 File: file5 Status: Up-to-date 7920 7921 Working revision: 1\.1.* 7922 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/dir2/file5,v 7923 Commit Identifier: ${commitid} 7924 Sticky Tag: (none) 7925 Sticky Date: (none) 7926 Sticky Options: (none)" 7927 dotest_fail branches2-38 "test -f CVS/status" 7928 7929 dotest branches2-39 "$testcvs rls -rb1 -l -R first-dir" \ 7930 "$SPROG rls: Listing module: \`first-dir' 7931 first-dir: 7932 ---- $ISO8601DATE 1\.1 file1 7933 ---- $ISO8601DATE 1\.1\.2\.1 file2 7934 d--- $ISO8601DATE dir1 7935 d--- $ISO8601DATE dir2 7936 7937 first-dir/dir1: 7938 ---- $ISO8601DATE 1\.1\.2\.1 file3 7939 7940 first-dir/dir2: 7941 ---- $ISO8601DATE 1\.1\.2\.1 file4" 7942 7943 dokeep 7944 cd ../../.. 7945 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 7946 rm -r trunk b1a b1b 7947 ;; 7948 7949 7950 7951 branches3) 7952 # test local branch number support 7953 7954 # This test is skipped in $remotehost mode since the 7955 # CVS_LOCAL_BRANCH_NUM is not inherited by the server process as it 7956 # is with :fork:, for hopefully obvious reasons. 7957 # 7958 # FIXCVS? Is this correct? Should CVS_LOCAL_BRANCH_NUM be sent as 7959 # a protocol extension or is it reasonable to only want this set on 7960 # the server? 7961 7962 if test -n "$remotehost"; then :;else 7963 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 7964 mkdir branches3; cd branches3 7965 7966 dotest branches3-1 "$testcvs -q co first-dir" 7967 cd first-dir 7968 echo "file1 first revision" > file1 7969 dotest branches3-2 "${testcvs} add file1" \ 7970 "${SPROG} add: scheduling file .file1. for addition 7971 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 7972 dotest branches3-3 "${testcvs} commit -m add file1" \ 7973 "${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1 7974 initial revision: 1\.1" 7975 7976 # Tag the file using a CVS_LOCAL_BRANCH_NUM of 1000 7977 CVS_LOCAL_BRANCH_NUM=1000; export CVS_LOCAL_BRANCH_NUM 7978 dotest branches3-4 "${testcvs} -q tag -b tag1" 'T file1' 7979 unset CVS_LOCAL_BRANCH_NUM 7980 dotest branches3-5 "${testcvs} -q log file1" \ 7981 " 7982 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 7983 Working file: file1 7984 head: 1\.1 7985 branch: 7986 locks: strict 7987 access list: 7988 symbolic names: 7989 tag1: 1\.1\.0\.1000 7990 keyword substitution: kv 7991 total revisions: 1; selected revisions: 1 7992 description: 7993 ---------------------------- 7994 revision 1.1 7995 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 7996 add 7997 =============================================================================" 7998 7999 dokeep 8000 cd ../.. 8001 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 8002 rm -r branches3 8003 fi # !$remotehost 8004 ;; 8005 8006 8007 8008 branches4) 8009 # test where a tag is a branch tag in some files and a revision 8010 # tag in others 8011 8012 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 8013 mkdir branches4; cd branches4 8014 8015 dotest branches4-1 "$testcvs -q co first-dir" 8016 cd first-dir 8017 mkdir branches mixed mixed2 versions 8018 dotest branches4-2 "${testcvs} -q add branches mixed mixed2 versions" \ 8019 "Directory ${CVSROOT_DIRNAME}/first-dir/branches added to the repository 8020 Directory ${CVSROOT_DIRNAME}/first-dir/mixed added to the repository 8021 Directory ${CVSROOT_DIRNAME}/first-dir/mixed2 added to the repository 8022 Directory ${CVSROOT_DIRNAME}/first-dir/versions added to the repository" 8023 8024 echo file1 >branches/file1 8025 echo file2 >branches/file2 8026 echo file3 >branches/file3 8027 echo file4 >branches/file4 8028 cp branches/file* mixed 8029 cp branches/file* mixed2 8030 cp branches/file* versions 8031 8032 dotest branches4-3 "${testcvs} -q add */file*" \ 8033 "${SPROG} add: use .${SPROG} commit. to add these files permanently" 8034 dotest branches4-3a "${testcvs} -Q ci -m." 8035 8036 dotest branches4-4 "${testcvs} -q tag xxx versions/file* mixed*/file1 mixed*/file3" \ 8037 "T versions/file1 8038 T versions/file2 8039 T versions/file3 8040 T versions/file4 8041 T mixed/file1 8042 T mixed/file3 8043 T mixed2/file1 8044 T mixed2/file3" 8045 8046 dotest branches4-5 "${testcvs} -q tag -b xxx branches/file* mixed*/file2 mixed*/file4" \ 8047 "T branches/file1 8048 T branches/file2 8049 T branches/file3 8050 T branches/file4 8051 T mixed/file2 8052 T mixed/file4 8053 T mixed2/file2 8054 T mixed2/file4" 8055 8056 # make sure we get the appropriate warnings when updating 8057 dotest branches4-6 "${testcvs} update -r xxx" \ 8058 "${SPROG} update: Updating \. 8059 ${SPROG} update: Updating branches 8060 ${SPROG} update: Updating mixed 8061 ${SPROG} update: warning: xxx is a branch tag in some files and a revision tag in others\. 8062 ${SPROG} update: Updating mixed2 8063 ${SPROG} update: warning: xxx is a branch tag in some files and a revision tag in others\. 8064 ${SPROG} update: Updating versions" 8065 8066 # make sure we don't get warned in quiet modes 8067 dotest branches4-7 "${testcvs} -q update -A" 8068 dotest branches4-8 "${testcvs} -q update -r xxx" 8069 dotest branches4-9 "${testcvs} -q update -A" 8070 dotest branches4-10 "${testcvs} -Q update -r xxx" 8071 8072 # make sure the Tag files are correct 8073 dotest branches4-11 "cat branches/CVS/Tag" "Txxx" 8074 dotest branches4-12 "cat mixed/CVS/Tag" "Nxxx" 8075 dotest branches4-13 "cat mixed2/CVS/Tag" "Nxxx" 8076 dotest branches4-14 "cat versions/CVS/Tag" "Nxxx" 8077 8078 # We only warn if there's mixed usage in a single directory. 8079 # We may want to consider changing that in the future. 8080 dotest branches4-15 "${testcvs} update -r xxx branches versions" \ 8081 "${SPROG} update: Updating branches 8082 ${SPROG} update: Updating versions" 8083 8084 dokeep 8085 cd ../.. 8086 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 8087 rm -r branches4 8088 ;; 8089 8090 8091 8092 tagc) 8093 # Test the tag -c option. 8094 mkdir 1; cd 1 8095 dotest tagc-1 "${testcvs} -q co -l ." '' 8096 mkdir first-dir 8097 dotest tagc-2 "${testcvs} add first-dir" \ 8098 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 8099 cd first-dir 8100 touch file1 file2 8101 dotest tagc-3 "${testcvs} add file1 file2" \ 8102 "${SPROG} add: scheduling file .file1. for addition 8103 ${SPROG} add: scheduling file .file2. for addition 8104 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 8105 dotest tagc-4 "${testcvs} -q ci -m add" \ 8106 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 8107 initial revision: 1\.1 8108 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 8109 initial revision: 1\.1" 8110 dotest tagc-5 "${testcvs} -q tag -c tag1" \ 8111 "T file1 8112 T file2" 8113 touch file1 file2 8114 dotest tagc-6 "${testcvs} -q tag -c tag2" \ 8115 "T file1 8116 T file2" 8117 # Avoid timestamp granularity bugs (FIXME: CVS should be 8118 # doing the sleep, right?). 8119 sleep 1 8120 echo myedit >>file1 8121 dotest tagc-6a "${testcvs} rm -f file2" \ 8122 "${SPROG} remove: scheduling .file2. for removal 8123 ${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 8124 touch file3 8125 dotest tagc-6b "${testcvs} add file3" \ 8126 "${SPROG} add: scheduling file .file3. for addition 8127 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 8128 dotest_fail tagc-7 "${testcvs} -q tag -c tag3" \ 8129 "${SPROG} tag: file1 is locally modified 8130 ${SPROG} tag: file2 is locally modified 8131 ${SPROG} tag: file3 is locally modified 8132 ${SPROG} \[tag aborted\]: correct the above errors first!" 8133 cd ../.. 8134 mkdir 2 8135 cd 2 8136 dotest tagc-8 "${testcvs} -q co first-dir" \ 8137 "U first-dir/file1 8138 U first-dir/file2" 8139 cd ../1/first-dir 8140 dotest tagc-9 "${testcvs} -q ci -m modify" \ 8141 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 8142 new revision: 1\.2; previous revision: 1\.1 8143 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 8144 new revision: delete; previous revision: 1\.1 8145 $CVSROOT_DIRNAME/first-dir/file3,v <-- file3 8146 initial revision: 1\.1" 8147 cd ../../2/first-dir 8148 dotest tagc-10 "${testcvs} -q tag -c tag4" \ 8149 "${SPROG} tag: \`file2' is no longer in the repository 8150 T file1 8151 T file2" 8152 8153 dokeep 8154 cd ../.. 8155 rm -r 1 2 8156 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 8157 ;; 8158 8159 8160 8161 update-p) 8162 # Make sure `cvs update -p -rT FILE' works from a branch when 8163 # FILE is already on the trunk and is being added to that branch. 8164 8165 mkdir 1; cd 1 8166 module=x 8167 8168 echo > unused-file 8169 8170 # Create the module. 8171 dotest update-p-1 \ 8172 "$testcvs -Q import -m. $module X Y" '' 8173 8174 file=F 8175 # Check it out and tag it. 8176 dotest update-p-2 "$testcvs -Q co $module" '' 8177 cd $module 8178 dotest update-p-3 "$testcvs -Q tag -b B" '' 8179 echo v1 > $file 8180 dotest update-p-4 "$testcvs -Q add $file" '' 8181 dotest update-p-5 "$testcvs -Q ci -m. $file" 8182 dotest update-p-6 "$testcvs -Q tag T $file" '' 8183 dotest update-p-7 "$testcvs -Q update -rB" '' 8184 8185 # This merge effectively adds file F on branch B. 8186 dotest update-p-8 "$testcvs -Q update -jT" '' 8187 8188 # Before the fix that prompted the addition of this test, 8189 # the following command would fail with this diagnostic: 8190 # cvs update: conflict: F created independently by second party 8191 dotest update-p-9 "$testcvs update -p -rT $file" \ 8192 "=================================================================== 8193 Checking out $file 8194 RCS: ${CVSROOT_DIRNAME}/$module/$file,v 8195 VERS: 1\.1 8196 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 8197 v1" 8198 8199 # Repeat the above, but with $file removed. 8200 # This exercises a slightly different code path. 8201 rm $file 8202 # Before the fix that prompted the addition of this test, 8203 # the following command would fail with this diagnostic: 8204 # cvs update: warning: new-born \`F' has disappeared 8205 dotest update-p-10 "$testcvs update -p -rT $file" \ 8206 "=================================================================== 8207 Checking out $file 8208 RCS: ${CVSROOT_DIRNAME}/$module/$file,v 8209 VERS: 1\.1 8210 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 8211 v1" 8212 8213 # Exercise yet another code path: 8214 # the one that involves reviving a `dead' file. 8215 # And a little more, for good measure... 8216 touch new 8217 dotest update-p-a1 "$testcvs -Q add new" '' 8218 dotest update-p-a2 "$testcvs -Q update -p new" '' 8219 dotest update-p-a3 "$testcvs -Q rm -f new" '' 8220 8221 # Both an update -A, *and* the following update are required 8222 # to return to the state of being on the trunk with a $file 8223 # that we can then remove. 8224 dotest update-p-undead-0 "$testcvs update -A" \ 8225 "${SPROG} update: Updating \. 8226 ${SPROG} update: warning: new-born \`$file' has disappeared" 8227 dotest update-p-undead-1 "$testcvs update" \ 8228 "${SPROG} update: Updating \. 8229 U $file" 8230 dotest update-p-undead-2 "$testcvs -Q update -p -rT $file" v1 8231 dotest update-p-undead-3 "$testcvs -Q rm -f $file" '' 8232 dotest update-p-undead-4 "$testcvs -Q update -p -rT $file" v1 8233 dotest update-p-undead-5 "$testcvs -Q ci -m. $file" 8234 dotest update-p-undead-6 "$testcvs -Q update -p -rT $file" v1 8235 echo v2 > $file 8236 dotest update-p-undead-7 "$testcvs -Q update -p -rT $file" v1 8237 dotest update-p-undead-8 "$testcvs add $file" \ 8238 "$SPROG add: Re-adding file .$file. after dead revision 1\.2\. 8239 $SPROG add: use \`$SPROG commit' to add this file permanently" 8240 8241 dotest update-p-undead-9 "$testcvs -Q update -p -rT $file" v1 8242 8243 dokeep 8244 cd ../.. 8245 rm -rf 1 8246 modify_repo rm -rf $CVSROOT_DIRNAME/$module 8247 ;; 8248 8249 8250 8251 tagf) 8252 # More tagging tests, including using tag -F -B to convert a 8253 # branch tag to a regular tag and recovering thereof. 8254 8255 # Setup; check in first-dir/file1 8256 mkdir 1; cd 1 8257 dotest tagf-1 "${testcvs} -q co -l ." '' 8258 mkdir first-dir 8259 dotest tagf-2 "${testcvs} add first-dir" \ 8260 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 8261 cd first-dir 8262 touch file1 file2 8263 dotest tagf-3 "${testcvs} add file1 file2" \ 8264 "${SPROG} add: scheduling file .file1. for addition 8265 ${SPROG} add: scheduling file .file2. for addition 8266 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 8267 dotest tagf-4 "${testcvs} -q ci -m add" \ 8268 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 8269 initial revision: 1\.1 8270 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 8271 initial revision: 1\.1" 8272 8273 # Now create a branch and commit a revision there. 8274 dotest tagf-5 "${testcvs} -q tag -b br" "T file1 8275 T file2" 8276 dotest tagf-6 "${testcvs} -q update -r br" "" 8277 echo brmod >> file1 8278 echo brmod >> file2 8279 dotest tagf-7 "${testcvs} -q ci -m modify" \ 8280 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 8281 new revision: 1\.1\.2\.1; previous revision: 1\.1 8282 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 8283 new revision: 1\.1\.2\.1; previous revision: 1\.1" 8284 # Here we try to make it a non-branch tag, but will 8285 # succeed in getting only warnings, even with -F 8286 # because converting a branch tag to non-branch 8287 # is potentially catastrophic. 8288 dotest tagf-8a "${testcvs} -q tag -F br" \ 8289 "${SPROG} tag: file1: Not moving branch tag .br. from 1\.1\.2\.1 to 1\.1\\.2\.1\. 8290 ${SPROG} tag: file2: Not moving branch tag .br. from 1\.1\.2\.1 to 1\.1\.2\.1\." 8291 # however, if we *really* are sure we want to move a branch tag, 8292 # "-F -B" will do the trick 8293 dotest tagf-8 "${testcvs} -q tag -F -B br" "T file1 8294 T file2" 8295 echo moremod >> file1 8296 echo moremod >> file2 8297 dotest tagf-9 "${testcvs} -q status -v file1" \ 8298 "=================================================================== 8299 File: file1 Status: Locally Modified 8300 8301 Working revision: 1\.1\.2\.1.* 8302 Repository revision: 1\.1\.2\.1 ${CVSROOT_DIRNAME}/first-dir/file1,v 8303 Commit Identifier: ${commitid} 8304 Sticky Tag: br (revision: 1\.1\.2\.1) 8305 Sticky Date: (none) 8306 Sticky Options: (none) 8307 8308 Existing Tags: 8309 br (revision: 1\.1\.2\.1)" 8310 8311 # Now, how do we recover? 8312 dotest tagf-10 "${testcvs} -q tag -d br" "D file1 8313 D file2" 8314 # This creates a new branch, 1.1.4. See the code in RCS_magicrev 8315 # which will notice that there is a (non-magic) 1.1.2 and thus 8316 # skip that number. 8317 dotest tagf-11 "${testcvs} -q tag -r 1.1 -b br file1" "T file1" 8318 # Fix it with admin -n (cf admin-18, admin-26-4). 8319 dotest tagf-12 "${testcvs} -q admin -nbr:1.1.2 file2" \ 8320 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 8321 done" 8322 # Another variation on the file2 test would be to use two working 8323 # directories so that the update -r br would need to 8324 # a merge to get from 1.1.2.1 to the head of the 1.1.2 branch. 8325 dotest tagf-13 "${testcvs} -q update -r br" \ 8326 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 8327 retrieving revision 1\.1\.2\.1 8328 retrieving revision 1\.1 8329 Merging differences between 1\.1\.2\.1 and 1\.1 into file1 8330 rcsmerge: warning: conflicts during merge 8331 ${SPROG} update: conflicts found in file1 8332 C file1 8333 M file2" 8334 # CVS is giving a conflict because we are trying to get back to 8335 # 1.1.4. I'm not sure why it is a conflict rather than just 8336 # "M file1". 8337 dotest tagf-14 "cat file1" \ 8338 "<<<<<<< file1 8339 brmod 8340 moremod 8341 [=]====== 8342 [>]>>>>>> 1\.1" 8343 echo resolve >file1 8344 dotest tagf-15 "${testcvs} -q ci -m recovered" \ 8345 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 8346 new revision: 1\.1\.4\.1; previous revision: 1\.1 8347 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 8348 new revision: 1\.1\.2\.2; previous revision: 1\.1\.2\.1" 8349 # try accidentally deleting branch tag, "tag -d" 8350 dotest_fail tagf-16 "${testcvs} tag -d br" \ 8351 "${SPROG} tag: Untagging \. 8352 ${SPROG} tag: Not removing branch tag .br. from .${CVSROOT_DIRNAME}/first-dir/file1,v.\. 8353 ${SPROG} tag: Not removing branch tag .br. from .${CVSROOT_DIRNAME}/first-dir/file2,v.\." 8354 # try accidentally deleting branch tag, "rtag -d" 8355 dotest_fail tagf-17 "${testcvs} rtag -d br first-dir" \ 8356 "${SPROG} rtag: Untagging first-dir 8357 ${SPROG} rtag: Not removing branch tag .br. from .${CVSROOT_DIRNAME}/first-dir/file1,v.\. 8358 ${SPROG} rtag: Not removing branch tag .br. from .${CVSROOT_DIRNAME}/first-dir/file2,v.\." 8359 # try accidentally converting branch tag to non-branch tag "tag -F" 8360 dotest tagf-18 "${testcvs} tag -r1.1 -F br file1" \ 8361 "${SPROG} tag: file1: Not moving branch tag .br. from 1\.1\.4\.1 to 1\.1\." 8362 # try accidentally converting branch tag to non-branch tag "rtag -F" 8363 dotest tagf-19 "${testcvs} rtag -r1.1 -F br first-dir" \ 8364 "${SPROG} rtag: Tagging first-dir 8365 ${SPROG} rtag: first-dir/file1: Not moving branch tag .br. from 1\.1\.4\.1 to 1\.1\. 8366 ${SPROG} rtag: first-dir/file2: Not moving branch tag .br. from 1\.1\.2\.2 to 1\.1\." 8367 # create a non-branch tag 8368 dotest tagf-20 "${testcvs} rtag regulartag first-dir" \ 8369 "${SPROG} rtag: Tagging first-dir" 8370 # try accidentally converting non-branch tag to branch tag (tag -F -B -b) 8371 dotest tagf-21 "${testcvs} tag -F -B -b regulartag file1" \ 8372 "${SPROG} tag: file1: Not moving non-branch tag .regulartag. from 1\.1 to 1\.1\.4\.1\.0\.2 due to .-B. option\." 8373 # try accidentally converting non-branch tag to branch rtag (rtag -F -B -b) 8374 dotest tagf-22 "${testcvs} rtag -F -B -b regulartag first-dir" \ 8375 "${SPROG} rtag: Tagging first-dir 8376 ${SPROG} rtag: first-dir/file1: Not moving non-branch tag .regulartag. from 1\.1 to 1\.1\.0\.6 due to .-B. option\. 8377 ${SPROG} rtag: first-dir/file2: Not moving non-branch tag .regulartag. from 1\.1 to 1\.1\.0\.4 due to .-B. option\." 8378 # Try accidentally deleting non-branch: (tag -d -B) 8379 dotest_fail tagf-23 "${testcvs} tag -d -B regulartag file1" \ 8380 "${SPROG} tag: Not removing non-branch tag .regulartag. from .${CVSROOT_DIRNAME}/first-dir/file1,v. due to .-B. option\." 8381 # Try accidentally deleting non-branch: (rtag -d -B) 8382 dotest_fail tagf-24 \ 8383 "${testcvs} rtag -d -B regulartag first-dir" \ 8384 "${SPROG} rtag: Untagging first-dir 8385 ${SPROG} rtag: Not removing non-branch tag .regulartag. from .${CVSROOT_DIRNAME}/first-dir/file1,v. due to .-B. option\. 8386 ${SPROG} rtag: Not removing non-branch tag .regulartag. from .${CVSROOT_DIRNAME}/first-dir/file2,v. due to .-B. option\." 8387 8388 # the following tests (throught the next commit) keep moving the same 8389 # tag back and forth between 1.1.6 & 1.1.8 in file1 and between 8390 # 1.1.4 and 1.1.6 in file2 since nothing was checked in on some of 8391 # these branches and CVS only tracks branches via tags unless they contain data. 8392 8393 # try intentionally converting non-branch tag to branch tag (tag -F -b) 8394 dotest tagf-25a "${testcvs} tag -F -b regulartag file1" "T file1" 8395 # try intentionally moving a branch tag to a newly created branch (tag -F -b -B) 8396 dotest tagf-25b "${testcvs} tag -F -B -b -r1.1 regulartag file1" \ 8397 "T file1" 8398 # try intentionally converting mixed tags to branch tags (rtag -F -b) 8399 dotest tagf-26a "${testcvs} rtag -F -b regulartag first-dir" \ 8400 "${SPROG} rtag: Tagging first-dir 8401 ${SPROG} rtag: first-dir/file1: Not moving branch tag .regulartag. from 1\.1 to 1\.1\.0\.8\." 8402 # try intentionally converting a branch to a new branch tag (rtag -F -b -B) 8403 dotest tagf-26b "${testcvs} rtag -F -B -b -r1.1 regulartag first-dir" \ 8404 "${SPROG} rtag: Tagging first-dir" 8405 # update to our new branch 8406 dotest tagf-27 "${testcvs} update -r regulartag" \ 8407 "${SPROG} update: Updating \. 8408 U file1 8409 U file2" 8410 # commit some changes and see that all rev numbers look right 8411 echo changes >> file1 8412 echo changes >> file2 8413 dotest tagf-28 "${testcvs} ci -m changes" \ 8414 "${CPROG} commit: Examining \. 8415 ${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1 8416 new revision: 1\.1\.8\.1; previous revision: 1\.1 8417 ${CVSROOT_DIRNAME}/first-dir/file2,v <-- file2 8418 new revision: 1\.1\.6\.1; previous revision: 1\.1" 8419 # try intentional branch to non-branch (tag -F -B) 8420 dotest tagf-29 "${testcvs} tag -F -B -r1.1 regulartag file1" \ 8421 "T file1" 8422 # try non-branch to non-branch (tag -F -B) 8423 dotest tagf-29a "${testcvs} tag -F -B -r br regulartag file1" \ 8424 "${SPROG} tag: file1: Not moving non-branch tag .regulartag. from 1\.1 to 1\.1\.4\.1 due to .-B. option\." 8425 # try mixed-branch to non-branch (rtag -F -B ) 8426 dotest tagf-29b "${testcvs} rtag -F -B -r br regulartag first-dir" \ 8427 "${SPROG} rtag: Tagging first-dir 8428 ${SPROG} rtag: first-dir/file1: Not moving non-branch tag .regulartag. from 1\.1 to 1\.1\.4\.1 due to .-B. option\." 8429 # at this point, regulartag is a regular tag within 8430 # file1 and file2 8431 8432 # try intentional branch to non-branch (rtag -F -B) 8433 dotest tagf-30 "${testcvs} rtag -F -B -r1.1 br first-dir" \ 8434 "${SPROG} rtag: Tagging first-dir" 8435 # create a branch tag so we can try to delete it. 8436 dotest tagf-31 "${testcvs} rtag -b brtag first-dir" \ 8437 "${SPROG} rtag: Tagging first-dir" 8438 8439 # try intentinal deletion of branch tag (tag -d -B) 8440 dotest tagf-32 "${testcvs} tag -d -B brtag file1" "D file1" 8441 # try intentinal deletion of branch tag (rtag -d -B) 8442 dotest tagf-33 "${testcvs} rtag -d -B brtag first-dir" \ 8443 "${SPROG} rtag: Untagging first-dir" 8444 8445 dokeep 8446 cd ../.. 8447 rm -r 1 8448 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 8449 ;; 8450 8451 8452 8453 tag-space) 8454 # Test tags with spaces in the names. 8455 # 8456 # Prior to releases 1.11.18 & 1.12.10, some commands used with 8457 # tags with spaces in the names could hang CVS. 8458 8459 # Setup; check in first-dir/file1 8460 mkdir 1; cd 1 8461 dotest tag-space-init-1 "$testcvs -q co -l ." 8462 mkdir first-dir 8463 dotest tag-space-init-2 "$testcvs add first-dir" \ 8464 "Directory $CVSROOT_DIRNAME/first-dir added to the repository" 8465 cd first-dir 8466 touch file1 8467 dotest tag-space-init-3 "$testcvs add file1" \ 8468 "$SPROG add: scheduling file \`file1' for addition 8469 $SPROG add: use \`$SPROG commit' to add this file permanently" 8470 dotest tag-space-init-4 "$testcvs -Q ci -m add" 8471 8472 # Reportedly, the following two tags make it past WinCVS. 8473 dotest_fail tag-space-1 "$testcvs tag ' spacetag '" \ 8474 "$SPROG \[tag aborted\]: tag \` spacetag ' must start with a letter" 8475 dotest_fail tag-space-2 "$testcvs tag 'spacetag '" \ 8476 "$SPROG \[tag aborted\]: tag \`spacetag ' has non-visible graphic characters" 8477 8478 if $remote; then 8479 # Verify that this isn't a client check. 8480 dotest tag-space-3 "$testcvs server" \ 8481 "E $SPROG \[tag aborted\]: tag \` spacetag ' must start with a letter 8482 error " <<EOF 8483 Root $CVSROOT_DIRNAME 8484 UseUnchanged 8485 Argument -- 8486 Argument spacetag 8487 Directory . 8488 $CVSROOT_DIRNAME/first-dir 8489 Entry /file1/1.1/// 8490 Unchanged file1 8491 tag 8492 EOF 8493 8494 dotest tag-space-4 "$testcvs server" \ 8495 "E $SPROG \[tag aborted\]: tag \`spacetag ' has non-visible graphic characters 8496 error " <<EOF 8497 Root $CVSROOT_DIRNAME 8498 UseUnchanged 8499 Argument -- 8500 Argument spacetag 8501 Directory . 8502 $CVSROOT_DIRNAME/first-dir 8503 Entry /file1/1.1/// 8504 Unchanged file1 8505 tag 8506 EOF 8507 fi # $remote 8508 8509 # Any number of normal tags and branches were handled correctly. 8510 dotest tag-space-5 "$testcvs -Q tag t1" 8511 dotest tag-space-5b "$testcvs -Q tag t2" 8512 dotest tag-space-5c "$testcvs -Q tag -b b1" 8513 8514 cd ../.. 8515 mkdir 2; cd 2 8516 8517 # But once a vendor branch exists, it's all over. 8518 mkdir project; cd project 8519 touch file1 8520 dotest tag-space-init-4 \ 8521 "$testcvs -Q import -mimport second-dir VENDOR RELEASE" 8522 8523 cd .. 8524 8525 dotest_fail tag-space-6 "$testcvs -Q co -r ' spacetag ' first-dir" \ 8526 "$SPROG \[checkout aborted\]: tag \` spacetag ' must start with a letter" 8527 8528 # But when any files were imported, this test hung prior to CVS 8529 # versions 1.11.18 & 1.12.10. 8530 dotest_fail tag-space-7 "$testcvs -Q co -r ' spacetag ' second-dir" \ 8531 "$SPROG \[checkout aborted\]: tag \` spacetag ' must start with a letter" 8532 8533 if $remote; then 8534 # I based the client input in the next two tests on actual input 8535 # from WinCVS 1.2. 8536 dotest tag-space-8 "$testcvs server" \ 8537 "E $SPROG \[checkout aborted\]: tag \` spacetag ' must start with a letter 8538 error " <<EOF 8539 Root $CVSROOT_DIRNAME 8540 Argument -P 8541 Argument -r 8542 Argument spacetag 8543 Argument first-dir 8544 Directory . 8545 $CVSROOT_DIRNAME 8546 co 8547 EOF 8548 8549 # Verify the test is not on the client side. 8550 dotest tag-space-9 "$testcvs server" \ 8551 "E $SPROG \[checkout aborted\]: tag \` spacetag ' must start with a letter 8552 error " <<EOF 8553 Root $CVSROOT_DIRNAME 8554 Argument -P 8555 Argument -r 8556 Argument spacetag 8557 Argument second-dir 8558 Directory . 8559 $CVSROOT_DIRNAME 8560 co 8561 EOF 8562 fi # $remote 8563 8564 dotest tag-space-10 "$testcvs -Q co second-dir" 8565 cd second-dir 8566 8567 # This test would also hang. 8568 dotest_fail tag-space-11 "$testcvs -Q up -r ' spacetag '" \ 8569 "$SPROG \[update aborted\]: tag \` spacetag ' must start with a letter" 8570 8571 if $remote; then 8572 dotest tag-space-12 "$testcvs server" \ 8573 "E $SPROG \[update aborted\]: tag \` spacetag ' must start with a letter 8574 error " <<EOF 8575 Root $CVSROOT_DIRNAME 8576 Argument -r 8577 Argument spacetag 8578 Argument -u 8579 Argument -- 8580 Directory . 8581 $CVSROOT_DIRNAME 8582 Unchanged file1 8583 update 8584 EOF 8585 fi # $remote 8586 8587 # I'm skipping tests for other commands that may have had the same 8588 # problem. Hopefully, if a new issue arises, one of the above tests 8589 # will catch the problem. 8590 8591 if $keep; then 8592 echo Keeping $TESTDIR and exiting due to --keep 8593 exit 0 8594 fi 8595 8596 cd ../.. 8597 rm -r 1 2 8598 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir \ 8599 $CVSROOT_DIRNAME/second-dir 8600 ;; 8601 8602 8603 8604 rcslib) 8605 # Test librarification of RCS. 8606 # First: test whether `cvs diff' handles $Name expansion 8607 # correctly. We diff two revisions with their symbolic tags; 8608 # neither tag should be expanded in the output. Also diff 8609 # one revision with the working copy. 8610 8611 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 8612 dotest rcsdiff-1 "${testcvs} -q co first-dir" '' 8613 cd first-dir 8614 echo "I am the first foo, and my name is $""Name$." > foo.c 8615 dotest rcsdiff-2 "${testcvs} add -m new-file foo.c" \ 8616 "${SPROG} add: scheduling file .foo\.c. for addition 8617 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 8618 dotest rcsdiff-3 "${testcvs} commit -m rev1 foo.c" \ 8619 "${CVSROOT_DIRNAME}/first-dir/foo.c,v <-- foo\.c 8620 initial revision: 1\.1" 8621 dotest rcsdiff-4 "${testcvs} tag first foo.c" "T foo\.c" 8622 dotest rcsdiff-5 "${testcvs} update -p -r first foo.c" \ 8623 "=================================================================== 8624 Checking out foo\.c 8625 RCS: ${CVSROOT_DIRNAME}/first-dir/foo\.c,v 8626 VERS: 1\.1 8627 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 8628 I am the first foo, and my name is \$""Name: first \$\." 8629 8630 echo "I am the second foo, and my name is $""Name$." > foo.c 8631 dotest rcsdiff-6 "${testcvs} commit -m rev2 foo.c" \ 8632 "${CVSROOT_DIRNAME}/first-dir/foo\.c,v <-- foo\.c 8633 new revision: 1\.2; previous revision: 1\.1" 8634 dotest rcsdiff-7 "${testcvs} tag second foo.c" "T foo\.c" 8635 dotest rcsdiff-8 "${testcvs} update -p -r second foo.c" \ 8636 "=================================================================== 8637 Checking out foo\.c 8638 RCS: ${CVSROOT_DIRNAME}/first-dir/foo\.c,v 8639 VERS: 1\.2 8640 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 8641 I am the second foo, and my name is \$""Name: second \$\." 8642 8643 dotest_fail rcsdiff-9 "${testcvs} diff -r first -r second" \ 8644 "${SPROG} diff: Diffing \. 8645 Index: foo\.c 8646 =================================================================== 8647 RCS file: ${CVSROOT_DIRNAME}/first-dir/foo\.c,v 8648 retrieving revision 1\.1 8649 retrieving revision 1\.2 8650 diff -r1\.1 -r1\.2 8651 1c1 8652 < I am the first foo, and my name is \$""Name: \$\. 8653 --- 8654 > I am the second foo, and my name is \$""Name: \$\." 8655 8656 echo "I am the once and future foo, and my name is $""Name$." > foo.c 8657 dotest_fail rcsdiff-10 "${testcvs} diff -r first" \ 8658 "${SPROG} diff: Diffing \. 8659 Index: foo\.c 8660 =================================================================== 8661 RCS file: ${CVSROOT_DIRNAME}/first-dir/foo\.c,v 8662 retrieving revision 1\.1 8663 diff -r1\.1 foo\.c 8664 1c1 8665 < I am the first foo, and my name is \$""Name: \$\. 8666 --- 8667 > I am the once and future foo, and my name is \$""Name\$\." 8668 8669 # Test handling of libdiff options. diff gets quite enough 8670 # of a workout elsewhere in sanity.sh, so we assume that it's 8671 # mostly working properly if it passes all the other tests. 8672 # The main one we want to try is regex handling, since we are 8673 # using CVS's regex matcher and not diff's. 8674 8675 cat >rgx.c <<EOF 8676 test_regex (whiz, bang) 8677 { 8678 foo; 8679 bar; 8680 baz; 8681 grumble; 8682 } 8683 EOF 8684 8685 dotest rcslib-diffrgx-1 "${testcvs} -q add -m '' rgx.c" \ 8686 "${SPROG} add: use .${SPROG} commit. to add this file permanently" 8687 dotest rcslib-diffrgx-2 "${testcvs} -q ci -m '' rgx.c" \ 8688 "$CVSROOT_DIRNAME/first-dir/rgx\.c,v <-- rgx\.c 8689 initial revision: 1\.1" 8690 cat >rgx.c <<EOF 8691 test_regex (whiz, bang) 8692 { 8693 foo; 8694 bar; 8695 baz; 8696 mumble; 8697 } 8698 EOF 8699 # Use dotest_fail because exit status from `cvs diff' must be 1. 8700 # 8701 # Incidentally test that CVS no longer splits diff arguments on 8702 # spaces. 8703 dotest_fail rcslib-diffrgx-3 "$testcvs diff -c -F'.* (' rgx.c" \ 8704 "Index: rgx\.c 8705 =================================================================== 8706 RCS file: ${CVSROOT_DIRNAME}/first-dir/rgx\.c,v 8707 retrieving revision 1\.1 8708 diff -c -F '\.\* (' -r1\.1 rgx\.c 8709 \*\*\* rgx\.c ${RFCDATE} 1\.1 8710 --- rgx\.c ${RFCDATE} 8711 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* test_regex (whiz, bang) 8712 \*\*\* 3,7 \*\*\*\* 8713 foo; 8714 bar; 8715 baz; 8716 ! grumble; 8717 } 8718 --- 3,7 ---- 8719 foo; 8720 bar; 8721 baz; 8722 ! mumble; 8723 }" 8724 8725 # Tests of rcsmerge/diff3. Merge operations get a good general 8726 # workout elsewhere; we want to make sure that options are still 8727 # handled properly. Try merging two branches with -kv, to test 8728 # both -j and -k switches. 8729 8730 cd .. 8731 8732 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 8733 rm -r first-dir 8734 8735 mkdir 1; cd 1 8736 dotest rcslib-merge-1 "$testcvs -q co -l ." 8737 mkdir first-dir 8738 dotest rcslib-merge-2 "$testcvs -q add first-dir" \ 8739 "Directory $CVSROOT_DIRNAME.*/first-dir added to the repository" 8740 cd ..; rm -r 1 8741 8742 dotest rcslib-merge-3 "$testcvs -q co first-dir" "" 8743 cd first-dir 8744 8745 echo '$''Revision$' > file1 8746 echo '2' >> file1 8747 echo '3' >> file1 8748 dotest rcslib-merge-4 "${testcvs} -q add file1" \ 8749 "${SPROG} add: use .${SPROG} commit. to add this file permanently" 8750 dotest rcslib-merge-5 "${testcvs} -q commit -m '' file1" \ 8751 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 8752 initial revision: 1\.1" 8753 sed -e 's/2/two/' file1 > f; mv f file1 8754 dotest rcslib-merge-6 "${testcvs} -q commit -m '' file1" \ 8755 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 8756 new revision: 1\.2; previous revision: 1\.1" 8757 dotest rcslib-merge-7 "${testcvs} -q tag -b -r 1.1 patch1" "T file1" 8758 dotest rcslib-merge-8 "${testcvs} -q update -r patch1" "[UP] file1" 8759 dotest rcslib-merge-9 "${testcvs} -q status" \ 8760 "=================================================================== 8761 File: file1 Status: Up-to-date 8762 8763 Working revision: 1\.1.* 8764 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file1,v 8765 Commit Identifier: ${commitid} 8766 Sticky Tag: patch1 (branch: 1\.1\.2) 8767 Sticky Date: (none) 8768 Sticky Options: (none)" 8769 dotest rcslib-merge-10 "cat file1" \ 8770 '$''Revision: 1\.1 $ 8771 2 8772 3' 8773 sed -e 's/3/three/' file1 > f; mv f file1 8774 dotest rcslib-merge-11 "${testcvs} -q commit -m '' file1" \ 8775 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 8776 new revision: 1\.1\.2\.1; previous revision: 1\.1" 8777 dotest rcslib-merge-12 "${testcvs} -q update -kv -j1.2" \ 8778 "U file1 8779 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 8780 retrieving revision 1\.1 8781 retrieving revision 1\.2 8782 Merging differences between 1\.1 and 1\.2 into file1 8783 rcsmerge: warning: conflicts during merge" 8784 dotest rcslib-merge-13 "cat file1" \ 8785 "<<<<<<< file1 8786 1\.1\.2\.1 8787 2 8788 three 8789 [=]====== 8790 1\.2 8791 two 8792 3 8793 [>]>>>>>> 1\.2" 8794 8795 # Test behavior of symlinks in the repository. 8796 if test -n "$remotehost"; then 8797 # Create the link on the remote system. This is because Cygwin's 8798 # Windows support creates *.lnk files for Windows. When creating 8799 # these in an SMB share from UNIX, these links won't work from the 8800 # UNIX side. 8801 modify_repo $CVS_RSH $remotehost "'ln -s file1,v $CVSROOT_DIRNAME/first-dir/file2,v'" 8802 else 8803 modify_repo ln -s file1,v $CVSROOT_DIRNAME/first-dir/file2,v 8804 fi 8805 dotest rcslib-symlink-2 "$testcvs update file2" "U file2" 8806 echo "This is a change" >> file2 8807 dotest rcslib-symlink-3 "$testcvs ci -m because file2" \ 8808 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file2 8809 new revision: 1\.1\.2\.2; previous revision: 1\.1\.2\.1" 8810 8811 # Switch as for rcslib-symlink-1 8812 if test -n "$remotehost"; then 8813 dotest rcslib-symlink-4 "$CVS_RSH $remotehost 'ls -l $CVSROOT_DIRNAME/first-dir/file2,v'" \ 8814 ".*$CVSROOT_DIRNAME/first-dir/file2,v -> file1,v" 8815 else 8816 dotest rcslib-symlink-4 "ls -l $CVSROOT_DIRNAME/first-dir/file2,v" \ 8817 ".*$CVSROOT_DIRNAME/first-dir/file2,v -> file1,v" 8818 fi 8819 8820 # CVS was failing to check both the symlink and the file 8821 # for timestamp changes for a while. Test that. 8822 rm file1 8823 dotest rcslib-symlink-3a "${testcvs} -q up file1" \ 8824 "${SPROG} update: warning: \`file1' was lost 8825 U file1" 8826 echo "This is a change" >> file1 8827 dotest rcslib-symlink-3b "${testcvs} ci -m because file1" \ 8828 "${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1 8829 new revision: 1\.1\.2\.[0-9]*; previous revision: 1\.1\.2\.[0-9]*" 8830 dotest rcslib-symlink-3c "${testcvs} update file2" "[UP] file2" 8831 8832 echo some new text >file3 8833 dotest rcslib-symlink-3d "${testcvs} -Q add file3" '' 8834 dotest rcslib-symlink-3e "$testcvs -Q ci -mtest file3" 8835 8836 rm -f ${CVSROOT_DIRNAME}/first-dir/file2,v 8837 # As for rcslib-symlink-1 8838 if test -n "$remotehost"; then 8839 modify_repo "$CVS_RSH $remotehost 'ln -s Attic/file3,v $CVSROOT_DIRNAME/first-dir/file2,v'" 8840 else 8841 modify_repo ln -s Attic/file3,v $CVSROOT_DIRNAME/first-dir/file2,v 8842 fi 8843 8844 dotest rcslib-symlink-3g "$testcvs update file2" "U file2" 8845 8846 # restore the link to file1 for the following tests 8847 dotest rcslib-symlink-3i "$testcvs -Q rm -f file3" '' 8848 dotest rcslib-symlink-3j "$testcvs -Q ci -mwhatever file3" 8849 rm -f $CVSROOT_DIRNAME/first-dir/file2,v 8850 rm -f $CVSROOT_DIRNAME/first-dir/Attic/file3,v 8851 # As for rcslib-symlink-1 8852 if test -n "$remotehost"; then 8853 modify_repo "$CVS_RSH $remotehost 'ln -s file1,v $CVSROOT_DIRNAME/first-dir/file2,v'" 8854 else 8855 modify_repo ln -s file1,v $CVSROOT_DIRNAME/first-dir/file2,v 8856 fi 8857 8858 # Test 5 reveals a problem with having symlinks in the 8859 # repository. CVS will try to tag both of the files 8860 # separately. After processing one, it will do the same 8861 # operation to the other, which is actually the same file, 8862 # so the tag will already be there. FIXME: do we bother 8863 # changing operations to notice cases like this? This 8864 # strikes me as a difficult problem. -Noel 8865 dotest rcslib-symlink-5 "$testcvs tag the_tag" \ 8866 "$SPROG tag: Tagging . 8867 T file1 8868 W file2 : the_tag already exists on version 1.1.2.3 : NOT MOVING tag to version 1.1.2.1" 8869 # As for rcslib-symlink-1 8870 if test -n "$remotehost"; then 8871 dotest rcslib-symlink-6 "$CVS_RSH $remotehost 'ls -l $CVSROOT_DIRNAME/first-dir/file2,v'" \ 8872 ".*$CVSROOT_DIRNAME/first-dir/file2,v -> file1,v" 8873 else 8874 dotest rcslib-symlink-6 "ls -l $CVSROOT_DIRNAME/first-dir/file2,v" \ 8875 ".*$CVSROOT_DIRNAME/first-dir/file2,v -> file1,v" 8876 fi 8877 8878 # Symlinks tend to interact poorly with the Attic. 8879 cd .. 8880 mkdir 2; cd 2 8881 dotest rcslib-symlink-7 "$testcvs -q co first-dir" \ 8882 "U first-dir/file1 8883 U first-dir/file2" 8884 cd first-dir 8885 dotest rcslib-symlink-8 "$testcvs rm -f file2" \ 8886 "$SPROG remove: scheduling .file2. for removal 8887 $SPROG remove: use .$SPROG commit. to remove this file permanently" 8888 dotest rcslib-symlink-9 "$testcvs -q ci -m rm-it" \ 8889 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file2 8890 new revision: delete; previous revision: 1\.2" 8891 # OK, why this message happens twice is relatively clear 8892 # (the check_* and rtag_* calls to start_recursion). 8893 # Why it happens a third time I didn't try to find out. 8894 # 8895 # DRP: One of the error messages disappeared while I was making 8896 # proxy modifications. Until I detect a deeper issue, I'm not 8897 # going to stress over it. 8898 # 8899 # DRP: Both messages disappear starting with glibc 2.3.3 due to a bug 8900 # in the glob function which causes it to fail to return broken 8901 # symlinks. I'm submitting a bug fix to glibc which will hopefully 8902 # be released with glibc 2.3.6. Once it is released and versions 8903 # 2.3.3-2.3.5 of glibc become uncommon, the first, empty case below 8904 # should be removed again. 8905 dotest rcslib-symlink-10 \ 8906 "$testcvs -q rtag -b -r the_tag brtag first-dir" "" \ 8907 "$SPROG rtag: could not read RCS file for first-dir/file2 8908 $SPROG rtag: could not read RCS file for first-dir/file2" 8909 8910 # Restore file1 for the next test. 8911 dotest rcslib-long-symlink-init-1 "$testcvs -Q up -A" 8912 dotest rcslib-long-symlink-init-2 "$testcvs -Q add file1" 8913 dotest rcslib-long-symlink-init-3 "$testcvs -Q ci -mback" 8914 8915 cd ../.. # $TESTDIR 8916 8917 # CVS has a hard-coded default link path size of 127 characters. 8918 # Make sure it knows how to exceed that. 8919 longpath=$CVSROOT_DIRNAME 8920 count=0 8921 while test $count -lt 10; do 8922 # 10 * 30 characters + len $CVSROOT_DIRNAME 8923 count=`expr $count + 1` 8924 longpath=$longpath/123456789012345678901234567890 8925 modify_repo mkdir $longpath 8926 done 8927 modify_repo cp $CVSROOT_DIRNAME/first-dir/file1,v $longpath 8928 modify_repo mkdir $CVSROOT_DIRNAME/second-dir 8929 8930 # Switch as for rcslib-symlink-1 8931 if test -n "$remotehost"; then 8932 modify_repo $CVS_RSH $remotehost \ 8933 'ln -s $longpath/file1,v $CVSROOT_DIRNAME/second-dir/fileX,v' 8934 else 8935 modify_repo ln -s $longpath/file1,v \ 8936 $CVSROOT_DIRNAME/second-dir/fileX,v 8937 fi 8938 8939 dotest rcslib-long-symlink-2 "$testcvs co second-dir" \ 8940 "$SPROG checkout: Updating second-dir 8941 U second-dir/fileX" 8942 8943 cd second-dir 8944 echo change-it >>fileX 8945 8946 # Writes actually cause symlinks to be resolved. 8947 dotest rcslib-long-symlink-3 "$testcvs -q ci -mwrite-it" \ 8948 "$CVSROOT_DIRNAME/123456789012345678901234567890/123456789012345678901234567890/123456789012345678901234567890/123456789012345678901234567890/123456789012345678901234567890/123456789012345678901234567890/123456789012345678901234567890/123456789012345678901234567890/123456789012345678901234567890/123456789012345678901234567890/file1,v <-- fileX 8949 new revision: 1\.5; previous revision: 1\.4" 8950 8951 dokeep 8952 cd .. 8953 8954 # Must remove the symlink first. Samba doesn't appear to show 8955 # broken symlink across the SMB share, and rm -rf by itself 8956 # will remove file1,v first and leave file2,v a broken link and the 8957 # rm -rf will fail since it doesn't find file2,v and it still gets 8958 # directory not empty errors removing cvsroot/first-dir. 8959 # 8960 # I'm not sure why I need to do this on $remotehost. The rm above 8961 # rcslib-symlink-3j works fine, but the next one doesn't unless run 8962 # remotely under Cygwin and using a TESTDIR on a Samba share. 8963 if test -n "$remotehost"; then 8964 $CVS_RSH $remotehost \ 8965 "rm -f $CVSROOT_DIRNAME/first-dir/file2,v $CVSROOT_DIRNAME/second-dir/fileX,v" 8966 fi 8967 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir \ 8968 $CVSROOT_DIRNAME/second-dir \ 8969 $CVSROOT_DIRNAME/123456789012345678901234567890 8970 rm -r first-dir second-dir 2 8971 ;; 8972 8973 8974 8975 multibranch) 8976 # Test the ability to have several branchpoints coming off the 8977 # same revision. 8978 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 8979 dotest multibranch-1 "${testcvs} -q co first-dir" '' 8980 cd first-dir 8981 echo 1:trunk-1 >file1 8982 dotest multibranch-2 "${testcvs} add file1" \ 8983 "${SPROG}"' add: scheduling file `file1'\'' for addition 8984 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 8985 dotest_lit multibranch-3 "${testcvs} -q ci -m add-it" <<HERE 8986 $CVSROOT_DIRNAME/first-dir/file1,v <-- file1 8987 initial revision: 1.1 8988 HERE 8989 dotest multibranch-4 "${testcvs} tag -b br1" \ 8990 "${SPROG} tag: Tagging \. 8991 T file1" 8992 dotest multibranch-5 "${testcvs} tag -b br2" \ 8993 "${SPROG} tag: Tagging \. 8994 T file1" 8995 dotest multibranch-6 "${testcvs} -q update -r br1" '' 8996 echo on-br1 >file1 8997 dotest multibranch-7 "${testcvs} -q ci -m modify-on-br1" \ 8998 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 8999 new revision: 1\.1\.2\.1; previous revision: 1\.1" 9000 dotest multibranch-8 "${testcvs} -q update -r br2" '[UP] file1' 9001 echo br2 adds a line >>file1 9002 dotest multibranch-9 "${testcvs} -q ci -m modify-on-br2" \ 9003 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 9004 new revision: 1\.1\.4\.1; previous revision: 1\.1" 9005 dotest multibranch-10 "${testcvs} -q update -r br1" '[UP] file1' 9006 dotest multibranch-11 "cat file1" 'on-br1' 9007 dotest multibranch-12 "${testcvs} -q update -r br2" '[UP] file1' 9008 dotest multibranch-13 "cat file1" '1:trunk-1 9009 br2 adds a line' 9010 9011 dotest multibranch-14 "${testcvs} log file1" \ 9012 " 9013 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 9014 Working file: file1 9015 head: 1\.1 9016 branch: 9017 locks: strict 9018 access list: 9019 symbolic names: 9020 br2: 1\.1\.0\.4 9021 br1: 1\.1\.0\.2 9022 keyword substitution: kv 9023 total revisions: 3; selected revisions: 3 9024 description: 9025 ---------------------------- 9026 revision 1\.1 9027 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 9028 branches: 1\.1\.2; 1\.1\.4; 9029 add-it 9030 ---------------------------- 9031 revision 1\.1\.4\.1 9032 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 9033 modify-on-br2 9034 ---------------------------- 9035 revision 1\.1\.2\.1 9036 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -1; commitid: ${commitid}; 9037 modify-on-br1 9038 =============================================================================" 9039 9040 dokeep 9041 cd .. 9042 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 9043 rm -r first-dir 9044 ;; 9045 9046 9047 9048 import) # test death after import 9049 # Tests of "cvs import": 9050 # basic2 9051 # rdiff -- imports with keywords 9052 # import -- more tests of imports with keywords 9053 # importb -- -b option. 9054 # importc -- bunch o' files in bunch o' directories 9055 # importX -- -X option. 9056 # importX2 -- CVSROOT/config ImportNewFilesToVendorBranchOnly 9057 # flag 9058 # modules3 9059 # mflag -- various -m messages 9060 # ignore -- import and cvsignore 9061 # binwrap -- import and -k wrappers 9062 # info -- imports which are rejected by verifymsg 9063 # head -- intended to test vendor branches and HEAD, 9064 # although it doesn't really do it yet. 9065 # import-CVS -- refuse to import directories named "CVS". 9066 # import-quirks -- short tests of import quirks. 9067 9068 # import 9069 mkdir import-dir ; cd import-dir 9070 9071 for i in 1 2 3 4 ; do 9072 echo imported file"$i" > imported-f"$i" 9073 done 9074 9075 # This directory should be on the default ignore list, 9076 # so it shouldn't get imported. 9077 mkdir RCS 9078 echo ignore.me >RCS/ignore.me 9079 9080 echo 'import should not expand $''Id$' >>imported-f2 9081 cp imported-f2 ../imported-f2-orig.tmp 9082 9083 dotest_sort import-96 \ 9084 "${testcvs} import -m first-import first-dir vendor-branch junk-1_0" \ 9085 " 9086 9087 I first-dir/RCS 9088 N first-dir/imported-f1 9089 N first-dir/imported-f2 9090 N first-dir/imported-f3 9091 N first-dir/imported-f4 9092 No conflicts created by this import" 9093 9094 dotest import-96.5 "cmp ../imported-f2-orig.tmp imported-f2" '' 9095 9096 cd .. 9097 9098 # co 9099 dotest import-97 "${testcvs} -q co first-dir" \ 9100 "U first-dir/imported-f1 9101 U first-dir/imported-f2 9102 U first-dir/imported-f3 9103 U first-dir/imported-f4" 9104 9105 cd first-dir 9106 9107 for i in 1 2 3 4 ; do 9108 dotest import-98-$i "test -f imported-f$i" '' 9109 done 9110 dotest_fail import-98.5 "test -d RCS" '' 9111 9112 # remove 9113 rm imported-f1 9114 dotest import-99 "${testcvs} rm imported-f1" \ 9115 "${SPROG}"' remove: scheduling `imported-f1'\'' for removal 9116 '"${SPROG}"' remove: use .'"${SPROG}"' commit. to remove this file permanently' 9117 9118 # change 9119 echo local-change >> imported-f2 9120 9121 # commit 9122 dotest import-100 "${testcvs} ci -m local-changes" \ 9123 "${CPROG} commit: Examining . 9124 ${CVSROOT_DIRNAME}/first-dir/imported-f1,v <-- imported-f1 9125 new revision: delete; previous revision: 1\.1\.1\.1 9126 ${CVSROOT_DIRNAME}/first-dir/imported-f2,v <-- imported-f2 9127 new revision: 1\.2; previous revision: 1\.1" 9128 9129 # log 9130 dotest import-101 "${testcvs} log imported-f1" \ 9131 " 9132 RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/imported-f1,v 9133 Working file: imported-f1 9134 head: 1\.2 9135 branch: 9136 locks: strict 9137 access list: 9138 symbolic names: 9139 junk-1_0: 1\.1\.1\.1 9140 vendor-branch: 1\.1\.1 9141 keyword substitution: kv 9142 total revisions: 3; selected revisions: 3 9143 description: 9144 ---------------------------- 9145 revision 1\.2 9146 date: ${ISO8601DATE}; author: ${username}; state: dead; lines: ${PLUS}0 -0; commitid: ${commitid}; 9147 local-changes 9148 ---------------------------- 9149 revision 1\.1 9150 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 9151 branches: 1\.1\.1; 9152 Initial revision 9153 ---------------------------- 9154 revision 1\.1\.1\.1 9155 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}0 -0; commitid: ${commitid}; 9156 first-import 9157 =============================================================================" 9158 9159 # update into the vendor branch. 9160 dotest import-102 "${testcvs} update -rvendor-branch" \ 9161 "${SPROG} update: Updating . 9162 [UP] imported-f1 9163 [UP] imported-f2" 9164 9165 # remove file4 on the vendor branch 9166 rm imported-f4 9167 dotest import-103 "${testcvs} rm imported-f4" \ 9168 "${SPROG}"' remove: scheduling `imported-f4'\'' for removal 9169 '"${SPROG}"' remove: use .'"${SPROG}"' commit. to remove this file permanently' 9170 9171 # commit 9172 dotest import-104 \ 9173 "${testcvs} ci -m vendor-removed imported-f4" \ 9174 "${CVSROOT_DIRNAME}/first-dir/imported-f4,v <-- imported-f4 9175 new revision: delete; previous revision: 1\.1\.1\.1" 9176 9177 # update to main line 9178 dotest import-105 "${testcvs} -q update -A" \ 9179 "${SPROG} update: \`imported-f1' is no longer in the repository 9180 [UP] imported-f2" 9181 9182 # second import - file4 deliberately unchanged 9183 cd ../import-dir 9184 for i in 1 2 3 ; do 9185 echo rev 2 of file $i >> imported-f"$i" 9186 done 9187 cp imported-f2 ../imported-f2-orig.tmp 9188 9189 dotest_sort import-106 \ 9190 "${testcvs} import -m second-import first-dir vendor-branch junk-2_0" \ 9191 " 9192 9193 9194 ${CPROG} checkout -j<prev_rel_tag> -jjunk-2_0 first-dir 9195 2 conflicts created by this import. 9196 C first-dir/imported-f1 9197 C first-dir/imported-f2 9198 I first-dir/RCS 9199 U first-dir/imported-f3 9200 U first-dir/imported-f4 9201 Use the following command to help the merge:" 9202 9203 dotest import-106.5 "cmp ../imported-f2-orig.tmp imported-f2" \ 9204 '' 9205 9206 cd .. 9207 9208 rm imported-f2-orig.tmp 9209 9210 # co 9211 dotest import-107 "${testcvs} co first-dir" \ 9212 "${SPROG} checkout: Updating first-dir 9213 [UP] first-dir/imported-f3 9214 [UP] first-dir/imported-f4" 9215 9216 cd first-dir 9217 9218 dotest_fail import-108 "test -f imported-f1" '' 9219 9220 for i in 2 3 ; do 9221 dotest import-109-$i "test -f imported-f$i" '' 9222 done 9223 9224 # check vendor branch for file4 9225 dotest import-110 "${testcvs} -q update -rvendor-branch" \ 9226 "[UP] imported-f1 9227 [UP] imported-f2" 9228 9229 dotest import-111 "test -f imported-f4" '' 9230 9231 # update to main line 9232 dotest import-112 "${testcvs} -q update -A" \ 9233 "${SPROG} update: \`imported-f1' is no longer in the repository 9234 [UP] imported-f2" 9235 9236 cd .. 9237 9238 dotest import-113 \ 9239 "${testcvs} -q co -jjunk-1_0 -jjunk-2_0 first-dir" \ 9240 "${SPROG} checkout: file first-dir/imported-f1 does not exist, but is present in revision junk-2_0 9241 RCS file: ${CVSROOT_DIRNAME}/first-dir/imported-f2,v 9242 retrieving revision 1\.1\.1\.1 9243 retrieving revision 1\.1\.1\.2 9244 Merging differences between 1\.1\.1\.1 and 1\.1\.1\.2 into imported-f2 9245 rcsmerge: warning: conflicts during merge 9246 first-dir/imported-f3 already contains the differences between 1\.1\.1\.1 and 1\.1\.1\.2 9247 first-dir/imported-f4 already contains the differences between 1\.1\.1\.1 and 1\.1\.1\.3" 9248 9249 cd first-dir 9250 9251 dotest_fail import-114 "test -f imported-f1" '' 9252 9253 for i in 2 3 ; do 9254 dotest import-115-$i "test -f imported-f$i" '' 9255 done 9256 9257 dotest import-116 'cat imported-f2' \ 9258 'imported file2 9259 [<]<<<<<< imported-f2 9260 import should not expand \$''Id: imported-f2,v 1\.2 [0-9/]* [0-9:]* '"${username}"' Exp \$ 9261 local-change 9262 [=]====== 9263 import should not expand \$''Id: imported-f2,v 1\.1\.1\.2 [0-9/]* [0-9:]* '"${username}"' Exp \$ 9264 rev 2 of file 2 9265 [>]>>>>>> 1\.1\.1\.2' 9266 9267 dokeep 9268 cd .. 9269 rm -r first-dir 9270 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 9271 rm -r import-dir 9272 ;; 9273 9274 9275 9276 importb) 9277 # More cvs import tests, especially -b option. 9278 9279 # OK, first we get some sources from the NetMunger project, and 9280 # import them into the 1.1.1 vendor branch. 9281 mkdir imp-dir 9282 cd imp-dir 9283 echo 'OpenMunger sources' >file1 9284 echo 'OpenMunger sources' >file2 9285 dotest_sort importb-1 \ 9286 "${testcvs} import -m add first-dir openmunger openmunger-1_0" \ 9287 " 9288 9289 N first-dir/file1 9290 N first-dir/file2 9291 No conflicts created by this import" 9292 cd .. 9293 rm -r imp-dir 9294 9295 # Now we put the sources we get from FreeMunger into 1.1.3 9296 mkdir imp-dir 9297 cd imp-dir 9298 echo 'FreeMunger sources' >file1 9299 echo 'FreeMunger sources' >file2 9300 # Not completely sure how the conflict detection is supposed to 9301 # be working here (haven't really thought about it). 9302 # We use an explicit -d option to test that it is reflected 9303 # in the suggested checkout. 9304 dotest_sort importb-2 \ 9305 "$testcvs -d '$CVSROOT' import -m add -b 1.1.3 \ 9306 first-dir freemunger freemunger-1_0" \ 9307 " 9308 9309 9310 ${CPROG} -d ${CVSROOT} checkout -j<prev_rel_tag> -jfreemunger-1_0 first-dir 9311 2 conflicts created by this import. 9312 C first-dir/file1 9313 C first-dir/file2 9314 Use the following command to help the merge:" 9315 cd .. 9316 rm -r imp-dir 9317 9318 # Now a test of main branch import (into second-dir, not first-dir). 9319 mkdir imp-dir 9320 cd imp-dir 9321 echo 'my own stuff' >mine1.c 9322 echo 'my own stuff' >mine2.c 9323 dotest_fail importb-3 \ 9324 "${testcvs} import -m add -b 1 second-dir dummy really_dumb_y" \ 9325 "$CPROG \[import aborted\]: Only numeric branch specifications with two dots are 9326 supported by import, not \`1'\. For example: \`1\.1\.1'\." 9327 : when we implement main-branch import, should be \ 9328 "N second-dir/mine1\.c 9329 N second-dir/mine2\.c 9330 9331 No conflicts created by this import" 9332 cd .. 9333 rm -r imp-dir 9334 9335 mkdir 1 9336 cd 1 9337 # when we implement main branch import, will want to 9338 # add "second-dir" here. 9339 dotest importb-4 "${testcvs} -q co first-dir" \ 9340 "U first-dir/file1 9341 U first-dir/file2" 9342 cd first-dir 9343 dotest importb-5 "${testcvs} -q log file1" " 9344 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 9345 Working file: file1 9346 head: 1\.1 9347 branch: 1\.1\.1 9348 locks: strict 9349 access list: 9350 symbolic names: 9351 freemunger-1_0: 1\.1\.3\.1 9352 freemunger: 1\.1\.3 9353 openmunger-1_0: 1\.1\.1\.1 9354 openmunger: 1\.1\.1 9355 keyword substitution: kv 9356 total revisions: 3; selected revisions: 3 9357 description: 9358 ---------------------------- 9359 revision 1\.1 9360 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 9361 branches: 1\.1\.1; 1\.1\.3; 9362 Initial revision 9363 ---------------------------- 9364 revision 1\.1\.3\.1 9365 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -1; commitid: ${commitid}; 9366 add 9367 ---------------------------- 9368 revision 1\.1\.1\.1 9369 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}0 -0; commitid: ${commitid}; 9370 add 9371 =============================================================================" 9372 9373 dokeep 9374 cd ../.. 9375 rm -r 1 9376 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir \ 9377 $CVSROOT_DIRNAME/second-dir 9378 ;; 9379 9380 9381 9382 importc) 9383 # Test importing a bunch o' files in a bunch o' directories. 9384 # Also the -d option. 9385 9386 # Set a predictable time zone for these tests. 9387 save_TZ=$TZ 9388 TZ=UTC0; export TZ 9389 9390 mkdir 1; cd 1 9391 mkdir adir bdir cdir 9392 mkdir adir/sub1 adir/sub2 9393 mkdir adir/sub1/ssdir 9394 mkdir bdir/subdir 9395 touch adir/sub1/file1 adir/sub2/file2 adir/sub1/ssdir/ssfile 9396 touch -t ${TOUCH1971} bdir/subdir/file1 9397 touch -t ${TOUCH2034} cdir/cfile 9398 dotest_sort importc-1 \ 9399 "${testcvs} import -d -m import-it first-dir vendor release" \ 9400 " 9401 9402 N first-dir/adir/sub1/file1 9403 N first-dir/adir/sub1/ssdir/ssfile 9404 N first-dir/adir/sub2/file2 9405 N first-dir/bdir/subdir/file1 9406 N first-dir/cdir/cfile 9407 No conflicts created by this import 9408 ${SPROG} import: Importing ${CVSROOT_DIRNAME}/first-dir/adir 9409 ${SPROG} import: Importing ${CVSROOT_DIRNAME}/first-dir/adir/sub1 9410 ${SPROG} import: Importing ${CVSROOT_DIRNAME}/first-dir/adir/sub1/ssdir 9411 ${SPROG} import: Importing ${CVSROOT_DIRNAME}/first-dir/adir/sub2 9412 ${SPROG} import: Importing ${CVSROOT_DIRNAME}/first-dir/bdir 9413 ${SPROG} import: Importing ${CVSROOT_DIRNAME}/first-dir/bdir/subdir 9414 ${SPROG} import: Importing ${CVSROOT_DIRNAME}/first-dir/cdir" 9415 cd .. 9416 mkdir 2; cd 2 9417 dotest importc-2 "${testcvs} -q co first-dir" \ 9418 "U first-dir/adir/sub1/file1 9419 U first-dir/adir/sub1/ssdir/ssfile 9420 U first-dir/adir/sub2/file2 9421 U first-dir/bdir/subdir/file1 9422 U first-dir/cdir/cfile" 9423 cd first-dir 9424 dotest importc-3 "${testcvs} update adir/sub1" \ 9425 "${SPROG} update: Updating adir/sub1 9426 ${SPROG} update: Updating adir/sub1/ssdir" 9427 dotest importc-4 "${testcvs} update adir/sub1 bdir/subdir" \ 9428 "${SPROG} update: Updating adir/sub1 9429 ${SPROG} update: Updating adir/sub1/ssdir 9430 ${SPROG} update: Updating bdir/subdir" 9431 9432 echo modify >>cdir/cfile 9433 dotest importc-5 \ 9434 "${testcvs} -q rtag -b -r release wip_test first-dir" "" 9435 dotest importc-6 "${testcvs} -q update -r wip_test" "M cdir/cfile" 9436 9437 # This used to fail in local mode 9438 dotest importc-7 "${testcvs} -q ci -m modify -r wip_test" \ 9439 "$CVSROOT_DIRNAME/first-dir/cdir/cfile,v <-- cdir/cfile 9440 new revision: 1\.1\.1\.1\.2\.1; previous revision: 1\.1\.1\.1" 9441 9442 # TODO: should also be testing "import -d" when we update 9443 # an existing file. 9444 dotest importc-8 "${testcvs} -q log cdir/cfile" " 9445 RCS file: ${CVSROOT_DIRNAME}/first-dir/cdir/cfile,v 9446 Working file: cdir/cfile 9447 head: 1\.1 9448 branch: 1\.1\.1 9449 locks: strict 9450 access list: 9451 symbolic names: 9452 wip_test: 1\.1\.1\.1\.0\.2 9453 release: 1\.1\.1\.1 9454 vendor: 1\.1\.1 9455 keyword substitution: kv 9456 total revisions: 3; selected revisions: 3 9457 description: 9458 ---------------------------- 9459 revision 1\.1 9460 date: ${ISO8601DATE2034}; author: ${username}; state: Exp; commitid: ${commitid}; 9461 branches: 1\.1\.1; 9462 Initial revision 9463 ---------------------------- 9464 revision 1\.1\.1\.1 9465 date: ${ISO8601DATE2034}; author: ${username}; state: Exp; lines: ${PLUS}0 -0; commitid: ${commitid}; 9466 branches: 1\.1\.1\.1\.2; 9467 import-it 9468 ---------------------------- 9469 revision 1\.1\.1\.1\.2\.1 9470 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 9471 modify 9472 =============================================================================" 9473 9474 dotest importc-9 "${testcvs} -q log bdir/subdir/file1" " 9475 RCS file: ${CVSROOT_DIRNAME}/first-dir/bdir/subdir/file1,v 9476 Working file: bdir/subdir/file1 9477 head: 1\.1 9478 branch: 1\.1\.1 9479 locks: strict 9480 access list: 9481 symbolic names: 9482 wip_test: 1\.1\.1\.1\.0\.2 9483 release: 1\.1\.1\.1 9484 vendor: 1\.1\.1 9485 keyword substitution: kv 9486 total revisions: 2; selected revisions: 2 9487 description: 9488 ---------------------------- 9489 revision 1\.1 9490 date: ${ISO8601DATE1971}; author: ${username}; state: Exp; commitid: ${commitid}; 9491 branches: 1\.1\.1; 9492 Initial revision 9493 ---------------------------- 9494 revision 1\.1\.1\.1 9495 date: ${ISO8601DATE1971}; author: ${username}; state: Exp; lines: ${PLUS}0 -0; commitid: ${commitid}; 9496 import-it 9497 =============================================================================" 9498 cd .. 9499 9500 # Now tests of absolute pathnames and .. as repository directory. 9501 cd ../1 9502 dotest_fail importc-10 \ 9503 "${testcvs} import -m imp ../other vendor release2" \ 9504 "${CPROG} \[import aborted\]: directory \.\./other not relative within the repository" 9505 dotest_fail importc-11 \ 9506 "${testcvs} import -m imp ${TESTDIR}/other vendor release3" \ 9507 "${CPROG} \[import aborted\]: directory ${TESTDIR}/other not relative within the repository" 9508 dotest_fail importc-12 "test -d ${TESTDIR}/other" "" 9509 9510 dokeep 9511 TZ=$save_TZ 9512 cd .. 9513 rm -r 1 2 9514 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 9515 ;; 9516 9517 9518 9519 importX) 9520 # More cvs import tests, especially -X option. 9521 9522 # OK, first we get some sources from the Munger version 0.9, 9523 # and import them into the 1.1.1 vendor branch (w/o -X). (This 9524 # will be used to test subsequent imports of the same file 9525 # with -X.) 9526 mkdir imp-dir 9527 cd imp-dir 9528 echo 'Munger sources 0.9' >file0 9529 dotest_sort importX-1 \ 9530 "${testcvs} import -m add first-dir munger munger-0_9" \ 9531 " 9532 9533 N first-dir/file0 9534 No conflicts created by this import" 9535 cd .. 9536 rm -r imp-dir 9537 9538 # Now we put the sources we get from Munger version 1.0 on 9539 # to the 1.1.1 vendor branch using -X. (This imports a new 9540 # version of file0, and imports all-new files file1 and file2.) 9541 mkdir imp-dir 9542 cd imp-dir 9543 echo 'Munger sources' >file0 9544 echo 'Munger sources' >file1 9545 echo 'Munger sources' >file2 9546 dotest_sort importX-2 \ 9547 "${testcvs} import -X -m add first-dir munger munger-1_0" \ 9548 " 9549 9550 9551 ${CPROG} checkout -j<prev_rel_tag> -jmunger-1_0 first-dir 9552 N first-dir/file1 9553 N first-dir/file2 9554 No conflicts created by this import. 9555 U first-dir/file0 9556 Use the following command to help the merge:" 9557 cd .. 9558 rm -r imp-dir 9559 9560 # Now we put the sources we get from Munger version 1.1 on 9561 # to the 1.1.1 vendor branch using -X. (This imports unchanged 9562 # versions of file0 and file2, a changed version of file1, and 9563 # an all-new file3.) 9564 mkdir imp-dir 9565 cd imp-dir 9566 echo 'Munger sources' >file0 9567 echo 'Munger sources 1.1' >file1 9568 echo 'Munger sources' >file2 9569 echo 'Munger sources 1.1' >file3 9570 dotest_sort importX-3 \ 9571 "$testcvs -d '$CVSROOT' import -X -m add first-dir munger munger-1_1" \ 9572 " 9573 9574 9575 ${CPROG} -d ${CVSROOT} checkout -j<prev_rel_tag> -jmunger-1_1 first-dir 9576 1 conflicts created by this import. 9577 C first-dir/file1 9578 N first-dir/file3 9579 U first-dir/file0 9580 U first-dir/file2 9581 Use the following command to help the merge:" 9582 cd .. 9583 rm -r imp-dir 9584 9585 mkdir 1 9586 cd 1 9587 # only file0 should be checked out 9588 dotest importX-4 "${testcvs} -q co first-dir" \ 9589 "U first-dir/file0" 9590 cd first-dir 9591 9592 dotest importX-5 "${testcvs} -q log file0" " 9593 RCS file: ${CVSROOT_DIRNAME}/first-dir/file0,v 9594 Working file: file0 9595 head: 1\.1 9596 branch: 1\.1\.1 9597 locks: strict 9598 access list: 9599 symbolic names: 9600 munger-1_1: 1\.1\.1\.2 9601 munger-1_0: 1\.1\.1\.2 9602 munger-0_9: 1\.1\.1\.1 9603 munger: 1\.1\.1 9604 keyword substitution: kv 9605 total revisions: 3; selected revisions: 3 9606 description: 9607 ---------------------------- 9608 revision 1\.1 9609 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 9610 branches: 1\.1\.1; 9611 Initial revision 9612 ---------------------------- 9613 revision 1\.1\.1\.2 9614 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -1; commitid: ${commitid}; 9615 add 9616 ---------------------------- 9617 revision 1\.1\.1\.1 9618 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}0 -0; commitid: ${commitid}; 9619 add 9620 =============================================================================" 9621 9622 dotest importX-6 "${testcvs} -q log file1" " 9623 RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file1,v 9624 Working file: file1 9625 head: 1\.2 9626 branch: 9627 locks: strict 9628 access list: 9629 symbolic names: 9630 munger-1_1: 1\.1\.1\.2 9631 munger-1_0: 1\.1\.1\.1 9632 munger: 1\.1\.1 9633 keyword substitution: kv 9634 total revisions: 4; selected revisions: 4 9635 description: 9636 ---------------------------- 9637 revision 1\.2 9638 date: ${ISO8601DATE}; author: ${username}; state: dead; lines: ${PLUS}0 -0; commitid: ${commitid}; 9639 Revision 1\.1 was added on the vendor branch\. 9640 ---------------------------- 9641 revision 1\.1 9642 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 9643 branches: 1\.1\.1; 9644 Initial revision 9645 ---------------------------- 9646 revision 1\.1\.1\.2 9647 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -1; commitid: ${commitid}; 9648 add 9649 ---------------------------- 9650 revision 1\.1\.1\.1 9651 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}0 -0; commitid: ${commitid}; 9652 add 9653 =============================================================================" 9654 9655 cd ../.. 9656 rm -r 1 9657 modify_repo rm -rf ${CVSROOT_DIRNAME}/first-dir 9658 ;; 9659 9660 9661 9662 importX2) 9663 # Test ImportNewFilesToVendorBranchOnly config file option. 9664 9665 # On Windows, we can't check out CVSROOT, because the case 9666 # insensitivity means that this conflicts with cvsroot. 9667 mkdir wnt 9668 cd wnt 9669 9670 dotest importX2-1 "${testcvs} -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}" 9671 cd CVSROOT 9672 echo "ImportNewFilesToVendorBranchOnly=yes" >> config 9673 9674 dotest importX2-2 "$testcvs -q ci -m force-cvs-import-X" \ 9675 "$TESTDIR/cvsroot/CVSROOT/config,v <-- config 9676 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 9677 $SPROG commit: Rebuilding administrative file database" 9678 9679 cd ../.. 9680 9681 # Import a sources file, but do NOT specify -X. The new file 9682 # should be killed, anyway (because of the config option). 9683 mkdir imp-dir 9684 cd imp-dir 9685 echo 'source' >file1 9686 dotest_sort importX2-3 \ 9687 "${testcvs} import -m add first-dir source source-1_0" \ 9688 " 9689 9690 9691 ${CPROG} checkout -j<prev_rel_tag> -jsource-1_0 first-dir 9692 N first-dir/file1 9693 No conflicts created by this import. 9694 Use the following command to help the merge:" 9695 cd .. 9696 rm -r imp-dir 9697 9698 mkdir 1 9699 cd 1 9700 # **nothing** should be checked out** 9701 dotest importX2-4 "${testcvs} -q co first-dir" "" 9702 9703 cd first-dir 9704 dotest importX2-5 "${testcvs} -q log file1" " 9705 RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file1,v 9706 Working file: file1 9707 head: 1\.2 9708 branch: 9709 locks: strict 9710 access list: 9711 symbolic names: 9712 source-1_0: 1\.1\.1\.1 9713 source: 1\.1\.1 9714 keyword substitution: kv 9715 total revisions: 3; selected revisions: 3 9716 description: 9717 ---------------------------- 9718 revision 1\.2 9719 date: ${ISO8601DATE}; author: ${username}; state: dead; lines: ${PLUS}0 -0; commitid: ${commitid}; 9720 Revision 1\.1 was added on the vendor branch\. 9721 ---------------------------- 9722 revision 1\.1 9723 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 9724 branches: 1\.1\.1; 9725 Initial revision 9726 ---------------------------- 9727 revision 1\.1\.1\.1 9728 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}0 -0; commitid: ${commitid}; 9729 add 9730 =============================================================================" 9731 9732 dokeep 9733 cd ../.. 9734 restore_adm 9735 rm -r 1 9736 rm -r wnt 9737 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 9738 ;; 9739 9740 9741 9742 import-CVS) 9743 mkdir import-CVS 9744 cd import-CVS 9745 touch file1 file2 file3 9746 dotest_fail import-CVS-1 "$testcvs import CVS vtag rtag" \ 9747 "$CPROG import: The word \`CVS' is reserved by CVS and may not be used 9748 $CPROG \[import aborted\]: as a directory in a path or as a file name\." 9749 mkdir sdir 9750 mkdir sdir/CVS 9751 touch sdir/CVS/file4 sdir/CVS/file5 sdir/file6 sdir/file7 9752 # Calling the imported directory import-CVS is dual purpose in the 9753 # following test. It makes sure the path test which matched above 9754 # wasn't too strict. 9755 dotest_sort import-CVS-2 \ 9756 "$testcvs import -I! -mimport import-CVS vtag rtag" \ 9757 " 9758 9759 I import-CVS/sdir/CVS 9760 N import-CVS/file1 9761 N import-CVS/file2 9762 N import-CVS/file3 9763 N import-CVS/sdir/file6 9764 N import-CVS/sdir/file7 9765 No conflicts created by this import 9766 $SPROG import: Importing $CVSROOT_DIRNAME/import-CVS/sdir" 9767 9768 dokeep 9769 cd .. 9770 rm -r import-CVS 9771 modify_repo rm -rf $CVSROOT_DIRNAME/import-CVS 9772 ;; 9773 9774 9775 9776 import-quirks) 9777 # Short tests of quirky import behavior. 9778 # 9779 # For a list of other import tests with short descriptions, see the 9780 # comment header of the "import" test. 9781 mkdir import-quirks 9782 cd import-quirks 9783 touch file1 file2 file3 9784 9785 # CVS prior to 1.11.18 and 1.12.10 used to happily import to 9786 # "branch 1.1", creating RCS archives with revisions like, 9787 # "1.1..1". That double-dot is *not* a typo. 9788 dotest_fail import-quirks-1 \ 9789 "$testcvs import -b1.1. -mbad-bad-bad import-quirks VB RT" \ 9790 "$CPROG \[import aborted\]: Only numeric branch specifications with two dots are 9791 supported by import, not \`1\.1\.'\. For example: \`1\.1\.1'\." 9792 9793 dotest_fail import-quirks-2 \ 9794 "$testcvs import -b1.1.1.. -mbad-bad-bad import-quirks VB RT" \ 9795 "$CPROG \[import aborted\]: Only numeric branch specifications with two dots are 9796 supported by import, not \`1\.1\.1\.\.'\. For example: \`1\.1\.1'\." 9797 9798 # Try a few odd numbers. This is hardly comprehensive. 9799 dotest_sort import-quirks-2 \ 9800 "$testcvs import -b10.10.101 -mthis-ones-ok import-quirks-2 VB RT" \ 9801 " 9802 9803 N import-quirks-2/file1 9804 N import-quirks-2/file2 9805 N import-quirks-2/file3 9806 No conflicts created by this import" 9807 9808 dotest_sort import-quirks-3 \ 9809 "$testcvs import -b2345678901.2345678901.2345678901 -mthis-ones-ok import-quirks-3 VB RT" \ 9810 " 9811 9812 N import-quirks-3/file1 9813 N import-quirks-3/file2 9814 N import-quirks-3/file3 9815 No conflicts created by this import" 9816 9817 dotest_sort import-quirks-4 \ 9818 "$testcvs import -b1.1.2 -mthis-ones-ok import-quirks-4 VB RT" \ 9819 " 9820 9821 N import-quirks-4/file1 9822 N import-quirks-4/file2 9823 N import-quirks-4/file3 9824 No conflicts created by this import" 9825 9826 dokeep 9827 cd .. 9828 rm -r import-quirks 9829 rm -rf $CVSROOT_DIRNAME/import-quirks-2 \ 9830 $CVSROOT_DIRNAME/import-quirks-3 \ 9831 $CVSROOT_DIRNAME/import-quirks-4 9832 ;; 9833 9834 9835 9836 import-after-initial) 9837 # Properly handle the case in which the first version of a 9838 # file is created by a regular cvs add and commit, and there 9839 # is a subsequent cvs import of the same file. cvs update with 9840 # a date tag must resort to searching the vendor branch only if 9841 # the initial version of the file was created at the same time 9842 # as the initial version on the vendor branch. 9843 9844 mkdir 1; cd 1 9845 module=x 9846 9847 echo > unused-file 9848 9849 # Create the module. 9850 dotest import-after-initial-1 \ 9851 "$testcvs -Q import -m. $module X Y" '' 9852 9853 file=m 9854 # Check it out and add a file. 9855 dotest import-after-initial-2 "$testcvs -Q co $module" '' 9856 cd $module 9857 echo original > $file 9858 dotest import-after-initial-3 "${testcvs} -Q add $file" "" 9859 dotest import-after-initial-4 "$testcvs -Q ci -m. $file" 9860 9861 # Delay a little so the following import isn't done in the same 9862 # second as the preceding commit. 9863 sleep 2 9864 9865 # Do the first import of $file *after* $file already has an 9866 # initial version. 9867 mkdir sub 9868 cd sub 9869 echo newer-via-import > $file 9870 dotest import-after-initial-5 \ 9871 "$testcvs -Q import -m. $module X Y2" '' 9872 cd .. 9873 9874 # Sleep a second so we're sure to be after the second of the import. 9875 sleep 1 9876 9877 dotest import-after-initial-6 \ 9878 "$testcvs -Q update -p -D now $file" 'original' 9879 9880 dokeep 9881 cd ../.. 9882 rm -rf 1 9883 modify_repo rm -rf $CVSROOT_DIRNAME/$module 9884 ;; 9885 9886 9887 9888 branch-after-import) 9889 # Test branching after an import via both cvs tag -b and 9890 # cvs add to verify that the HEAD remains at 1.1.1.1 9891 # This was a FreeBSD bug documented at the URL: 9892 # http://www.freebsd.org/cgi/query-pr.cgi?pr=4033 9893 9894 mkdir branch-after-import 9895 cd branch-after-import 9896 9897 # OK, first we get some sources from the NetMunger project, 9898 # and import them into the 1.1.1 vendor branch. 9899 mkdir imp-dir 9900 cd imp-dir 9901 echo 'OpenMunger sources' >file1 9902 echo 'OpenMunger sources' >file2 9903 dotest_sort branch-after-import-1 \ 9904 "${testcvs} import -m add first-dir openmunger openmunger-1_0" \ 9905 ' 9906 9907 N first-dir/file1 9908 N first-dir/file2 9909 No conflicts created by this import' 9910 cd .. 9911 9912 # Next checkout the new module 9913 dotest branch-after-import-2 \ 9914 "${testcvs} -q co first-dir" \ 9915 'U first-dir/file1 9916 U first-dir/file2' 9917 cd first-dir 9918 # Branch tag the file1 and cvs add file2, 9919 # the branch should remain the same in both cases 9920 # such that a new import will not require a conflict 9921 # resolution. 9922 dotest branch-after-import-3 \ 9923 "${testcvs} tag -b TESTTOTRON file1" \ 9924 'T file1' 9925 dotest branch-after-import-4 \ 9926 "${testcvs} -q update -r TESTTOTRON" \ 9927 "${SPROG} update: \`file2' is no longer in the repository" 9928 9929 cp ../imp-dir/file2 . 9930 dotest branch-after-import-5 \ 9931 "${testcvs} add file2" \ 9932 "${SPROG} add: scheduling file .file2. for addition on branch .TESTTOTRON. 9933 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 9934 9935 dotest branch-after-import-6 \ 9936 "$testcvs commit -m cvs-add file2" \ 9937 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 9938 new revision: 1\.1\.1\.1\.2\.2; previous revision: 1\.1\.1\.1\.2\.1" 9939 9940 dokeep 9941 cd ../.. 9942 rm -r branch-after-import 9943 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 9944 ;; 9945 9946 9947 9948 join) 9949 # Test doing joins which involve adding and removing files. 9950 # Variety of scenarios (see list below), in the context of: 9951 # * merge changes from T1 to T2 into the main line 9952 # * merge changes from branch 'branch' into the main line 9953 # * merge changes from branch 'branch' into branch 'br2'. 9954 # See also binfile2, which does similar things with binary files. 9955 # See also join2, which tests joining (and update -A) on only 9956 # a single file, rather than a directory. 9957 # See also rmadd2, which tests -j cases not involving branches 9958 # (e.g. undoing a commit) 9959 # See also join3, which tests some cases involving the greatest 9960 # common ancestor. Here is a list of tests according to branch 9961 # topology: 9962 # 9963 # --->bp---->trunk too many to mention 9964 # \----->branch 9965 # 9966 # /----->branch1 9967 # --->bp---->trunk multibranch, multibranch2 9968 # \----->branch2 9969 # 9970 # --->bp1----->bp2---->trunk join3 9971 # \->br1 \->br2 9972 # 9973 # --->bp1----->trunk 9974 # \----bp2---->branch branches 9975 # \------>branch-of-branch 9976 9977 # We check merging changes from T1 to T2 into the main line. 9978 # Here are the interesting cases I can think of: 9979 # 1) File added between T1 and T2, not on main line. 9980 # File should be marked for addition. 9981 # 2) File added between T1 and T2, also added on main line. 9982 # Conflict. 9983 # 3) File removed between T1 and T2, unchanged on main line. 9984 # File should be marked for removal. 9985 # 4) File removed between T1 and T2, modified on main line. 9986 # If mod checked in, file should be marked for removal. 9987 # If mod still in working directory, conflict. 9988 # 5) File removed between T1 and T2, was never on main line. 9989 # Nothing should happen. 9990 # 6) File removed between T1 and T2, also removed on main line. 9991 # Nothing should happen. 9992 # 7) File not added between T1 and T2, added on main line. 9993 # Nothing should happen. 9994 # 8) File not modified between T1 and T2, removed on main line. 9995 # Nothing should happen. 9996 # 9) File modified between T1 and T2, removed on main line. 9997 # Conflict. 9998 # 10) File was never on branch, removed on main line. 9999 # Nothing should happen. 10000 10001 # We also check merging changes from a branch into the main 10002 # line. Here are the interesting cases: 10003 # 1) File added on branch, not on main line. 10004 # File should be marked for addition. 10005 # 2) File added on branch, also added on main line. 10006 # Conflict. 10007 # 3) File removed on branch, unchanged on main line. 10008 # File should be marked for removal. 10009 # 4) File removed on branch, modified on main line. 10010 # Conflict. 10011 # 5) File removed on branch, was never on main line. 10012 # Nothing should happen. 10013 # 6) File removed on branch, also removed on main line. 10014 # Nothing should happen. 10015 # 7) File added on main line, not added on branch. 10016 # Nothing should happen. 10017 # 8) File removed on main line, not modified on branch. 10018 # Nothing should happen. 10019 # 9) File modified on branch, removed on main line. 10020 # Conflict. 10021 # 10) File was never on branch, removed on main line. 10022 # Nothing should happen. 10023 10024 # In the tests below, fileN represents case N in the above 10025 # lists. 10026 10027 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 10028 mkdir 1 10029 cd 1 10030 dotest join-1 "$testcvs -q co first-dir" 10031 10032 cd first-dir 10033 10034 # Add two files. 10035 echo 'first revision of file3' > file3 10036 echo 'first revision of file4' > file4 10037 echo 'first revision of file6' > file6 10038 echo 'first revision of file8' > file8 10039 echo 'first revision of file9' > file9 10040 dotest join-2 "${testcvs} add file3 file4 file6 file8 file9" \ 10041 "${SPROG}"' add: scheduling file `file3'\'' for addition 10042 '"${SPROG}"' add: scheduling file `file4'\'' for addition 10043 '"${SPROG}"' add: scheduling file `file6'\'' for addition 10044 '"${SPROG}"' add: scheduling file `file8'\'' for addition 10045 '"${SPROG}"' add: scheduling file `file9'\'' for addition 10046 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add these files permanently' 10047 10048 dotest join-3 "${testcvs} -q commit -m add" \ 10049 "$CVSROOT_DIRNAME/first-dir/file3,v <-- file3 10050 initial revision: 1\.1 10051 $CVSROOT_DIRNAME/first-dir/file4,v <-- file4 10052 initial revision: 1\.1 10053 $CVSROOT_DIRNAME/first-dir/file6,v <-- file6 10054 initial revision: 1\.1 10055 $CVSROOT_DIRNAME/first-dir/file8,v <-- file8 10056 initial revision: 1\.1 10057 $CVSROOT_DIRNAME/first-dir/file9,v <-- file9 10058 initial revision: 1\.1" 10059 10060 # Make a branch. 10061 dotest join-4 "${testcvs} -q tag -b branch ." \ 10062 'T file3 10063 T file4 10064 T file6 10065 T file8 10066 T file9' 10067 10068 # Add file2, file7, and file10, modify file4, and remove 10069 # file6, file8, and file9. 10070 echo 'first revision of file2' > file2 10071 echo 'second revision of file4' > file4 10072 echo 'first revision of file7' > file7 10073 rm file6 file8 file9 10074 echo 'first revision of file10' > file10 10075 dotest join-5 "${testcvs} add file2 file7 file10" \ 10076 "${SPROG}"' add: scheduling file `file2'\'' for addition 10077 '"${SPROG}"' add: scheduling file `file7'\'' for addition 10078 '"${SPROG}"' add: scheduling file `file10'\'' for addition 10079 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add these files permanently' 10080 dotest join-6 "${testcvs} rm file6 file8 file9" \ 10081 "${SPROG}"' remove: scheduling `file6'\'' for removal 10082 '"${SPROG}"' remove: scheduling `file8'\'' for removal 10083 '"${SPROG}"' remove: scheduling `file9'\'' for removal 10084 '"${SPROG}"' remove: use .'"${SPROG}"' commit. to remove these files permanently' 10085 dotest join-7 "${testcvs} -q ci -mx ." \ 10086 "$CVSROOT_DIRNAME/first-dir/file10,v <-- file10 10087 initial revision: 1\.1 10088 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 10089 initial revision: 1\.1 10090 $CVSROOT_DIRNAME/first-dir/file4,v <-- file4 10091 new revision: 1\.2; previous revision: 1\.1 10092 $CVSROOT_DIRNAME/first-dir/file6,v <-- file6 10093 new revision: delete; previous revision: 1\.1 10094 $CVSROOT_DIRNAME/first-dir/file7,v <-- file7 10095 initial revision: 1\.1 10096 $CVSROOT_DIRNAME/first-dir/file8,v <-- file8 10097 new revision: delete; previous revision: 1\.1 10098 $CVSROOT_DIRNAME/first-dir/file9,v <-- file9 10099 new revision: delete; previous revision: 1\.1" 10100 10101 # Remove file10 10102 dotest join-7a "${testcvs} rm -f file10" \ 10103 "${SPROG}"' remove: scheduling `file10'\'' for removal 10104 '"${SPROG}"' remove: use .'"${SPROG}"' commit. to remove this file permanently' 10105 dotest join-7b "${testcvs} -q ci -mx ." \ 10106 "$CVSROOT_DIRNAME/first-dir/file10,v <-- file10 10107 new revision: delete; previous revision: 1\.1" 10108 10109 # Check out the branch. 10110 cd ../.. 10111 mkdir 2 10112 cd 2 10113 dotest join-8 "${testcvs} -q co -r branch first-dir" \ 10114 'U first-dir/file3 10115 U first-dir/file4 10116 U first-dir/file6 10117 U first-dir/file8 10118 U first-dir/file9' 10119 10120 cd first-dir 10121 10122 # Modify the files on the branch, so that T1 is not an 10123 # ancestor of the main line, and add file5 10124 echo 'first branch revision of file3' > file3 10125 echo 'first branch revision of file4' > file4 10126 echo 'first branch revision of file5' > file5 10127 echo 'first branch revision of file6' > file6 10128 echo 'first branch revision of file9' > file9 10129 dotest join-9 "${testcvs} add file5" \ 10130 "${SPROG}"' add: scheduling file `file5'\'' for addition on branch `branch'\'' 10131 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 10132 dotest join-10 "${testcvs} -q ci -mx ." \ 10133 "$CVSROOT_DIRNAME/first-dir/file3,v <-- file3 10134 new revision: 1\.1\.2\.1; previous revision: 1\.1 10135 $CVSROOT_DIRNAME/first-dir/file4,v <-- file4 10136 new revision: 1\.1\.2\.1; previous revision: 1\.1 10137 $CVSROOT_DIRNAME/first-dir/Attic/file5,v <-- file5 10138 new revision: 1\.1\.2\.1; previous revision: 1\.1 10139 $CVSROOT_DIRNAME/first-dir/Attic/file6,v <-- file6 10140 new revision: 1\.1\.2\.1; previous revision: 1\.1 10141 $CVSROOT_DIRNAME/first-dir/Attic/file9,v <-- file9 10142 new revision: 1\.1\.2\.1; previous revision: 1\.1" 10143 10144 # Tag the current revisions on the branch. 10145 dotest join-11 "${testcvs} -q tag T1 ." \ 10146 'T file3 10147 T file4 10148 T file5 10149 T file6 10150 T file8 10151 T file9' 10152 10153 # Add file1 and file2, modify file9, and remove the other files. 10154 echo 'first branch revision of file1' > file1 10155 echo 'first branch revision of file2' > file2 10156 echo 'second branch revision of file9' > file9 10157 rm file3 file4 file5 file6 10158 dotest join-12 "${testcvs} add file1 file2" \ 10159 "${SPROG}"' add: scheduling file `file1'\'' for addition on branch `branch'\'' 10160 '"${SPROG}"' add: scheduling file `file2'\'' for addition on branch `branch'\'' 10161 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add these files permanently' 10162 dotest join-13 "${testcvs} rm file3 file4 file5 file6" \ 10163 "${SPROG}"' remove: scheduling `file3'\'' for removal 10164 '"${SPROG}"' remove: scheduling `file4'\'' for removal 10165 '"${SPROG}"' remove: scheduling `file5'\'' for removal 10166 '"${SPROG}"' remove: scheduling `file6'\'' for removal 10167 '"${SPROG}"' remove: use .'"${SPROG}"' commit. to remove these files permanently' 10168 dotest join-14 "${testcvs} -q ci -mx ." \ 10169 "$CVSROOT_DIRNAME/first-dir/Attic/file1,v <-- file1 10170 new revision: 1\.1\.2\.1; previous revision: 1\.1 10171 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 10172 new revision: 1\.1\.2\.2; previous revision: 1\.1\.2\.1 10173 $CVSROOT_DIRNAME/first-dir/file3,v <-- file3 10174 new revision: delete; previous revision: 1\.1\.2\.1 10175 $CVSROOT_DIRNAME/first-dir/file4,v <-- file4 10176 new revision: delete; previous revision: 1\.1\.2\.1 10177 $CVSROOT_DIRNAME/first-dir/Attic/file5,v <-- file5 10178 new revision: delete; previous revision: 1\.1\.2\.1 10179 $CVSROOT_DIRNAME/first-dir/Attic/file6,v <-- file6 10180 new revision: delete; previous revision: 1\.1\.2\.1 10181 $CVSROOT_DIRNAME/first-dir/Attic/file9,v <-- file9 10182 new revision: 1\.1\.2\.2; previous revision: 1\.1\.2\.1" 10183 10184 # Tag the current revisions on the branch. 10185 dotest join-15 "${testcvs} -q tag T2 ." \ 10186 'T file1 10187 T file2 10188 T file8 10189 T file9' 10190 10191 # Do a checkout with a merge. 10192 cd ../.. 10193 mkdir 3 10194 cd 3 10195 dotest join-16 "${testcvs} -q co -jT1 -jT2 first-dir" \ 10196 "U first-dir/file1 10197 U first-dir/file2 10198 ${SPROG} checkout: file first-dir/file2 exists, but has been added in revision T2 10199 U first-dir/file3 10200 ${SPROG} checkout: scheduling \`first-dir/file3' for removal 10201 U first-dir/file4 10202 ${SPROG} checkout: scheduling \`first-dir/file4' for removal 10203 U first-dir/file7 10204 ${SPROG} checkout: file first-dir/file9 does not exist, but is present in revision T2" 10205 10206 # Verify that the right changes have been scheduled. 10207 cd first-dir 10208 dotest join-17 "${testcvs} -q update" \ 10209 'A file1 10210 R file3 10211 R file4' 10212 10213 # Modify file4 locally, and do an update with a merge. 10214 cd ../../1/first-dir 10215 echo 'third revision of file4' > file4 10216 dotest join-18 "${testcvs} -q update -jT1 -jT2 ." \ 10217 "U file1 10218 $SPROG update: file file2 exists, but has been added in revision T2 10219 $SPROG update: scheduling \`file3' for removal 10220 M file4 10221 $SPROG update: file file4 is locally modified, but has been removed in revision T2 10222 $SPROG update: file file9 does not exist, but is present in revision T2" 10223 10224 # Verify that the right changes have been scheduled. 10225 dotest join-19 "${testcvs} -q update" \ 10226 'A file1 10227 R file3 10228 M file4' 10229 10230 # Do a checkout with a merge from a single revision. 10231 10232 # FIXME: CVS currently gets this wrong. file2 has been 10233 # added on both the branch and the main line, and so should 10234 # be regarded as a conflict. However, given the way that 10235 # CVS sets up the RCS file, there is no way to distinguish 10236 # this case from the case of file2 having existed before the 10237 # branch was made. This could be fixed by reserving 10238 # a revision somewhere, perhaps 1.1, as an always dead 10239 # revision which can be used as the source for files added 10240 # on branches. 10241 cd ../../3 10242 rm -r first-dir 10243 dotest join-20 "${testcvs} -q co -jbranch first-dir" \ 10244 "U first-dir/file1 10245 U first-dir/file2 10246 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 10247 retrieving revision 1\.1 10248 retrieving revision 1\.1\.2\.2 10249 Merging differences between 1\.1 and 1\.1\.2\.2 into file2 10250 U first-dir/file3 10251 ${SPROG} checkout: scheduling \`first-dir/file3' for removal 10252 U first-dir/file4 10253 ${SPROG} checkout: file first-dir/file4 has been modified, but has been removed in revision branch 10254 U first-dir/file7 10255 ${SPROG} checkout: file first-dir/file9 does not exist, but is present in revision branch" 10256 10257 # Verify that the right changes have been scheduled. 10258 # The M file2 line is a bug; see above join-20. 10259 cd first-dir 10260 dotest join-21 "${testcvs} -q update" \ 10261 'A file1 10262 M file2 10263 R file3' 10264 10265 # Checkout the main line again. 10266 cd ../../1 10267 rm -r first-dir 10268 dotest join-22 "${testcvs} -q co first-dir" \ 10269 'U first-dir/file2 10270 U first-dir/file3 10271 U first-dir/file4 10272 U first-dir/file7' 10273 10274 # Modify file4 locally, and do an update with a merge from a 10275 # single revision. 10276 # The file2 handling is a bug; see above join-20. 10277 cd first-dir 10278 echo 'third revision of file4' > file4 10279 dotest join-23 "${testcvs} -q update -jbranch ." \ 10280 "U file1 10281 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 10282 retrieving revision 1\.1 10283 retrieving revision 1\.1\.2\.2 10284 Merging differences between 1\.1 and 1\.1\.2\.2 into file2 10285 ${SPROG} update: scheduling \`file3' for removal 10286 M file4 10287 ${SPROG} update: file file4 is locally modified, but has been removed in revision branch 10288 ${SPROG} update: file file9 does not exist, but is present in revision branch" 10289 10290 # Verify that the right changes have been scheduled. 10291 # The M file2 line is a bug; see above join-20 10292 dotest join-24 "${testcvs} -q update" \ 10293 'A file1 10294 M file2 10295 R file3 10296 M file4' 10297 10298 cd .. 10299 10300 # Checkout the main line again and make a new branch which we 10301 # merge to. 10302 rm -r first-dir 10303 dotest join-25 "${testcvs} -q co first-dir" \ 10304 'U first-dir/file2 10305 U first-dir/file3 10306 U first-dir/file4 10307 U first-dir/file7' 10308 cd first-dir 10309 dotest join-26 "${testcvs} -q tag -b br2" \ 10310 "T file2 10311 T file3 10312 T file4 10313 T file7" 10314 dotest join-27 "${testcvs} -q update -r br2" "" 10315 # The handling of file8 and file9 here look fishy to me. I don't 10316 # see why it should be different from the case where we merge to 10317 # the trunk (e.g. join-23). 10318 dotest join-28 "${testcvs} -q update -j branch" \ 10319 "U file1 10320 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 10321 retrieving revision 1.1 10322 retrieving revision 1.1.2.2 10323 Merging differences between 1.1 and 1.1.2.2 into file2 10324 ${SPROG} update: scheduling \`file3' for removal 10325 ${SPROG} update: file file4 has been modified, but has been removed in revision branch 10326 U file8 10327 U file9" 10328 # Verify that the right changes have been scheduled. 10329 dotest join-29 "${testcvs} -q update" \ 10330 "A file1 10331 M file2 10332 R file3 10333 A file8 10334 A file9" 10335 10336 # Checkout the mainline again to try updating and merging between two 10337 # branches in the same step 10338 # this seems a likely scenario - the user finishes up on branch and 10339 # updates to br2 and merges in the same step - and there was a bug 10340 # once that if the file was removed in the update then it wouldn't be 10341 # readded in the merge 10342 cd .. 10343 rm -r first-dir 10344 dotest join-twobranch-1 "${testcvs} -q co -rbranch first-dir" \ 10345 'U first-dir/file1 10346 U first-dir/file2 10347 U first-dir/file8 10348 U first-dir/file9' 10349 cd first-dir 10350 dotest join-twobranch-2 "${testcvs} -q update -rbr2 -jbranch" \ 10351 "${SPROG} update: \`file1' is no longer in the repository 10352 U file1 10353 U file2 10354 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 10355 retrieving revision 1\.1 10356 retrieving revision 1\.1\.2\.2 10357 Merging differences between 1\.1 and 1\.1\.2\.2 into file2 10358 U file3 10359 ${SPROG} update: scheduling \`file3' for removal 10360 U file4 10361 ${SPROG} update: file file4 has been modified, but has been removed in revision branch 10362 U file7 10363 ${SPROG} update: \`file8' is no longer in the repository 10364 U file8 10365 ${SPROG} update: \`file9' is no longer in the repository 10366 U file9" 10367 # Verify that the right changes have been scheduled. 10368 dotest join-twobranch-3 "${testcvs} -q update" \ 10369 "A file1 10370 M file2 10371 R file3 10372 A file8 10373 A file9" 10374 10375 # Checkout the mainline again to try merging from the trunk 10376 # to a branch. 10377 cd .. 10378 rm -r first-dir 10379 dotest join-30 "${testcvs} -q co first-dir" \ 10380 'U first-dir/file2 10381 U first-dir/file3 10382 U first-dir/file4 10383 U first-dir/file7' 10384 cd first-dir 10385 10386 # Tag the current revisions on the trunk. 10387 dotest join-31 "${testcvs} -q tag T3 ." \ 10388 'T file2 10389 T file3 10390 T file4 10391 T file7' 10392 10393 # Modify file7. 10394 echo 'second revision of file7' > file7 10395 dotest join-32 "${testcvs} -q ci -mx ." \ 10396 "$CVSROOT_DIRNAME/first-dir/file7,v <-- file7 10397 new revision: 1\.2; previous revision: 1\.1" 10398 10399 # And Tag again. 10400 dotest join-33 "${testcvs} -q tag T4 ." \ 10401 'T file2 10402 T file3 10403 T file4 10404 T file7' 10405 10406 # Now update branch to T3. 10407 cd ../../2/first-dir 10408 dotest join-34 "${testcvs} -q up -jT3" \ 10409 "${SPROG} update: file file4 does not exist, but is present in revision T3 10410 U file7" 10411 10412 # Verify that the right changes have been scheduled. 10413 dotest join-35 "${testcvs} -q update" \ 10414 'A file7' 10415 10416 # Now update to T4. 10417 # This is probably a bug, although in this particular case it just 10418 # happens to do the right thing; see above join-20. 10419 dotest join-36 "${testcvs} -q up -j T3 -j T4" \ 10420 "A file7 10421 RCS file: ${CVSROOT_DIRNAME}/first-dir/file7,v 10422 retrieving revision 1\.1 10423 retrieving revision 1\.2 10424 Merging differences between 1\.1 and 1\.2 into file7" 10425 10426 # Verify that the right changes have been scheduled. 10427 dotest join-37 "${testcvs} -q update" \ 10428 'A file7' 10429 10430 dokeep 10431 cd ../.. 10432 rm -r 1 2 3 10433 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 10434 ;; 10435 10436 10437 10438 join2) 10439 # More joining tests. 10440 10441 # First the usual setup; create a directory first-dir, a file 10442 # first-dir/file1, and a branch br1. 10443 mkdir 1; cd 1 10444 dotest join2-1 "${testcvs} -q co -l ." '' 10445 mkdir first-dir 10446 dotest join2-2 "${testcvs} add first-dir" \ 10447 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 10448 cd first-dir 10449 echo 'initial contents of file1' >file1 10450 dotest join2-3 "${testcvs} add file1" \ 10451 "${SPROG} add: scheduling file .file1. for addition 10452 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 10453 dotest join2-4 "${testcvs} -q ci -m add" \ 10454 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 10455 initial revision: 1\.1" 10456 dotest join2-5 "${testcvs} -q tag -b br1" "T file1" 10457 dotest join2-6 "${testcvs} -q update -r br1" "" 10458 echo 'modify on branch' >>file1 10459 touch bradd 10460 dotest join2-6a "${testcvs} add bradd" \ 10461 "${SPROG} add: scheduling file .bradd. for addition on branch .br1. 10462 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 10463 dotest join2-7 "${testcvs} -q ci -m modify" \ 10464 "$CVSROOT_DIRNAME/first-dir/Attic/bradd,v <-- bradd 10465 new revision: 1\.1\.2\.1; previous revision: 1\.1 10466 $CVSROOT_DIRNAME/first-dir/file1,v <-- file1 10467 new revision: 1\.1\.2\.1; previous revision: 1\.1" 10468 10469 # Here is the unusual/pathological part. We switch back to 10470 # the trunk *for file1 only*, not for the whole directory. 10471 dotest join2-8 "${testcvs} -q update -A file1" '[UP] file1' 10472 dotest join2-9 "${testcvs} -q status file1" \ 10473 "=================================================================== 10474 File: file1 Status: Up-to-date 10475 10476 Working revision: 1\.1.* 10477 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file1,v 10478 Commit Identifier: ${commitid} 10479 Sticky Tag: (none) 10480 Sticky Date: (none) 10481 Sticky Options: (none)" 10482 dotest join2-10 "cat CVS/Tag" "Tbr1" 10483 10484 dotest join2-11 "${testcvs} -q update -j br1 file1" \ 10485 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 10486 retrieving revision 1\.1 10487 retrieving revision 1\.1\.2\.1 10488 Merging differences between 1\.1 and 1\.1\.2\.1 into file1" 10489 dotest join2-12 "cat file1" "initial contents of file1 10490 modify on branch" 10491 # We should have no sticky tag on file1 10492 dotest join2-13 "${testcvs} -q status file1" \ 10493 "=================================================================== 10494 File: file1 Status: Locally Modified 10495 10496 Working revision: 1\.1.* 10497 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file1,v 10498 Commit Identifier: ${commitid} 10499 Sticky Tag: (none) 10500 Sticky Date: (none) 10501 Sticky Options: (none)" 10502 dotest join2-14 "cat CVS/Tag" "Tbr1" 10503 # And the checkin should go to the trunk 10504 dotest join2-15 "${testcvs} -q ci -m modify file1" \ 10505 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 10506 new revision: 1\.2; previous revision: 1\.1" 10507 10508 # OK, the above is all well and good and has worked for some 10509 # time. Now try the case where the file had been added on 10510 # the branch. 10511 dotest join2-16 "${testcvs} -q update -r br1" "[UP] file1" 10512 # The workaround is to update the whole directory. 10513 # The non-circumvented version won't work. The reason is that 10514 # update removes the entry from CVS/Entries, so of course we get 10515 # the tag from CVS/Tag and not Entries. I suppose maybe 10516 # we could invent some new format in Entries which would handle 10517 # this, but doing so, and handling it properly throughout 10518 # CVS, would be a lot of work and I'm not sure this case justifies 10519 # it. 10520 dotest join2-17-circumvent "${testcvs} -q update -A" \ 10521 "${SPROG} update: \`bradd' is no longer in the repository 10522 [UP] file1" 10523 : dotest join2-17 "${testcvs} -q update -A bradd" \ 10524 "${SPROG} update: warning: \`bradd' is not (any longer) pertinent" 10525 dotest join2-18 "${testcvs} -q update -j br1 bradd" "U bradd" 10526 dotest join2-19 "${testcvs} -q status bradd" \ 10527 "=================================================================== 10528 File: bradd Status: Locally Added 10529 10530 Working revision: New file! 10531 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/Attic/bradd,v 10532 Commit Identifier: ${commitid} 10533 Sticky Tag: (none) 10534 Sticky Date: (none) 10535 Sticky Options: (none)" 10536 dotest join2-20 "${testcvs} -q ci -m modify bradd" \ 10537 "$CVSROOT_DIRNAME/first-dir/bradd,v <-- bradd 10538 new revision: 1\.2; previous revision: 1\.1" 10539 10540 dokeep 10541 cd ../.. 10542 rm -r 1 10543 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 10544 ;; 10545 10546 10547 10548 join3) 10549 # See "join" for a list of other joining/branching tests. 10550 # First the usual setup; create a directory first-dir, a file 10551 # first-dir/file1, and a branch br1. 10552 mkdir 1; cd 1 10553 dotest join3-1 "${testcvs} -q co -l ." '' 10554 mkdir first-dir 10555 dotest join3-2 "${testcvs} add first-dir" \ 10556 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 10557 cd first-dir 10558 echo 'initial contents of file1' >file1 10559 dotest join3-3 "${testcvs} add file1" \ 10560 "${SPROG} add: scheduling file .file1. for addition 10561 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 10562 dotest join3-4 "${testcvs} -q ci -m add" \ 10563 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 10564 initial revision: 1\.1" 10565 dotest join3-5 "${testcvs} -q tag -b br1" "T file1" 10566 dotest join3-6 "${testcvs} -q update -r br1" "" 10567 echo 'br1:line1' >>file1 10568 dotest join3-7 "${testcvs} -q ci -m modify" \ 10569 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 10570 new revision: 1\.1\.2\.1; previous revision: 1\.1" 10571 10572 # Now back to the trunk for: 10573 # another revision and another branch for file1. 10574 # add file2, which will exist on trunk and br2 but not br1. 10575 dotest join3-8 "${testcvs} -q update -A" "[UP] file1" 10576 echo 'trunk:line1' > file2 10577 dotest join3-8a "${testcvs} add file2" \ 10578 "${SPROG} add: scheduling file .file2. for addition 10579 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 10580 echo 'trunk:line1' >>file1 10581 dotest join3-9 "${testcvs} -q ci -m modify" \ 10582 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 10583 new revision: 1\.2; previous revision: 1\.1 10584 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 10585 initial revision: 1\.1" 10586 dotest join3-10 "${testcvs} -q tag -b br2" "T file1 10587 T file2" 10588 10589 # Before we actually have any revision on br2, let's try a join 10590 dotest join3-11 "${testcvs} -q update -r br1" "[UP] file1 10591 ${SPROG} update: \`file2' is no longer in the repository" 10592 dotest join3-12 "${testcvs} -q update -j br2" \ 10593 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 10594 retrieving revision 1\.1 10595 retrieving revision 1\.2 10596 Merging differences between 1\.1 and 1\.2 into file1 10597 rcsmerge: warning: conflicts during merge 10598 U file2" 10599 dotest join3-13 "cat file1" \ 10600 "initial contents of file1 10601 [<]<<<<<< file1 10602 br1:line1 10603 [=]====== 10604 trunk:line1 10605 [>]>>>>>> 1\.2" 10606 rm file1 10607 10608 # OK, we'll try the same thing with a revision on br2. 10609 dotest join3-14 "${testcvs} -q update -r br2 file1" \ 10610 "${SPROG} update: warning: \`file1' was lost 10611 U file1" "U file1" 10612 echo 'br2:line1' >>file1 10613 dotest join3-15 "${testcvs} -q ci -m modify file1" \ 10614 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 10615 new revision: 1\.2\.2\.1; previous revision: 1\.2" 10616 10617 # OK, now we can join br2 to br1 10618 dotest join3-16 "${testcvs} -q update -r br1 file1" "[UP] file1" 10619 # It may seem odd, to merge a higher branch into a lower 10620 # branch, but in fact CVS defines the ancestor as 1.1 10621 # and so it merges both the 1.1->1.2 and 1.2->1.2.2.1 changes. 10622 # This seems like a reasonably plausible behavior. 10623 dotest join3-17 "${testcvs} -q update -j br2 file1" \ 10624 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 10625 retrieving revision 1\.1 10626 retrieving revision 1\.2\.2\.1 10627 Merging differences between 1\.1 and 1\.2\.2\.1 into file1 10628 rcsmerge: warning: conflicts during merge" 10629 dotest join3-18 "cat file1" \ 10630 "initial contents of file1 10631 [<]<<<<<< file1 10632 br1:line1 10633 [=]====== 10634 trunk:line1 10635 br2:line1 10636 [>]>>>>>> 1\.2\.2\.1" 10637 10638 dokeep 10639 cd ../.. 10640 rm -r 1 10641 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 10642 ;; 10643 10644 10645 10646 join4) 10647 # Like join, but with local (uncommitted) modifications. 10648 10649 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 10650 mkdir 1 10651 cd 1 10652 dotest join4-1 "${testcvs} -q co first-dir" '' 10653 10654 cd first-dir 10655 10656 # Add two files. 10657 echo 'first revision of file3' > file3 10658 echo 'first revision of file4' > file4 10659 echo 'first revision of file6' > file6 10660 echo 'first revision of file8' > file8 10661 echo 'first revision of file9' > file9 10662 dotest join4-2 "${testcvs} add file3 file4 file6 file8 file9" \ 10663 "${SPROG}"' add: scheduling file `file3'\'' for addition 10664 '"${SPROG}"' add: scheduling file `file4'\'' for addition 10665 '"${SPROG}"' add: scheduling file `file6'\'' for addition 10666 '"${SPROG}"' add: scheduling file `file8'\'' for addition 10667 '"${SPROG}"' add: scheduling file `file9'\'' for addition 10668 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add these files permanently' 10669 10670 dotest join4-3 "${testcvs} -q commit -m add" \ 10671 "$CVSROOT_DIRNAME/first-dir/file3,v <-- file3 10672 initial revision: 1\.1 10673 $CVSROOT_DIRNAME/first-dir/file4,v <-- file4 10674 initial revision: 1\.1 10675 $CVSROOT_DIRNAME/first-dir/file6,v <-- file6 10676 initial revision: 1\.1 10677 $CVSROOT_DIRNAME/first-dir/file8,v <-- file8 10678 initial revision: 1\.1 10679 $CVSROOT_DIRNAME/first-dir/file9,v <-- file9 10680 initial revision: 1\.1" 10681 10682 # Make a branch. 10683 dotest join4-4 "${testcvs} -q tag -b branch ." \ 10684 'T file3 10685 T file4 10686 T file6 10687 T file8 10688 T file9' 10689 10690 # Add file10 10691 echo 'first revision of file10' > file10 10692 dotest join4-7a "${testcvs} add file10" \ 10693 "${SPROG}"' add: scheduling file `file10'\'' for addition 10694 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 10695 dotest join4-7b "${testcvs} -q ci -mx ." \ 10696 "$CVSROOT_DIRNAME/first-dir/file10,v <-- file10 10697 initial revision: 1\.1" 10698 10699 # Add file2 and file7, modify file4, and remove 10700 # file6, file8, file9, and file10. 10701 echo 'first revision of file2' > file2 10702 echo 'second revision of file4' > file4 10703 echo 'first revision of file7' > file7 10704 rm file6 file8 file9 file10 10705 dotest join4-5 "${testcvs} add file2 file7" \ 10706 "${SPROG}"' add: scheduling file `file2'\'' for addition 10707 '"${SPROG}"' add: scheduling file `file7'\'' for addition 10708 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add these files permanently' 10709 dotest join4-6 "${testcvs} rm file6 file8 file9 file10" \ 10710 "${SPROG}"' remove: scheduling `file6'\'' for removal 10711 '"${SPROG}"' remove: scheduling `file8'\'' for removal 10712 '"${SPROG}"' remove: scheduling `file9'\'' for removal 10713 '"${SPROG}"' remove: scheduling `file10'\'' for removal 10714 '"${SPROG}"' remove: use .'"${SPROG}"' commit. to remove these files permanently' 10715 10716 # Check out the branch. 10717 cd ../.. 10718 mkdir 2 10719 cd 2 10720 dotest join4-8 "${testcvs} -q co -r branch first-dir" \ 10721 'U first-dir/file3 10722 U first-dir/file4 10723 U first-dir/file6 10724 U first-dir/file8 10725 U first-dir/file9' 10726 10727 cd first-dir 10728 10729 # Modify the files on the branch, so that T1 is not an 10730 # ancestor of the main line, and add file5 10731 echo 'first branch revision of file3' > file3 10732 echo 'first branch revision of file4' > file4 10733 echo 'first branch revision of file5' > file5 10734 echo 'first branch revision of file6' > file6 10735 echo 'first branch revision of file9' > file9 10736 dotest join4-9 "${testcvs} add file5" \ 10737 "${SPROG}"' add: scheduling file `file5'\'' for addition on branch `branch'\'' 10738 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 10739 dotest join4-10 "${testcvs} -q ci -mx ." \ 10740 "$CVSROOT_DIRNAME/first-dir/file3,v <-- file3 10741 new revision: 1\.1\.2\.1; previous revision: 1\.1 10742 $CVSROOT_DIRNAME/first-dir/file4,v <-- file4 10743 new revision: 1\.1\.2\.1; previous revision: 1\.1 10744 $CVSROOT_DIRNAME/first-dir/Attic/file5,v <-- file5 10745 new revision: 1\.1\.2\.1; previous revision: 1\.1 10746 $CVSROOT_DIRNAME/first-dir/file6,v <-- file6 10747 new revision: 1\.1\.2\.1; previous revision: 1\.1 10748 $CVSROOT_DIRNAME/first-dir/file9,v <-- file9 10749 new revision: 1\.1\.2\.1; previous revision: 1\.1" 10750 10751 # Tag the current revisions on the branch. 10752 dotest join4-11 "${testcvs} -q tag T1 ." \ 10753 'T file3 10754 T file4 10755 T file5 10756 T file6 10757 T file8 10758 T file9' 10759 10760 # Add file1 and file2, modify file9, and remove the other files. 10761 echo 'first branch revision of file1' > file1 10762 echo 'first branch revision of file2' > file2 10763 echo 'second branch revision of file9' > file9 10764 rm file3 file4 file5 file6 10765 dotest join4-12 "${testcvs} add file1 file2" \ 10766 "${SPROG}"' add: scheduling file `file1'\'' for addition on branch `branch'\'' 10767 '"${SPROG}"' add: scheduling file `file2'\'' for addition on branch `branch'\'' 10768 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add these files permanently' 10769 dotest join4-13 "${testcvs} rm file3 file4 file5 file6" \ 10770 "${SPROG}"' remove: scheduling `file3'\'' for removal 10771 '"${SPROG}"' remove: scheduling `file4'\'' for removal 10772 '"${SPROG}"' remove: scheduling `file5'\'' for removal 10773 '"${SPROG}"' remove: scheduling `file6'\'' for removal 10774 '"${SPROG}"' remove: use .'"${SPROG}"' commit. to remove these files permanently' 10775 dotest join4-14 "${testcvs} -q ci -mx ." \ 10776 "$CVSROOT_DIRNAME/first-dir/Attic/file1,v <-- file1 10777 new revision: 1\.1\.2\.1; previous revision: 1\.1 10778 $CVSROOT_DIRNAME/first-dir/Attic/file2,v <-- file2 10779 new revision: 1\.1\.2\.1; previous revision: 1\.1 10780 $CVSROOT_DIRNAME/first-dir/file3,v <-- file3 10781 new revision: delete; previous revision: 1\.1\.2\.1 10782 $CVSROOT_DIRNAME/first-dir/file4,v <-- file4 10783 new revision: delete; previous revision: 1\.1\.2\.1 10784 $CVSROOT_DIRNAME/first-dir/Attic/file5,v <-- file5 10785 new revision: delete; previous revision: 1\.1\.2\.1 10786 $CVSROOT_DIRNAME/first-dir/file6,v <-- file6 10787 new revision: delete; previous revision: 1\.1\.2\.1 10788 $CVSROOT_DIRNAME/first-dir/file9,v <-- file9 10789 new revision: 1\.1\.2\.2; previous revision: 1\.1\.2\.1" 10790 10791 # Tag the current revisions on the branch. 10792 dotest join4-15 "${testcvs} -q tag T2 ." \ 10793 'T file1 10794 T file2 10795 T file8 10796 T file9' 10797 10798 # Modify file4 locally, and do an update with a merge. 10799 cd ../../1/first-dir 10800 echo 'third revision of file4' > file4 10801 dotest join4-18 "${testcvs} -q update -jT1 -jT2 ." \ 10802 "U file1 10803 R file10 10804 A file2 10805 ${SPROG} update: file file2 exists, but has been added in revision T2 10806 ${SPROG} update: scheduling \`file3' for removal 10807 M file4 10808 ${SPROG} update: file file4 is locally modified, but has been removed in revision T2 10809 R file6 10810 A file7 10811 R file8 10812 R file9 10813 ${SPROG} update: file file9 does not exist, but is present in revision T2" 10814 10815 # Verify that the right changes have been scheduled. 10816 dotest join4-19 "${testcvs} -q update" \ 10817 'A file1 10818 R file10 10819 A file2 10820 R file3 10821 M file4 10822 R file6 10823 A file7 10824 R file8 10825 R file9' 10826 10827 dokeep 10828 cd ../.. 10829 rm -r 1 2 10830 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 10831 ;; 10832 10833 10834 10835 join5) 10836 # This test verifies that CVS can handle filenames starting with a 10837 # dash (`-') properly. What used to happen was that CVS handled it 10838 # just fine, until it went to pass them as arguments to the diff 10839 # library, at which point it neglected to pass `--' before the file 10840 # list, causing the diff library to attempt to interpret the file 10841 # name as an argument. 10842 mkdir join5; cd join5 10843 mkdir 1; cd 1 10844 dotest join5-init-1 "${testcvs} -Q co -l ." 10845 mkdir join5 10846 dotest join5-init-2 "${testcvs} -Q add join5" 10847 cd join5 10848 echo "there once was a file from harrisburg" >-file 10849 echo "who's existance it seems was quiteabsurd" >>-file 10850 dotest join5-init-3 "${testcvs} -Q add -- -file" 10851 dotest join5-init-4 "${testcvs} -q ci -minitial" \ 10852 "$CVSROOT_DIRNAME/join5/-file,v <-- -file 10853 initial revision: 1\.1" 10854 cd ../.. 10855 10856 mkdir 2; cd 2 10857 dotest join5-init-5 "${testcvs} -Q co join5" 10858 cd join5 10859 echo "it tested for free" >>-file 10860 echo "when paid it should be" >>-file 10861 dotest join5-init-4 "${testcvs} -q ci -msecond" \ 10862 "$CVSROOT_DIRNAME/join5/-file,v <-- -file 10863 new revision: 1\.2; previous revision: 1\.1" 10864 cd ../.. 10865 10866 cd 1/join5 10867 echo "but maybe it could charge bytheword" >>-file 10868 # This is the test that used to spew complaints from diff3: 10869 dotest join5 "${testcvs} up" \ 10870 "${SPROG} update: Updating \. 10871 RCS file: ${CVSROOT_DIRNAME}/join5/-file,v 10872 retrieving revision 1\.1 10873 retrieving revision 1\.2 10874 Merging differences between 1\.1 and 1\.2 into -file 10875 rcsmerge: warning: conflicts during merge 10876 ${SPROG} update: conflicts found in -file 10877 C -file" 10878 10879 dokeep 10880 cd ../../.. 10881 rm -r join5 10882 modify_repo rm -rf $CVSROOT_DIRNAME/join5 10883 ;; 10884 10885 10886 10887 join6) 10888 mkdir join6; cd join6 10889 mkdir 1; cd 1 10890 dotest join6-init-1 "${testcvs} -Q co -l ." 10891 mkdir join6 10892 dotest join6-init-2 "${testcvs} -Q add join6" 10893 cd join6 10894 echo aaa >temp.txt 10895 echo bbb >>temp.txt 10896 echo ccc >>temp.txt 10897 dotest join6-1 "${testcvs} -Q add temp.txt" 10898 dotest join6-2 "${testcvs} -q commit -minitial temp.txt" \ 10899 "$CVSROOT_DIRNAME/join6/temp\.txt,v <-- temp\.txt 10900 initial revision: 1\.1" 10901 cp temp.txt temp2.txt 10902 echo ddd >>temp.txt 10903 dotest join6-3 "${testcvs} -q commit -madd temp.txt" \ 10904 "$CVSROOT_DIRNAME/join6/temp.txt,v <-- temp\.txt 10905 new revision: 1\.2; previous revision: 1\.1" 10906 10907 # The case where the merge target is up-to-date and its base revision 10908 # matches the second argument to -j: CVS doesn't bother attempting 10909 # the merge since it already knows that the target contains the 10910 # change. 10911 dotest join6-3.3 "${testcvs} update -j1.1 -j1.2 temp.txt" \ 10912 "temp\.txt already contains the differences between 1\.1 and 1\.2" 10913 dotest join6-3.4 "${testcvs} diff temp.txt" "" 10914 10915 # The case where the merge target is modified but already contains 10916 # the change. 10917 echo bbb >temp.txt 10918 echo ccc >>temp.txt 10919 echo ddd >>temp.txt 10920 dotest join6-3.5 "${testcvs} update -j1.1 -j1.2 temp.txt" \ 10921 "M temp\.txt 10922 RCS file: ${CVSROOT_DIRNAME}/join6/temp\.txt,v 10923 retrieving revision 1\.1 10924 retrieving revision 1\.2 10925 Merging differences between 1\.1 and 1\.2 into temp\.txt 10926 temp\.txt already contains the differences between 1\.1 and 1\.2" 10927 dotest_fail join6-3.6 "${testcvs} diff temp.txt" \ 10928 "Index: temp\.txt 10929 =================================================================== 10930 RCS file: ${CVSROOT_DIRNAME}/join6/temp\.txt,v 10931 retrieving revision 1\.2 10932 diff -r1\.2 temp.txt 10933 1d0 10934 < aaa" 10935 10936 cp temp2.txt temp.txt 10937 dotest_fail join6-4 "${testcvs} diff temp.txt" \ 10938 "Index: temp.txt 10939 =================================================================== 10940 RCS file: ${CVSROOT_DIRNAME}/join6/temp\.txt,v 10941 retrieving revision 1\.2 10942 diff -r1\.2 temp\.txt 10943 4d3 10944 < ddd" 10945 10946 dotest join6-5 "${testcvs} update -j1.1 -j1.2 temp.txt" \ 10947 "M temp\.txt 10948 RCS file: ${CVSROOT_DIRNAME}/join6/temp\.txt,v 10949 retrieving revision 1\.1 10950 retrieving revision 1\.2 10951 Merging differences between 1\.1 and 1\.2 into temp\.txt" 10952 dotest join6-6 "${testcvs} diff temp.txt" "" 10953 mv temp.txt temp3.txt 10954 dotest join6-7 "sed 's/ddd/dddd/' < temp3.txt > temp.txt" "" 10955 dotest join6-8 "${testcvs} update -j1.1 -j1.2 temp.txt" \ 10956 "M temp\.txt 10957 RCS file: ${CVSROOT_DIRNAME}/join6/temp\.txt,v 10958 retrieving revision 1\.1 10959 retrieving revision 1\.2 10960 Merging differences between 1\.1 and 1\.2 into temp\.txt 10961 rcsmerge: warning: conflicts during merge" 10962 dotest_fail join6-9 "${testcvs} diff temp.txt" \ 10963 "Index: temp\.txt 10964 =================================================================== 10965 RCS file: ${CVSROOT_DIRNAME}/join6/temp.txt,v 10966 retrieving revision 1\.2 10967 diff -r1\.2 temp\.txt 10968 3a4,6 10969 > <<<<<<< temp\.txt 10970 > dddd 10971 > ======= 10972 4a8 10973 > >>>>>>> 1\.2" 10974 cp temp2.txt temp.txt 10975 dotest join6-10 "${testcvs} -q ci -m del temp.txt" \ 10976 "$CVSROOT_DIRNAME/join6/temp.txt,v <-- temp\.txt 10977 new revision: 1\.3; previous revision: 1\.2" 10978 cp temp3.txt temp.txt 10979 dotest_fail join6-11 "${testcvs} diff temp.txt" \ 10980 "Index: temp\.txt 10981 =================================================================== 10982 RCS file: ${CVSROOT_DIRNAME}/join6/temp.txt,v 10983 retrieving revision 1\.3 10984 diff -r1\.3 temp\.txt 10985 3a4 10986 > ddd" 10987 dotest join6-12 "${testcvs} update -j1.2 -j1.3 temp.txt" \ 10988 "M temp\.txt 10989 RCS file: ${CVSROOT_DIRNAME}/join6/temp\.txt,v 10990 retrieving revision 1\.2 10991 retrieving revision 1\.3 10992 Merging differences between 1\.2 and 1\.3 into temp\.txt" 10993 dotest join6-13 "${testcvs} diff temp.txt" "" 10994 10995 # The case where the merge target wasn't created until after the 10996 # first tag was applied 10997 rm temp2.txt temp3.txt 10998 dotest join6-20 "${testcvs} -q tag -r1.1 t1" \ 10999 "T temp.txt" 11000 echo xxx >temp2.txt 11001 dotest join6-21 "${testcvs} -Q add temp2.txt" 11002 dotest join6-22 "${testcvs} -q ci -m." \ 11003 "$CVSROOT_DIRNAME/join6/temp2\.txt,v <-- temp2\.txt 11004 initial revision: 1\.1" 11005 dotest join6-23 "${testcvs} -q tag t2" \ 11006 "T temp.txt 11007 T temp2.txt" 11008 echo xxx >>temp.txt 11009 dotest join6-24 "${testcvs} -q ci -m." \ 11010 "$CVSROOT_DIRNAME/join6/temp.txt,v <-- temp\.txt 11011 new revision: 1\.4; previous revision: 1\.3" 11012 dotest join6-25 "${testcvs} -q up -jt1 -jt2" \ 11013 "RCS file: ${CVSROOT_DIRNAME}/join6/temp.txt,v 11014 retrieving revision 1\.1 11015 retrieving revision 1\.3 11016 Merging differences between 1\.1 and 1\.3 into temp.txt 11017 temp.txt already contains the differences between 1\.1 and 1\.3 11018 temp2.txt already contains the differences between creation and 1\.1" 11019 11020 # Now for my next trick: delete the file, recreate it, and 11021 # try to merge 11022 dotest join6-30 "${testcvs} -q rm -f temp2.txt" \ 11023 "${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 11024 dotest join6-31 "${testcvs} -q ci -m. temp2.txt" \ 11025 "$CVSROOT_DIRNAME/join6/temp2\.txt,v <-- temp2\.txt 11026 new revision: delete; previous revision: 1\.1" 11027 echo new >temp2.txt 11028 # FIXCVS: Local and remote really shouldn't be different and there 11029 # really shouldn't be two different status lines for temp2.txt 11030 if $remote; then 11031 dotest_fail join6-32 "${testcvs} -q up -jt1 -jt2" \ 11032 "? temp2\.txt 11033 RCS file: ${CVSROOT_DIRNAME}/join6/temp.txt,v 11034 retrieving revision 1\.1 11035 retrieving revision 1\.3 11036 Merging differences between 1\.1 and 1\.3 into temp.txt 11037 temp.txt already contains the differences between 1\.1 and 1\.3 11038 $CPROG update: move away .\./temp2\.txt.; it is in the way 11039 C temp2\.txt" 11040 else 11041 dotest join6-32 "${testcvs} -q up -jt1 -jt2" \ 11042 "RCS file: ${CVSROOT_DIRNAME}/join6/temp.txt,v 11043 retrieving revision 1\.1 11044 retrieving revision 1\.3 11045 Merging differences between 1\.1 and 1\.3 into temp.txt 11046 temp.txt already contains the differences between 1\.1 and 1\.3 11047 ${SPROG} update: use .${SPROG} add. to create an entry for .temp2\.txt. 11048 U temp2\.txt 11049 ? temp2\.txt" 11050 fi 11051 11052 dokeep 11053 cd ../../.. 11054 rm -r join6 11055 modify_repo rm -rf $CVSROOT_DIRNAME/join6 11056 ;; 11057 11058 11059 11060 join7) 11061 # This test deals with joins that happen with the -n switch 11062 mkdir join7; cd join7 11063 mkdir impdir; cd impdir 11064 echo aaa >temp.txt 11065 echo bbb >>temp.txt 11066 echo ccc >>temp.txt 11067 dotest join7-1 \ 11068 "${testcvs} -Q import -minitial join7 vendor vers-1" \ 11069 "" 11070 cd .. 11071 dotest join7-2 "${testcvs} -Q co join7" "" 11072 cd join7 11073 echo ddd >> temp.txt 11074 dotest join7-3 "${testcvs} -Q ci -madded-line temp.txt" "" 11075 cd ../impdir 11076 echo aaaa >temp.txt 11077 echo bbbb >>temp.txt 11078 echo ccc >>temp.txt 11079 echo eee >>temp.txt 11080 dotest join7-4 \ 11081 "${testcvs} -Q import -minitial join7 vendor vers-2" \ 11082 "" 11083 cd ../join7 11084 dotest join7-5 \ 11085 "${testcvs} -n update -jvers-1 -jvers-2 temp.txt" \ 11086 "RCS file: $CVSROOT_DIRNAME/join7/temp.txt,v 11087 retrieving revision 1\.1\.1\.1 11088 retrieving revision 1\.1\.1\.2 11089 Merging differences between 1\.1\.1\.1 and 1\.1\.1\.2 into temp.txt 11090 rcsmerge: warning: conflicts during merge" 11091 touch temp.txt 11092 dotest join7-6 "${testcvs} -n update -jvers-1 -jvers-2 temp.txt" \ 11093 "RCS file: $CVSROOT_DIRNAME/join7/temp.txt,v 11094 retrieving revision 1\.1\.1\.1 11095 retrieving revision 1\.1\.1\.2 11096 Merging differences between 1\.1\.1\.1 and 1\.1\.1\.2 into temp.txt 11097 rcsmerge: warning: conflicts during merge" \ 11098 "RCS file: $CVSROOT_DIRNAME/join7/temp.txt,v 11099 retrieving revision 1\.1\.1\.1 11100 retrieving revision 1\.1\.1\.2 11101 Merging differences between 1\.1\.1\.1 and 1\.1\.1\.2 into temp.txt 11102 rcsmerge: warning: conflicts during merge" 11103 11104 dokeep 11105 cd ../.. 11106 rm -r join7 11107 modify_repo rm -rf $CVSROOT_DIRNAME/join7 11108 ;; 11109 11110 11111 11112 join-readonly-conflict) 11113 # Previously, only tests 1 & 11 were being tested. I added the 11114 # intermediate dotest's to try and diagnose a different failure 11115 # 11116 # Demonstrate that cvs-1.9.29 can fail on 2nd and subsequent 11117 # conflict-evoking join attempts. 11118 # Even with that version of CVS, This test failed only in 11119 # client-server mode, and would have been noticed in normal 11120 # operation only for files that were read-only (either due to 11121 # use of cvs' global -r option, setting the CVSREAD envvar, 11122 # or use of watch lists). 11123 mkdir join-readonly-conflict; cd join-readonly-conflict 11124 dotest join-readonly-conflict-1 "$testcvs -q co -l ." '' 11125 module=join-readonly-conflict 11126 mkdir $module 11127 $testcvs -q add $module >>$LOGFILE 2>&1 11128 cd $module 11129 11130 file=m 11131 echo trunk > $file 11132 dotest join-readonly-conflict-2 "$testcvs -Q add $file" '' 11133 11134 dotest join-readonly-conflict-3 "$testcvs -q ci -m . $file" \ 11135 "$CVSROOT_DIRNAME/$module/$file,v <-- $file 11136 initial revision: 1\.1" 11137 11138 dotest join-readonly-conflict-4 "$testcvs tag -b B $file" "T $file" 11139 dotest join-readonly-conflict-5 "$testcvs -q update -rB $file" '' 11140 echo branch B > $file 11141 dotest join-readonly-conflict-6 "$testcvs -q ci -m . $file" \ 11142 "$CVSROOT_DIRNAME/$module/$file,v <-- $file 11143 new revision: 1\.1\.2\.1; previous revision: 1\.1" 11144 11145 rm $file 11146 dotest join-readonly-conflict-7 "$testcvs -Q update -A $file" '' 11147 # Make sure $file is read-only. This can happen more realistically 11148 # via patch -- which could be used to apply a delta, yet would 11149 # preserve a file's read-only permissions. 11150 echo conflict > $file; chmod u-w $file 11151 dotest join-readonly-conflict-8 "$testcvs update -r B $file" \ 11152 "RCS file: $CVSROOT_DIRNAME/$module/$file,v 11153 retrieving revision 1\.1 11154 retrieving revision 1\.1\.2\.1 11155 Merging differences between 1\.1 and 1\.1\.2\.1 into $file 11156 rcsmerge: warning: conflicts during merge 11157 ${SPROG} update: conflicts found in $file 11158 C $file" 11159 11160 # restore to the trunk 11161 rm -f $file 11162 dotest join-readonly-conflict-9 "$testcvs -Q update -A $file" '' 11163 11164 # This one would fail because cvs couldn't open the existing 11165 # (and read-only) .# file for writing. 11166 echo conflict > $file 11167 11168 # verify that the backup file is not writable 11169 if test -w ".#$file.1.1"; then 11170 fail "join-readonly-conflict-10 : .#$file.1.1 is writable" 11171 else 11172 pass "join-readonly-conflict-10" 11173 fi 11174 dotest join-readonly-conflict-11 "$testcvs update -r B $file" \ 11175 "RCS file: $CVSROOT_DIRNAME/$module/$file,v 11176 retrieving revision 1\.1 11177 retrieving revision 1\.1\.2\.1 11178 Merging differences between 1\.1 and 1\.1\.2\.1 into $file 11179 rcsmerge: warning: conflicts during merge 11180 ${SPROG} update: conflicts found in $file 11181 C m" 11182 11183 dokeep 11184 cd ../.. 11185 rm -r join-readonly-conflict 11186 modify_repo rm -rf $CVSROOT_DIRNAME/$module 11187 ;; 11188 11189 11190 11191 join-admin) 11192 mkdir 1; cd 1 11193 dotest join-admin-0-1 "$testcvs -q co -l ." 11194 module=x 11195 mkdir $module 11196 dotest join-admin-0-2 "$testcvs -q add $module" \ 11197 "Directory $CVSROOT_DIRNAME/$module added to the repository" 11198 cd $module 11199 11200 # Create a file so applying the first tag works. 11201 echo foo > a 11202 dotest join-admin-0-3 "$testcvs -Q add a" '' 11203 dotest join-admin-0-4 "$testcvs -Q ci -m. a" '' 11204 11205 dotest join-admin-0-5 "$testcvs -Q tag -b B" '' 11206 dotest join-admin-0-6 "$testcvs -Q tag -b M1" '' 11207 echo '$''Id$' > b 11208 dotest join-admin-0-7 "$testcvs -Q add b" '' 11209 dotest join-admin-0-8 "$testcvs -Q ci -m. b" '' 11210 dotest join-admin-0-9 "$testcvs -Q tag -b M2" '' 11211 11212 dotest join-admin-0-10 "$testcvs -Q update -r B" '' 11213 dotest join-admin-0-11 "$testcvs -Q update -kk -jM1 -jM2" '' 11214 dotest join-admin-0-12 "$testcvs -Q ci -m. b" '' 11215 11216 dotest join-admin-0-13 "$testcvs -Q update -A" '' 11217 11218 # Verify that the -kk flag from the update did not 11219 # propagate to the repository. 11220 dotest join-admin-1 "$testcvs status b" \ 11221 "=================================================================== 11222 File: b Status: Up-to-date 11223 11224 Working revision: 1\.1.* 11225 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/x/b,v 11226 Commit Identifier: ${commitid} 11227 Sticky Tag: (none) 11228 Sticky Date: (none) 11229 Sticky Options: (none)" 11230 11231 dokeep 11232 cd ../.. 11233 rm -rf 1 11234 modify_repo rm -rf $CVSROOT_DIRNAME/$module 11235 ;; 11236 11237 11238 11239 join-admin-2) 11240 # Show that when a merge (via update -kk -jtag1 -jtag2) first 11241 # removes a file, then modifies another containing an $Id...$ line, 11242 # the resulting file contains the unexpanded `$Id.$' string, as 11243 # -kk requires. 11244 mkdir 1; cd 1 11245 dotest join-admin-2-1 "$testcvs -q co -l ." '' 11246 module=x 11247 mkdir $module 11248 dotest join-admin-2-2 "$testcvs -q add $module" \ 11249 "Directory ${CVSROOT_DIRNAME}/x added to the repository" 11250 cd $module 11251 11252 # Create a file so applying the first tag works. 11253 echo '$''Id$' > e0 11254 cp e0 e 11255 dotest join-admin-2-3 "$testcvs -Q add e" 11256 dotest join-admin-2-4 "$testcvs -Q ci -m. e" 11257 11258 dotest join-admin-2-5 "$testcvs -Q tag -b T" '' "${QUESTION} e0" 11259 dotest join-admin-2-6 "$testcvs -Q update -r T" '' "${QUESTION} e0" 11260 cp e0 e 11261 dotest join-admin-2-7 "$testcvs -Q ci -m. e" 11262 11263 dotest join-admin-2-8 "$testcvs -Q update -A" '' "${QUESTION} e0" 11264 dotest join-admin-2-9 "$testcvs -Q tag -b M1" '' "${QUESTION} e0" 11265 11266 echo '$''Id$' > b 11267 dotest join-admin-2-10 "$testcvs -Q add b" '' 11268 cp e0 e 11269 dotest join-admin-2-11 "$testcvs -Q ci -m. b e" 11270 11271 dotest join-admin-2-12 "$testcvs -Q tag -b M2" '' "${QUESTION} e0" 11272 11273 dotest join-admin-2-13 "$testcvs -Q update -r T" '' "${QUESTION} e0" 11274 dotest join-admin-2-14 "$testcvs update -kk -jM1 -jM2" \ 11275 "${SPROG} update: Updating . 11276 U b 11277 U e 11278 RCS file: ${CVSROOT_DIRNAME}/x/e,v 11279 retrieving revision 1\.1 11280 retrieving revision 1\.2 11281 Merging differences between 1\.1 and 1\.2 into e 11282 e already contains the differences between 1\.1 and 1\.2 11283 ${QUESTION} e0" \ 11284 "${QUESTION} e0 11285 ${SPROG} update: Updating . 11286 U b 11287 U e 11288 RCS file: ${CVSROOT_DIRNAME}/x/e,v 11289 retrieving revision 1\.1 11290 retrieving revision 1\.2 11291 Merging differences between 1\.1 and 1\.2 into e 11292 e already contains the differences between 1\.1 and 1\.2" 11293 11294 # Verify that the $Id.$ string is not expanded. 11295 dotest join-admin-2-15 "cat e" '$''Id$' 11296 11297 dokeep 11298 cd ../.. 11299 rm -rf 1 11300 modify_repo rm -rf $CVSROOT_DIRNAME/$module 11301 ;; 11302 11303 11304 11305 join-rm) 11306 # This first half of this test checks that a single-argument merge 11307 # from a branch is capable of removing files. 11308 # 11309 # The second half verifies that an update to another location with an 11310 # uncommitted removal will transfer the destination branch of the 11311 # removal. 11312 11313 module=join-rm 11314 mkdir $module; cd $module 11315 11316 dotest join-rm-init-1 "$testcvs -q co -l ." '' 11317 mkdir $module 11318 dotest join-rm-init-2 "$testcvs -q add $module" \ 11319 "Directory $CVSROOT_DIRNAME/$module added to the repository" 11320 cd $module 11321 11322 # add some files. 11323 touch a b c d e f g 11324 dotest join-rm-init-3 "$testcvs -Q add a b c d e f g" 11325 dotest join-rm-init-4 "$testcvs -Q ci -m add-em" 11326 11327 # create the branch and update to it 11328 dotest join-rm-init-5 "$testcvs -Q tag -b br" 11329 dotest join-rm-init-6 "$testcvs -Q up -rbr" 11330 11331 # remove a few files from the branch 11332 dotest join-rm-init-7 "$testcvs -Q rm -f b d g" 11333 dotest join-rm-init-8 "$testcvs -Q ci -mrm" 11334 11335 # update to the trunk 11336 dotest join-rm-init-9 "$testcvs -Q up -A" 11337 11338 # now for the test - try and merge the removals. 11339 dotest join-rm-1 "$testcvs -q up -jbr" \ 11340 "$SPROG update: scheduling \`b' for removal 11341 $SPROG update: scheduling \`d' for removal 11342 $SPROG update: scheduling \`g' for removal" 11343 11344 # And make sure the merge took 11345 dotest join-rm-2 "$testcvs -qn up" \ 11346 "R b 11347 R d 11348 R g" 11349 11350 dotest join-rm-3 "$testcvs -q ci -m 'save the merge'" \ 11351 "$CVSROOT_DIRNAME/join-rm/b,v <-- b 11352 new revision: delete; previous revision: 1\.1 11353 $CVSROOT_DIRNAME/join-rm/d,v <-- d 11354 new revision: delete; previous revision: 1\.1 11355 $CVSROOT_DIRNAME/join-rm/g,v <-- g 11356 new revision: delete; previous revision: 1\.1" 11357 11358 # and verify that it was the head revision which was removed. 11359 dotest join-rm-4 "$testcvs -q log b" " 11360 RCS file: $CVSROOT_DIRNAME/join-rm/Attic/b,v 11361 Working file: b 11362 head: 1\.2 11363 branch: 11364 locks: strict 11365 access list: 11366 symbolic names: 11367 br: 1\.1\.0\.2 11368 keyword substitution: kv 11369 total revisions: 3; selected revisions: 3 11370 description: 11371 ---------------------------- 11372 revision 1\.2 11373 date: ${ISO8601DATE}; author: $username; state: dead; lines: ${PLUS}0 -0; commitid: ${commitid}; 11374 save the merge 11375 ---------------------------- 11376 revision 1\.1 11377 date: ${ISO8601DATE}; author: $username; state: Exp; commitid: ${commitid}; 11378 branches: 1.1.2; 11379 add-em 11380 ---------------------------- 11381 revision 1\.1\.2\.1 11382 date: ${ISO8601DATE}; author: $username; state: dead; lines: ${PLUS}0 -0; commitid: ${commitid}; 11383 rm 11384 =============================================================================" 11385 11386 # go back to the branch to set up for the second set of tests 11387 dotest join-rm-init-10 "$testcvs -Q up -rbr" 11388 dotest join-rm-init-11 "$testcvs -Q rm -f a" 11389 dotest join-rm-init-12 "$testcvs -Q ci -m rma" 11390 11391 # now the test: update to the trunk 11392 # 11393 # FIXCVS: This update should merge the removal to the trunk. It does 11394 # not. 11395 dotest join-rm-5 "$testcvs -q up -A" "U a" 11396 11397 # and verify that there is no sticky tag 11398 dotest join-rm-6 "$testcvs status a" \ 11399 "=================================================================== 11400 File: a Status: Up-to-date 11401 11402 Working revision: 1\.1.* 11403 Repository revision: 1\.1 $CVSROOT_DIRNAME/join-rm/a,v 11404 Commit Identifier: ${commitid} 11405 Sticky Tag: (none) 11406 Sticky Date: (none) 11407 Sticky Options: (none)" 11408 11409 dokeep 11410 cd ../.. 11411 modify_repo rm -rf $CVSROOT_DIRNAME/$module 11412 rm -r $module 11413 ;; 11414 11415 11416 11417 new) # look for stray "no longer pertinent" messages. 11418 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 11419 dotest new-init-1 "$testcvs -Q co first-dir" 11420 11421 cd first-dir 11422 touch a 11423 11424 dotest new-1 "$testcvs -Q add a" 11425 11426 dotest new-2 "$testcvs -Q ci -m added" 11427 rm a 11428 11429 dotest new-3 "$testcvs -Q rm a" 11430 dotest new-4 "$testcvs -Q ci -m removed" 11431 dotest new-5 "$testcvs -Q update -A" 11432 dotest new-6 "$testcvs -Q update -rHEAD" 11433 11434 dokeep 11435 cd .. 11436 rm -r first-dir 11437 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 11438 ;; 11439 11440 11441 11442 newb) 11443 # Test removing a file on a branch and then checking it out. 11444 11445 # We call this "newb" only because it, like the "new" tests, 11446 # has something to do with "no longer pertinent" messages. 11447 # Not necessarily the most brilliant nomenclature. 11448 11449 # Create file 'a'. 11450 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 11451 dotest newb-123a "${testcvs} -q co first-dir" '' 11452 cd first-dir 11453 touch a 11454 dotest newb-123b "${testcvs} add a" \ 11455 "${SPROG} add: scheduling file .a. for addition 11456 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 11457 dotest newb-123c "${testcvs} -q ci -m added" \ 11458 "$CVSROOT_DIRNAME/first-dir/a,v <-- a 11459 initial revision: 1\.1" 11460 11461 # Make a branch. 11462 dotest newb-123d "${testcvs} -q tag -b branch" "T a" 11463 11464 # Check out the branch. 11465 cd .. 11466 rm -r first-dir 11467 mkdir 1 11468 cd 1 11469 dotest newb-123e "${testcvs} -q co -r branch first-dir" \ 11470 "U first-dir/a" 11471 11472 # Remove 'a' on another copy of the branch. 11473 cd .. 11474 mkdir 2 11475 cd 2 11476 dotest newb-123f "${testcvs} -q co -r branch first-dir" \ 11477 "U first-dir/a" 11478 cd first-dir 11479 rm a 11480 dotest newb-123g "${testcvs} rm a" \ 11481 "${SPROG} remove: scheduling .a. for removal 11482 ${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 11483 dotest newb-123h "${testcvs} -q ci -m removed" \ 11484 "$CVSROOT_DIRNAME/first-dir/a,v <-- a 11485 new revision: delete; previous revision: 1\.1" 11486 11487 # Check out the file on the branch. This should report 11488 # that the file is not pertinent, but it should not 11489 # say anything else. 11490 cd .. 11491 rm -r first-dir 11492 dotest newb-123i "${testcvs} -q co -r branch first-dir/a" \ 11493 "${SPROG} checkout: warning: \`first-dir/a' is not (any longer) pertinent" 11494 11495 # Update the other copy, and make sure that a is removed. 11496 cd ../1/first-dir 11497 # "Entry Invalid" is a rather strange output here. Something like 11498 # "Removed in Repository" would make more sense. 11499 dotest newb-123j0 "${testcvs} status a" \ 11500 "${SPROG} status: \`a' is no longer in the repository 11501 =================================================================== 11502 File: a Status: Entry Invalid 11503 11504 Working revision: 1\.1.* 11505 Repository revision: 1\.1\.2\.1 ${CVSROOT_DIRNAME}/first-dir/a,v 11506 Commit Identifier: ${commitid} 11507 Sticky Tag: branch (branch: 1\.1\.2) 11508 Sticky Date: (none) 11509 Sticky Options: (none)${DOTSTAR}" 11510 dotest newb-123j "${testcvs} -q update" \ 11511 "${SPROG} update: \`a' is no longer in the repository" 11512 11513 if test -f a; then 11514 fail newb-123k 11515 else 11516 pass newb-123k 11517 fi 11518 11519 dokeep 11520 cd ../.. 11521 rm -r 1 2 11522 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 11523 ;; 11524 11525 11526 11527 conflicts) 11528 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 11529 11530 mkdir 1 11531 cd 1 11532 11533 dotest conflicts-124 "${testcvs} -q co first-dir" '' 11534 11535 cd first-dir 11536 touch a 11537 11538 dotest conflicts-125 "${testcvs} add a" \ 11539 "${SPROG} add: scheduling file .a. for addition 11540 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 11541 dotest conflicts-126 "${testcvs} -q ci -m added" \ 11542 "$CVSROOT_DIRNAME/first-dir/a,v <-- a 11543 initial revision: 1\.1" 11544 11545 cd ../.. 11546 mkdir 2 11547 cd 2 11548 11549 dotest conflicts-126.5 "${testcvs} co -p first-dir" \ 11550 "${SPROG} checkout: Updating first-dir 11551 =================================================================== 11552 Checking out first-dir/a 11553 RCS: ${CVSROOT_DIRNAME}/first-dir/a,v 11554 VERS: 1\.1 11555 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*" 11556 dotest conflicts-127 "${testcvs} -Q co first-dir" '' 11557 cd first-dir 11558 dotest conflicts-127a "test -f a" '' 11559 11560 cd ../../1/first-dir 11561 echo add a line >>a 11562 mkdir dir1 11563 dotest conflicts-127b "${testcvs} add dir1" \ 11564 "Directory ${CVSROOT_DIRNAME}/first-dir/dir1 added to the repository" 11565 dotest conflicts-128 "${testcvs} -q ci -m changed" \ 11566 "$CVSROOT_DIRNAME/first-dir/a,v <-- a 11567 new revision: 1\.2; previous revision: 1\.1" 11568 cd ../.. 11569 11570 # Similar to conflicts-126.5, but now the file has nonempty 11571 # contents. 11572 mkdir 3 11573 cd 3 11574 dotest conflicts-128.5 "${testcvs} co -p -l first-dir" \ 11575 "${SPROG} checkout: Updating first-dir 11576 =================================================================== 11577 Checking out first-dir/a 11578 RCS: ${CVSROOT_DIRNAME}/first-dir/a,v 11579 VERS: 1\.2 11580 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 11581 add a line" 11582 cd .. 11583 rmdir 3 11584 11585 # Now go over the to the other working directory and 11586 # start testing conflicts 11587 cd 2/first-dir 11588 echo add a conflicting line >>a 11589 dotest_fail conflicts-129 "${testcvs} -q ci -m changed" \ 11590 "${SPROG}"' commit: Up-to-date check failed for `a'\'' 11591 '"${SPROG}"' \[commit aborted\]: correct above errors first!' 11592 mkdir dir1 11593 mkdir sdir 11594 dotest conflicts-status-0 "${testcvs} status a" \ 11595 "=================================================================== 11596 File: a Status: Needs Merge 11597 11598 Working revision: 1\.1.* 11599 Repository revision: 1\.2 ${CVSROOT_DIRNAME}/first-dir/a,v 11600 Commit Identifier: ${commitid} 11601 Sticky Tag: (none) 11602 Sticky Date: (none) 11603 Sticky Options: (none)" 11604 dotest conflicts-129a "${testcvs} -nq update a" \ 11605 "RCS file: ${CVSROOT_DIRNAME}/first-dir/a,v 11606 retrieving revision 1\.1 11607 retrieving revision 1\.2 11608 Merging differences between 1\.1 and 1\.2 into a 11609 rcsmerge: warning: conflicts during merge 11610 ${SPROG} update: conflicts found in a 11611 C a" 11612 dotest conflicts-130 "${testcvs} -q update" \ 11613 "RCS file: ${CVSROOT_DIRNAME}/first-dir/a,v 11614 retrieving revision 1\.1 11615 retrieving revision 1\.2 11616 Merging differences between 1\.1 and 1\.2 into a 11617 rcsmerge: warning: conflicts during merge 11618 ${SPROG} update: conflicts found in a 11619 C a 11620 ${QUESTION} dir1 11621 ${QUESTION} sdir" \ 11622 "${QUESTION} dir1 11623 ${QUESTION} sdir 11624 RCS file: ${CVSROOT_DIRNAME}/first-dir/a,v 11625 retrieving revision 1\.1 11626 retrieving revision 1\.2 11627 Merging differences between 1\.1 and 1\.2 into a 11628 rcsmerge: warning: conflicts during merge 11629 ${SPROG} update: conflicts found in a 11630 C a" 11631 rmdir dir1 sdir 11632 11633 dotest conflicts-status-1 "${testcvs} status a" \ 11634 "=================================================================== 11635 File: a Status: Unresolved Conflict 11636 11637 Working revision: 1\.2.* 11638 Repository revision: 1\.2 ${CVSROOT_DIRNAME}/first-dir/a,v 11639 Commit Identifier: ${commitid} 11640 Sticky Tag: (none) 11641 Sticky Date: (none) 11642 Sticky Options: (none)" 11643 dotest_fail conflicts-131 "${testcvs} -q ci -m try" \ 11644 "${SPROG} commit: file .a. had a conflict and has not been modified 11645 ${SPROG} \[commit aborted\]: correct above errors first!" 11646 11647 # Try to check in the file with the conflict markers in it. 11648 # Make sure we detect any one of the three conflict markers 11649 mv a aa 11650 grep '^<<<<<<<' aa >a 11651 dotest conflicts-status-2 "${testcvs} -nq ci -m try a" \ 11652 "${SPROG} commit: warning: file .a. seems to still contain conflict indicators" 11653 11654 grep '^=======' aa >a 11655 dotest conflicts-status-3 "${testcvs} -nq ci -m try a" \ 11656 "${SPROG} commit: warning: file .a. seems to still contain conflict indicators" 11657 11658 grep '^>>>>>>>' aa >a 11659 dotest conflicts-status-4 "${testcvs} -qn ci -m try a" \ 11660 "${SPROG} commit: warning: file .a. seems to still contain conflict indicators" 11661 11662 mv aa a 11663 echo lame attempt at resolving it >>a 11664 dotest conflicts-status-5 "${testcvs} status a" \ 11665 "=================================================================== 11666 File: a Status: File had conflicts on merge 11667 11668 Working revision: 1\.2.* 11669 Repository revision: 1\.2 ${CVSROOT_DIRNAME}/first-dir/a,v 11670 Commit Identifier: ${commitid} 11671 Sticky Tag: (none) 11672 Sticky Date: (none) 11673 Sticky Options: (none)" 11674 dotest conflicts-132 "$testcvs -q ci -m try" \ 11675 "$SPROG commit: warning: file .a. seems to still contain conflict indicators 11676 $CVSROOT_DIRNAME/first-dir/a,v <-- a 11677 new revision: 1\.3; previous revision: 1\.2" 11678 11679 # OK, the user saw the warning (good user), and now 11680 # resolves it for real. 11681 echo resolve conflict >a 11682 dotest conflicts-status-6 "${testcvs} status a" \ 11683 "=================================================================== 11684 File: a Status: Locally Modified 11685 11686 Working revision: 1\.3.* 11687 Repository revision: 1\.3 ${CVSROOT_DIRNAME}/first-dir/a,v 11688 Commit Identifier: ${commitid} 11689 Sticky Tag: (none) 11690 Sticky Date: (none) 11691 Sticky Options: (none)" 11692 dotest conflicts-133 "${testcvs} -q ci -m resolved" \ 11693 "$CVSROOT_DIRNAME/first-dir/a,v <-- a 11694 new revision: 1\.4; previous revision: 1\.3" 11695 dotest conflicts-status-7 "${testcvs} status a" \ 11696 "=================================================================== 11697 File: a Status: Up-to-date 11698 11699 Working revision: 1\.4.* 11700 Repository revision: 1\.4 ${CVSROOT_DIRNAME}/first-dir/a,v 11701 Commit Identifier: ${commitid} 11702 Sticky Tag: (none) 11703 Sticky Date: (none) 11704 Sticky Options: (none)" 11705 11706 # Now test that we can add a file in one working directory 11707 # and have an update in another get it. 11708 cd ../../1/first-dir 11709 echo abc >abc 11710 if ${testcvs} add abc >>${LOGFILE} 2>&1; then 11711 pass 134 11712 else 11713 fail 134 11714 fi 11715 if ${testcvs} ci -m 'add abc' abc >>${LOGFILE} 2>&1; then 11716 pass 135 11717 else 11718 fail 135 11719 fi 11720 cd ../../2 11721 mkdir first-dir/dir1 first-dir/sdir 11722 dotest conflicts-136 "${testcvs} -q update first-dir" \ 11723 '[UP] first-dir/abc 11724 '"${QUESTION}"' first-dir/dir1 11725 '"${QUESTION}"' first-dir/sdir' \ 11726 ''"${QUESTION}"' first-dir/dir1 11727 '"${QUESTION}"' first-dir/sdir 11728 [UP] first-dir/abc' 11729 dotest conflicts-137 'test -f first-dir/abc' '' 11730 rmdir first-dir/dir1 first-dir/sdir 11731 11732 # Now test something similar, but in which the parent directory 11733 # (not the directory in question) has the Entries.Static flag 11734 # set. 11735 cd ../1/first-dir 11736 mkdir subdir 11737 dotest conflicts-138 "${testcvs} add subdir" "${DOTSTAR}" 11738 cd ../.. 11739 mkdir 3 11740 cd 3 11741 dotest conflicts-139 \ 11742 "${testcvs} -q co first-dir/abc first-dir/subdir" "${DOTSTAR}" 11743 cd ../1/first-dir/subdir 11744 echo sss >sss 11745 dotest conflicts-140 "${testcvs} add sss" "${DOTSTAR}" 11746 dotest conflicts-140a "${testcvs} ci -m adding sss" \ 11747 "${DOTSTAR}" 11748 cd ../../../3/first-dir 11749 dotest conflicts-141 "${testcvs} -q update" "${DOTSTAR}" 11750 dotest conflicts-142 "test -f subdir/sss" 11751 11752 dokeep 11753 cd ../.. 11754 rm -r 1 2 3 11755 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 11756 restore_adm 11757 ;; 11758 11759 11760 11761 conflicts2) 11762 # More conflicts tests; separate from conflicts to keep each 11763 # test a manageable size. 11764 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 11765 11766 mkdir 1 11767 cd 1 11768 11769 dotest conflicts2-142a1 "${testcvs} -q co first-dir" '' 11770 11771 cd first-dir 11772 touch a abc 11773 11774 dotest conflicts2-142a2 "${testcvs} add a abc" \ 11775 "${SPROG} add: scheduling file .a. for addition 11776 ${SPROG} add: scheduling file .abc. for addition 11777 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 11778 dotest conflicts2-142a3 "${testcvs} -q ci -m added" \ 11779 "$CVSROOT_DIRNAME/first-dir/a,v <-- a 11780 initial revision: 1\.1 11781 ${CVSROOT_DIRNAME}/first-dir/abc,v <-- abc 11782 initial revision: 1\.1" 11783 11784 cd ../.. 11785 mkdir 2 11786 cd 2 11787 11788 dotest conflicts2-142a4 "${testcvs} -q co first-dir" 'U first-dir/a 11789 U first-dir/abc' 11790 cd .. 11791 11792 # BEGIN TESTS USING THE FILE A 11793 # FIXME: would be cleaner to separate them out into their own 11794 # tests; conflicts2 is getting long. 11795 # Now test that if one person modifies and commits a 11796 # file and a second person removes it, it is a 11797 # conflict 11798 cd 1/first-dir 11799 echo modify a >>a 11800 dotest conflicts2-142b2 "${testcvs} -q ci -m modify-a" \ 11801 "$CVSROOT_DIRNAME/first-dir/a,v <-- a 11802 new revision: 1\.2; previous revision: 1\.1" 11803 cd ../../2/first-dir 11804 rm a 11805 dotest conflicts2-142b3 "${testcvs} rm a" \ 11806 "${SPROG} remove: scheduling .a. for removal 11807 ${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 11808 dotest_fail conflicts2-142b4 "${testcvs} -q update" \ 11809 "${SPROG} update: conflict: removed \`a' was modified by second party 11810 C a" 11811 # Resolve the conflict by deciding not to remove the file 11812 # after all. 11813 dotest_sort conflicts2-142b5 "$testcvs add a" "U a 11814 ${SPROG} add: \`a', version 1\.1, resurrected" 11815 dotest conflicts2-142b5b1 "$testcvs status a" \ 11816 "=================================================================== 11817 File: a Status: Needs Patch 11818 11819 Working revision: 1\.1.* 11820 Repository revision: 1\.2 $CVSROOT_DIRNAME/first-dir/a,v 11821 Commit Identifier: ${commitid} 11822 Sticky Tag: (none) 11823 Sticky Date: (none) 11824 Sticky Options: (none)" 11825 dotest conflicts2-142b6 "$testcvs -q update" 'U a' 11826 11827 # Now one level up. 11828 cd .. 11829 dotest conflicts2-142b7 "${testcvs} rm -f first-dir/a" \ 11830 "${SPROG} remove: scheduling \`first-dir/a' for removal 11831 ${SPROG} remove: use \`${SPROG} commit' to remove this file permanently" 11832 11833 if $remote; then 11834 # Haven't investigated this one. 11835 dotest_fail conflicts2-142b8r "$testcvs add first-dir/a" \ 11836 "${CPROG} add: in directory \`\.': 11837 ${CPROG} \[add aborted\]: there is no version here; do \`${CPROG} checkout' first" 11838 cd first-dir 11839 else 11840 dotest conflicts2-142b8 "${testcvs} add first-dir/a" \ 11841 "U first-dir/a 11842 $SPROG add: \`first-dir/a', version 1\.2, resurrected" 11843 cd first-dir 11844 # Now recover from the damage that the 142b8 test did. 11845 dotest conflicts2-142b9 "${testcvs} rm -f a" \ 11846 "${SPROG} remove: scheduling \`a' for removal 11847 ${SPROG} remove: use \`${SPROG} commit' to remove this file permanently" 11848 fi 11849 11850 # As before, 1.2 instead of 1.1 is a bug. 11851 dotest_sort conflicts2-142b10 "$testcvs add a" "U a 11852 ${SPROG} add: \`a', version 1\.2, resurrected" 11853 # As with conflicts2-142b6, check that things are normal again. 11854 dotest conflicts2-142b11 "${testcvs} -q update" '' 11855 cd ../.. 11856 # END TESTS USING THE FILE A 11857 11858 # Now test that if one person removes a file and 11859 # commits it, and a second person removes it, is it 11860 # not a conflict. 11861 cd 1/first-dir 11862 rm abc 11863 dotest conflicts2-142c0 "${testcvs} rm abc" \ 11864 "${SPROG} remove: scheduling \`abc' for removal 11865 ${SPROG} remove: use \`${SPROG} commit' to remove this file permanently" 11866 dotest conflicts2-142c1 "${testcvs} -q ci -m remove-abc" \ 11867 "$CVSROOT_DIRNAME/first-dir/abc,v <-- abc 11868 new revision: delete; previous revision: 1\.1" 11869 cd ../../2/first-dir 11870 rm abc 11871 dotest conflicts2-142c2 "${testcvs} rm abc" \ 11872 "${SPROG} remove: scheduling \`abc' for removal 11873 ${SPROG} remove: use \`${SPROG} commit' to remove this file permanently" 11874 dotest conflicts2-142c3 "${testcvs} update" \ 11875 "${SPROG} update: Updating \." 11876 cd ../.. 11877 11878 # conflicts2-142d*: test that if one party adds a file, and another 11879 # party has a file of the same name, cvs notices 11880 cd 1/first-dir 11881 touch aa.c 11882 echo 'contents unchanged' >same.c 11883 dotest conflicts2-142d0 "${testcvs} add aa.c same.c" \ 11884 "${SPROG} add: scheduling file .aa\.c. for addition 11885 ${SPROG} add: scheduling file .same\.c. for addition 11886 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 11887 dotest conflicts2-142d1 "${testcvs} -q ci -m added" \ 11888 "$CVSROOT_DIRNAME/first-dir/aa\.c,v <-- aa\.c 11889 initial revision: 1\.1 11890 $CVSROOT_DIRNAME/first-dir/same\.c,v <-- same\.c 11891 initial revision: 1\.1" 11892 11893 # Test the case where the second user manages the add before the 11894 # first commits 11895 touch bb.c 11896 dotest conflicts2-142d1a "$testcvs add bb.c" \ 11897 "$SPROG add: scheduling file .bb\.c. for addition 11898 $SPROG add: use .$SPROG commit. to add this file permanently" 11899 cd ../../2/first-dir 11900 echo "don't you dare obliterate this text" >bb.c 11901 dotest conflicts2-142d1b "$testcvs add bb.c" \ 11902 "$SPROG add: scheduling file .bb\.c. for addition 11903 $SPROG add: use .$SPROG commit. to add this file permanently" 11904 cd ../../1/first-dir 11905 dotest conflicts2-142d1c "$testcvs -q ci -m added" \ 11906 "$CVSROOT_DIRNAME/first-dir/bb\.c,v <-- bb\.c 11907 initial revision: 1\.1" 11908 11909 cd ../../2/first-dir 11910 echo "don't you dare obliterate this text either" >aa.c 11911 echo 'contents unchanged' >same.c 11912 # Note the discrepancy between local and remote in the handling 11913 # of same.c. I kind 11914 # of suspect that the local CVS behavior is the more useful one 11915 # although I do sort of wonder whether we should make people run 11916 # cvs add just to get them in that habit (also, trying to implement 11917 # the local CVS behavior for remote without the cvs add seems 11918 # pretty difficult). 11919 if $remote; then 11920 dotest_fail conflicts2-142d2r "${testcvs} -q update" \ 11921 "${QUESTION} aa\.c 11922 ${QUESTION} same\.c 11923 ${CPROG} update: move away \`\./aa\.c'; it is in the way 11924 C aa\.c 11925 ${SPROG} update: conflict: \`bb\.c' created independently by second party 11926 C bb\.c 11927 ${CPROG} update: move away \`\./same\.c'; it is in the way 11928 C same\.c" 11929 else 11930 dotest_fail conflicts2-142d2 "${testcvs} -q update" \ 11931 "${CPROG} update: move away \`aa\.c'; it is in the way 11932 C aa\.c 11933 ${CPROG} update: conflict: \`bb\.c' created independently by second party 11934 C bb\.c 11935 U same\.c" 11936 fi 11937 dotest conflicts2-142d3 "${testcvs} -q status aa.c" \ 11938 "${SPROG} status: move away \`aa\.c'; it is in the way 11939 =================================================================== 11940 File: aa\.c Status: Unresolved Conflict 11941 11942 Working revision: No entry for aa\.c 11943 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/aa\.c,v 11944 Commit Identifier: ${commitid}" 11945 dotest conflicts2-142d3a "${testcvs} -q status bb.c" \ 11946 "${SPROG} status: conflict: \`bb\.c' created independently by second party 11947 =================================================================== 11948 File: bb\.c Status: Unresolved Conflict 11949 11950 Working revision: New file! 11951 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/bb\.c,v 11952 Commit Identifier: ${commitid} 11953 Sticky Tag: (none) 11954 Sticky Date: (none) 11955 Sticky Options: (none)" 11956 11957 # FIXCVS 11958 # This message seems somewhat bogus. I mean, parallel development 11959 # means that we get to work in parallel if we choose, right? And 11960 # then at commit time it would be a conflict. 11961 # 11962 # Well, the status is "Unresolved conflict" before _and_ after 11963 # the update/merge (when conflicts happen, not at commit time). 11964 # It is possible that this message could be changed to something 11965 # more infomrative to novice users, like "File of same name exists 11966 # in repository", or "File of same name committed independantly by 11967 # second party", but these two messages look too long for the Status 11968 # field and the move away & added independantly error messages _are_ 11969 # displayed. Still, we get a lot of questions about this on the 11970 # email lists. Somehow we need to get more information to users 11971 # via these messages and the ones generated by update. -DRP 11972 dotest_fail conflicts2-142d4 "${testcvs} -q add aa.c" \ 11973 "${SPROG} add: \`aa.c' added independently by second party" 11974 11975 # The user might want to see just what the conflict is. 11976 # Don't bother, diff seems to kind of lose its mind, with or 11977 # without -N. This is a CVS bug(s). 11978 #dotest conflicts2-142d5 \ 11979 #"${testcvs} -q diff -r HEAD -N aa.c" FIXCVS THEN FIXME 11980 11981 # Now: "how can the user resolve this conflict", I hear you cry. 11982 # Well, one way is to forget about the file in the working 11983 # directory. 11984 # Since it didn't let us do the add in conflicts2-142d4, there 11985 # is no need to run cvs rm here. 11986 #dotest conflicts2-142d6 "${testcvs} -q rm -f aa.c" fixme 11987 dotest conflicts2-142d6 "rm aa.c" '' 11988 dotest conflicts2-142d7 "${testcvs} -q update aa.c" "U aa\.c" 11989 dotest conflicts2-142d8 "cat aa.c" '' 11990 11991 # The other way is to use the version from the working directory 11992 # instead of the version from the repository. Unfortunately, 11993 # there doesn't seem to be any particularly clear way to do 11994 # this (?). 11995 11996 dokeep 11997 cd ../.. 11998 rm -r 1 2 11999 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 12000 ;; 12001 12002 12003 12004 conflicts3) 12005 # More tests of conflicts and/or multiple working directories 12006 # in general. 12007 12008 mkdir 1; cd 1 12009 dotest conflicts3-1 "$testcvs -q co -l ." 12010 mkdir first-dir 12011 dotest conflicts3-2 "${testcvs} add first-dir" \ 12012 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 12013 cd .. 12014 mkdir 2; cd 2 12015 dotest conflicts3-3 "${testcvs} -q co -l first-dir" '' 12016 cd ../1/first-dir 12017 touch file1 file2 12018 dotest conflicts3-4 "${testcvs} add file1 file2" \ 12019 "${SPROG} add: scheduling file .file1. for addition 12020 ${SPROG} add: scheduling file .file2. for addition 12021 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 12022 dotest conflicts3-5 "${testcvs} -q ci -m add-them" \ 12023 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 12024 initial revision: 1\.1 12025 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 12026 initial revision: 1\.1" 12027 cd ../../2/first-dir 12028 # Check that -n doesn't make CVS lose its mind as it creates 12029 # (or rather, doesn't) a new file. 12030 dotest conflicts3-6 "${testcvs} -nq update" \ 12031 "U file1 12032 U file2" 12033 dotest_fail conflicts3-7 "test -f file1" '' 12034 dotest conflicts3-8 "${testcvs} -q update" \ 12035 "U file1 12036 U file2" 12037 dotest conflicts3-9 "test -f file2" '' 12038 12039 # OK, now remove two files at once 12040 dotest conflicts3-10 "${testcvs} rm -f file1 file2" \ 12041 "${SPROG} remove: scheduling .file1. for removal 12042 ${SPROG} remove: scheduling .file2. for removal 12043 ${SPROG} remove: use .${SPROG} commit. to remove these files permanently" 12044 dotest conflicts3-11 "${testcvs} -q ci -m remove-them" \ 12045 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 12046 new revision: delete; previous revision: 1\.1 12047 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 12048 new revision: delete; previous revision: 1\.1" 12049 cd ../../1/first-dir 12050 dotest conflicts3-12 "${testcvs} -n -q update" \ 12051 "${SPROG} update: \`file1' is no longer in the repository 12052 ${SPROG} update: \`file2' is no longer in the repository" 12053 dotest conflicts3-13 "${testcvs} -q update" \ 12054 "${SPROG} update: \`file1' is no longer in the repository 12055 ${SPROG} update: \`file2' is no longer in the repository" 12056 12057 # OK, now add a directory to both working directories 12058 # and see that CVS doesn't lose its mind. 12059 mkdir sdir 12060 dotest conflicts3-14 "${testcvs} add sdir" \ 12061 "Directory ${CVSROOT_DIRNAME}/first-dir/sdir added to the repository" 12062 touch sdir/sfile 12063 dotest conflicts3-14a "${testcvs} add sdir/sfile" \ 12064 "${SPROG} add: scheduling file .sdir/sfile. for addition 12065 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 12066 dotest conflicts3-14b "${testcvs} -q ci -m add" \ 12067 "$CVSROOT_DIRNAME/first-dir/sdir/sfile,v <-- sdir/sfile 12068 initial revision: 1\.1" 12069 12070 cd ../../2/first-dir 12071 12072 # Create a CVS directory without the proper administrative 12073 # files in it. This can happen for example if you hit ^C 12074 # in the middle of a checkout. 12075 mkdir sdir 12076 mkdir sdir/CVS 12077 # OK, in the local case CVS sees that the directory exists 12078 # in the repository and recurses into it. In the remote case 12079 # CVS can't see the repository and has no way of knowing 12080 # that sdir is even a directory (stat'ing everything would be 12081 # too slow). The remote behavior makes more sense to me (but 12082 # would this affect other cases?). 12083 if $remote; then 12084 dotest conflicts3-15 "${testcvs} -q update" \ 12085 "${QUESTION} sdir" 12086 else 12087 dotest conflicts3-15 "${testcvs} -q update" \ 12088 "${QUESTION} sdir 12089 ${SPROG} update: ignoring sdir (CVS/Repository missing)" 12090 touch sdir/CVS/Repository 12091 dotest conflicts3-16 "${testcvs} -q update" \ 12092 "${QUESTION} sdir 12093 ${SPROG} update: ignoring sdir (CVS/Entries missing)" 12094 cd .. 12095 dotest conflicts3-16a "${testcvs} -q update first-dir" \ 12096 "${QUESTION} first-dir/sdir 12097 ${SPROG} update: ignoring first-dir/sdir (CVS/Entries missing)" 12098 cd first-dir 12099 fi 12100 rm -r sdir 12101 12102 # OK, now the same thing, but the directory doesn't exist 12103 # in the repository. 12104 mkdir newdir 12105 mkdir newdir/CVS 12106 dotest conflicts3-17 "${testcvs} -q update" "${QUESTION} newdir" 12107 echo "D/newdir////" >> CVS/Entries 12108 dotest conflicts3-18 "${testcvs} -q update" \ 12109 "${CPROG} update: ignoring newdir (CVS/Repository missing)" 12110 touch newdir/CVS/Repository 12111 dotest conflicts3-19 "${testcvs} -q update" \ 12112 "${CPROG} update: ignoring newdir (CVS/Entries missing)" 12113 cd .. 12114 dotest conflicts3-20 "${testcvs} -q update first-dir" \ 12115 "${CPROG} update: ignoring first-dir/newdir (CVS/Entries missing)" 12116 cd first-dir 12117 rm -r newdir 12118 12119 # The previous tests have left CVS/Entries in something of a mess. 12120 # While we "should" be able to deal with that (maybe), for now 12121 # we just start over. 12122 cd .. 12123 rm -r first-dir 12124 dotest conflicts3-20a "${testcvs} -q co -l first-dir" '' 12125 cd first-dir 12126 12127 dotest conflicts3-21 "${testcvs} -q update -d sdir" "U sdir/sfile" 12128 rm -r sdir/CVS 12129 dotest conflicts3-22 "${testcvs} -q update" "${QUESTION} sdir" 12130 if $remote; then 12131 dotest_fail conflicts3-23 "${testcvs} -q update -PdA" \ 12132 "${QUESTION} sdir 12133 ${CPROG} update: move away \`sdir/sfile'; it is in the way 12134 C sdir/sfile" 12135 else 12136 dotest conflicts3-23 "${testcvs} -q update -PdA" \ 12137 "${QUESTION} sdir" 12138 fi 12139 12140 # Not that it should really affect much, but let's do the case 12141 # where sfile has been removed. For example, suppose that sdir 12142 # had been a CVS-controlled directory which was then removed 12143 # by removing each file (and using update -P or some such). Then 12144 # suppose that the build process creates an sdir directory which 12145 # is not supposed to be under CVS. 12146 rm -r sdir 12147 dotest conflicts3-24 "${testcvs} -q update -d sdir" "U sdir/sfile" 12148 rm sdir/sfile 12149 dotest conflicts3-25 "${testcvs} rm sdir/sfile" \ 12150 "${SPROG} remove: scheduling .sdir/sfile. for removal 12151 ${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 12152 dotest conflicts3-26 "${testcvs} ci -m remove sdir/sfile" \ 12153 "${CVSROOT_DIRNAME}/first-dir/sdir/sfile,v <-- sdir/sfile 12154 new revision: delete; previous revision: 1\.1" 12155 rm -r sdir/CVS 12156 dotest conflicts3-27 "${testcvs} -q update" "${QUESTION} sdir" 12157 dotest conflicts3-28 "${testcvs} -q update -PdA" \ 12158 "${QUESTION} sdir" 12159 12160 dokeep 12161 cd ../.. 12162 rm -r 1 2 12163 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 12164 ;; 12165 12166 12167 12168 clean) 12169 # Test update -C (overwrite local mods w/ repository copies) 12170 mkdir 1; cd 1 12171 dotest clean-1 "${testcvs} -q co -l ." '' 12172 mkdir first-dir 12173 dotest clean-2 "${testcvs} add first-dir" \ 12174 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 12175 cd first-dir 12176 echo "The usual boring test text." > cleanme.txt 12177 dotest clean-3 "${testcvs} add cleanme.txt" \ 12178 "${SPROG} add: scheduling file .cleanme\.txt. for addition 12179 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 12180 dotest clean-4 "${testcvs} -q ci -m clean-3" \ 12181 "$CVSROOT_DIRNAME/first-dir/cleanme\.txt,v <-- cleanme\.txt 12182 initial revision: 1\.1" 12183 # Okay, preparation is done, now test. 12184 # Check that updating an unmodified copy works. 12185 dotest clean-5 "${testcvs} -q update" '' 12186 # Check that updating -C an unmodified copy works. 12187 dotest clean-6 "${testcvs} -q update -C" '' 12188 # Check that updating a modified copy works. 12189 echo "fish" >> cleanme.txt 12190 dotest clean-7 "${testcvs} -q update" 'M cleanme\.txt' 12191 # Check that updating -C a modified copy works. 12192 dotest clean-8 "${testcvs} -q update -C" \ 12193 "(Locally modified cleanme\.txt moved to \.#cleanme\.txt\.1\.1) 12194 U cleanme\.txt" 12195 # And check that the backup copy really was made. 12196 dotest clean-9 "cat .#cleanme.txt.1.1" \ 12197 "The usual boring test text\. 12198 fish" 12199 12200 # Do it all again, this time naming the file explicitly. 12201 rm .#cleanme.txt.1.1 12202 dotest clean-10 "${testcvs} -q update cleanme.txt" '' 12203 dotest clean-11 "${testcvs} -q update -C cleanme.txt" '' 12204 echo "bluegill" >> cleanme.txt 12205 dotest clean-12 "${testcvs} -q update cleanme.txt" 'M cleanme\.txt' 12206 dotest clean-13 "${testcvs} -q update -C cleanme.txt" \ 12207 "(Locally modified cleanme\.txt moved to \.#cleanme\.txt\.1\.1) 12208 U cleanme\.txt" 12209 # And check that the backup copy really was made. 12210 dotest clean-14 "cat .#cleanme.txt.1.1" \ 12211 "The usual boring test text\. 12212 bluegill" 12213 12214 # Now try with conflicts 12215 cd .. 12216 dotest clean-15 "${testcvs} -q co -d second-dir first-dir" \ 12217 'U second-dir/cleanme\.txt' 12218 cd second-dir 12219 echo "conflict test" >> cleanme.txt 12220 dotest clean-16 "${testcvs} -q ci -m." \ 12221 "$CVSROOT_DIRNAME/first-dir/cleanme\.txt,v <-- cleanme\.txt 12222 new revision: 1\.2; previous revision: 1\.1" 12223 cd ../first-dir 12224 echo "fish" >> cleanme.txt 12225 dotest clean-17 "${testcvs} -nq update" \ 12226 "RCS file: ${CVSROOT_DIRNAME}/first-dir/cleanme\.txt,v 12227 retrieving revision 1\.1 12228 retrieving revision 1\.2 12229 Merging differences between 1\.1 and 1\.2 into cleanme\.txt 12230 rcsmerge: warning: conflicts during merge 12231 ${SPROG} update: conflicts found in cleanme\.txt 12232 C cleanme\.txt" 12233 dotest clean-18 "${testcvs} -q update -C" \ 12234 "(Locally modified cleanme\.txt moved to \.#cleanme\.txt\.1\.1) 12235 U cleanme\.txt" 12236 dotest clean-19 "cat .#cleanme.txt.1.1" \ 12237 "The usual boring test text\. 12238 fish" 12239 12240 # Done. Clean up. 12241 dokeep 12242 cd ../.. 12243 rm -rf 1 12244 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 12245 ;; 12246 12247 12248 12249 keywordexpand) 12250 # Tests of the original *BSD tag= and keywordexpand= features 12251 # are done via the LocalKeyword= and KeywordExpand features. 12252 12253 # Skip this in noredirect mode because it is too easy for the primary 12254 # and secondary error messages to get out of sync when the 12255 # CVSROOT/config files are broken. This is intentional, since it is 12256 # possible and even likely that an administrator might want to set up 12257 # different configurations on the two servers and the paths to the 12258 # config files on the secondary and primary were intentionally left 12259 # intact even though they might be different. 12260 if $noredirect; then 12261 notnoredirect keywordexpand 12262 continue 12263 fi 12264 12265 mkdir keywordexpand; cd keywordexpand 12266 12267 dotest keywordexpand-1 "${testcvs} -q co CVSROOT" \ 12268 'U CVSROOT/access 12269 U CVSROOT/aclconfig 12270 U CVSROOT/checkoutlist 12271 U CVSROOT/commitinfo 12272 U CVSROOT/config 12273 U CVSROOT/cvswrappers 12274 U CVSROOT/group 12275 U CVSROOT/loginfo 12276 U CVSROOT/modules 12277 U CVSROOT/notify 12278 U CVSROOT/postadmin 12279 U CVSROOT/postproxy 12280 U CVSROOT/posttag 12281 U CVSROOT/postwatch 12282 U CVSROOT/preproxy 12283 U CVSROOT/rcsinfo 12284 U CVSROOT/taginfo 12285 U CVSROOT/verifymsg' 12286 cd CVSROOT 12287 echo LocalKeyword=MyBSD=CVSHeader >> config 12288 # First do not expand any keywords 12289 echo KeywordExpand=i >> config 12290 dotest keywordexpand-2 "${testcvs} -Q ci -mkeywordexpand config" 12291 12292 cd .. 12293 12294 mkdir testimport; cd testimport 12295 echo '$''Author$' > file1 12296 echo '$''Date$' >> file1 12297 echo '$''CVSHeader$' >> file1 12298 echo '$''Header$' >> file1 12299 echo '$''Id$' >> file1 12300 echo '$''Locker$' >> file1 12301 echo '$''Log$' >> file1 12302 echo '$''Name$' >> file1 12303 echo '$''RCSfile$' >> file1 12304 echo '$''Revision$' >> file1 12305 echo '$''Source$' >> file1 12306 echo '$''State$' >> file1 12307 echo '$''MyBSD$' >> file1 12308 dotest keywordexpand-3 \ 12309 "${testcvs} -Q import -I ! -m test-import-with-bsd-keyword keywordexpand vendor v1" \ 12310 '' 12311 cd .. 12312 12313 dotest keywordexpand-4 "${testcvs} -Q checkout keywordexpand" '' 12314 cd keywordexpand 12315 dotest keywordexpand-5 "cat file1" \ 12316 "\$""Author\$ 12317 \$""Date\$ 12318 \$""CVSHeader\$ 12319 \$""Header\$ 12320 \$""Id\$ 12321 \$""Locker\$ 12322 \$""Log\$ 12323 \$""Name\$ 12324 \$""RCSfile\$ 12325 \$""Revision\$ 12326 \$""Source\$ 12327 \$""State\$ 12328 \$MyBSD\$" 12329 cd ../CVSROOT 12330 # Now expand just the MyBSD and Id keywords 12331 mv config config.old 12332 sed -e 's/KeywordExpand=i/KeywordExpand=iMyBSD,Id/' < config.old > config 12333 rm -f config.old 12334 dotest keywordexpand-6 "${testcvs} -Q ci -mkeywordexpand config" 12335 cd ../keywordexpand 12336 echo 'a change' >> file1 12337 dotest keywordexpand-7 "${testcvs} -Q ci -madd" 12338 dotest keywordexpand-8 "cat file1" \ 12339 "\$""Author\$ 12340 \$""Date\$ 12341 \$""CVSHeader\$ 12342 \$""Header\$ 12343 \$""Id: file1,v 1\.2 [0-9/]* [0-9:]* ${username} Exp \$ 12344 \$""Locker\$ 12345 \$""Log\$ 12346 \$""Name\$ 12347 \$""RCSfile\$ 12348 \$""Revision\$ 12349 \$""Source\$ 12350 \$""State\$ 12351 \$MyBSD: keywordexpand/file1,v 1\.2 [0-9/]* [0-9:]* ${username} Exp \$ 12352 a change" 12353 12354 cd ../CVSROOT 12355 mv config config.old 12356 sed -e 's/LocalKeyword=MyBSD/LocalKeyword=My_BSD/' \ 12357 <config.old >config 12358 dotest keywordexpand-9 "$testcvs -Q ci -minvalidlocalkeyword config" 12359 dotest keywordexpand-10 "$testcvs -Q update config" \ 12360 "$SPROG [a-z]*: $SECONDARY_CVSROOT_DIRNAME/CVSROOT/config \[[1-9][0-9]*\]: LocalKeyword ignored: Bad character \`_' in key \`My_BSD'" 12361 cp config.old config 12362 dotest keywordexpand-11 "$testcvs -Q ci -mfixit config" \ 12363 "$SPROG [a-z]*: $SECONDARY_CVSROOT_DIRNAME/CVSROOT/config \[[1-9][0-9]*\]: LocalKeyword ignored: Bad character \`_' in key \`My_BSD'" \ 12364 "$SPROG [a-z]*: $SECONDARY_CVSROOT_DIRNAME/CVSROOT/config \[[1-9][0-9]*\]: LocalKeyword ignored: Bad character \`_' in key \`My_BSD' 12365 $SPROG [a-z]*: $CVSROOT_DIRNAME/CVSROOT/config \[[1-9][0-9]*\]: LocalKeyword ignored: Bad character \`_' in key \`My_BSD'" 12366 dotest keywordexpand-12 "$testcvs -Q update config" 12367 sed -e 's/LocalKeyword=MyBSD=CVSHeader/LocalKeyword=MyBSD=Name/' \ 12368 <config.old >config 12369 dotest keywordexpand-13 \ 12370 "$testcvs -Q ci -minvalidlocalkeyword2 config" 12371 dotest keywordexpand-14 "$testcvs -Q update config" \ 12372 "$SPROG [a-z]*: $SECONDARY_CVSROOT_DIRNAME/CVSROOT/config \[[1-9][0-9]*\]: LocalKeyword ignored: Unknown LocalId mode: \`Name'" 12373 cp config.old config 12374 dotest keywordexpand-15 "$testcvs -Q ci -mfixit2 config" \ 12375 "$SPROG [a-z]*: $SECONDARY_CVSROOT_DIRNAME/CVSROOT/config \[[1-9][0-9]*\]: LocalKeyword ignored: Unknown LocalId mode: \`Name'" \ 12376 "$SPROG [a-z]*: $SECONDARY_CVSROOT_DIRNAME/CVSROOT/config \[[1-9][0-9]*\]: LocalKeyword ignored: Unknown LocalId mode: \`Name' 12377 $SPROG [a-z]*: $CVSROOT_DIRNAME/CVSROOT/config \[[1-9][0-9]*\]: LocalKeyword ignored: Unknown LocalId mode: \`Name'" 12378 dotest keywordexpand-16 "$testcvs -Q update config" 12379 12380 dokeep 12381 # Done. Clean up. 12382 cd ../.. 12383 rm -rf $TESTDIR/keywordexpand 12384 modify_repo rm -rf $CVSROOT_DIRNAME/keywordexpand 12385 restore_adm 12386 ;; 12387 12388 12389 12390 modules) 12391 # Tests of various ways to define and use modules. 12392 # Roadmap to various modules tests: 12393 # -a: 12394 # error on incorrect placement: modules 12395 # error combining with other options: modules2-a* 12396 # infinite loops: modules148a1.1 - modules148a1.2 12397 # use to specify a file more than once: modules3 12398 # use with ! feature: modules4 12399 # regular modules: modules, modules2, cvsadm 12400 # ampersand modules: modules2 12401 # -s: modules. 12402 # -d: modules, modules3, cvsadm 12403 # -i, -o, -u, -e, -t: modules5 12404 # slashes in module names: modules3 12405 # invalid module definitions: modules6 12406 12407 ############################################################ 12408 # These tests are to make sure that administrative files get 12409 # rebuilt, regardless of how and where files are checked 12410 # out. 12411 ############################################################ 12412 # Check out the whole repository 12413 mkdir 1; cd 1 12414 dotest modules-1 "${testcvs} -q co ." 'U CVSROOT/access 12415 U CVSROOT/aclconfig 12416 U CVSROOT/checkoutlist 12417 U CVSROOT/commitinfo 12418 U CVSROOT/config 12419 U CVSROOT/cvswrappers 12420 U CVSROOT/group 12421 U CVSROOT/loginfo 12422 U CVSROOT/modules 12423 U CVSROOT/notify 12424 U CVSROOT/postadmin 12425 U CVSROOT/postproxy 12426 U CVSROOT/posttag 12427 U CVSROOT/postwatch 12428 U CVSROOT/preproxy 12429 U CVSROOT/rcsinfo 12430 U CVSROOT/taginfo 12431 U CVSROOT/verifymsg' 12432 echo "# made a change" >>CVSROOT/modules 12433 dotest modules-1d "${testcvs} -q ci -m add-modules" \ 12434 "$CVSROOT_DIRNAME/CVSROOT/modules,v <-- CVSROOT/modules 12435 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 12436 $SPROG commit: Rebuilding administrative file database" 12437 cd .. 12438 rm -rf 1 12439 12440 ############################################################ 12441 # Check out CVSROOT 12442 mkdir 1; cd 1 12443 dotest modules-2 "${testcvs} -q co CVSROOT" 'U CVSROOT/access 12444 U CVSROOT/aclconfig 12445 U CVSROOT/checkoutlist 12446 U CVSROOT/commitinfo 12447 U CVSROOT/config 12448 U CVSROOT/cvswrappers 12449 U CVSROOT/group 12450 U CVSROOT/loginfo 12451 U CVSROOT/modules 12452 U CVSROOT/notify 12453 U CVSROOT/postadmin 12454 U CVSROOT/postproxy 12455 U CVSROOT/posttag 12456 U CVSROOT/postwatch 12457 U CVSROOT/preproxy 12458 U CVSROOT/rcsinfo 12459 U CVSROOT/taginfo 12460 U CVSROOT/verifymsg' 12461 echo "# made a change" >>CVSROOT/modules 12462 dotest modules-2d "${testcvs} -q ci -m add-modules" \ 12463 "$CVSROOT_DIRNAME/CVSROOT/modules,v <-- CVSROOT/modules 12464 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 12465 $SPROG commit: Rebuilding administrative file database" 12466 cd .. 12467 rm -rf 1 12468 12469 ############################################################ 12470 # Check out CVSROOT in some other directory 12471 modify_repo mkdir $CVSROOT_DIRNAME/somedir 12472 mkdir 1; cd 1 12473 dotest modules-3 "${testcvs} -q co somedir" '' 12474 cd somedir 12475 dotest modules-3d "${testcvs} -q co CVSROOT" 'U CVSROOT/access 12476 U CVSROOT/aclconfig 12477 U CVSROOT/checkoutlist 12478 U CVSROOT/commitinfo 12479 U CVSROOT/config 12480 U CVSROOT/cvswrappers 12481 U CVSROOT/group 12482 U CVSROOT/loginfo 12483 U CVSROOT/modules 12484 U CVSROOT/notify 12485 U CVSROOT/postadmin 12486 U CVSROOT/postproxy 12487 U CVSROOT/posttag 12488 U CVSROOT/postwatch 12489 U CVSROOT/preproxy 12490 U CVSROOT/rcsinfo 12491 U CVSROOT/taginfo 12492 U CVSROOT/verifymsg' 12493 echo "# made a change" >>CVSROOT/modules 12494 dotest modules-3g "${testcvs} -q ci -m add-modules" \ 12495 "$CVSROOT_DIRNAME/CVSROOT/modules,v <-- CVSROOT/modules 12496 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 12497 $SPROG commit: Rebuilding administrative file database" 12498 cd ../.. 12499 rm -rf 1 12500 modify_repo rm -rf $CVSROOT_DIRNAME/somedir 12501 ############################################################ 12502 # end rebuild tests 12503 ############################################################ 12504 12505 12506 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 12507 12508 mkdir 1 12509 cd 1 12510 12511 dotest modules-143 "${testcvs} -q co first-dir" "" 12512 12513 cd first-dir 12514 mkdir subdir 12515 dotest modules-143a "${testcvs} add subdir" \ 12516 "Directory ${CVSROOT_DIRNAME}/first-dir/subdir added to the repository" 12517 12518 cd subdir 12519 mkdir ssdir 12520 dotest modules-143b "${testcvs} add ssdir" \ 12521 "Directory ${CVSROOT_DIRNAME}/first-dir/subdir/ssdir added to the repository" 12522 12523 touch a b 12524 12525 dotest modules-144 "${testcvs} add a b" \ 12526 "${SPROG} add: scheduling file .a. for addition 12527 ${SPROG} add: scheduling file .b. for addition 12528 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 12529 12530 dotest modules-145 "$testcvs ci -m added" \ 12531 "$CPROG commit: Examining . 12532 $CPROG commit: Examining ssdir 12533 $CVSROOT_DIRNAME/first-dir/subdir/a,v <-- a 12534 initial revision: 1\.1 12535 $CVSROOT_DIRNAME/first-dir/subdir/b,v <-- b 12536 initial revision: 1\.1" 12537 12538 cd .. 12539 dotest modules-146 "$testcvs -q co CVSROOT" \ 12540 "U CVSROOT/access 12541 U CVSROOT/aclconfig 12542 U CVSROOT/checkoutlist 12543 U CVSROOT/commitinfo 12544 U CVSROOT/config 12545 U CVSROOT/cvswrappers 12546 U CVSROOT/group 12547 U CVSROOT/loginfo 12548 U CVSROOT/modules 12549 U CVSROOT/notify 12550 U CVSROOT/postadmin 12551 U CVSROOT/postproxy 12552 U CVSROOT/posttag 12553 U CVSROOT/postwatch 12554 U CVSROOT/preproxy 12555 U CVSROOT/rcsinfo 12556 U CVSROOT/taginfo 12557 U CVSROOT/verifymsg" 12558 12559 # Here we test that CVS can deal with CVSROOT (whose repository 12560 # is at top level) in the same directory as subdir (whose repository 12561 # is a subdirectory of first-dir). TODO: Might want to check that 12562 # files can actually get updated in this state. 12563 dotest modules-147 "$testcvs -q update" 12564 12565 cat >CVSROOT/modules <<EOF 12566 realmodule first-dir/subdir a 12567 dirmodule first-dir/subdir 12568 namedmodule -d nameddir first-dir/subdir 12569 aliasmodule -a first-dir/subdir/a 12570 aliasnested -a first-dir/subdir/ssdir 12571 topfiles -a first-dir/file1 first-dir/file2 12572 world -a . 12573 statusmod -s Mungeable 12574 # Check for ability to block infinite loops. 12575 infinitealias -a infinitealias 12576 # Prior to 1.11.12 & 1.12.6, the infinite alias loop check didn't strip 12577 # slashes or work if a module called a module which then called itself 12578 # (A -> A was blocked, but not A -> B -> A or deeper). 12579 infinitealias2 -a infinitealias2/ 12580 infinitealias3 -a infinitealias4/ 12581 infinitealias4 -a aliasmodule infinitealias5 12582 infinitealias5 -a infinitealias3/ 12583 # Options must come before arguments. It is possible this should 12584 # be relaxed at some point (though the result would be bizarre for 12585 # -a); for now test the current behavior. 12586 bogusalias first-dir/subdir/a -a 12587 EOF 12588 dotest modules-148 "$testcvs ci -m 'add modules' CVSROOT/modules" \ 12589 "$CVSROOT_DIRNAME/CVSROOT/modules,v <-- CVSROOT/modules 12590 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 12591 $SPROG commit: Rebuilding administrative file database" 12592 12593 cd .. 12594 # The "statusmod" module contains an error; trying to use it 12595 # will produce "modules file missing directory" I think. 12596 # However, that shouldn't affect the ability of "cvs co -c" or 12597 # "cvs co -s" to do something reasonable with it. 12598 dotest modules-148a0 "$testcvs co -c" \ 12599 'aliasmodule -a first-dir/subdir/a 12600 aliasnested -a first-dir/subdir/ssdir 12601 bogusalias first-dir/subdir/a -a 12602 dirmodule first-dir/subdir 12603 infinitealias -a infinitealias 12604 infinitealias2 -a infinitealias2/ 12605 infinitealias3 -a infinitealias4/ 12606 infinitealias4 -a aliasmodule infinitealias5 12607 infinitealias5 -a infinitealias3/ 12608 namedmodule -d nameddir first-dir/subdir 12609 realmodule first-dir/subdir a 12610 statusmod -s Mungeable 12611 topfiles -a first-dir/file1 first-dir/file2 12612 world -a \.' 12613 # There is code in modules.c:save_d which explicitly skips 12614 # modules defined with -a, which is why aliasmodule is not 12615 # listed. 12616 dotest modules-148a1 "${testcvs} co -s" \ 12617 'statusmod Mungeable 12618 bogusalias NONE first-dir/subdir/a -a 12619 dirmodule NONE first-dir/subdir 12620 namedmodule NONE first-dir/subdir 12621 realmodule NONE first-dir/subdir a' 12622 12623 # Check that infinite loops are avoided 12624 dotest modules-148a1.1 "${testcvs} co infinitealias" \ 12625 "$CPROG checkout: module \`infinitealias' in modules file contains infinite loop" \ 12626 "$SPROG server: module \`infinitealias' in modules file contains infinite loop 12627 $SPROG checkout: module \`infinitealias' in modules file contains infinite loop" 12628 # Prior to 1.11.12 & 1.12.6, the inifinte alias loop check did not 12629 # strip slashes. 12630 dotest modules-148a1.2 "${testcvs} co infinitealias2" \ 12631 "$CPROG checkout: module \`infinitealias2' in modules file contains infinite loop" \ 12632 "$SPROG server: module \`infinitealias2' in modules file contains infinite loop 12633 $SPROG checkout: module \`infinitealias2' in modules file contains infinite loop" 12634 # Prior to 1.11.12 & 1.12.6, the inifinte alias loop check did not 12635 # notice when A -> B -> A, it only noticed A -> A. 12636 dotest modules-148a1.3 "${testcvs} co infinitealias3/" \ 12637 "$CPROG checkout: module \`infinitealias3' in modules file contains infinite loop" \ 12638 "$SPROG server: module \`infinitealias3' in modules file contains infinite loop 12639 $SPROG checkout: module \`infinitealias3' in modules file contains infinite loop" 12640 12641 # Test that real modules check out to realmodule/a, not subdir/a. 12642 dotest modules-149a1 "${testcvs} co realmodule" "U realmodule/a" 12643 dotest modules-149a2 "test -d realmodule && test -f realmodule/a" "" 12644 dotest_fail modules-149a3 "test -f realmodule/b" "" 12645 dotest modules-149a4 "${testcvs} -q co realmodule" "" 12646 dotest modules-149a5 "echo yes | ${testcvs} release -d realmodule" \ 12647 "You have \[0\] altered files in this repository\. 12648 Are you sure you want to release (and delete) directory .realmodule.: " 12649 12650 dotest_fail modules-149b1 "${testcvs} co realmodule/a" \ 12651 "${SPROG}"' checkout: module `realmodule/a'\'' is a request for a file in a module which is not a directory' \ 12652 "${SPROG}"' server: module `realmodule/a'\'' is a request for a file in a module which is not a directory 12653 '"${CPROG}"' \[checkout aborted\]: cannot expand modules' 12654 12655 # Now test the ability to check out a single file from a directory 12656 dotest modules-150c "${testcvs} co dirmodule/a" "U dirmodule/a" 12657 dotest modules-150d "test -d dirmodule && test -f dirmodule/a" "" 12658 dotest_fail modules-150e "test -f dirmodule/b" "" 12659 dotest modules-150f "echo yes | ${testcvs} release -d dirmodule" \ 12660 "You have \[0\] altered files in this repository\. 12661 Are you sure you want to release (and delete) directory .dirmodule.: " 12662 # Now test the ability to correctly reject a non-existent filename. 12663 # For maximum studliness we would check that an error message is 12664 # being output. 12665 # We accept a zero exit status because it is what CVS does 12666 # (Dec 95). Probably the exit status should be nonzero, 12667 # however. 12668 dotest modules-150g1 "${testcvs} co dirmodule/nonexist" \ 12669 "${SPROG} checkout: warning: new-born \`dirmodule/nonexist' has disappeared" 12670 # We tolerate the creation of the dirmodule directory, since that 12671 # is what CVS does, not because we view that as preferable to not 12672 # creating it. 12673 dotest_fail modules-150g2 "test -f dirmodule/a || test -f dirmodule/b" "" 12674 rm -r dirmodule 12675 12676 # Now test that a module using -d checks out to the specified 12677 # directory. 12678 dotest modules-150h1 "${testcvs} -q co namedmodule" \ 12679 'U nameddir/a 12680 U nameddir/b' 12681 dotest modules-150h2 "test -f nameddir/a && test -f nameddir/b" "" 12682 echo add line >>nameddir/a 12683 dotest modules-150h3 "${testcvs} -q co namedmodule" 'M nameddir/a' 12684 rm nameddir/a 12685 dotest modules-150h4 "${testcvs} -q co namedmodule" 'U nameddir/a' 12686 dotest modules-150h99 "echo yes | ${testcvs} release -d nameddir" \ 12687 "You have \[0\] altered files in this repository\. 12688 Are you sure you want to release (and delete) directory .nameddir.: " 12689 12690 # Now test that alias modules check out to subdir/a, not 12691 # aliasmodule/a. 12692 dotest modules-151 "${testcvs} co aliasmodule" "" 12693 dotest_fail modules-152 "test -d aliasmodule" "" 12694 echo abc >>first-dir/subdir/a 12695 dotest modules-153 "${testcvs} -q co aliasmodule" "M first-dir/subdir/a" 12696 12697 cd .. 12698 rm -r 1 12699 12700 mkdir 2 12701 cd 2 12702 dotest modules-155a0 "${testcvs} co aliasnested" \ 12703 "${SPROG} checkout: Updating first-dir/subdir/ssdir" 12704 dotest modules-155a1 "test -d first-dir" '' 12705 dotest modules-155a2 "test -d first-dir/subdir" '' 12706 dotest modules-155a3 "test -d first-dir/subdir/ssdir" '' 12707 # Test that nothing extraneous got created. 12708 dotest modules-155a4 "ls" "first-dir" \ 12709 "CVS 12710 first-dir" 12711 cd .. 12712 rm -r 2 12713 12714 # Test checking out everything. 12715 mkdir 1 12716 cd 1 12717 dotest modules-155b "${testcvs} -q co world" \ 12718 "U CVSROOT/${DOTSTAR} 12719 U first-dir/subdir/a 12720 U first-dir/subdir/b" 12721 cd .. 12722 rm -r 1 12723 12724 # Test checking out a module which lists at least two 12725 # specific files twice. At one time, this failed over 12726 # remote CVS. 12727 mkdir 1 12728 cd 1 12729 dotest modules-155c1 "${testcvs} -q co first-dir" \ 12730 "U first-dir/subdir/a 12731 U first-dir/subdir/b" 12732 12733 cd first-dir 12734 echo 'first revision' > file1 12735 echo 'first revision' > file2 12736 dotest modules-155c2 "${testcvs} add file1 file2" \ 12737 "${SPROG}"' add: scheduling file `file1'\'' for addition 12738 '"${SPROG}"' add: scheduling file `file2'\'' for addition 12739 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add these files permanently' 12740 dotest modules-155c3 "${testcvs} -q ci -m add-it" \ 12741 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 12742 initial revision: 1\.1 12743 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 12744 initial revision: 1\.1" 12745 12746 cd .. 12747 rm -r first-dir 12748 dotest modules-155c4 "${testcvs} -q co topfiles" \ 12749 "U first-dir/file1 12750 U first-dir/file2" 12751 dotest modules-155c5 "${testcvs} -q co topfiles" "" 12752 12753 # Make sure the right thing happens if we remove a file. 12754 cd first-dir 12755 dotest modules-155c6 "${testcvs} -q rm -f file1" \ 12756 "${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 12757 dotest modules-155c7 "${testcvs} -q ci -m remove-it" \ 12758 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 12759 new revision: delete; previous revision: 1\.1" 12760 cd .. 12761 rm -r first-dir 12762 dotest modules-155c8 "${testcvs} -q co topfiles" \ 12763 "${SPROG} checkout: warning: \`first-dir/file1' is not (any longer) pertinent 12764 U first-dir/file2" 12765 12766 dokeep 12767 cd .. 12768 rm -r 1 12769 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 12770 ;; 12771 12772 12773 12774 modules2) 12775 # More tests of modules, in particular the & feature. 12776 mkdir 1; cd 1 12777 dotest modules2-setup-1 "${testcvs} -q co -l ." '' 12778 mkdir first-dir second-dir third-dir 12779 dotest modules2-setup-2 \ 12780 "${testcvs} add first-dir second-dir third-dir" \ 12781 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository 12782 Directory ${CVSROOT_DIRNAME}/second-dir added to the repository 12783 Directory ${CVSROOT_DIRNAME}/third-dir added to the repository" 12784 cd third-dir 12785 touch file3 12786 dotest modules2-setup-3 "${testcvs} add file3" \ 12787 "${SPROG} add: scheduling file .file3. for addition 12788 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 12789 dotest modules2-setup-4 "${testcvs} -q ci -m add file3" \ 12790 "$CVSROOT_DIRNAME/third-dir/file3,v <-- file3 12791 initial revision: 1\.1" 12792 cd ../.. 12793 rm -r 1 12794 12795 mkdir 1 12796 cd 1 12797 12798 dotest modules2-1 "${testcvs} -q co CVSROOT/modules" \ 12799 'U CVSROOT/modules' 12800 cd CVSROOT 12801 cat >> modules << EOF 12802 ampermodule &first-dir &second-dir 12803 combmodule third-dir file3 &first-dir 12804 ampdirmod -d newdir &first-dir &second-dir 12805 badmod -d newdir 12806 messymod first-dir &messymodchild 12807 messymodchild -d sdir/child second-dir 12808 EOF 12809 # Depending on whether the user also ran the modules test 12810 # we will be checking in revision 1.2 or 1.3. 12811 dotest modules2-2 "${testcvs} -q ci -m add-modules" \ 12812 "$CVSROOT_DIRNAME/CVSROOT/modules,v <-- modules 12813 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 12814 $SPROG commit: Rebuilding administrative file database" 12815 12816 cd .. 12817 12818 dotest modules2-3 "${testcvs} -q co ampermodule" '' 12819 dotest modules2-4 "test -d ampermodule/first-dir" '' 12820 dotest modules2-5 "test -d ampermodule/second-dir" '' 12821 12822 # Test ability of cvs release to handle multiple arguments 12823 # See comment at "release" for list of other cvs release tests. 12824 cd ampermodule 12825 if ${testcvs} release -d first-dir second-dir <<EOF >>${LOGFILE} 12826 yes 12827 yes 12828 EOF 12829 then 12830 pass modules2-6 12831 else 12832 fail modules2-6 12833 fi 12834 dotest_fail modules2-7 "test -d first-dir" '' 12835 dotest_fail modules2-8 "test -d second-dir" '' 12836 12837 cd .. 12838 12839 # There used to be a nasty-hack that made CVS skip creation of the 12840 # module dir (in this case ampermodule) when -n was specified 12841 dotest modules2-ampermod-1 "${testcvs} -q co -n ampermodule" '' 12842 dotest modules2-ampermod-2 "test -d ampermodule/first-dir" '' 12843 dotest modules2-ampermod-3 "test -d ampermodule/second-dir" '' 12844 12845 # Test release of a module 12846 if echo yes |${testcvs} release -d ampermodule >>${LOGFILE}; then 12847 pass modules2-ampermod-release-1 12848 else 12849 fail modules2-ampermod-release-1 12850 fi 12851 dotest_fail modules2-ampermod-release-2 "test -d ampermodule" '' 12852 12853 # and the '-n' test again, but in conjunction with '-d' 12854 dotest modules2-ampermod-4 "${testcvs} -q co -n -d newname ampermodule" '' 12855 dotest modules2-ampermod-5 "test -d newname/first-dir" '' 12856 dotest modules2-ampermod-6 "test -d newname/second-dir" '' 12857 rm -rf newname 12858 12859 # Now we create another directory named first-dir and make 12860 # sure that CVS doesn't get them mixed up. 12861 mkdir first-dir 12862 # Note that this message should say "Updating ampermodule/first-dir" 12863 # I suspect. This is a long-standing behavior/bug.... 12864 dotest modules2-9 "${testcvs} co ampermodule" \ 12865 "${SPROG} checkout: Updating first-dir 12866 ${SPROG} checkout: Updating second-dir" 12867 touch ampermodule/first-dir/amper1 12868 cd ampermodule 12869 dotest modules2-10 "${testcvs} add first-dir/amper1" \ 12870 "${SPROG} add: scheduling file .first-dir/amper1. for addition 12871 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 12872 cd .. 12873 12874 # As with the "Updating xxx" message, the "U first-dir/amper1" 12875 # message (instead of "U ampermodule/first-dir/amper1") is 12876 # rather fishy. 12877 dotest modules2-12 "${testcvs} co ampermodule" \ 12878 "${SPROG} checkout: Updating first-dir 12879 A first-dir/amper1 12880 ${SPROG} checkout: Updating second-dir" 12881 12882 if $remote; then 12883 dotest modules2-13r "$testcvs -q ci -m add-it ampermodule" \ 12884 "$CVSROOT_DIRNAME/first-dir/amper1,v <-- ampermodule/first-dir/amper1 12885 initial revision: 1\.1" 12886 else 12887 # Trying this as above led to a "protocol error" message. 12888 # Work around this bug. 12889 cd ampermodule 12890 dotest modules2-13 "$testcvs -q ci -m add-it" \ 12891 "$CVSROOT_DIRNAME/first-dir/amper1,v <-- first-dir/amper1 12892 initial revision: 1\.1" 12893 cd .. 12894 fi 12895 cd .. 12896 rm -r 1 12897 12898 # Now test the "combmodule" module (combining regular modules 12899 # and ampersand modules in the same module definition). 12900 mkdir 1; cd 1 12901 dotest modules2-14 "${testcvs} co combmodule" \ 12902 "U combmodule/file3 12903 ${SPROG} checkout: Updating first-dir 12904 U first-dir/amper1" 12905 dotest modules2-15 "test -f combmodule/file3" "" 12906 dotest modules2-16 "test -f combmodule/first-dir/amper1" "" 12907 cd combmodule 12908 rm -r first-dir 12909 # At least for now there is no way to tell CVS that 12910 # some files/subdirectories come from one repository directory, 12911 # and others from another. 12912 # This seems like a pretty sensible behavior to me, in the 12913 # sense that first-dir doesn't "really" exist within 12914 # third-dir, so CVS just acts as if there is nothing there 12915 # to do. 12916 dotest modules2-17 "${testcvs} update -d" \ 12917 "${SPROG} update: Updating \." 12918 12919 cd .. 12920 dotest modules2-18 "${testcvs} -q co combmodule" \ 12921 "U first-dir/amper1" 12922 dotest modules2-19 "test -f combmodule/first-dir/amper1" "" 12923 cd .. 12924 rm -r 1 12925 12926 # Now test the "ampdirmod" and "badmod" modules to be sure that 12927 # options work with ampersand modules but don't prevent the 12928 # "missing directory" error message. 12929 mkdir 1; cd 1 12930 dotest modules2-20 "${testcvs} co ampdirmod" \ 12931 "${SPROG} checkout: Updating first-dir 12932 U first-dir/amper1 12933 ${SPROG} checkout: Updating second-dir" 12934 dotest modules2-21 "test -f newdir/first-dir/amper1" "" 12935 dotest modules2-22 "test -d newdir/second-dir" "" 12936 dotest_fail modules2-23 "${testcvs} co badmod" \ 12937 "${SPROG} checkout: modules file missing directory for module badmod" \ 12938 "${SPROG} server: modules file missing directory for module badmod 12939 ${CPROG} \[checkout aborted\]: cannot expand modules" 12940 cd .. 12941 rm -r 1 12942 12943 # Confirm that a rename with added depth nested in an ampersand 12944 # module works. 12945 mkdir 1; cd 1 12946 dotest modules2-nestedrename-1 "${testcvs} -q co messymod" \ 12947 "U messymod/amper1" 12948 dotest modules2-nestedrename-2 "test -d messymod/sdir" '' 12949 dotest modules2-nestedrename-3 "test -d messymod/sdir/CVS" '' 12950 dotest modules2-nestedrename-4 "test -d messymod/sdir/child" '' 12951 dotest modules2-nestedrename-5 "test -d messymod/sdir/child/CVS" '' 12952 cd ..; rm -r 1 12953 12954 # FIXME: client/server has a bug. It should be working like a local 12955 # repository in this case, but fails to check out the second module 12956 # in the list when a branch is specified. 12957 mkdir 1; cd 1 12958 dotest modules2-ampertag-setup-1 \ 12959 "${testcvs} -Q rtag tag first-dir second-dir third-dir" \ 12960 '' 12961 dotest modules2-ampertag-1 "${testcvs} -q co -rtag ampermodule" \ 12962 "U first-dir/amper1" 12963 if $remote; then 12964 dotest_fail modules2-ampertag-2 "test -d ampermodule/second-dir" '' 12965 dotest_fail modules2-ampertag-3 "test -d ampermodule/second-dir/CVS" '' 12966 else 12967 dotest modules2-ampertag-2 "test -d ampermodule/second-dir" '' 12968 dotest modules2-ampertag-3 "test -d ampermodule/second-dir/CVS" '' 12969 fi 12970 cd ..; rm -r 1 12971 12972 # Test for tag files when an ampermod is renamed with more path 12973 # elements than it started with. 12974 # 12975 # FIXME: This is currently broken in the remote case, possibly only 12976 # because the messymodchild isn't being checked out at all. 12977 mkdir 1; cd 1 12978 # dotest modules2-tagfiles-setup-1 \ 12979 #"${testcvs} -Q rtag -b branch first-dir second-dir" \ 12980 #'' 12981 dotest modules2-tagfiles-1 "${testcvs} -q co -rtag messymod" \ 12982 "U messymod/amper1" 12983 if $remote; then 12984 dotest_fail modules2-tagfiles-2r "test -d messymod/sdir" '' 12985 else 12986 dotest modules2-tagfiles-2 "cat messymod/sdir/CVS/Tag" 'Ttag' 12987 fi 12988 cd ..; rm -r 1 12989 12990 # Test that CVS gives an error if one combines -a with 12991 # other options. 12992 # Probably would be better to break this out into a separate 12993 # test. Although it is short, it shares no files/state with 12994 # the rest of the modules2 tests. 12995 mkdir 1; cd 1 12996 dotest modules2-a0.5 "${testcvs} -q co CVSROOT/modules" \ 12997 'U CVSROOT/modules' 12998 cd CVSROOT 12999 echo 'aliasopt -a -d onedir first-dir' >modules 13000 dotest modules2-a0 "${testcvs} -q ci -m add-modules" \ 13001 "$CVSROOT_DIRNAME/CVSROOT/modules,v <-- modules 13002 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 13003 $SPROG commit: Rebuilding administrative file database" 13004 cd .. 13005 dotest_fail modules2-a1 "${testcvs} -q co aliasopt" \ 13006 "${SPROG} checkout: -a cannot be specified in the modules file along with other options" \ 13007 "${SPROG} server: -a cannot be specified in the modules file along with other options 13008 ${CPROG} \[checkout aborted\]: cannot expand modules" 13009 cd ..; rm -r 1 13010 13011 # Clean up. 13012 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir \ 13013 $CVSROOT_DIRNAME/second-dir \ 13014 $CVSROOT_DIRNAME/third-dir 13015 ;; 13016 13017 13018 13019 modules3) 13020 # More tests of modules, in particular what happens if several 13021 # modules point to the same file. 13022 13023 # First just set up a directory first-dir and a file file1 in it. 13024 mkdir 1; cd 1 13025 13026 dotest modules3-0 "$testcvs -q co -l ." 13027 mkdir first-dir 13028 dotest modules3-1 "${testcvs} add first-dir" \ 13029 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 13030 13031 cd first-dir 13032 echo file1 >file1 13033 dotest modules3-2 "${testcvs} add file1" \ 13034 "${SPROG} add: scheduling file \`file1' for addition 13035 ${SPROG} add: use \`${SPROG} commit' to add this file permanently" 13036 dotest modules3-3 "${testcvs} -q ci -m add-it" \ 13037 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 13038 initial revision: 1\.1" 13039 cd .. 13040 13041 dotest modules3-4 "${testcvs} -q update -d CVSROOT" \ 13042 "U CVSROOT${DOTSTAR}" 13043 cd CVSROOT 13044 cat >modules <<EOF 13045 mod1 -a first-dir/file1 13046 bigmod -a mod1 first-dir/file1 13047 namednest -d src/sub/dir first-dir 13048 nestdeeper -d src/sub1/sub2/sub3/dir first-dir 13049 nestshallow -d src/dir second-dir/suba/subb 13050 path/in/modules &mod1 13051 another/path/test -d another/path/test first-dir 13052 EOF 13053 dotest modules3-5 "${testcvs} -q ci -m add-modules" \ 13054 "$CVSROOT_DIRNAME/CVSROOT/modules,v <-- modules 13055 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 13056 $SPROG commit: Rebuilding administrative file database" 13057 cd .. 13058 13059 dotest modules3-6 "${testcvs} -q co bigmod" '' 13060 rm -r first-dir 13061 dotest modules3-7 "${testcvs} -q co bigmod" 'U first-dir/file1' 13062 cd .. 13063 rm -r 1 13064 13065 mkdir 1; cd 1 13066 mkdir suba 13067 mkdir suba/subb 13068 # This fails to work remote (it doesn't notice the directories, 13069 # I suppose because they contain no files). Bummer, especially 13070 # considering this is a documented technique and everything. 13071 dotest modules3-7a \ 13072 "${testcvs} import -m add-dirs second-dir tag1 tag2" \ 13073 "${SPROG} import: Importing ${CVSROOT_DIRNAME}/second-dir/suba 13074 ${SPROG} import: Importing ${CVSROOT_DIRNAME}/second-dir/suba/subb 13075 13076 No conflicts created by this import" " 13077 No conflicts created by this import" 13078 cd ..; rm -r 1 13079 mkdir 1; cd 1 13080 dotest modules3-7b "${testcvs} co second-dir" \ 13081 "${SPROG} checkout: Updating second-dir 13082 ${SPROG} checkout: Updating second-dir/suba 13083 ${SPROG} checkout: Updating second-dir/suba/subb" \ 13084 "${SPROG} checkout: Updating second-dir" 13085 13086 if $remote; then 13087 cd second-dir 13088 mkdir suba 13089 dotest modules3-7-workaround1 "${testcvs} add suba" \ 13090 "Directory ${CVSROOT_DIRNAME}/second-dir/suba added to the repository" 13091 cd suba 13092 mkdir subb 13093 dotest modules3-7-workaround2 "${testcvs} add subb" \ 13094 "Directory ${CVSROOT_DIRNAME}/second-dir/suba/subb added to the repository" 13095 cd ../.. 13096 fi 13097 13098 cd second-dir/suba/subb 13099 touch fileb 13100 dotest modules3-7c "${testcvs} add fileb" \ 13101 "${SPROG} add: scheduling file .fileb. for addition 13102 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 13103 dotest modules3-7d "${testcvs} -q ci -m add-it" \ 13104 "$CVSROOT_DIRNAME/second-dir/suba/subb/fileb,v <-- fileb 13105 initial revision: 1\.1" 13106 cd ../../.. 13107 cd ..; rm -r 1 13108 13109 mkdir 1 13110 cd 1 13111 dotest modules3-8 "${testcvs} -q co namednest" \ 13112 'U src/sub/dir/file1' 13113 dotest modules3-9 "test -f src/sub/dir/file1" '' 13114 cd .. 13115 rm -r 1 13116 13117 # Try the same thing, but with the directories nested even 13118 # deeper (deeply enough so they are nested more deeply than 13119 # the number of directories from / to ${TESTDIR}). 13120 mkdir 1 13121 cd 1 13122 dotest modules3-10 "${testcvs} -q co nestdeeper" \ 13123 'U src/sub1/sub2/sub3/dir/file1' 13124 dotest modules3-11 "test -f src/sub1/sub2/sub3/dir/file1" '' 13125 13126 # While we are doing things like twisted uses of '/' (e.g. 13127 # modules3-12), try this one. 13128 if $remote; then 13129 dotest_fail modules3-11b \ 13130 "${testcvs} -q update ${TESTDIR}/1/src/sub1/sub2/sub3/dir/file1" \ 13131 "absolute pathnames invalid for server (specified .${TESTDIR}/1/src/sub1/sub2/sub3/dir.)" 13132 fi # end of remote-only tests 13133 13134 cd .. 13135 rm -r 1 13136 13137 # This one is almost too twisted for words. The pathname output 13138 # in the message from "co" doesn't include the "path/in/modules", 13139 # but those directories do get created (with no CVSADM except 13140 # in "modules" which has a CVSNULLREPOS). 13141 # I'm not sure anyone is relying on this nonsense or whether we 13142 # need to keep doing it, but it is what CVS currently does... 13143 # Skip it for remote; the remote code has the good sense to 13144 # not deal with it (on the minus side it gives 13145 # "internal error: repository string too short." (CVS 1.9) or 13146 # "warning: server is not creating directories one at a time" (now) 13147 # instead of a real error). 13148 # I'm tempted to just make it a fatal error to have '/' in a 13149 # module name. But see comments at modules3-16. 13150 if $remote; then :; else 13151 mkdir 1; cd 1 13152 dotest modules3-12 "${testcvs} -q co path/in/modules" \ 13153 "U first-dir/file1" 13154 dotest modules3-13 "test -f path/in/modules/first-dir/file1" '' 13155 cd ..; rm -r 1 13156 fi # end of tests skipped for remote 13157 13158 # Now here is where it used to get seriously bogus. 13159 mkdir 1; cd 1 13160 dotest modules3-14 \ 13161 "${testcvs} -q rtag tag1 path/in/modules" '' 13162 # CVS used to create this even though rtag should *never* affect 13163 # the directory current when it is called! 13164 dotest_fail modules3-15 "test -d path/in/modules" '' 13165 # Just for trivia's sake, rdiff was not similarly vulnerable 13166 # because it passed 0 for run_module_prog to do_module. 13167 cd ..; rm -r 1 13168 13169 # Some people seem to want this to work. I still suspect there 13170 # are dark corners in slashes in module names. This probably wants 13171 # more thought before we start hacking on CVS (one way or the other) 13172 # or documenting this. 13173 mkdir 2; cd 2 13174 dotest modules3-16 "${testcvs} -q co another/path/test" \ 13175 "U another/path/test/file1" 13176 dotest modules3-17 "cat another/path/test/file1" 'file1' 13177 13178 dokeep 13179 cd ..; rm -r 2 13180 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir \ 13181 $CVSROOT_DIRNAME/second-dir 13182 ;; 13183 13184 13185 13186 modules4) 13187 # Some tests using the modules file with aliases that 13188 # exclude particular directories. 13189 13190 mkdir 1; cd 1 13191 13192 dotest modules4-1 "${testcvs} -q co -l ." '' 13193 mkdir first-dir 13194 dotest modules4-2 "${testcvs} add first-dir" \ 13195 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 13196 13197 cd first-dir 13198 mkdir subdir subdir_long 13199 dotest modules4-3 "${testcvs} add subdir subdir_long" \ 13200 "Directory ${CVSROOT_DIRNAME}/first-dir/subdir added to the repository 13201 Directory ${CVSROOT_DIRNAME}/first-dir/subdir_long added to the repository" 13202 13203 echo file1 > file1 13204 dotest modules4-4 "${testcvs} add file1" \ 13205 "${SPROG}"' add: scheduling file `file1'\'' for addition 13206 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 13207 13208 echo file2 > subdir/file2 13209 dotest modules4-5 "${testcvs} add subdir/file2" \ 13210 "${SPROG}"' add: scheduling file `subdir/file2'\'' for addition 13211 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 13212 13213 echo file3 > subdir_long/file3 13214 dotest modules4-6 "${testcvs} add subdir_long/file3" \ 13215 "${SPROG}"' add: scheduling file `subdir_long/file3'\'' for addition 13216 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 13217 13218 dotest modules4-7 "${testcvs} -q ci -m add-it" \ 13219 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 13220 initial revision: 1\.1 13221 $CVSROOT_DIRNAME/first-dir/subdir/file2,v <-- subdir/file2 13222 initial revision: 1\.1 13223 $CVSROOT_DIRNAME/first-dir/subdir_long/file3,v <-- subdir_long/file3 13224 initial revision: 1\.1" 13225 13226 cd .. 13227 13228 dotest modules4-8 "${testcvs} -q update -d CVSROOT" \ 13229 "U CVSROOT${DOTSTAR}" 13230 cd CVSROOT 13231 cat >modules <<EOF 13232 all -a first-dir 13233 some -a !first-dir/subdir first-dir 13234 other -a !first-dir/subdir !first-dir/subdir_long first-dir 13235 somewhat -a first-dir !first-dir/subdir 13236 EOF 13237 dotest modules4-9 "${testcvs} -q ci -m add-modules" \ 13238 "$CVSROOT_DIRNAME/CVSROOT/modules,v <-- modules 13239 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 13240 $SPROG commit: Rebuilding administrative file database" 13241 cd .. 13242 13243 cd .. 13244 mkdir 2; cd 2 13245 13246 dotest modules4-10 "${testcvs} -q co all" \ 13247 "U first-dir/file1 13248 U first-dir/subdir/file2 13249 U first-dir/subdir_long/file3" 13250 rm -r first-dir 13251 13252 dotest modules4-11 "${testcvs} -q co some" \ 13253 "U first-dir/file1 13254 U first-dir/subdir_long/file3" 13255 dotest_fail modules4-12 "test -d first-dir/subdir" '' 13256 dotest modules4-13 "test -d first-dir/subdir_long" '' 13257 rm -r first-dir 13258 13259 if $remote; then 13260 # But remote seems to do it the other way. 13261 dotest modules4-14r-1 "${testcvs} -q co somewhat" \ 13262 "U first-dir/file1 13263 U first-dir/subdir_long/file3" 13264 dotest_fail modules4-14r-2 "test -d first-dir/subdir" '' 13265 dotest modules4-14r-3 "test -d first-dir/subdir_long" '' 13266 else 13267 # This is strange behavior, in that the order of the 13268 # "!first-dir/subdir" and "first-dir" matter, and it isn't 13269 # clear that they should. I suspect it is long-standing 13270 # strange behavior but I haven't verified that. 13271 dotest modules4-14-1 "${testcvs} -q co somewhat" \ 13272 "U first-dir/file1 13273 U first-dir/subdir/file2 13274 U first-dir/subdir_long/file3" 13275 dotest modules4-14-2 "test -d first-dir/subdir" '' 13276 dotest modules4-14-3 "test -d first-dir/subdir_long" '' 13277 fi 13278 rm -r first-dir 13279 13280 dotest modules4-15 "${testcvs} -q co other" \ 13281 "U first-dir/file1" 13282 dotest_fail modules4-16 "test -d first-dir/subdir" '' 13283 dotest_fail modules4-17 "test -d first-dir/subdir_long" '' 13284 rm -r first-dir 13285 13286 cd .. 13287 rm -r 2 13288 13289 dotest modules4-18 "${testcvs} rtag tag some" \ 13290 "${SPROG} rtag: Tagging first-dir 13291 ${SPROG} rtag: Ignoring first-dir/subdir 13292 ${SPROG} rtag: Tagging first-dir/subdir_long" 13293 13294 cd 1/first-dir/subdir 13295 dotest modules4-19 "${testcvs} log file2" " 13296 RCS file: ${CVSROOT_DIRNAME}/first-dir/subdir/file2,v 13297 Working file: file2 13298 head: 1\.1 13299 branch: 13300 locks: strict 13301 access list: 13302 symbolic names: 13303 keyword substitution: kv 13304 total revisions: 1; selected revisions: 1 13305 description: 13306 ---------------------------- 13307 revision 1\.1 13308 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 13309 add-it 13310 =============================================================================" 13311 13312 dokeep 13313 cd ../../.. 13314 rm -r 1 13315 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 13316 ;; 13317 13318 13319 13320 modules5) 13321 # Test module programs 13322 13323 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 13324 mkdir 1 13325 cd 1 13326 dotest modules5-1 "$testcvs -q co first-dir" 13327 cd first-dir 13328 mkdir subdir 13329 dotest modules5-2 "${testcvs} add subdir" \ 13330 "Directory ${CVSROOT_DIRNAME}/first-dir/subdir added to the repository" 13331 cd subdir 13332 mkdir ssdir 13333 dotest modules5-3 "${testcvs} add ssdir" \ 13334 "Directory ${CVSROOT_DIRNAME}/first-dir/subdir/ssdir added to the repository" 13335 touch a b 13336 dotest modules5-4 "${testcvs} add a b" \ 13337 "${SPROG} add: scheduling file .a. for addition 13338 ${SPROG} add: scheduling file .b. for addition 13339 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 13340 13341 dotest modules5-5 "${testcvs} ci -m added" \ 13342 "${CPROG} commit: Examining . 13343 ${CPROG} commit: Examining ssdir 13344 ${CVSROOT_DIRNAME}/first-dir/subdir/a,v <-- a 13345 initial revision: 1\.1 13346 ${CVSROOT_DIRNAME}/first-dir/subdir/b,v <-- b 13347 initial revision: 1\.1" 13348 13349 cd .. 13350 dotest modules5-6 "${testcvs} -q co CVSROOT" \ 13351 "U CVSROOT/access 13352 U CVSROOT/aclconfig 13353 U CVSROOT/checkoutlist 13354 U CVSROOT/commitinfo 13355 U CVSROOT/config 13356 U CVSROOT/cvswrappers 13357 U CVSROOT/group 13358 U CVSROOT/loginfo 13359 U CVSROOT/modules 13360 U CVSROOT/notify 13361 U CVSROOT/postadmin 13362 U CVSROOT/postproxy 13363 U CVSROOT/posttag 13364 U CVSROOT/postwatch 13365 U CVSROOT/preproxy 13366 U CVSROOT/rcsinfo 13367 U CVSROOT/taginfo 13368 U CVSROOT/verifymsg" 13369 13370 # FIXCVS: The sleep in the following script helps avoid out of 13371 # order messages, but we really need to figure out how to fix 13372 # cvs to prevent them in the first place. 13373 for i in checkout export tag; do 13374 cat >> ${CVSROOT_DIRNAME}/$i.sh <<EOF 13375 #! $TESTSHELL 13376 sleep 1 13377 echo "$i script invoked in \`pwd\`" 13378 echo "args: \$@" 13379 EOF 13380 # Cygwin doesn't set premissions correctly over the Samba share. 13381 if test -n "$remotehost"; then 13382 $CVS_RSH $remotehost "chmod +x ${CVSROOT_DIRNAME}/$i.sh" 13383 else 13384 chmod +x ${CVSROOT_DIRNAME}/$i.sh 13385 fi 13386 done 13387 13388 OPTS="-o${CVSROOT_DIRNAME}/checkout.sh -e ${CVSROOT_DIRNAME}/export.sh -t${CVSROOT_DIRNAME}/tag.sh" 13389 cat >CVSROOT/modules <<EOF 13390 realmodule ${OPTS} first-dir/subdir a 13391 dirmodule ${OPTS} first-dir/subdir 13392 namedmodule -d nameddir ${OPTS} first-dir/subdir 13393 EOF 13394 13395 dotest modules5-7 "$testcvs -Q ci -m 'add modules' CVSROOT/modules" 13396 13397 cd .. 13398 rm -rf first-dir 13399 13400 # Test that real modules check out to realmodule/a, not subdir/a. 13401 if $remote; then 13402 # FIXCVS? 13403 # Mac OSX 10.3 (Darwin ppc-osx1 5.5) fails here when $TMPDIR 13404 # contains a symlink (it does not fail the local modules5-8). 13405 # Since no other platforms are exhibiting the same problem, I 13406 # suspect an issue with OSX and fork() or the like dereferencing 13407 # the symlink, but it is possible it is something that could be 13408 # fixed or worked around in CVS. 13409 dotest modules5-8r "$testcvs co realmodule" \ 13410 "U realmodule/a 13411 ${SPROG} checkout: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .realmodule.. 13412 checkout script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13413 args: realmodule" 13414 else 13415 dotest modules5-8 "${testcvs} co realmodule" \ 13416 "U realmodule/a 13417 ${SPROG} checkout: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .realmodule.. 13418 checkout script invoked in ${TESTDIR}/1 13419 args: realmodule" 13420 fi 13421 dotest modules5-9 "test -d realmodule && test -f realmodule/a" "" 13422 dotest_fail modules5-10 "test -f realmodule/b" "" 13423 if $remote; then 13424 dotest modules5-11 "${testcvs} -q co realmodule" \ 13425 "checkout script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13426 args: realmodule" 13427 dotest modules5-12 "${testcvs} -q update" '' 13428 echo "change" >>realmodule/a 13429 dotest modules5-13 "${testcvs} -q ci -m." \ 13430 "$CVSROOT_DIRNAME/first-dir/subdir/a,v <-- realmodule/a 13431 new revision: 1\.2; previous revision: 1\.1" 13432 else 13433 dotest modules5-11 "${testcvs} -q co realmodule" \ 13434 "checkout script invoked in ${TESTDIR}/1 13435 args: realmodule" 13436 dotest modules5-12 "${testcvs} -q update" '' 13437 echo "change" >>realmodule/a 13438 dotest modules5-13 "${testcvs} -q ci -m." \ 13439 "$CVSROOT_DIRNAME/first-dir/subdir/a,v <-- realmodule/a 13440 new revision: 1\.2; previous revision: 1\.1" 13441 fi 13442 dotest modules5-14 "echo yes | ${testcvs} release -d realmodule" \ 13443 "You have \[0\] altered files in this repository\. 13444 Are you sure you want to release (and delete) directory .realmodule.: " 13445 dotest modules5-15 "${testcvs} -q rtag -Dnow MYTAG realmodule" \ 13446 "tag script invoked in ${TESTDIR}/1 13447 args: realmodule MYTAG" \ 13448 "tag script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13449 args: realmodule MYTAG" 13450 if $remote; then 13451 dotest modules5-16 "${testcvs} -q export -r MYTAG realmodule" \ 13452 "U realmodule/a 13453 export script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13454 args: realmodule" 13455 else 13456 dotest modules5-16 "${testcvs} -q export -r MYTAG realmodule" \ 13457 "U realmodule/a 13458 export script invoked in ${TESTDIR}/1 13459 args: realmodule" 13460 fi 13461 rm -r realmodule 13462 13463 dotest_fail modules5-17 "${testcvs} co realmodule/a" \ 13464 "${SPROG}"' checkout: module `realmodule/a'\'' is a request for a file in a module which is not a directory' \ 13465 "${SPROG}"' server: module `realmodule/a'\'' is a request for a file in a module which is not a directory 13466 '"${CPROG}"' \[checkout aborted\]: cannot expand modules' 13467 13468 # Now test the ability to check out a single file from a directory 13469 if $remote; then 13470 dotest modules5-18 "${testcvs} co dirmodule/a" \ 13471 "U dirmodule/a 13472 ${SPROG} checkout: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .dirmodule.. 13473 checkout script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13474 args: dirmodule" 13475 else 13476 dotest modules5-18 "${testcvs} co dirmodule/a" \ 13477 "U dirmodule/a 13478 ${SPROG} checkout: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .dirmodule.. 13479 checkout script invoked in ${TESTDIR}/1 13480 args: dirmodule" 13481 fi 13482 dotest modules5-19 "test -d dirmodule && test -f dirmodule/a" "" 13483 dotest_fail modules5-20 "test -f dirmodule/b" "" 13484 dotest modules5-21 "echo yes | ${testcvs} release -d dirmodule" \ 13485 "You have \[0\] altered files in this repository\. 13486 Are you sure you want to release (and delete) directory .dirmodule.: " 13487 13488 # Now test the ability to correctly reject a non-existent filename. 13489 # For maximum studliness we would check that an error message is 13490 # being output. 13491 # We accept a zero exit status because it is what CVS does 13492 # (Dec 95). Probably the exit status should be nonzero, 13493 # however. 13494 if $remote; then 13495 dotest modules5-22 "${testcvs} co dirmodule/nonexist" \ 13496 "${SPROG} checkout: warning: new-born \`dirmodule/nonexist' has disappeared 13497 ${SPROG} checkout: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .dirmodule.. 13498 checkout script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13499 args: dirmodule" 13500 else 13501 dotest modules5-22 "${testcvs} co dirmodule/nonexist" \ 13502 "${SPROG} checkout: warning: new-born \`dirmodule/nonexist' has disappeared 13503 ${SPROG} checkout: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .dirmodule.. 13504 checkout script invoked in ${TESTDIR}/1 13505 args: dirmodule" 13506 fi 13507 # We tolerate the creation of the dirmodule directory, since that 13508 # is what CVS does, not because we view that as preferable to not 13509 # creating it. 13510 dotest_fail modules5-23 "test -f dirmodule/a || test -f dirmodule/b" "" 13511 rm -r dirmodule 13512 13513 # Now test that a module using -d checks out to the specified 13514 # directory. 13515 if $remote; then 13516 dotest modules5-24 "${testcvs} -q co namedmodule" \ 13517 "U nameddir/a 13518 U nameddir/b 13519 checkout script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13520 args: nameddir" 13521 else 13522 dotest modules5-24 "${testcvs} -q co namedmodule" \ 13523 "U nameddir/a 13524 U nameddir/b 13525 checkout script invoked in ${TESTDIR}/1 13526 args: nameddir" 13527 fi 13528 dotest modules5-25 "test -f nameddir/a && test -f nameddir/b" "" 13529 echo add line >>nameddir/a 13530 # This seems suspicious: when we checkout an existing directory, 13531 # the checkout script gets executed in addition to the update 13532 # script. Is that by design or accident? 13533 if $remote; then 13534 dotest modules5-26 "${testcvs} -q co namedmodule" \ 13535 "M nameddir/a 13536 checkout script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13537 args: nameddir" 13538 else 13539 dotest modules5-26 "${testcvs} -q co namedmodule" \ 13540 "M nameddir/a 13541 checkout script invoked in ${TESTDIR}/1 13542 args: nameddir" 13543 fi 13544 rm nameddir/a 13545 13546 if $remote; then 13547 dotest modules5-27 "${testcvs} -q co namedmodule" \ 13548 "U nameddir/a 13549 checkout script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13550 args: nameddir" 13551 else 13552 dotest modules5-27 "${testcvs} -q co namedmodule" \ 13553 "U nameddir/a 13554 checkout script invoked in ${TESTDIR}/1 13555 args: nameddir" 13556 fi 13557 dotest modules5-28 "echo yes | ${testcvs} release -d nameddir" \ 13558 "You have \[0\] altered files in this repository\. 13559 Are you sure you want to release (and delete) directory .nameddir.: " 13560 13561 # Now try the same tests with -d on command line 13562 # FIXCVS? The manual says the modules programs get the module name, 13563 # but they really get the directory name. 13564 if $remote; then 13565 dotest modules5-29 "${testcvs} co -d mydir realmodule" \ 13566 "U mydir/a 13567 ${SPROG} checkout: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .mydir.. 13568 checkout script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13569 args: mydir" 13570 else 13571 dotest modules5-29 "${testcvs} co -d mydir realmodule" \ 13572 "U mydir/a 13573 ${SPROG} checkout: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .mydir.. 13574 checkout script invoked in ${TESTDIR}/1 13575 args: mydir" 13576 fi 13577 dotest modules5-30 "test -d mydir && test -f mydir/a" "" 13578 dotest_fail modules5-31 "test -d realmodule || test -f mydir/b" "" 13579 if $remote; then 13580 dotest modules5-32 "${testcvs} -q co -d mydir realmodule" \ 13581 "checkout script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13582 args: mydir" 13583 dotest modules5-33 "${testcvs} -q update" '' 13584 echo "change" >>mydir/a 13585 dotest modules5-34 "${testcvs} -q ci -m." \ 13586 "$CVSROOT_DIRNAME/first-dir/subdir/a,v <-- mydir/a 13587 new revision: 1\.3; previous revision: 1\.2" 13588 else 13589 dotest modules5-32 "${testcvs} -q co -d mydir realmodule" \ 13590 "checkout script invoked in ${TESTDIR}/1 13591 args: mydir" 13592 dotest modules5-33 "${testcvs} -q update" '' 13593 echo "change" >>mydir/a 13594 dotest modules5-34 "${testcvs} -q ci -m." \ 13595 "$CVSROOT_DIRNAME/first-dir/subdir/a,v <-- mydir/a 13596 new revision: 1\.3; previous revision: 1\.2" 13597 fi 13598 dotest modules5-35 "echo yes | ${testcvs} release -d mydir" \ 13599 "You have \[0\] altered files in this repository\. 13600 Are you sure you want to release (and delete) directory .mydir.: " 13601 if $remote; then 13602 dotest modules5-36 "${testcvs} -q rtag -Dnow MYTAG2 realmodule" \ 13603 "tag script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13604 args: realmodule MYTAG2" 13605 dotest modules5-37 "${testcvs} -q export -r MYTAG2 -d mydir realmodule" \ 13606 "U mydir/a 13607 export script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13608 args: mydir" 13609 else 13610 dotest modules5-36 "${testcvs} -q rtag -Dnow MYTAG2 realmodule" \ 13611 "tag script invoked in ${TESTDIR}/1 13612 args: realmodule MYTAG2" 13613 dotest modules5-37 "${testcvs} -q export -r MYTAG2 -d mydir realmodule" \ 13614 "U mydir/a 13615 export script invoked in ${TESTDIR}/1 13616 args: mydir" 13617 fi 13618 rm -r mydir 13619 13620 # Now test the ability to check out a single file from a directory 13621 if $remote; then 13622 dotest modules5-38 "${testcvs} co -d mydir dirmodule/a" \ 13623 "U mydir/a 13624 ${SPROG} checkout: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .mydir.. 13625 checkout script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13626 args: mydir" 13627 else 13628 dotest modules5-38 "${testcvs} co -d mydir dirmodule/a" \ 13629 "U mydir/a 13630 ${SPROG} checkout: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .mydir.. 13631 checkout script invoked in ${TESTDIR}/1 13632 args: mydir" 13633 fi 13634 dotest modules5-39 "test -d mydir && test -f mydir/a" "" 13635 dotest_fail modules5-40 "test -d dirmodule || test -f mydir/b" "" 13636 dotest modules5-41 "echo yes | ${testcvs} release -d mydir" \ 13637 "You have \[0\] altered files in this repository\. 13638 Are you sure you want to release (and delete) directory .mydir.: " 13639 13640 # Now test the ability to correctly reject a non-existent filename. 13641 # For maximum studliness we would check that an error message is 13642 # being output. 13643 # We accept a zero exit status because it is what CVS does 13644 # (Dec 95). Probably the exit status should be nonzero, 13645 # however. 13646 if $remote; then 13647 dotest modules5-42 "${testcvs} co -d mydir dirmodule/nonexist" \ 13648 "${SPROG} checkout: warning: new-born \`mydir/nonexist' has disappeared 13649 ${SPROG} checkout: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .mydir.. 13650 checkout script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13651 args: mydir" 13652 else 13653 dotest modules5-42 "${testcvs} co -d mydir dirmodule/nonexist" \ 13654 "${SPROG} checkout: warning: new-born \`mydir/nonexist' has disappeared 13655 ${SPROG} checkout: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .mydir.. 13656 checkout script invoked in ${TESTDIR}/1 13657 args: mydir" 13658 fi 13659 # We tolerate the creation of the mydir directory, since that 13660 # is what CVS does, not because we view that as preferable to not 13661 # creating it. 13662 dotest_fail modules5-43 "test -f mydir/a || test -f mydir/b" "" 13663 rm -r mydir 13664 13665 if $remote; then 13666 dotest modules5-44 "${testcvs} -q co -d mydir namedmodule" \ 13667 "U mydir/a 13668 U mydir/b 13669 checkout script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13670 args: mydir" 13671 else 13672 dotest modules5-44 "${testcvs} -q co -d mydir namedmodule" \ 13673 "U mydir/a 13674 U mydir/b 13675 checkout script invoked in ${TESTDIR}/1 13676 args: mydir" 13677 fi 13678 dotest modules5-45 "test -f mydir/a && test -f mydir/b" "" 13679 dotest_fail modules5-46 "test -d namedir" 13680 echo add line >>mydir/a 13681 # This seems suspicious: when we checkout an existing directory, 13682 # the checkout script gets executed in addition to the update 13683 # script. Is that by design or accident? 13684 if $remote; then 13685 dotest modules5-47 "${testcvs} -q co -d mydir namedmodule" \ 13686 "M mydir/a 13687 checkout script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13688 args: mydir" 13689 else 13690 dotest modules5-47 "${testcvs} -q co -d mydir namedmodule" \ 13691 "M mydir/a 13692 checkout script invoked in ${TESTDIR}/1 13693 args: mydir" 13694 fi 13695 rm mydir/a 13696 13697 if $remote; then 13698 dotest modules5-48 "${testcvs} -q co -d mydir namedmodule" \ 13699 "U mydir/a 13700 checkout script invoked in ${TMPDIR}/cvs-serv[0-9a-z]* 13701 args: mydir" 13702 else 13703 dotest modules5-48 "${testcvs} -q co -d mydir namedmodule" \ 13704 "U mydir/a 13705 checkout script invoked in ${TESTDIR}/1 13706 args: mydir" 13707 fi 13708 dotest modules5-49 "echo yes | ${testcvs} release -d mydir" \ 13709 "You have \[0\] altered files in this repository\. 13710 Are you sure you want to release (and delete) directory .mydir.: " 13711 13712 dokeep 13713 cd .. 13714 rm -r 1 13715 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir \ 13716 $CVSROOT_DIRNAME/*.sh 13717 ;; 13718 13719 13720 13721 modules6) 13722 # 13723 # Test invalid module definitions 13724 # 13725 # See the header comment for the `modules' test for an index of 13726 # the complete suite of modules tests. 13727 # 13728 13729 # 13730 # There was a bug in CVS through 1.11.1p1 where a bad module name 13731 # would cause the previous line to be parsed as the module 13732 # definition. This test proves this doesn't happen anymore. 13733 # 13734 mkdir modules6 13735 cd modules6 13736 dotest module6-setup-1 "${testcvs} -Q co CVSROOT" "" 13737 cd CVSROOT 13738 echo "longmodulename who cares" >modules 13739 echo "badname" >>modules 13740 # This test almost isn't setup since it generates the error message 13741 # we are looking for if `-Q' isn't specified, but I want to test the 13742 # filename in the message later. 13743 dotest modules6-setup-2 "$testcvs -Q ci -mbad-modules" 13744 13745 # Here's where CVS would report not being able to find `lename' 13746 cd .. 13747 dotest_fail modules6-1 "${testcvs} -q co badname" \ 13748 "${SPROG} checkout: warning: NULL value for key .badname. at line 2 of .${CVSROOT_DIRNAME}/CVSROOT/modules. 13749 ${SPROG} checkout: cannot find module .badname. - ignored" \ 13750 "${SPROG} server: warning: NULL value for key .badname. at line 2 of .${CVSROOT_DIRNAME}/CVSROOT/modules. 13751 ${SPROG} server: cannot find module .badname. - ignored 13752 ${CPROG} \[checkout aborted\]: cannot expand modules" 13753 13754 dokeep 13755 restore_adm 13756 cd .. 13757 rm -r modules6 13758 ;; 13759 13760 13761 13762 modules7) 13763 # 13764 # Test tag problems vs an empty CVSROOT/val-tags file 13765 # 13766 # See the header comment for the `modules' test for an index of 13767 # the complete suite of modules tests. 13768 # 13769 mkdir modules7 13770 cd modules7 13771 dotest modules7-1 "$testcvs -Q co -d top ." 13772 cd top 13773 mkdir zero one 13774 dotest modules7-2 "$testcvs -Q add zero one" 13775 cd one 13776 echo 'file1 contents' > file1 13777 dotest modules7-2 "$testcvs -Q add file1" 13778 dotest modules7-3 "$testcvs -Q ci -mnew file1" 13779 dotest modules7-4 "$testcvs -Q tag mytag file1" 13780 cd ../CVSROOT 13781 echo 'all -a zero one' > modules 13782 dotest modules7-5 "$testcvs -Q ci -mall-module" 13783 cd ../.. 13784 mkdir myexport 13785 cd myexport 13786 13787 # This failed prior to CVS version 1.12.10. 13788 dotest modules7-7 "$testcvs export -rmytag all" \ 13789 "$SPROG export: Updating zero 13790 $SPROG export: Updating one 13791 U one/file1" 13792 dotest modules7-8 'cat one/file1' 'file1 contents' 13793 13794 dokeep 13795 13796 # cleanup 13797 restore_adm 13798 cd ../.. 13799 rm -fr modules7 13800 rm -rf $CVSROOT_DIRNAME/zero $CVSROOT_DIRNAME/one 13801 ;; 13802 13803 13804 13805 mkmodules) 13806 # When a file listed in checkoutlist doesn't exist, cvs-1.10.4 13807 # would fail to remove the CVSROOT/.#[0-9]* temporary file it 13808 # creates while mkmodules is in the process of trying to check 13809 # out the missing file. 13810 13811 mkdir 1; cd 1 13812 dotest mkmodules-temp-file-removal-1 "${testcvs} -Q co CVSROOT" '' 13813 cd CVSROOT 13814 echo no-such-file >> checkoutlist 13815 dotest mkmodules-temp-file-removal-2 "$testcvs -Q ci -m. checkoutlist" 13816 13817 dotest mkmodules-temp-file-removal-3 \ 13818 "echo $CVSROOT_DIRNAME/CVSROOT/.#[0-9]*" \ 13819 "$CVSROOT_DIRNAME/CVSROOT/\.#\[0-9\]\*" 13820 13821 # Versions 1.11.6 & 1.12.1 and earlier of CVS printed most of the 13822 # white space included before error messages in checkoutlist. 13823 echo "no-such-file Failed to update no-such-file." >checkoutlist 13824 dotest mkmodules-error-message-1 "$testcvs -Q ci -m. checkoutlist" \ 13825 "$SPROG commit: Failed to update no-such-file\." 13826 13827 # Versions 1.11.6 & 1.12.1 and earlier of CVS used the error string 13828 # from the checkoutlist file as the format string passed to error()'s 13829 # printf. Check that this is no longer the case by verifying that 13830 # printf format patterns remain unchanged. 13831 echo "no-such-file Failed to update %s %lx times because %s happened %d times." >checkoutlist 13832 dotest mkmodules-error-message-2 "$testcvs -Q ci -m. checkoutlist" \ 13833 "$SPROG commit: Failed to update %s %lx times because %s happened %d times\." 13834 13835 dotest mkmodules-cleanup-1 \ 13836 "$testcvs -Q up -pr1.1 checkoutlist >checkoutlist" 13837 dotest mkmodules-cleanup-2 "$testcvs -Q ci -m. checkoutlist" 13838 13839 dokeep 13840 cd ../.. 13841 rm -r 1 13842 ;; 13843 13844 13845 13846 co-d) 13847 # Some tests of various permutations of co-d when directories exist 13848 # and checkouts lengthen. 13849 # 13850 # Interestingly enough, these same tests pass when the directory 13851 # lengthening happens via the modules file. Go figure. 13852 module=co-d 13853 mkdir $module; cd $module 13854 mkdir top; cd top 13855 dotest co-d-init-1 "$testcvs -Q co -l ." 13856 mkdir $module 13857 dotest co-d-init-2 "$testcvs -Q add $module" 13858 cd $module 13859 echo content >file1 13860 echo different content >file2 13861 dotest co-d-init-3 "$testcvs -Q add file1 file2" 13862 dotest co-d-init-4 "$testcvs -Q ci -madd-em" 13863 cd ../.. 13864 13865 mkdir 2; cd 2 13866 dotest co-d-1 "$testcvs -q co -d dir $module" \ 13867 "U dir/file1 13868 U dir/file2" 13869 dotest co-d-1.2 "cat dir/CVS/Repository" "$module" 13870 13871 dotest co-d-2 "$testcvs -q co -d dir2/sdir $module" \ 13872 "U dir2/sdir/file1 13873 U dir2/sdir/file2" 13874 dotest co-d-2.2 "cat dir2/CVS/Repository" "." 13875 dotest co-d-2.3 "cat dir2/sdir/CVS/Repository" "$module" 13876 13877 dotest co-d-2.4 "$testcvs -q co -d dir2.4/sdir/sdir2 $module" \ 13878 "U dir2.4/sdir/sdir2/file1 13879 U dir2.4/sdir/sdir2/file2" 13880 dotest co-d-2.4.2 "cat dir2.4/CVS/Repository" "CVSROOT/Emptydir" 13881 dotest co-d-2.4.3 "cat dir2.4/sdir/CVS/Repository" "." 13882 dotest co-d-2.4.3 "cat dir2.4/sdir/sdir2/CVS/Repository" "$module" 13883 13884 mkdir dir3 13885 dotest co-d-3 "$testcvs -q co -d dir3 $module" \ 13886 "U dir3/file1 13887 U dir3/file2" 13888 dotest co-d-3.2 "cat dir3/CVS/Repository" "$module" 13889 13890 mkdir dir4 13891 dotest co-d-4 "$testcvs -q co -d dir4/sdir $module" \ 13892 "U dir4/sdir/file1 13893 U dir4/sdir/file2" 13894 13895 # CVS is only supposed to create administration directories in 13896 # directories it also creates, and in the directory specified by 13897 # the last portion of the path passed to -d regardless. This is 13898 # 13899 # FIXCVS: 13900 # This is broken in client/server mode because the server does not 13901 # know the client's directory structure and has to create 13902 # everything. 13903 if $remote; then 13904 dotest co-d-4.2r "cat dir4/CVS/Repository" "." 13905 else 13906 dotest_fail co-d-4.2 "test -d dir4/CVS" 13907 fi 13908 13909 dotest co-d-4.3 "cat dir4/sdir/CVS/Repository" "$module" 13910 13911 mkdir dir5 13912 mkdir dir5/sdir 13913 dotest co-d-5 "$testcvs -q co -d dir5/sdir $module" \ 13914 "U dir5/sdir/file1 13915 U dir5/sdir/file2" 13916 # FIXCVS as for co-d-4.2r. 13917 if $remote; then 13918 dotest co-d-5.2 "cat dir5/CVS/Repository" "." 13919 else 13920 dotest_fail co-d-5.2 "test -d dir5/CVS" 13921 fi 13922 13923 dotest co-d-5.3 "cat dir5/sdir/CVS/Repository" "$module" 13924 13925 # clean up 13926 dokeep 13927 cd ../.. 13928 modify_repo rm -rf $CVSROOT_DIRNAME/$module 13929 rm -r $module 13930 ;; 13931 13932 13933 13934 cvsadm) 13935 # These test check the content of CVS' administrative 13936 # files as they are checked out in various configurations. 13937 # (As a side note, I'm not using the "-q" flag in any of 13938 # this code, which should provide some extra checking for 13939 # those messages which don't seem to be checked thoroughly 13940 # anywhere else.) To do a thorough test, we need to make 13941 # a bunch of modules in various configurations. 13942 # 13943 # <1mod> is a directory at the top level of cvsroot 13944 # ``foo bar'' 13945 # <2mod> is a directory at the second level of cvsroot 13946 # ``foo bar/baz'' 13947 # <1d1mod> is a directory at the top level which is 13948 # checked out into another directory 13949 # ``foo -d bar baz'' 13950 # <1d2mod> is a directory at the second level which is 13951 # checked out into another directory 13952 # ``foo -d bar baz/quux'' 13953 # <2d1mod> is a directory at the top level which is 13954 # checked out into a directory that is two deep 13955 # ``foo -d bar/baz quux'' 13956 # <2d2mod> is a directory at the second level which is 13957 # checked out into a directory that is two deep 13958 # ``foo -d bar/baz quux'' 13959 # 13960 # The tests do each of these types separately and in twos. 13961 # We also repeat each test -d flag for 1-deep and 2-deep 13962 # directories. 13963 # 13964 # Each test should check the output for the Repository 13965 # file, since that is the one which varies depending on 13966 # the directory and how it was checked out. 13967 # 13968 # Yes, this is verbose, but at least it's very thorough. 13969 13970 # convenience variables 13971 REP=${CVSROOT} 13972 13973 # First, set TopLevelAdmin=yes so we're sure to get 13974 # top-level CVS directories. 13975 mkdir 1; cd 1 13976 dotest cvsadm-setup-1 "${testcvs} -q co CVSROOT/config" \ 13977 "U CVSROOT/config" 13978 cd CVSROOT 13979 echo "TopLevelAdmin=yes" >>config 13980 dotest cvsadm-setup-2 "${testcvs} -q ci -m yes-top-level" \ 13981 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 13982 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 13983 $SPROG commit: Rebuilding administrative file database" 13984 cd ../.. 13985 rm -r 1 13986 13987 # Second, check out the modules file and edit it. 13988 mkdir 1; cd 1 13989 dotest cvsadm-1 "${testcvs} co CVSROOT/modules" \ 13990 "U CVSROOT/modules" 13991 13992 # Test CVS/Root once. Since there is only one part of 13993 # the code which writes CVS/Root files (Create_Admin), 13994 # there is no point in testing this every time. 13995 dotest cvsadm-1a "cat CVS/Root" ${REP} 13996 dotest cvsadm-1b "cat CVS/Repository" "\." 13997 dotest cvsadm-1c "cat CVSROOT/CVS/Root" ${REP} 13998 dotest cvsadm-1d "cat CVSROOT/CVS/Repository" "CVSROOT" 13999 # All of the defined module names begin with a number. 14000 # All of the top-level directory names begin with "dir". 14001 # All of the subdirectory names begin with "sub". 14002 # All of the top-level modules begin with "mod". 14003 echo "# Module defs for cvsadm tests" > CVSROOT/modules 14004 echo "1mod mod1" >> CVSROOT/modules 14005 echo "1mod-2 mod1-2" >> CVSROOT/modules 14006 echo "2mod mod2/sub2" >> CVSROOT/modules 14007 echo "2mod-2 mod2-2/sub2-2" >> CVSROOT/modules 14008 echo "1d1mod -d dir1d1 mod1" >> CVSROOT/modules 14009 echo "1d1mod-2 -d dir1d1-2 mod1-2" >> CVSROOT/modules 14010 echo "1d2mod -d dir1d2 mod2/sub2" >> CVSROOT/modules 14011 echo "1d2mod-2 -d dir1d2-2 mod2-2/sub2-2" >> CVSROOT/modules 14012 echo "2d1mod -d dir2d1/sub2d1 mod1" >> CVSROOT/modules 14013 echo "2d1mod-2 -d dir2d1-2/sub2d1-2 mod1-2" >> CVSROOT/modules 14014 echo "2d2mod -d dir2d2/sub2d2 mod2/sub2" >> CVSROOT/modules 14015 echo "2d2mod-2 -d dir2d2-2/sub2d2-2 mod2-2/sub2-2" >> CVSROOT/modules 14016 dotest cvsadm-1e "${testcvs} ci -m add-modules" \ 14017 "${CPROG} commit: Examining . 14018 ${CPROG} commit: Examining CVSROOT 14019 ${CVSROOT_DIRNAME}/CVSROOT/modules,v <-- CVSROOT/modules 14020 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 14021 ${SPROG} commit: Rebuilding administrative file database" \ 14022 "${CPROG} commit: Examining . 14023 ${CPROG} commit: Examining CVSROOT" 14024 rm -rf CVS CVSROOT; 14025 14026 # Create the various modules 14027 dotest cvsadm-2 "${testcvs} -q co -l ." '' 14028 mkdir mod1 14029 mkdir mod1-2 14030 mkdir mod2 14031 mkdir mod2/sub2 14032 mkdir mod2-2 14033 mkdir mod2-2/sub2-2 14034 dotest cvsadm-2a "${testcvs} add mod1 mod1-2 mod2 mod2/sub2 mod2-2 mod2-2/sub2-2" \ 14035 "Directory ${CVSROOT_DIRNAME}/mod1 added to the repository 14036 Directory ${CVSROOT_DIRNAME}/mod1-2 added to the repository 14037 Directory ${CVSROOT_DIRNAME}/mod2 added to the repository 14038 Directory ${CVSROOT_DIRNAME}/mod2/sub2 added to the repository 14039 Directory ${CVSROOT_DIRNAME}/mod2-2 added to the repository 14040 Directory ${CVSROOT_DIRNAME}/mod2-2/sub2-2 added to the repository" 14041 14042 # Populate the directories for the halibut 14043 echo "file1" > mod1/file1 14044 echo "file1-2" > mod1-2/file1-2 14045 echo "file2" > mod2/sub2/file2 14046 echo "file2-2" > mod2-2/sub2-2/file2-2 14047 dotest cvsadm-2aa "${testcvs} add mod1/file1 mod1-2/file1-2 mod2/sub2/file2 mod2-2/sub2-2/file2-2" \ 14048 "${SPROG} add: scheduling file .mod1/file1. for addition 14049 ${SPROG} add: scheduling file .mod1-2/file1-2. for addition 14050 ${SPROG} add: scheduling file .mod2/sub2/file2. for addition 14051 ${SPROG} add: scheduling file .mod2-2/sub2-2/file2-2. for addition 14052 ${SPROG} add: use \`${SPROG} commit' to add these files permanently" 14053 14054 dotest cvsadm-2b "${testcvs} ci -m yup mod1 mod1-2 mod2 mod2-2" \ 14055 "${CPROG} commit: Examining mod1 14056 ${CPROG} commit: Examining mod1-2 14057 ${CPROG} commit: Examining mod2 14058 ${CPROG} commit: Examining mod2/sub2 14059 ${CPROG} commit: Examining mod2-2 14060 ${CPROG} commit: Examining mod2-2/sub2-2 14061 ${CVSROOT_DIRNAME}/mod1/file1,v <-- mod1/file1 14062 initial revision: 1.1 14063 ${CVSROOT_DIRNAME}/mod1-2/file1-2,v <-- mod1-2/file1-2 14064 initial revision: 1.1 14065 ${CVSROOT_DIRNAME}/mod2/sub2/file2,v <-- mod2/sub2/file2 14066 initial revision: 1.1 14067 ${CVSROOT_DIRNAME}/mod2-2/sub2-2/file2-2,v <-- mod2-2/sub2-2/file2-2 14068 initial revision: 1.1" 14069 # Finished creating the modules -- clean up. 14070 rm -rf CVS mod1 mod1-2 mod2 mod2-2 14071 # Done. 14072 14073 ################################################## 14074 ## Start the dizzying array of possibilities. 14075 ## Begin with each module type separately. 14076 ################################################## 14077 14078 # Pattern -- after each checkout, first check the top-level 14079 # CVS directory. Then, check the directories in numerical 14080 # order. 14081 14082 dotest cvsadm-3 "${testcvs} co 1mod" \ 14083 "${SPROG} checkout: Updating 1mod 14084 U 1mod/file1" 14085 dotest cvsadm-3b "cat CVS/Repository" "\." 14086 dotest cvsadm-3d "cat 1mod/CVS/Repository" "mod1" 14087 rm -rf CVS 1mod 14088 14089 dotest cvsadm-4 "${testcvs} co 2mod" \ 14090 "${SPROG} checkout: Updating 2mod 14091 U 2mod/file2" 14092 dotest cvsadm-4b "cat CVS/Repository" "\." 14093 dotest cvsadm-4d "cat 2mod/CVS/Repository" "mod2/sub2" 14094 rm -rf CVS 2mod 14095 14096 dotest cvsadm-5 "${testcvs} co 1d1mod" \ 14097 "${SPROG} checkout: Updating dir1d1 14098 U dir1d1/file1" 14099 dotest cvsadm-5b "cat CVS/Repository" "\." 14100 dotest cvsadm-5d "cat dir1d1/CVS/Repository" "mod1" 14101 rm -rf CVS dir1d1 14102 14103 dotest cvsadm-6 "${testcvs} co 1d2mod" \ 14104 "${SPROG} checkout: Updating dir1d2 14105 U dir1d2/file2" 14106 dotest cvsadm-6b "cat CVS/Repository" "\." 14107 dotest cvsadm-6d "cat dir1d2/CVS/Repository" "mod2/sub2" 14108 rm -rf CVS dir1d2 14109 14110 dotest cvsadm-7 "${testcvs} co 2d1mod" \ 14111 "${SPROG} checkout: Updating dir2d1/sub2d1 14112 U dir2d1/sub2d1/file1" 14113 dotest cvsadm-7b "cat CVS/Repository" "\." 14114 dotest cvsadm-7d "cat dir2d1/CVS/Repository" "\." 14115 dotest cvsadm-7f "cat dir2d1/sub2d1/CVS/Repository" "mod1" 14116 rm -rf CVS dir2d1 14117 14118 dotest cvsadm-8 "${testcvs} co 2d2mod" \ 14119 "${SPROG} checkout: Updating dir2d2/sub2d2 14120 U dir2d2/sub2d2/file2" 14121 dotest cvsadm-8b "cat CVS/Repository" "\." 14122 dotest cvsadm-8d "cat dir2d2/CVS/Repository" "mod2" 14123 dotest cvsadm-8f "cat dir2d2/sub2d2/CVS/Repository" "mod2/sub2" 14124 rm -rf CVS dir2d2 14125 14126 ################################################## 14127 ## You are in a shell script of twisted little 14128 ## module combination statements, all alike. 14129 ################################################## 14130 14131 ### 1mod 14132 14133 dotest cvsadm-9 "${testcvs} co 1mod 1mod-2" \ 14134 "${SPROG} checkout: Updating 1mod 14135 U 1mod/file1 14136 ${SPROG} checkout: Updating 1mod-2 14137 U 1mod-2/file1-2" 14138 # the usual for the top level 14139 dotest cvsadm-9b "cat CVS/Repository" "\." 14140 # the usual for 1mod 14141 dotest cvsadm-9d "cat 1mod/CVS/Repository" "mod1" 14142 # the usual for 1mod copy 14143 dotest cvsadm-9f "cat 1mod-2/CVS/Repository" "mod1-2" 14144 rm -rf CVS 1mod 1mod-2 14145 14146 # 1mod 2mod redmod bluemod 14147 dotest cvsadm-10 "${testcvs} co 1mod 2mod" \ 14148 "${SPROG} checkout: Updating 1mod 14149 U 1mod/file1 14150 ${SPROG} checkout: Updating 2mod 14151 U 2mod/file2" 14152 # the usual for the top level 14153 dotest cvsadm-10b "cat CVS/Repository" "\." 14154 # the usual for 1mod 14155 dotest cvsadm-10d "cat 1mod/CVS/Repository" "mod1" 14156 # the usual for 2dmod 14157 dotest cvsadm-10f "cat 2mod/CVS/Repository" "mod2/sub2" 14158 rm -rf CVS 1mod 2mod 14159 14160 dotest cvsadm-11 "${testcvs} co 1mod 1d1mod" \ 14161 "${SPROG} checkout: Updating 1mod 14162 U 1mod/file1 14163 ${SPROG} checkout: Updating dir1d1 14164 U dir1d1/file1" 14165 # the usual for the top level 14166 dotest cvsadm-11b "cat CVS/Repository" "\." 14167 # the usual for 1mod 14168 dotest cvsadm-11d "cat 1mod/CVS/Repository" "mod1" 14169 # the usual for 1d1mod 14170 dotest cvsadm-11f "cat dir1d1/CVS/Repository" "mod1" 14171 rm -rf CVS 1mod dir1d1 14172 14173 dotest cvsadm-12 "${testcvs} co 1mod 1d2mod" \ 14174 "${SPROG} checkout: Updating 1mod 14175 U 1mod/file1 14176 ${SPROG} checkout: Updating dir1d2 14177 U dir1d2/file2" 14178 # the usual for the top level 14179 dotest cvsadm-12b "cat CVS/Repository" "\." 14180 # the usual for 1mod 14181 dotest cvsadm-12d "cat 1mod/CVS/Repository" "mod1" 14182 # the usual for 1d2mod 14183 dotest cvsadm-12f "cat dir1d2/CVS/Repository" "mod2/sub2" 14184 rm -rf CVS 1mod dir1d2 14185 14186 dotest cvsadm-13 "${testcvs} co 1mod 2d1mod" \ 14187 "${SPROG} checkout: Updating 1mod 14188 U 1mod/file1 14189 ${SPROG} checkout: Updating dir2d1/sub2d1 14190 U dir2d1/sub2d1/file1" 14191 # the usual for the top level 14192 dotest cvsadm-13b "cat CVS/Repository" "\." 14193 # the usual for 1mod 14194 dotest cvsadm-13d "cat 1mod/CVS/Repository" "mod1" 14195 # the usual for 2d1mod 14196 dotest cvsadm-13f "cat dir2d1/CVS/Repository" "\." 14197 dotest cvsadm-13h "cat dir2d1/sub2d1/CVS/Repository" "mod1" 14198 rm -rf CVS 1mod dir2d1 14199 14200 dotest cvsadm-14 "${testcvs} co 1mod 2d2mod" \ 14201 "${SPROG} checkout: Updating 1mod 14202 U 1mod/file1 14203 ${SPROG} checkout: Updating dir2d2/sub2d2 14204 U dir2d2/sub2d2/file2" 14205 # the usual for the top level 14206 dotest cvsadm-14b "cat CVS/Repository" "\." 14207 # the usual for 1mod 14208 dotest cvsadm-14d "cat 1mod/CVS/Repository" "mod1" 14209 # the usual for 2d2mod 14210 dotest cvsadm-14f "cat dir2d2/CVS/Repository" "mod2" 14211 dotest cvsadm-14h "cat dir2d2/sub2d2/CVS/Repository" "mod2/sub2" 14212 rm -rf CVS 1mod dir2d2 14213 14214 14215 ### 2mod 14216 14217 dotest cvsadm-15 "${testcvs} co 2mod 2mod-2" \ 14218 "${SPROG} checkout: Updating 2mod 14219 U 2mod/file2 14220 ${SPROG} checkout: Updating 2mod-2 14221 U 2mod-2/file2-2" 14222 # the usual for the top level 14223 dotest cvsadm-15b "cat CVS/Repository" "\." 14224 # the usual for 2mod 14225 dotest cvsadm-15d "cat 2mod/CVS/Repository" "mod2/sub2" 14226 # the usual for 2mod copy 14227 dotest cvsadm-15f "cat 2mod-2/CVS/Repository" "mod2-2/sub2-2" 14228 rm -rf CVS 2mod 2mod-2 14229 14230 14231 dotest cvsadm-16 "${testcvs} co 2mod 1d1mod" \ 14232 "${SPROG} checkout: Updating 2mod 14233 U 2mod/file2 14234 ${SPROG} checkout: Updating dir1d1 14235 U dir1d1/file1" 14236 # the usual for the top level 14237 dotest cvsadm-16b "cat CVS/Repository" "\." 14238 # the usual for 2mod 14239 dotest cvsadm-16d "cat 2mod/CVS/Repository" "mod2/sub2" 14240 # the usual for 1d1mod 14241 dotest cvsadm-16f "cat dir1d1/CVS/Repository" "mod1" 14242 rm -rf CVS 2mod dir1d1 14243 14244 dotest cvsadm-17 "${testcvs} co 2mod 1d2mod" \ 14245 "${SPROG} checkout: Updating 2mod 14246 U 2mod/file2 14247 ${SPROG} checkout: Updating dir1d2 14248 U dir1d2/file2" 14249 # the usual for the top level 14250 dotest cvsadm-17b "cat CVS/Repository" "\." 14251 # the usual for 2mod 14252 dotest cvsadm-17d "cat 2mod/CVS/Repository" "mod2/sub2" 14253 # the usual for 1d2mod 14254 dotest cvsadm-17f "cat dir1d2/CVS/Repository" "mod2/sub2" 14255 rm -rf CVS 2mod dir1d2 14256 14257 dotest cvsadm-18 "${testcvs} co 2mod 2d1mod" \ 14258 "${SPROG} checkout: Updating 2mod 14259 U 2mod/file2 14260 ${SPROG} checkout: Updating dir2d1/sub2d1 14261 U dir2d1/sub2d1/file1" 14262 # the usual for the top level 14263 dotest cvsadm-18b "cat CVS/Repository" "\." 14264 # the usual for 2mod 14265 dotest cvsadm-18d "cat 2mod/CVS/Repository" "mod2/sub2" 14266 # the usual for 2d1mod 14267 dotest cvsadm-18f "cat dir2d1/CVS/Repository" "\." 14268 dotest cvsadm-18h "cat dir2d1/sub2d1/CVS/Repository" "mod1" 14269 rm -rf CVS 2mod dir2d1 14270 14271 dotest cvsadm-19 "${testcvs} co 2mod 2d2mod" \ 14272 "${SPROG} checkout: Updating 2mod 14273 U 2mod/file2 14274 ${SPROG} checkout: Updating dir2d2/sub2d2 14275 U dir2d2/sub2d2/file2" 14276 # the usual for the top level 14277 dotest cvsadm-19b "cat CVS/Repository" "\." 14278 # the usual for 2mod 14279 dotest cvsadm-19d "cat 2mod/CVS/Repository" "mod2/sub2" 14280 # the usual for 2d2mod 14281 dotest cvsadm-19f "cat dir2d2/CVS/Repository" "mod2" 14282 dotest cvsadm-19h "cat dir2d2/sub2d2/CVS/Repository" "mod2/sub2" 14283 rm -rf CVS 2mod dir2d2 14284 14285 14286 ### 1d1mod 14287 14288 dotest cvsadm-20 "${testcvs} co 1d1mod 1d1mod-2" \ 14289 "${SPROG} checkout: Updating dir1d1 14290 U dir1d1/file1 14291 ${SPROG} checkout: Updating dir1d1-2 14292 U dir1d1-2/file1-2" 14293 # the usual for the top level 14294 dotest cvsadm-20b "cat CVS/Repository" "\." 14295 # the usual for 1d1mod 14296 dotest cvsadm-20d "cat dir1d1/CVS/Repository" "mod1" 14297 # the usual for 1d1mod copy 14298 dotest cvsadm-20f "cat dir1d1-2/CVS/Repository" "mod1-2" 14299 rm -rf CVS dir1d1 dir1d1-2 14300 14301 dotest cvsadm-21 "${testcvs} co 1d1mod 1d2mod" \ 14302 "${SPROG} checkout: Updating dir1d1 14303 U dir1d1/file1 14304 ${SPROG} checkout: Updating dir1d2 14305 U dir1d2/file2" 14306 # the usual for the top level 14307 dotest cvsadm-21b "cat CVS/Repository" "\." 14308 # the usual for 1d1mod 14309 dotest cvsadm-21d "cat dir1d1/CVS/Repository" "mod1" 14310 # the usual for 1d2mod 14311 dotest cvsadm-21f "cat dir1d2/CVS/Repository" "mod2/sub2" 14312 rm -rf CVS dir1d1 dir1d2 14313 14314 dotest cvsadm-22 "${testcvs} co 1d1mod 2d1mod" \ 14315 "${SPROG} checkout: Updating dir1d1 14316 U dir1d1/file1 14317 ${SPROG} checkout: Updating dir2d1/sub2d1 14318 U dir2d1/sub2d1/file1" 14319 # the usual for the top level 14320 dotest cvsadm-22b "cat CVS/Repository" "\." 14321 # the usual for 1d1mod 14322 dotest cvsadm-22d "cat dir1d1/CVS/Repository" "mod1" 14323 # the usual for 2d1mod 14324 dotest cvsadm-22f "cat dir2d1/CVS/Repository" "\." 14325 dotest cvsadm-22h "cat dir2d1/sub2d1/CVS/Repository" "mod1" 14326 rm -rf CVS dir1d1 dir2d1 14327 14328 dotest cvsadm-23 "${testcvs} co 1d1mod 2d2mod" \ 14329 "${SPROG} checkout: Updating dir1d1 14330 U dir1d1/file1 14331 ${SPROG} checkout: Updating dir2d2/sub2d2 14332 U dir2d2/sub2d2/file2" 14333 # the usual for the top level 14334 dotest cvsadm-23b "cat CVS/Repository" "\." 14335 # the usual for 1d1mod 14336 dotest cvsadm-23d "cat dir1d1/CVS/Repository" "mod1" 14337 # the usual for 2d2mod 14338 dotest cvsadm-23f "cat dir2d2/CVS/Repository" "mod2" 14339 dotest cvsadm-23h "cat dir2d2/sub2d2/CVS/Repository" "mod2/sub2" 14340 rm -rf CVS dir1d1 dir2d2 14341 14342 14343 ### 1d2mod 14344 14345 dotest cvsadm-24 "${testcvs} co 1d2mod 1d2mod-2" \ 14346 "${SPROG} checkout: Updating dir1d2 14347 U dir1d2/file2 14348 ${SPROG} checkout: Updating dir1d2-2 14349 U dir1d2-2/file2-2" 14350 # the usual for the top level 14351 dotest cvsadm-24b "cat CVS/Repository" "\." 14352 # the usual for 1d2mod 14353 dotest cvsadm-24d "cat dir1d2/CVS/Repository" "mod2/sub2" 14354 # the usual for 1d2mod copy 14355 dotest cvsadm-24f "cat dir1d2-2/CVS/Repository" "mod2-2/sub2-2" 14356 rm -rf CVS dir1d2 dir1d2-2 14357 14358 dotest cvsadm-25 "${testcvs} co 1d2mod 2d1mod" \ 14359 "${SPROG} checkout: Updating dir1d2 14360 U dir1d2/file2 14361 ${SPROG} checkout: Updating dir2d1/sub2d1 14362 U dir2d1/sub2d1/file1" 14363 # the usual for the top level 14364 dotest cvsadm-25b "cat CVS/Repository" "\." 14365 # the usual for 1d2mod 14366 dotest cvsadm-25d "cat dir1d2/CVS/Repository" "mod2/sub2" 14367 # the usual for 2d1mod 14368 dotest cvsadm-25f "cat dir2d1/CVS/Repository" "\." 14369 dotest cvsadm-25h "cat dir2d1/sub2d1/CVS/Repository" "mod1" 14370 rm -rf CVS dir1d2 dir2d1 14371 14372 dotest cvsadm-26 "${testcvs} co 1d2mod 2d2mod" \ 14373 "${SPROG} checkout: Updating dir1d2 14374 U dir1d2/file2 14375 ${SPROG} checkout: Updating dir2d2/sub2d2 14376 U dir2d2/sub2d2/file2" 14377 # the usual for the top level 14378 dotest cvsadm-26b "cat CVS/Repository" "\." 14379 # the usual for 1d2mod 14380 dotest cvsadm-26d "cat dir1d2/CVS/Repository" "mod2/sub2" 14381 # the usual for 2d2mod 14382 dotest cvsadm-26f "cat dir2d2/CVS/Repository" "mod2" 14383 dotest cvsadm-26h "cat dir2d2/sub2d2/CVS/Repository" "mod2/sub2" 14384 rm -rf CVS dir1d2 dir2d2 14385 14386 14387 # 2d1mod 14388 14389 dotest cvsadm-27 "${testcvs} co 2d1mod 2d1mod-2" \ 14390 "${SPROG} checkout: Updating dir2d1/sub2d1 14391 U dir2d1/sub2d1/file1 14392 ${SPROG} checkout: Updating dir2d1-2/sub2d1-2 14393 U dir2d1-2/sub2d1-2/file1-2" 14394 # the usual for the top level 14395 dotest cvsadm-27b "cat CVS/Repository" "\." 14396 # the usual for 2d1mod 14397 dotest cvsadm-27d "cat dir2d1/CVS/Repository" "\." 14398 dotest cvsadm-27f "cat dir2d1/sub2d1/CVS/Repository" "mod1" 14399 # the usual for 2d1mod 14400 dotest cvsadm-27h "cat dir2d1-2/CVS/Repository" "\." 14401 dotest cvsadm-27j "cat dir2d1-2/sub2d1-2/CVS/Repository" "mod1-2" 14402 rm -rf CVS dir2d1 dir2d1-2 14403 14404 dotest cvsadm-28 "${testcvs} co 2d1mod 2d2mod" \ 14405 "${SPROG} checkout: Updating dir2d1/sub2d1 14406 U dir2d1/sub2d1/file1 14407 ${SPROG} checkout: Updating dir2d2/sub2d2 14408 U dir2d2/sub2d2/file2" 14409 # the usual for the top level 14410 dotest cvsadm-28b "cat CVS/Repository" "\." 14411 # the usual for 2d1mod 14412 dotest cvsadm-28d "cat dir2d1/CVS/Repository" "\." 14413 dotest cvsadm-28f "cat dir2d1/sub2d1/CVS/Repository" "mod1" 14414 # the usual for 2d2mod 14415 dotest cvsadm-28h "cat dir2d2/CVS/Repository" "mod2" 14416 dotest cvsadm-28j "cat dir2d2/sub2d2/CVS/Repository" "mod2/sub2" 14417 rm -rf CVS dir2d1 dir2d2 14418 14419 14420 # 2d2mod 14421 14422 dotest cvsadm-29 "${testcvs} co 2d2mod 2d2mod-2" \ 14423 "${SPROG} checkout: Updating dir2d2/sub2d2 14424 U dir2d2/sub2d2/file2 14425 ${SPROG} checkout: Updating dir2d2-2/sub2d2-2 14426 U dir2d2-2/sub2d2-2/file2-2" 14427 # the usual for the top level 14428 dotest cvsadm-29b "cat CVS/Repository" "\." 14429 # the usual for 2d2mod 14430 dotest cvsadm-29d "cat dir2d2/CVS/Repository" "mod2" 14431 dotest cvsadm-29f "cat dir2d2/sub2d2/CVS/Repository" "mod2/sub2" 14432 # the usual for 2d2mod 14433 dotest cvsadm-29h "cat dir2d2-2/CVS/Repository" "mod2-2" 14434 dotest cvsadm-29j "cat dir2d2-2/sub2d2-2/CVS/Repository" \ 14435 "mod2-2/sub2-2" 14436 rm -rf CVS dir2d2 dir2d2-2 14437 14438 ################################################## 14439 ## And now, all of that again using the "-d" flag 14440 ## on the command line. 14441 ################################################## 14442 14443 dotest cvsadm-1d3 "${testcvs} co -d dir 1mod" \ 14444 "${SPROG} checkout: Updating dir 14445 U dir/file1" 14446 dotest cvsadm-1d3b "cat CVS/Repository" "\." 14447 dotest cvsadm-1d3d "cat dir/CVS/Repository" "mod1" 14448 rm -rf CVS dir 14449 14450 dotest cvsadm-1d4 "${testcvs} co -d dir 2mod" \ 14451 "${SPROG} checkout: Updating dir 14452 U dir/file2" 14453 dotest cvsadm-1d4b "cat CVS/Repository" "\." 14454 dotest cvsadm-1d4d "cat dir/CVS/Repository" "mod2/sub2" 14455 rm -rf CVS dir 14456 14457 dotest cvsadm-1d5 "${testcvs} co -d dir 1d1mod" \ 14458 "${SPROG} checkout: Updating dir 14459 U dir/file1" 14460 dotest cvsadm-1d5b "cat CVS/Repository" "\." 14461 dotest cvsadm-1d5d "cat dir/CVS/Repository" "mod1" 14462 rm -rf CVS dir 14463 14464 dotest cvsadm-1d6 "${testcvs} co -d dir 1d2mod" \ 14465 "${SPROG} checkout: Updating dir 14466 U dir/file2" 14467 dotest cvsadm-1d6b "cat CVS/Repository" "\." 14468 dotest cvsadm-1d6d "cat dir/CVS/Repository" "mod2/sub2" 14469 rm -rf CVS dir 14470 14471 dotest cvsadm-1d7 "${testcvs} co -d dir 2d1mod" \ 14472 "${SPROG} checkout: Updating dir 14473 U dir/file1" 14474 dotest cvsadm-1d7b "cat CVS/Repository" "\." 14475 dotest cvsadm-1d7d "cat dir/CVS/Repository" "mod1" 14476 rm -rf CVS dir 14477 14478 dotest cvsadm-1d8 "${testcvs} co -d dir 2d2mod" \ 14479 "${SPROG} checkout: Updating dir 14480 U dir/file2" 14481 dotest cvsadm-1d8b "cat CVS/Repository" "\." 14482 dotest cvsadm-1d8d "cat dir/CVS/Repository" "mod2/sub2" 14483 rm -rf CVS dir 14484 14485 ################################################## 14486 ## Los Combonaciones 14487 ################################################## 14488 14489 ### 1mod 14490 14491 dotest cvsadm-1d9 "${testcvs} co -d dir 1mod 1mod-2" \ 14492 "${SPROG} checkout: Updating dir/1mod 14493 U dir/1mod/file1 14494 ${SPROG} checkout: Updating dir/1mod-2 14495 U dir/1mod-2/file1-2" 14496 # the usual for the top level 14497 dotest cvsadm-1d9b "cat CVS/Repository" "\." 14498 # the usual for the dir level 14499 dotest cvsadm-1d9d "cat dir/CVS/Repository" "\." 14500 # the usual for 1mod 14501 dotest cvsadm-1d9f "cat dir/1mod/CVS/Repository" "mod1" 14502 # the usual for 1mod copy 14503 dotest cvsadm-1d9h "cat dir/1mod-2/CVS/Repository" "mod1-2" 14504 rm -rf CVS dir 14505 14506 # 1mod 2mod redmod bluemod 14507 dotest cvsadm-1d10 "${testcvs} co -d dir 1mod 2mod" \ 14508 "${SPROG} checkout: Updating dir/1mod 14509 U dir/1mod/file1 14510 ${SPROG} checkout: Updating dir/2mod 14511 U dir/2mod/file2" 14512 dotest cvsadm-1d10b "cat CVS/Repository" "\." 14513 # the usual for the dir level 14514 dotest cvsadm-1d10d "cat dir/CVS/Repository" "\." 14515 # the usual for 1mod 14516 dotest cvsadm-1d10f "cat dir/1mod/CVS/Repository" "mod1" 14517 # the usual for 2dmod 14518 dotest cvsadm-1d10h "cat dir/2mod/CVS/Repository" "mod2/sub2" 14519 rm -rf CVS dir 14520 14521 dotest cvsadm-1d11 "${testcvs} co -d dir 1mod 1d1mod" \ 14522 "${SPROG} checkout: Updating dir/1mod 14523 U dir/1mod/file1 14524 ${SPROG} checkout: Updating dir/dir1d1 14525 U dir/dir1d1/file1" 14526 dotest cvsadm-1d11b "cat CVS/Repository" "\." 14527 # the usual for the dir level 14528 dotest cvsadm-1d11d "cat dir/CVS/Repository" "\." 14529 # the usual for 1mod 14530 dotest cvsadm-1d11f "cat dir/1mod/CVS/Repository" "mod1" 14531 # the usual for 1d1mod 14532 dotest cvsadm-1d11h "cat dir/dir1d1/CVS/Repository" "mod1" 14533 rm -rf CVS dir 14534 14535 dotest cvsadm-1d12 "${testcvs} co -d dir 1mod 1d2mod" \ 14536 "${SPROG} checkout: Updating dir/1mod 14537 U dir/1mod/file1 14538 ${SPROG} checkout: Updating dir/dir1d2 14539 U dir/dir1d2/file2" 14540 dotest cvsadm-1d12b "cat CVS/Repository" "\." 14541 # the usual for the dir level 14542 dotest cvsadm-1d12d "cat dir/CVS/Repository" "\." 14543 # the usual for 1mod 14544 dotest cvsadm-1d12f "cat dir/1mod/CVS/Repository" "mod1" 14545 # the usual for 1d2mod 14546 dotest cvsadm-1d12h "cat dir/dir1d2/CVS/Repository" "mod2/sub2" 14547 rm -rf CVS dir 14548 14549 dotest cvsadm-1d13 "${testcvs} co -d dir 1mod 2d1mod" \ 14550 "${SPROG} checkout: Updating dir/1mod 14551 U dir/1mod/file1 14552 ${SPROG} checkout: Updating dir/dir2d1/sub2d1 14553 U dir/dir2d1/sub2d1/file1" 14554 dotest cvsadm-1d13b "cat CVS/Repository" "\." 14555 # the usual for the dir level 14556 dotest cvsadm-1d13d "cat dir/CVS/Repository" "\." 14557 # the usual for 1mod 14558 dotest cvsadm-1d13f "cat dir/1mod/CVS/Repository" "mod1" 14559 # the usual for 2d1mod 14560 dotest cvsadm-1d13h "cat dir/dir2d1/CVS/Repository" "\." 14561 dotest cvsadm-1d13j "cat dir/dir2d1/sub2d1/CVS/Repository" "mod1" 14562 rm -rf CVS dir 14563 14564 dotest cvsadm-1d14 "${testcvs} co -d dir 1mod 2d2mod" \ 14565 "${SPROG} checkout: Updating dir/1mod 14566 U dir/1mod/file1 14567 ${SPROG} checkout: Updating dir/dir2d2/sub2d2 14568 U dir/dir2d2/sub2d2/file2" 14569 dotest cvsadm-1d14b "cat CVS/Repository" "\." 14570 # the usual for the dir level 14571 dotest cvsadm-1d14d "cat dir/CVS/Repository" "\." 14572 # the usual for 1mod 14573 dotest cvsadm-1d14f "cat dir/1mod/CVS/Repository" "mod1" 14574 # the usual for 2d2mod 14575 dotest cvsadm-1d14h "cat dir/dir2d2/CVS/Repository" "mod2" 14576 dotest cvsadm-1d14j "cat dir/dir2d2/sub2d2/CVS/Repository" "mod2/sub2" 14577 rm -rf CVS dir 14578 14579 14580 ### 2mod 14581 14582 dotest cvsadm-1d15 "${testcvs} co -d dir 2mod 2mod-2" \ 14583 "${SPROG} checkout: Updating dir/2mod 14584 U dir/2mod/file2 14585 ${SPROG} checkout: Updating dir/2mod-2 14586 U dir/2mod-2/file2-2" 14587 dotest cvsadm-1d15b "cat CVS/Repository" "\." 14588 # the usual for the dir level 14589 dotest cvsadm-1d15d "cat dir/CVS/Repository" "mod2" 14590 # the usual for 2mod 14591 dotest cvsadm-1d15f "cat dir/2mod/CVS/Repository" "mod2/sub2" 14592 # the usual for 2mod copy 14593 dotest cvsadm-1d15h "cat dir/2mod-2/CVS/Repository" "mod2-2/sub2-2" 14594 rm -rf CVS dir 14595 14596 dotest cvsadm-1d16 "${testcvs} co -d dir 2mod 1d1mod" \ 14597 "${SPROG} checkout: Updating dir/2mod 14598 U dir/2mod/file2 14599 ${SPROG} checkout: Updating dir/dir1d1 14600 U dir/dir1d1/file1" 14601 dotest cvsadm-1d16b "cat CVS/Repository" "\." 14602 # the usual for the dir level 14603 dotest cvsadm-1d16d "cat dir/CVS/Repository" "mod2" 14604 # the usual for 2mod 14605 dotest cvsadm-1d16f "cat dir/2mod/CVS/Repository" "mod2/sub2" 14606 # the usual for 1d1mod 14607 dotest cvsadm-1d16h "cat dir/dir1d1/CVS/Repository" "mod1" 14608 rm -rf CVS dir 14609 14610 dotest cvsadm-1d17 "${testcvs} co -d dir 2mod 1d2mod" \ 14611 "${SPROG} checkout: Updating dir/2mod 14612 U dir/2mod/file2 14613 ${SPROG} checkout: Updating dir/dir1d2 14614 U dir/dir1d2/file2" 14615 dotest cvsadm-1d17b "cat CVS/Repository" "\." 14616 # the usual for the dir level 14617 dotest cvsadm-1d17d "cat dir/CVS/Repository" "mod2" 14618 # the usual for 2mod 14619 dotest cvsadm-1d17f "cat dir/2mod/CVS/Repository" "mod2/sub2" 14620 # the usual for 1d2mod 14621 dotest cvsadm-1d17h "cat dir/dir1d2/CVS/Repository" "mod2/sub2" 14622 rm -rf CVS dir 14623 14624 dotest cvsadm-1d18 "${testcvs} co -d dir 2mod 2d1mod" \ 14625 "${SPROG} checkout: Updating dir/2mod 14626 U dir/2mod/file2 14627 ${SPROG} checkout: Updating dir/dir2d1/sub2d1 14628 U dir/dir2d1/sub2d1/file1" 14629 dotest cvsadm-1d18b "cat CVS/Repository" "\." 14630 # the usual for the dir level 14631 dotest cvsadm-1d18d "cat dir/CVS/Repository" "mod2" 14632 # the usual for 2mod 14633 dotest cvsadm-1d18f "cat dir/2mod/CVS/Repository" "mod2/sub2" 14634 # the usual for 2d1mod 14635 dotest cvsadm-1d18h "cat dir/dir2d1/CVS/Repository" "\." 14636 dotest cvsadm-1d18j "cat dir/dir2d1/sub2d1/CVS/Repository" "mod1" 14637 rm -rf CVS dir 14638 14639 dotest cvsadm-1d19 "${testcvs} co -d dir 2mod 2d2mod" \ 14640 "${SPROG} checkout: Updating dir/2mod 14641 U dir/2mod/file2 14642 ${SPROG} checkout: Updating dir/dir2d2/sub2d2 14643 U dir/dir2d2/sub2d2/file2" 14644 dotest cvsadm-1d19b "cat CVS/Repository" "\." 14645 # the usual for the dir level 14646 dotest cvsadm-1d19d "cat dir/CVS/Repository" "mod2" 14647 # the usual for 2mod 14648 dotest cvsadm-1d19f "cat dir/2mod/CVS/Repository" "mod2/sub2" 14649 # the usual for 2d2mod 14650 dotest cvsadm-1d19h "cat dir/dir2d2/CVS/Repository" "mod2" 14651 dotest cvsadm-1d19j "cat dir/dir2d2/sub2d2/CVS/Repository" "mod2/sub2" 14652 rm -rf CVS dir 14653 14654 14655 ### 1d1mod 14656 14657 dotest cvsadm-1d20 "${testcvs} co -d dir 1d1mod 1d1mod-2" \ 14658 "${SPROG} checkout: Updating dir/dir1d1 14659 U dir/dir1d1/file1 14660 ${SPROG} checkout: Updating dir/dir1d1-2 14661 U dir/dir1d1-2/file1-2" 14662 dotest cvsadm-1d20b "cat CVS/Repository" "\." 14663 # the usual for the dir level 14664 dotest cvsadm-1d20d "cat dir/CVS/Repository" "\." 14665 # the usual for 1d1mod 14666 dotest cvsadm-1d20f "cat dir/dir1d1/CVS/Repository" "mod1" 14667 # the usual for 1d1mod copy 14668 dotest cvsadm-1d20h "cat dir/dir1d1-2/CVS/Repository" "mod1-2" 14669 rm -rf CVS dir 14670 14671 dotest cvsadm-1d21 "${testcvs} co -d dir 1d1mod 1d2mod" \ 14672 "${SPROG} checkout: Updating dir/dir1d1 14673 U dir/dir1d1/file1 14674 ${SPROG} checkout: Updating dir/dir1d2 14675 U dir/dir1d2/file2" 14676 dotest cvsadm-1d21b "cat CVS/Repository" "\." 14677 # the usual for the dir level 14678 dotest cvsadm-1d21d "cat dir/CVS/Repository" "\." 14679 # the usual for 1d1mod 14680 dotest cvsadm-1d21f "cat dir/dir1d1/CVS/Repository" "mod1" 14681 # the usual for 1d2mod 14682 dotest cvsadm-1d21h "cat dir/dir1d2/CVS/Repository" "mod2/sub2" 14683 rm -rf CVS dir 14684 14685 dotest cvsadm-1d22 "${testcvs} co -d dir 1d1mod 2d1mod" \ 14686 "${SPROG} checkout: Updating dir/dir1d1 14687 U dir/dir1d1/file1 14688 ${SPROG} checkout: Updating dir/dir2d1/sub2d1 14689 U dir/dir2d1/sub2d1/file1" 14690 dotest cvsadm-1d22b "cat CVS/Repository" "\." 14691 # the usual for the dir level 14692 dotest cvsadm-1d22d "cat dir/CVS/Repository" "\." 14693 # the usual for 1d1mod 14694 dotest cvsadm-1d22f "cat dir/dir1d1/CVS/Repository" "mod1" 14695 # the usual for 2d1mod 14696 dotest cvsadm-1d22h "cat dir/dir2d1/CVS/Repository" "\." 14697 dotest cvsadm-1d22j "cat dir/dir2d1/sub2d1/CVS/Repository" "mod1" 14698 rm -rf CVS dir 14699 14700 dotest cvsadm-1d23 "${testcvs} co -d dir 1d1mod 2d2mod" \ 14701 "${SPROG} checkout: Updating dir/dir1d1 14702 U dir/dir1d1/file1 14703 ${SPROG} checkout: Updating dir/dir2d2/sub2d2 14704 U dir/dir2d2/sub2d2/file2" 14705 dotest cvsadm-1d23b "cat CVS/Repository" "\." 14706 # the usual for the dir level 14707 dotest cvsadm-1d23d "cat dir/CVS/Repository" "\." 14708 # the usual for 1d1mod 14709 dotest cvsadm-1d23f "cat dir/dir1d1/CVS/Repository" "mod1" 14710 # the usual for 2d2mod 14711 dotest cvsadm-1d23h "cat dir/dir2d2/CVS/Repository" "mod2" 14712 dotest cvsadm-1d23j "cat dir/dir2d2/sub2d2/CVS/Repository" "mod2/sub2" 14713 rm -rf CVS dir 14714 14715 14716 ### 1d2mod 14717 14718 dotest cvsadm-1d24 "${testcvs} co -d dir 1d2mod 1d2mod-2" \ 14719 "${SPROG} checkout: Updating dir/dir1d2 14720 U dir/dir1d2/file2 14721 ${SPROG} checkout: Updating dir/dir1d2-2 14722 U dir/dir1d2-2/file2-2" 14723 dotest cvsadm-1d24b "cat CVS/Repository" "\." 14724 # the usual for the dir level 14725 dotest cvsadm-1d24d "cat dir/CVS/Repository" "mod2" 14726 # the usual for 1d2mod 14727 dotest cvsadm-1d24f "cat dir/dir1d2/CVS/Repository" "mod2/sub2" 14728 # the usual for 1d2mod copy 14729 dotest cvsadm-1d24h "cat dir/dir1d2-2/CVS/Repository" "mod2-2/sub2-2" 14730 rm -rf CVS dir 14731 14732 dotest cvsadm-1d25 "${testcvs} co -d dir 1d2mod 2d1mod" \ 14733 "${SPROG} checkout: Updating dir/dir1d2 14734 U dir/dir1d2/file2 14735 ${SPROG} checkout: Updating dir/dir2d1/sub2d1 14736 U dir/dir2d1/sub2d1/file1" 14737 dotest cvsadm-1d25b "cat CVS/Repository" "\." 14738 # the usual for the dir level 14739 dotest cvsadm-1d25d "cat dir/CVS/Repository" "mod2" 14740 # the usual for 1d2mod 14741 dotest cvsadm-1d25f "cat dir/dir1d2/CVS/Repository" "mod2/sub2" 14742 # the usual for 2d1mod 14743 dotest cvsadm-1d25h "cat dir/dir2d1/CVS/Repository" "\." 14744 dotest cvsadm-1d25j "cat dir/dir2d1/sub2d1/CVS/Repository" "mod1" 14745 rm -rf CVS dir 14746 14747 dotest cvsadm-1d26 "${testcvs} co -d dir 1d2mod 2d2mod" \ 14748 "${SPROG} checkout: Updating dir/dir1d2 14749 U dir/dir1d2/file2 14750 ${SPROG} checkout: Updating dir/dir2d2/sub2d2 14751 U dir/dir2d2/sub2d2/file2" 14752 dotest cvsadm-1d26b "cat CVS/Repository" "\." 14753 # the usual for the dir level 14754 dotest cvsadm-1d26d "cat dir/CVS/Repository" "mod2" 14755 # the usual for 1d2mod 14756 dotest cvsadm-1d26f "cat dir/dir1d2/CVS/Repository" "mod2/sub2" 14757 # the usual for 2d2mod 14758 dotest cvsadm-1d26h "cat dir/dir2d2/CVS/Repository" "mod2" 14759 dotest cvsadm-1d26j "cat dir/dir2d2/sub2d2/CVS/Repository" "mod2/sub2" 14760 rm -rf CVS dir 14761 14762 14763 # 2d1mod 14764 14765 dotest cvsadm-1d27 "${testcvs} co -d dir 2d1mod 2d1mod-2" \ 14766 "${SPROG} checkout: Updating dir/dir2d1/sub2d1 14767 U dir/dir2d1/sub2d1/file1 14768 ${SPROG} checkout: Updating dir/dir2d1-2/sub2d1-2 14769 U dir/dir2d1-2/sub2d1-2/file1-2" 14770 dotest cvsadm-1d27b "cat CVS/Repository" "\." 14771 # the usual for the dir level 14772 dotest cvsadm-1d27d "cat dir/CVS/Repository" "CVSROOT/Emptydir" 14773 # the usual for 2d1mod 14774 dotest cvsadm-1d27f "cat dir/dir2d1/CVS/Repository" "\." 14775 dotest cvsadm-1d27h "cat dir/dir2d1/sub2d1/CVS/Repository" "mod1" 14776 # the usual for 2d1mod 14777 dotest cvsadm-1d27j "cat dir/dir2d1-2/CVS/Repository" "\." 14778 dotest cvsadm-1d27l "cat dir/dir2d1-2/sub2d1-2/CVS/Repository" \ 14779 "mod1-2" 14780 rm -rf CVS dir 14781 14782 dotest cvsadm-1d28 "${testcvs} co -d dir 2d1mod 2d2mod" \ 14783 "${SPROG} checkout: Updating dir/dir2d1/sub2d1 14784 U dir/dir2d1/sub2d1/file1 14785 ${SPROG} checkout: Updating dir/dir2d2/sub2d2 14786 U dir/dir2d2/sub2d2/file2" 14787 dotest cvsadm-1d28b "cat CVS/Repository" "\." 14788 # the usual for the dir level 14789 dotest cvsadm-1d28d "cat dir/CVS/Repository" "CVSROOT/Emptydir" 14790 # the usual for 2d1mod 14791 dotest cvsadm-1d28f "cat dir/dir2d1/CVS/Repository" "\." 14792 dotest cvsadm-1d28h "cat dir/dir2d1/sub2d1/CVS/Repository" "mod1" 14793 # the usual for 2d2mod 14794 dotest cvsadm-1d28j "cat dir/dir2d2/CVS/Repository" "mod2" 14795 dotest cvsadm-1d28l "cat dir/dir2d2/sub2d2/CVS/Repository" "mod2/sub2" 14796 rm -rf CVS dir 14797 14798 14799 # 2d2mod 14800 14801 dotest cvsadm-1d29 "${testcvs} co -d dir 2d2mod 2d2mod-2" \ 14802 "${SPROG} checkout: Updating dir/dir2d2/sub2d2 14803 U dir/dir2d2/sub2d2/file2 14804 ${SPROG} checkout: Updating dir/dir2d2-2/sub2d2-2 14805 U dir/dir2d2-2/sub2d2-2/file2-2" 14806 dotest cvsadm-1d29b "cat CVS/Repository" "\." 14807 # the usual for the dir level 14808 dotest cvsadm-1d29d "cat dir/CVS/Repository" "\." 14809 # the usual for 2d2mod 14810 dotest cvsadm-1d29f "cat dir/dir2d2/CVS/Repository" "mod2" 14811 dotest cvsadm-1d29h "cat dir/dir2d2/sub2d2/CVS/Repository" "mod2/sub2" 14812 # the usual for 2d2mod 14813 dotest cvsadm-1d29j "cat dir/dir2d2-2/CVS/Repository" "mod2-2" 14814 dotest cvsadm-1d29l "cat dir/dir2d2-2/sub2d2-2/CVS/Repository" \ 14815 "mod2-2/sub2-2" 14816 rm -rf CVS dir 14817 14818 ################################################## 14819 ## And now, some of that again using the "-d" flag 14820 ## on the command line, but use a longer path. 14821 ################################################## 14822 14823 dotest cvsadm-2d3-1 "$testcvs co -d dir/dir2 1mod" \ 14824 "$SPROG checkout: Updating dir/dir2 14825 U dir/dir2/file1" 14826 14827 # Remote couldn't handle this, even with the "mkdir dir", before 14828 # CVS 1.11.14. 14829 dotest cvsadm-2d3b "cat CVS/Repository" "\." 14830 dotest cvsadm-2d3d "cat dir/CVS/Repository" "." 14831 dotest cvsadm-2d3f "cat dir/dir2/CVS/Repository" "mod1" 14832 rm -rf CVS dir 14833 14834 mkdir dir 14835 dotest cvsadm-2d4 "$testcvs co -d dir/dir2 2mod" \ 14836 "$SPROG checkout: Updating dir/dir2 14837 U dir/dir2/file2" 14838 dotest cvsadm-2d4b "cat CVS/Repository" "\." 14839 dotest cvsadm-2d4f "cat dir/dir2/CVS/Repository" "mod2/sub2" 14840 rm -rf CVS dir 14841 14842 mkdir dir 14843 dotest cvsadm-2d5 "$testcvs co -d dir/dir2 1d1mod" \ 14844 "$SPROG checkout: Updating dir/dir2 14845 U dir/dir2/file1" 14846 dotest cvsadm-2d5b "cat CVS/Repository" "\." 14847 dotest cvsadm-2d5f "cat dir/dir2/CVS/Repository" "mod1" 14848 rm -rf CVS dir 14849 14850 mkdir dir 14851 dotest cvsadm-2d6 "$testcvs co -d dir/dir2 1d2mod" \ 14852 "$SPROG checkout: Updating dir/dir2 14853 U dir/dir2/file2" 14854 dotest cvsadm-2d6b "cat CVS/Repository" "\." 14855 dotest cvsadm-2d6f "cat dir/dir2/CVS/Repository" "mod2/sub2" 14856 rm -rf CVS dir 14857 14858 mkdir dir 14859 dotest cvsadm-2d7 "$testcvs co -d dir/dir2 2d1mod" \ 14860 "$SPROG checkout: Updating dir/dir2 14861 U dir/dir2/file1" 14862 dotest cvsadm-2d7b "cat CVS/Repository" "\." 14863 dotest cvsadm-2d7f "cat dir/dir2/CVS/Repository" "mod1" 14864 rm -rf CVS dir 14865 14866 mkdir dir 14867 dotest cvsadm-2d8 "$testcvs co -d dir/dir2 2d2mod" \ 14868 "$SPROG checkout: Updating dir/dir2 14869 U dir/dir2/file2" 14870 dotest cvsadm-2d8b "cat CVS/Repository" "\." 14871 dotest cvsadm-2d8f "cat dir/dir2/CVS/Repository" "mod2/sub2" 14872 rm -rf CVS dir 14873 14874 ################################################## 14875 ## And now, a few of those tests revisited to 14876 ## test the behavior of the -N flag. 14877 ################################################## 14878 14879 dotest cvsadm-N3 "$testcvs co -N 1mod" \ 14880 "$SPROG checkout: Updating 1mod 14881 U 1mod/file1" 14882 dotest cvsadm-N3b "cat CVS/Repository" "\." 14883 dotest cvsadm-N3d "cat 1mod/CVS/Repository" "mod1" 14884 rm -rf CVS 1mod 14885 14886 dotest cvsadm-N4 "$testcvs co -N 2mod" \ 14887 "$SPROG checkout: Updating 2mod 14888 U 2mod/file2" 14889 dotest cvsadm-N4b "cat CVS/Repository" "\." 14890 dotest cvsadm-N4d "cat 2mod/CVS/Repository" "mod2/sub2" 14891 rm -rf CVS 2mod 14892 14893 dotest cvsadm-N5 "$testcvs co -N 1d1mod" \ 14894 "$SPROG checkout: Updating dir1d1 14895 U dir1d1/file1" 14896 dotest cvsadm-N5b "cat CVS/Repository" "\." 14897 dotest cvsadm-N5d "cat dir1d1/CVS/Repository" "mod1" 14898 rm -rf CVS dir1d1 14899 14900 dotest cvsadm-N6 "$testcvs co -N 1d2mod" \ 14901 "$SPROG checkout: Updating dir1d2 14902 U dir1d2/file2" 14903 dotest cvsadm-N6b "cat CVS/Repository" "\." 14904 dotest cvsadm-N6d "cat dir1d2/CVS/Repository" "mod2/sub2" 14905 rm -rf CVS dir1d2 14906 14907 dotest cvsadm-N7 "$testcvs co -N 2d1mod" \ 14908 "$SPROG checkout: Updating dir2d1/sub2d1 14909 U dir2d1/sub2d1/file1" 14910 dotest cvsadm-N7b "cat CVS/Repository" "\." 14911 dotest cvsadm-N7d "cat dir2d1/CVS/Repository" "\." 14912 dotest cvsadm-N7f "cat dir2d1/sub2d1/CVS/Repository" "mod1" 14913 rm -rf CVS dir2d1 14914 14915 dotest cvsadm-N8 "$testcvs co -N 2d2mod" \ 14916 "$SPROG checkout: Updating dir2d2/sub2d2 14917 U dir2d2/sub2d2/file2" 14918 dotest cvsadm-N8b "cat CVS/Repository" "\." 14919 dotest cvsadm-N8d "cat dir2d2/CVS/Repository" "mod2" 14920 dotest cvsadm-N8f "cat dir2d2/sub2d2/CVS/Repository" "mod2/sub2" 14921 rm -rf CVS dir2d2 14922 14923 ## the ones in one-deep directories 14924 14925 dotest cvsadm-N1d3 "$testcvs co -N -d dir 1mod" \ 14926 "$SPROG checkout: Updating dir/1mod 14927 U dir/1mod/file1" 14928 dotest cvsadm-N1d3b "cat CVS/Repository" "\." 14929 dotest cvsadm-N1d3d "cat dir/CVS/Repository" "\." 14930 dotest cvsadm-N1d3f "cat dir/1mod/CVS/Repository" "mod1" 14931 rm -rf CVS dir 14932 14933 dotest cvsadm-N1d4 "$testcvs co -N -d dir 2mod" \ 14934 "$SPROG checkout: Updating dir/2mod 14935 U dir/2mod/file2" 14936 dotest cvsadm-N1d4b "cat CVS/Repository" "\." 14937 dotest cvsadm-N1d4d "cat dir/CVS/Repository" "mod2" 14938 dotest cvsadm-N1d4f "cat dir/2mod/CVS/Repository" "mod2/sub2" 14939 rm -rf CVS dir 14940 14941 dotest cvsadm-N1d5 "$testcvs co -N -d dir 1d1mod" \ 14942 "$SPROG checkout: Updating dir/dir1d1 14943 U dir/dir1d1/file1" 14944 dotest cvsadm-N1d5b "cat CVS/Repository" "\." 14945 dotest cvsadm-N1d5d "cat dir/CVS/Repository" "\." 14946 dotest cvsadm-N1d5d "cat dir/dir1d1/CVS/Repository" "mod1" 14947 rm -rf CVS dir 14948 14949 dotest cvsadm-N1d6 "$testcvs co -N -d dir 1d2mod" \ 14950 "$SPROG checkout: Updating dir/dir1d2 14951 U dir/dir1d2/file2" 14952 dotest cvsadm-N1d6b "cat CVS/Repository" "\." 14953 dotest cvsadm-N1d6d "cat dir/CVS/Repository" "mod2" 14954 dotest cvsadm-N1d6f "cat dir/dir1d2/CVS/Repository" "mod2/sub2" 14955 rm -rf CVS dir 14956 14957 dotest cvsadm-N1d7 "$testcvs co -N -d dir 2d1mod" \ 14958 "$SPROG checkout: Updating dir/dir2d1/sub2d1 14959 U dir/dir2d1/sub2d1/file1" 14960 dotest cvsadm-N1d7b "cat CVS/Repository" "\." 14961 dotest cvsadm-N1d7d "cat dir/CVS/Repository" "CVSROOT/Emptydir" 14962 dotest cvsadm-N1d7f "cat dir/dir2d1/CVS/Repository" "\." 14963 dotest cvsadm-N1d7h "cat dir/dir2d1/sub2d1/CVS/Repository" "mod1" 14964 rm -rf CVS dir 14965 14966 dotest cvsadm-N1d8 "$testcvs co -N -d dir 2d2mod" \ 14967 "$SPROG checkout: Updating dir/dir2d2/sub2d2 14968 U dir/dir2d2/sub2d2/file2" 14969 dotest cvsadm-N1d8b "cat CVS/Repository" "\." 14970 dotest cvsadm-N1d8d "cat dir/CVS/Repository" "\." 14971 dotest cvsadm-N1d8d "cat dir/dir2d2/CVS/Repository" "mod2" 14972 dotest cvsadm-N1d8d "cat dir/dir2d2/sub2d2/CVS/Repository" \ 14973 "mod2/sub2" 14974 rm -rf CVS dir 14975 14976 ## the ones in two-deep directories 14977 14978 mkdir dir 14979 dotest cvsadm-N2d3 "$testcvs co -N -d dir/dir2 1mod" \ 14980 "$SPROG checkout: Updating dir/dir2/1mod 14981 U dir/dir2/1mod/file1" 14982 dotest cvsadm-N2d3b "cat CVS/Repository" "\." 14983 dotest cvsadm-N2d3f "cat dir/dir2/CVS/Repository" "\." 14984 dotest cvsadm-N2d3h "cat dir/dir2/1mod/CVS/Repository" "mod1" 14985 rm -rf CVS dir 14986 14987 mkdir dir 14988 dotest cvsadm-N2d4 "$testcvs co -N -d dir/dir2 2mod" \ 14989 "$SPROG checkout: Updating dir/dir2/2mod 14990 U dir/dir2/2mod/file2" 14991 dotest cvsadm-N2d4b "cat CVS/Repository" "\." 14992 dotest cvsadm-N2d4f "cat dir/dir2/CVS/Repository" "mod2" 14993 dotest cvsadm-N2d4h "cat dir/dir2/2mod/CVS/Repository" "mod2/sub2" 14994 rm -rf CVS dir 14995 14996 mkdir dir 14997 dotest cvsadm-N2d5 "$testcvs co -N -d dir/dir2 1d1mod" \ 14998 "$SPROG checkout: Updating dir/dir2/dir1d1 14999 U dir/dir2/dir1d1/file1" 15000 dotest cvsadm-N2d5b "cat CVS/Repository" "\." 15001 dotest cvsadm-N2d5f "cat dir/dir2/CVS/Repository" "\." 15002 dotest cvsadm-N2d5h "cat dir/dir2/dir1d1/CVS/Repository" "mod1" 15003 rm -rf CVS dir 15004 15005 mkdir dir 15006 dotest cvsadm-N2d6 "$testcvs co -N -d dir/dir2 1d2mod" \ 15007 "$SPROG checkout: Updating dir/dir2/dir1d2 15008 U dir/dir2/dir1d2/file2" 15009 dotest cvsadm-N2d6b "cat CVS/Repository" "\." 15010 dotest cvsadm-N2d6f "cat dir/dir2/CVS/Repository" "mod2" 15011 dotest cvsadm-N2d6h "cat dir/dir2/dir1d2/CVS/Repository" "mod2/sub2" 15012 rm -rf CVS dir 15013 15014 mkdir dir 15015 dotest cvsadm-N2d7 "$testcvs co -N -d dir/dir2 2d1mod" \ 15016 "$SPROG checkout: Updating dir/dir2/dir2d1/sub2d1 15017 U dir/dir2/dir2d1/sub2d1/file1" 15018 dotest cvsadm-N2d7b "cat CVS/Repository" "\." 15019 dotest cvsadm-N2d7f "cat dir/dir2/CVS/Repository" "CVSROOT/Emptydir" 15020 dotest cvsadm-N2d7g "cat dir/dir2/dir2d1/CVS/Repository" "\." 15021 dotest cvsadm-N2d7h "cat dir/dir2/dir2d1/sub2d1/CVS/Repository" \ 15022 "mod1" 15023 rm -rf CVS dir 15024 15025 mkdir dir 15026 dotest cvsadm-N2d8 "$testcvs co -N -d dir/dir2 2d2mod" \ 15027 "$SPROG checkout: Updating dir/dir2/dir2d2/sub2d2 15028 U dir/dir2/dir2d2/sub2d2/file2" 15029 dotest cvsadm-N2d8b "cat CVS/Repository" "\." 15030 dotest cvsadm-N2d8f "cat dir/dir2/CVS/Repository" "\." 15031 dotest cvsadm-N2d8h "cat dir/dir2/dir2d2/CVS/Repository" "mod2" 15032 dotest cvsadm-N2d8j "cat dir/dir2/dir2d2/sub2d2/CVS/Repository" \ 15033 "mod2/sub2" 15034 rm -rf CVS dir 15035 # End of test that didn't work for remote prior to CVS 1.11.14. 15036 15037 ################################################## 15038 ## That's enough of that, thank you very much. 15039 ################################################## 15040 15041 dokeep 15042 restore_adm 15043 15044 # remove our junk 15045 cd .. 15046 rm -r 1 15047 modify_repo rm -rf $CVSROOT_DIRNAME/1mod $CVSROOT_DIRNAME/1mod-2 \ 15048 $CVSROOT_DIRNAME/2mod $CVSROOT_DIRNAME/2mod-2 \ 15049 $CVSROOT_DIRNAME/mod1 $CVSROOT_DIRNAME/mod1-2 \ 15050 $CVSROOT_DIRNAME/mod2 $CVSROOT_DIRNAME/mod2-2 15051 ;; 15052 15053 15054 15055 emptydir) 15056 # Various tests of the Emptydir (CVSNULLREPOS) code. See also: 15057 # cvsadm: tests of Emptydir in various module definitions 15058 # basicb: Test that "Emptydir" is non-special in ordinary contexts 15059 15060 mkdir 1; cd 1 15061 dotest emptydir-1 "${testcvs} co CVSROOT/modules" \ 15062 "U CVSROOT/modules" 15063 echo "# Module defs for emptydir tests" > CVSROOT/modules 15064 echo "2d1mod -d dir2d1/sub/sub2d1 mod1" >> CVSROOT/modules 15065 echo "2d1moda -d dir2d1/suba moda/modasub" >> CVSROOT/modules 15066 echo "2d1modb -d dir2d1/suba mod1" >> CVSROOT/modules 15067 echo "comb -a 2d1modb 2d1moda" >> CVSROOT/modules 15068 15069 dotest emptydir-2 "${testcvs} ci -m add-modules" \ 15070 "${CPROG} commit: Examining CVSROOT 15071 ${CVSROOT_DIRNAME}/CVSROOT/modules,v <-- CVSROOT/modules 15072 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 15073 ${SPROG} commit: Rebuilding administrative file database" \ 15074 "${CPROG} commit: Examining CVSROOT" 15075 rm -rf CVS CVSROOT 15076 15077 modify_repo mkdir $CVSROOT_DIRNAME/mod1 $CVSROOT_DIRNAME/moda 15078 # Populate. Not sure we really need to do this. 15079 dotest emptydir-3 "$testcvs -q co -l ." 15080 dotest emptydir-3a "${testcvs} co mod1 moda" \ 15081 "${SPROG} checkout: Updating mod1 15082 ${SPROG} checkout: Updating moda" 15083 echo "file1" > mod1/file1 15084 mkdir moda/modasub 15085 dotest emptydir-3b "${testcvs} add moda/modasub" \ 15086 "Directory ${CVSROOT_DIRNAME}/moda/modasub added to the repository" 15087 echo "filea" > moda/modasub/filea 15088 dotest emptydir-4 "${testcvs} add mod1/file1 moda/modasub/filea" \ 15089 "${SPROG} add: scheduling file .mod1/file1. for addition 15090 ${SPROG} add: scheduling file .moda/modasub/filea. for addition 15091 ${SPROG} add: use \`${SPROG} commit' to add these files permanently" 15092 dotest emptydir-5 "${testcvs} -q ci -m yup" \ 15093 "$CVSROOT_DIRNAME/mod1/file1,v <-- mod1/file1 15094 initial revision: 1\.1 15095 ${CVSROOT_DIRNAME}/moda/modasub/filea,v <-- moda/modasub/filea 15096 initial revision: 1\.1" 15097 rm -rf mod1 moda CVS 15098 # End Populate. 15099 15100 dotest emptydir-6 "${testcvs} co 2d1mod" \ 15101 "${SPROG} checkout: Updating dir2d1/sub/sub2d1 15102 U dir2d1/sub/sub2d1/file1" 15103 cd dir2d1 15104 touch emptyfile 15105 # It doesn't make any sense to add a file (or do much of anything 15106 # else) in Emptydir; Emptydir is a placeholder indicating that 15107 # the working directory doesn't correspond to anything in 15108 # the repository. 15109 dotest_fail emptydir-7 "${testcvs} add emptyfile" \ 15110 "${SPROG} \[add aborted]: cannot add to \`${CVSROOT_DIRNAME}/CVSROOT/Emptydir'" 15111 mkdir emptydir 15112 dotest_fail emptydir-8 "${testcvs} add emptydir" \ 15113 "${CPROG} \[add aborted]: cannot add to \`${CVSROOT_DIRNAME}/CVSROOT/Emptydir'" 15114 cd .. 15115 rm -rf CVS dir2d1 15116 15117 # OK, while we have an Emptydir around, test a few obscure 15118 # things about it. 15119 mkdir edir; cd edir 15120 dotest emptydir-9 "${testcvs} -q co -l CVSROOT" \ 15121 "U CVSROOT${DOTSTAR}" 15122 cd CVSROOT 15123 dotest_fail emptydir-10 "test -d Emptydir" '' 15124 # This tests the code in find_dirs which skips Emptydir. 15125 dotest emptydir-11 "${testcvs} -q -n update -d -P" '' 15126 cd ../.. 15127 rm -r edir 15128 cd .. 15129 15130 # Now start playing with moda. 15131 mkdir 2; cd 2 15132 dotest emptydir-12 "${testcvs} -q co 2d1moda" \ 15133 "U dir2d1/suba/filea" 15134 # OK, this is the crux of the matter. This used to show "Emptydir", 15135 # but everyone seemed to think it should show "moda". This 15136 # usually works better, but not always as shown by the following 15137 # test. 15138 dotest emptydir-13 "cat dir2d1/CVS/Repository" "moda" 15139 dotest_fail emptydir-14 "${testcvs} co comb" \ 15140 "${SPROG} checkout: existing repository ${CVSROOT_DIRNAME}/moda/modasub does not match ${CVSROOT_DIRNAME}/mod1 15141 ${SPROG} checkout: ignoring module 2d1modb 15142 ${SPROG} checkout: Updating dir2d1/suba" 15143 dotest emptydir-15 "cat dir2d1/CVS/Repository" "moda" 15144 cd .. 15145 15146 # Test the effect of a non-cvs directory already existing with the 15147 # same name as one in the modules file. 15148 mkdir 3; cd 3 15149 mkdir dir2d1 15150 dotest emptydir-16 "${testcvs} co 2d1mod" \ 15151 "${SPROG} checkout: Updating dir2d1/sub/sub2d1 15152 U dir2d1/sub/sub2d1/file1" 15153 15154 if $remote; then 15155 dotest emptydir-17 "cat dir2d1/CVS/Repository" "CVSROOT/Emptydir" 15156 else 15157 dotest_fail emptydir-17 "test -d dir2d1/CVS" 15158 fi 15159 15160 dokeep 15161 cd .. 15162 rm -r 1 2 3 15163 modify_repo rm -rf $CVSROOT_DIRNAME/mod1 $CVSROOT_DIRNAME/moda 15164 # I guess for the moment the convention is going to be 15165 # that we don't need to remove $CVSROOT_DIRNAME/CVSROOT/Emptydir 15166 ;; 15167 15168 15169 15170 abspath) 15171 15172 # These tests test the thituations thin thwitch thoo theck 15173 # things thout twith thabsolute thaths. Threally. 15174 15175 # 15176 # CHECKOUTS 15177 # 15178 15179 # Create a few modules to use 15180 modify_repo mkdir $CVSROOT_DIRNAME/mod1 $CVSROOT_DIRNAME/mod2 15181 dotest abspath-1a "${testcvs} co mod1 mod2" \ 15182 "${SPROG} checkout: Updating mod1 15183 ${SPROG} checkout: Updating mod2" 15184 15185 # Populate the module 15186 echo "file1" > mod1/file1 15187 echo "file2" > mod2/file2 15188 cd mod1 15189 dotest abspath-1ba "${testcvs} add file1" \ 15190 "${SPROG} add: scheduling file .file1. for addition 15191 ${SPROG} add: use \`${SPROG} commit' to add this file permanently" 15192 cd .. 15193 cd mod2 15194 dotest abspath-1bb "${testcvs} add file2" \ 15195 "${SPROG} add: scheduling file .file2. for addition 15196 ${SPROG} add: use \`${SPROG} commit' to add this file permanently" 15197 cd .. 15198 15199 dotest abspath-1c "${testcvs} ci -m yup mod1 mod2" \ 15200 "${CPROG} commit: Examining mod1 15201 ${CPROG} commit: Examining mod2 15202 ${CVSROOT_DIRNAME}/mod1/file1,v <-- mod1/file1 15203 initial revision: 1.1 15204 ${CVSROOT_DIRNAME}/mod2/file2,v <-- mod2/file2 15205 initial revision: 1.1" 15206 # Finished creating the module -- clean up. 15207 rm -rf CVS mod1 mod2 15208 # Done. 15209 15210 # Try checking out the module in a local directory 15211 if $remote; then 15212 dotest_fail abspath-2a "${testcvs} co -d ${TESTDIR}/1 mod1" \ 15213 "${SPROG} \[checkout aborted\]: absolute pathnames invalid for server (specified .${TESTDIR}/1.)" 15214 dotest abspath-2a-try2 "${testcvs} co -d 1 mod1" \ 15215 "${SPROG} checkout: Updating 1 15216 U 1/file1" 15217 else 15218 dotest abspath-2a "${testcvs} co -d ${TESTDIR}/1 mod1" \ 15219 "${SPROG} checkout: Updating ${TESTDIR}/1 15220 U ${TESTDIR}/1/file1" 15221 fi # remote workaround 15222 15223 dotest abspath-2b "cat ${TESTDIR}/1/CVS/Repository" "mod1" 15224 15225 # Done. Clean up. 15226 rm -r $TESTDIR/1 15227 15228 15229 # Now try in a subdirectory. We're not covering any more 15230 # code here, but we might catch a future error if someone 15231 # changes the checkout code. 15232 15233 # Since CVS 1.11.14, CVS will create leading directories specified 15234 # via co -d. 15235 # I am unsure that this wasn't the behavior prior to CVS 1.9, but the 15236 # comment that used to be here leads me to believe it was not. 15237 if $remote; then :; else 15238 dotest abspath-3.1 "$testcvs -q co -d $TESTDIR/1/2 mod1" \ 15239 "U $TESTDIR/1/2/file1" 15240 rm -r $TESTDIR/1 15241 fi 15242 dotest abspath-3.2 "$testcvs -q co -d 1/2 mod1" \ 15243 "U 1/2/file1" 15244 rm -r 1 15245 15246 # We don't to mess with an existing directory just to traverse it, 15247 # for example by creating a CVS directory, but currently we can't 15248 # avoid this in client/server mode. 15249 mkdir 1 15250 if $remote; then 15251 dotest abspath-3ar "$testcvs co -d 1/2 mod1" \ 15252 "$SPROG checkout: Updating 1/2 15253 U 1/2/file1" 15254 dotest abspath-3br "cat 1/CVS/Repository" . 15255 else 15256 dotest abspath-3a "$testcvs co -d $TESTDIR/1/2 mod1" \ 15257 "$SPROG checkout: Updating $TESTDIR/1/2 15258 U $TESTDIR/1/2/file1" 15259 dotest_fail abspath-3b "test -d ${TESTDIR}/1/CVS" 15260 fi 15261 15262 dotest abspath-3c "cat ${TESTDIR}/1/2/CVS/Repository" mod1 15263 15264 15265 # Done. Clean up. 15266 rm -rf ${TESTDIR}/1 15267 15268 15269 # Now try someplace where we don't have permission. 15270 mkdir ${TESTDIR}/barf 15271 chmod -w ${TESTDIR}/barf 15272 dotest_fail abspath-4r "${testcvs} co -d ${TESTDIR}/barf/sub mod1" \ 15273 "${SPROG} \[checkout aborted\]: cannot make directory sub: Permission denied" \ 15274 "${SPROG} \[checkout aborted\]: absolute pathnames invalid for server (specified .${TESTDIR}/barf/sub.)" 15275 chmod +w ${TESTDIR}/barf 15276 rmdir ${TESTDIR}/barf 15277 # Done. Nothing to clean up. 15278 15279 15280 # Try checking out two modules into the same directory. 15281 if $remote; then 15282 dotest abspath-5ar "${testcvs} co -d 1 mod1 mod2" \ 15283 "${SPROG} checkout: Updating 1/mod1 15284 U 1/mod1/file1 15285 ${SPROG} checkout: Updating 1/mod2 15286 U 1/mod2/file2" 15287 else 15288 dotest abspath-5a "${testcvs} co -d ${TESTDIR}/1 mod1 mod2" \ 15289 "${SPROG} checkout: Updating ${TESTDIR}/1/mod1 15290 U ${TESTDIR}/1/mod1/file1 15291 ${SPROG} checkout: Updating ${TESTDIR}/1/mod2 15292 U ${TESTDIR}/1/mod2/file2" 15293 fi # end remote workaround 15294 dotest abspath-5b "cat ${TESTDIR}/1/CVS/Repository" "\." 15295 dotest abspath-5c "cat ${TESTDIR}/1/mod1/CVS/Repository" "mod1" 15296 dotest abspath-5d "cat ${TESTDIR}/1/mod2/CVS/Repository" "mod2" 15297 # Done. Clean up. 15298 rm -rf $TESTDIR/1 15299 15300 15301 # Try checking out the top-level module. 15302 if $remote; then 15303 dotest abspath-6ar "$testcvs co -d 1 ." \ 15304 "$SPROG checkout: Updating 1 15305 $SPROG checkout: Updating 1/CVSROOT 15306 $DOTSTAR 15307 $SPROG checkout: Updating 1/mod1 15308 U 1/mod1/file1 15309 $SPROG checkout: Updating 1/mod2 15310 U 1/mod2/file2" 15311 else 15312 dotest abspath-6a "${testcvs} co -d ${TESTDIR}/1 ." \ 15313 "${SPROG} checkout: Updating ${TESTDIR}/1 15314 ${SPROG} checkout: Updating ${TESTDIR}/1/CVSROOT 15315 ${DOTSTAR} 15316 ${SPROG} checkout: Updating ${TESTDIR}/1/mod1 15317 U ${TESTDIR}/1/mod1/file1 15318 ${SPROG} checkout: Updating ${TESTDIR}/1/mod2 15319 U ${TESTDIR}/1/mod2/file2" 15320 fi # end of remote workaround 15321 dotest abspath-6b "cat ${TESTDIR}/1/CVS/Repository" "\." 15322 dotest abspath-6c "cat ${TESTDIR}/1/CVSROOT/CVS/Repository" "CVSROOT" 15323 dotest abspath-6c "cat ${TESTDIR}/1/mod1/CVS/Repository" "mod1" 15324 dotest abspath-6d "cat ${TESTDIR}/1/mod2/CVS/Repository" "mod2" 15325 # Done. Clean up. 15326 rm -rf ${TESTDIR}/1 15327 15328 # Test that an absolute pathname to some other directory 15329 # doesn't mess with the current working directory. 15330 mkdir 1 15331 cd 1 15332 if $remote; then 15333 dotest_fail abspath-7ar "${testcvs} -q co -d ../2 mod2" \ 15334 "${SPROG} checkout: protocol error: .\.\./2. contains more leading \.\. 15335 ${SPROG} \[checkout aborted\]: than the 0 which Max-dotdot specified" 15336 cd .. 15337 dotest abspath-7a-try2r "${testcvs} -q co -d 2 mod2" \ 15338 "U 2/file2" 15339 cd 1 15340 else 15341 dotest abspath-7a "${testcvs} -q co -d ${TESTDIR}/2 mod2" \ 15342 "U ${TESTDIR}/2/file2" 15343 fi # remote workaround 15344 dotest abspath-7b "ls" "" 15345 dotest abspath-7c "${testcvs} -q co mod1" \ 15346 "U mod1/file1" 15347 cd mod1 15348 if $remote; then 15349 cd ../.. 15350 dotest abspath-7dr "${testcvs} -q co -d 3 mod2" \ 15351 "U 3/file2" 15352 cd 1/mod1 15353 else 15354 dotest abspath-7d "${testcvs} -q co -d ${TESTDIR}/3 mod2" \ 15355 "U ${TESTDIR}/3/file2" 15356 fi # remote workaround 15357 dotest abspath-7e "${testcvs} -q update -d" 15358 15359 # 15360 # FIXME: do other functions here (e.g. update /tmp/foo) 15361 # 15362 15363 # Finished with all tests. Cleanup. 15364 dokeep 15365 cd ../.. 15366 rm -r 1 2 3 15367 modify_repo rm -rf $CVSROOT_DIRNAME/mod1 $CVSROOT_DIRNAME/mod2 15368 ;; 15369 15370 15371 15372 abspath2) 15373 # More absolute path checks. The following used to attempt to create 15374 # directories in /: 15375 # 15376 # $ cvs -d:fork:/cvsroot co /foo 15377 # cvs checkout: warning: cannot make directory CVS in /: Permission denied 15378 # cvs [checkout aborted]: cannot make directory /foo: Permission denied 15379 # $ 15380 # 15381 # The -z9 in this test also checks for an old server bug where the 15382 # server would block indefinitely attempting to read an EOF from the 15383 # client in the compression buffer shutdown routine. 15384 dotest_fail abspath2-1 "$testcvs -z9 co /foo" \ 15385 "$CPROG \[checkout aborted\]: Absolute module reference invalid: \`/foo'" \ 15386 "$SPROG \[server aborted\]: Absolute module reference invalid: \`/foo' 15387 $CPROG \[checkout aborted\]: end of file from server (consult above messages if any)" 15388 ;; 15389 15390 15391 15392 toplevel) 15393 # test the feature that cvs creates a CVS subdir also for 15394 # the toplevel directory 15395 15396 # First set the TopLevelAdmin setting. 15397 mkdir 1; cd 1 15398 dotest toplevel-1a "${testcvs} -q co CVSROOT/config" \ 15399 "U CVSROOT/config" 15400 cd CVSROOT 15401 echo "TopLevelAdmin=yes" >>config 15402 dotest toplevel-1b "${testcvs} -q ci -m yes-top-level" \ 15403 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 15404 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 15405 $SPROG commit: Rebuilding administrative file database" 15406 cd ../.. 15407 rm -r 1 15408 15409 mkdir 1; cd 1 15410 dotest toplevel-1 "${testcvs} -q co -l ." '' 15411 mkdir top-dir second-dir 15412 dotest toplevel-2 "${testcvs} add top-dir second-dir" \ 15413 "Directory ${CVSROOT_DIRNAME}/top-dir added to the repository 15414 Directory ${CVSROOT_DIRNAME}/second-dir added to the repository" 15415 cd top-dir 15416 15417 touch file1 15418 dotest toplevel-3 "${testcvs} add file1" \ 15419 "${SPROG} add: scheduling file .file1. for addition 15420 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 15421 dotest toplevel-4 "${testcvs} -q ci -m add" \ 15422 "$CVSROOT_DIRNAME/top-dir/file1,v <-- file1 15423 initial revision: 1\.1" 15424 cd .. 15425 15426 cd second-dir 15427 touch file2 15428 dotest toplevel-3s "${testcvs} add file2" \ 15429 "${SPROG} add: scheduling file .file2. for addition 15430 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 15431 dotest toplevel-4s "${testcvs} -q ci -m add" \ 15432 "$CVSROOT_DIRNAME/second-dir/file2,v <-- file2 15433 initial revision: 1\.1" 15434 15435 cd ../.. 15436 rm -r 1; mkdir 1; cd 1 15437 dotest toplevel-5 "${testcvs} co top-dir" \ 15438 "${SPROG} checkout: Updating top-dir 15439 U top-dir/file1" 15440 15441 dotest toplevel-6 "${testcvs} update top-dir" \ 15442 "${SPROG} update: Updating top-dir" 15443 dotest toplevel-7 "${testcvs} update" \ 15444 "${SPROG} update: Updating \. 15445 ${SPROG} update: Updating top-dir" 15446 15447 dotest toplevel-8 "${testcvs} update -d top-dir" \ 15448 "${SPROG} update: Updating top-dir" 15449 # There is some sentiment that 15450 # "${SPROG} update: Updating \. 15451 # ${SPROG} update: Updating top-dir" 15452 # is correct but it isn't clear why that would be correct instead 15453 # of the remote CVS behavior (which also updates CVSROOT). 15454 # 15455 # The DOTSTAR matches of a bunch of lines like 15456 # "U CVSROOT/checkoutlist". Trying to match them more precisely 15457 # seemed to cause trouble. For example CVSROOT/cvsignore will 15458 # be present or absent depending on whether we ran the "ignore" 15459 # test or not. 15460 dotest toplevel-9 "${testcvs} update -d" \ 15461 "${SPROG} update: Updating \. 15462 ${SPROG} update: Updating CVSROOT 15463 ${DOTSTAR} 15464 ${SPROG} update: Updating top-dir" 15465 15466 cd .. 15467 rm -r 1; mkdir 1; cd 1 15468 dotest toplevel-10 "${testcvs} co top-dir" \ 15469 "${SPROG} checkout: Updating top-dir 15470 U top-dir/file1" 15471 15472 # This tests more or less the same thing, in a particularly 15473 # "real life" example. 15474 dotest toplevel-11 "${testcvs} -q update -d second-dir" \ 15475 "U second-dir/file2" 15476 15477 # Now remove the CVS directory (people may do this manually, 15478 # especially if they formed their habits with CVS 15479 # 1.9 and older, which didn't create it. Or perhaps the working 15480 # directory itself was created with 1.9 or older). 15481 rm -r CVS 15482 # Now set the permissions so we can't recreate it. 15483 if test -n "$remotehost"; then 15484 # Cygwin again. 15485 $CVS_RSH $remotehost "chmod -w $TESTDIR/1" 15486 else 15487 chmod -w ../1 15488 fi 15489 # Now see whether CVS has trouble because it can't create CVS. 15490 # First string is for local, second is for remote. 15491 dotest toplevel-12 "${testcvs} co top-dir" \ 15492 "${SPROG} checkout: warning: cannot make directory CVS in \.: Permission denied 15493 ${SPROG} checkout: Updating top-dir" \ 15494 "${CPROG} checkout: warning: cannot make directory CVS in \.: Permission denied 15495 ${CPROG} checkout: in directory \.: 15496 ${CPROG} checkout: cannot open CVS/Entries for reading: No such file or directory 15497 ${SPROG} checkout: Updating top-dir" 15498 15499 chmod +w ../1 15500 15501 dokeep 15502 restore_adm 15503 cd .. 15504 rm -r 1 15505 modify_repo rm -rf $CVSROOT_DIRNAME/top-dir \ 15506 $CVSROOT_DIRNAME/second-dir 15507 ;; 15508 15509 15510 15511 toplevel2) 15512 # Similar to toplevel, but test the case where TopLevelAdmin=no. 15513 15514 # First set the TopLevelAdmin setting. 15515 mkdir 1; cd 1 15516 dotest toplevel2-1a "${testcvs} -q co CVSROOT/config" \ 15517 "U CVSROOT/config" 15518 cd CVSROOT 15519 echo "TopLevelAdmin=no" >>config 15520 dotest toplevel2-1b "$testcvs -q ci -m no-top-level" \ 15521 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 15522 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 15523 $SPROG commit: Rebuilding administrative file database" 15524 cd ../.. 15525 rm -r 1 15526 15527 # Now set up some directories and subdirectories 15528 mkdir 1; cd 1 15529 dotest toplevel2-1 "${testcvs} -q co -l ." '' 15530 mkdir top-dir second-dir 15531 dotest toplevel2-2 "${testcvs} add top-dir second-dir" \ 15532 "Directory ${CVSROOT_DIRNAME}/top-dir added to the repository 15533 Directory ${CVSROOT_DIRNAME}/second-dir added to the repository" 15534 cd top-dir 15535 15536 touch file1 15537 dotest toplevel2-3 "${testcvs} add file1" \ 15538 "${SPROG} add: scheduling file .file1. for addition 15539 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 15540 dotest toplevel2-4 "${testcvs} -q ci -m add" \ 15541 "$CVSROOT_DIRNAME/top-dir/file1,v <-- file1 15542 initial revision: 1\.1" 15543 cd .. 15544 15545 cd second-dir 15546 touch file2 15547 dotest toplevel2-3s "${testcvs} add file2" \ 15548 "${SPROG} add: scheduling file .file2. for addition 15549 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 15550 dotest toplevel2-4s "${testcvs} -q ci -m add" \ 15551 "$CVSROOT_DIRNAME/second-dir/file2,v <-- file2 15552 initial revision: 1\.1" 15553 15554 cd ../.. 15555 rm -r 1; mkdir 1; cd 1 15556 dotest toplevel2-5 "${testcvs} co top-dir" \ 15557 "${SPROG} checkout: Updating top-dir 15558 U top-dir/file1" 15559 15560 dotest toplevel2-6 "${testcvs} update top-dir" \ 15561 "${SPROG} update: Updating top-dir" 15562 dotest toplevel2-7 "${testcvs} update" \ 15563 "${SPROG} update: Updating top-dir" 15564 15565 dotest toplevel2-8 "${testcvs} update -d top-dir" \ 15566 "${SPROG} update: Updating top-dir" 15567 # Contrast this with toplevel-9, which has TopLevelAdmin=yes. 15568 dotest toplevel2-9 "${testcvs} update -d" \ 15569 "${SPROG} update: Updating top-dir" 15570 15571 cd .. 15572 rm -r 1; mkdir 1; cd 1 15573 dotest toplevel2-10 "${testcvs} co top-dir" \ 15574 "${SPROG} checkout: Updating top-dir 15575 U top-dir/file1" 15576 # This tests more or less the same thing, in a particularly 15577 # "real life" example. With TopLevelAdmin=yes, this command 15578 # would give us second-dir and CVSROOT directories too. 15579 dotest toplevel2-11 "${testcvs} -q update -d" "" 15580 15581 dokeep 15582 cd .. 15583 restore_adm 15584 rm -r 1 15585 modify_repo rm -rf $CVSROOT_DIRNAME/top-dir \ 15586 $CVSROOT_DIRNAME/second-dir 15587 ;; 15588 15589 15590 15591 rstar-toplevel) 15592 # This test used to confirm a bug that existed in the r* commands 15593 # run against the top-level project prior to CVS 1.11.18 & 1.12.10. 15594 # 15595 # The assertion failure was something like: 15596 # do_recursion: Assertion \`strstr (repository, \"/\./\") == ((void \*)0)' failed\..*" 15597 dotest rstar-toplevel-1 "$testcvs -q rlog ." \ 15598 " 15599 RCS file: $CVSROOT_DIRNAME/CVSROOT$DOTSTAR" 15600 15601 dokeep 15602 ;; 15603 15604 15605 15606 trailingslashes) 15607 # Some tests of CVS's reactions to path specifications containing 15608 # trailing slashes. 15609 mkdir trailingslashes; cd trailingslashes 15610 dotest trailingslashes-init-1 "$testcvs -Q co -ldt ." 15611 dotest trailingslashes-init-2 "$testcvs -Q co -dt2 ." 15612 cd t 15613 echo "Ahh'll be baaack." >topfile 15614 dotest trailingslashes-init-3 "$testcvs -Q add topfile" 15615 dotest trailingslashes-init-4 "$testcvs -Q ci -mto-top" 15616 15617 # First, demonstrate the usual case. 15618 cd ../t2 15619 dotest trailingslashes-1 "$testcvs -q up CVSROOT" 15620 dotest_fail trailingslashes-1a "test -f topfile" 15621 15622 # FIXCVS: 15623 # Now the one that fails in remote mode. 15624 # This highlights one of the failure cases mentioned in TODO item 15625 # #205. 15626 if $remote; then 15627 dotest trailingslashes-2 "$testcvs -q up CVSROOT/" \ 15628 "U topfile" 15629 dotest trailingslashes-2a "test -f topfile" 15630 else 15631 dotest trailingslashes-2 "$testcvs -q up CVSROOT/" 15632 dotest_fail trailingslashes-2a "test -f topfile" 15633 fi 15634 15635 dokeep 15636 cd ../.. 15637 rm -rf trailingslashes 15638 modify_repo rm -rf $CVSROOT_DIRNAME/topfile,v 15639 ;; 15640 15641 15642 15643 checkout_repository) 15644 dotest_fail checkout_repository-1 \ 15645 "${testcvs} co -d ${CVSROOT_DIRNAME} CVSROOT" \ 15646 "${CPROG} \[checkout aborted\]: Cannot check out files into the repository itself" \ 15647 "${SPROG} \[checkout aborted\]: absolute pathnames invalid for server (specified \`${CVSROOT_DIRNAME}')" 15648 15649 # The behavior of the client/server test below should be correct. 15650 # The CVS client currently has no way of knowing that the client and 15651 # server are the same machine and thus skips the $CVSROOT checks. 15652 # I think checking for this case in CVS would be bloat since this 15653 # should be a fairly rare occurance. 15654 cd ${CVSROOT_DIRNAME} 15655 dotest_fail checkout_repository-2 "${testcvs} co CVSROOT" \ 15656 "${CPROG} \[checkout aborted\]: Cannot check out files into the repository itself" \ 15657 "${SPROG} checkout: Updating CVSROOT 15658 ${CPROG} checkout: move away \`CVSROOT/access'; it is in the way 15659 C CVSROOT/access 15660 ${CPROG} checkout: move away \`CVSROOT/aclconfig'; it is in the way 15661 C CVSROOT/aclconfig 15662 ${CPROG} checkout: move away \`CVSROOT/checkoutlist'; it is in the way 15663 C CVSROOT/checkoutlist 15664 ${CPROG} checkout: move away \`CVSROOT/commitinfo'; it is in the way 15665 C CVSROOT/commitinfo 15666 ${CPROG} checkout: move away \`CVSROOT/config'; it is in the way 15667 C CVSROOT/config 15668 ${CPROG} checkout: move away \`CVSROOT/cvswrappers'; it is in the way 15669 C CVSROOT/cvswrappers 15670 ${CPROG} checkout: move away \`CVSROOT/group'; it is in the way 15671 C CVSROOT/group 15672 ${CPROG} checkout: move away \`CVSROOT/loginfo'; it is in the way 15673 C CVSROOT/loginfo 15674 ${CPROG} checkout: move away \`CVSROOT/modules'; it is in the way 15675 C CVSROOT/modules 15676 ${CPROG} checkout: move away \`CVSROOT/notify'; it is in the way 15677 C CVSROOT/notify 15678 ${CPROG} checkout: move away \`CVSROOT/postadmin'; it is in the way 15679 C CVSROOT/postadmin 15680 ${CPROG} checkout: move away \`CVSROOT/postproxy'; it is in the way 15681 C CVSROOT/postproxy 15682 ${CPROG} checkout: move away \`CVSROOT/posttag'; it is in the way 15683 C CVSROOT/posttag 15684 ${CPROG} checkout: move away \`CVSROOT/postwatch'; it is in the way 15685 C CVSROOT/postwatch 15686 ${CPROG} checkout: move away \`CVSROOT/preproxy'; it is in the way 15687 C CVSROOT/preproxy 15688 ${CPROG} checkout: move away \`CVSROOT/rcsinfo'; it is in the way 15689 C CVSROOT/rcsinfo 15690 ${CPROG} checkout: move away \`CVSROOT/taginfo'; it is in the way 15691 C CVSROOT/taginfo 15692 ${CPROG} checkout: move away \`CVSROOT/verifymsg'; it is in the way 15693 C CVSROOT/verifymsg" 15694 15695 dotest checkout_repository-3 \ 15696 "${testcvs} co -p CVSROOT/modules >/dev/null" \ 15697 "=================================================================== 15698 Checking out CVSROOT/modules 15699 RCS: ${CVSROOT_DIRNAME}/CVSROOT/modules,v 15700 VERS: 1\.[0-9]* 15701 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*" 15702 15703 dokeep 15704 cd $TESTDIR 15705 ;; 15706 15707 15708 15709 mflag) 15710 for message in '' ' ' ' 15711 ' ' test' ; do 15712 # Set up 15713 mkdir a-dir; cd a-dir 15714 # Test handling of -m during import 15715 echo testa >>test 15716 if ${testcvs} import -m "$message" a-dir A A1 >>${LOGFILE} 2>&1;then 15717 pass 156 15718 else 15719 fail 156 15720 fi 15721 # Must import twice since the first time uses inline code that 15722 # avoids RCS call. 15723 echo testb >>test 15724 if ${testcvs} import -m "$message" a-dir A A2 >>${LOGFILE} 2>&1;then 15725 pass 157 15726 else 15727 fail 157 15728 fi 15729 # Test handling of -m during ci 15730 cd ..; rm -r a-dir 15731 if ${testcvs} co a-dir >>${LOGFILE} 2>&1; then 15732 pass 158 15733 else 15734 fail 158 15735 fi 15736 cd a-dir 15737 echo testc >>test 15738 if ${testcvs} ci -m "$message" >>${LOGFILE} 2>&1; then 15739 pass 159 15740 else 15741 fail 159 15742 fi 15743 # Test handling of -m during rm/ci 15744 rm test; 15745 if ${testcvs} rm test >>${LOGFILE} 2>&1; then 15746 pass 160 15747 else 15748 fail 160 15749 fi 15750 if ${testcvs} ci -m "$message" >>${LOGFILE} 2>&1; then 15751 pass 161 15752 else 15753 fail 161 15754 fi 15755 15756 dokeep 15757 # Clean up 15758 cd .. 15759 rm -r a-dir 15760 modify_repo rm -rf $CVSROOT_DIRNAME/a-dir 15761 done 15762 ;; 15763 15764 15765 15766 editor) 15767 # More tests of log messages, in this case the ability to 15768 # run an external editor. 15769 # TODO: 15770 # * also test $EDITOR, $CVSEDITOR, &c. 15771 # * test what happens if up-to-date check fails. 15772 15773 # Our "editor" puts "x" at the start of each line, so we 15774 # can see the "CVS:" lines. 15775 cat >${TESTDIR}/editme <<EOF 15776 #!${TESTSHELL} 15777 sleep 1 15778 sed <\$1 -e 's/^/x/' >${TESTDIR}/edit.new 15779 mv ${TESTDIR}/edit.new \$1 15780 exit 0 15781 EOF 15782 chmod +x ${TESTDIR}/editme 15783 15784 mkdir 1; cd 1 15785 dotest editor-1 "${testcvs} -q co -l ." '' 15786 mkdir first-dir 15787 dotest editor-2 "${testcvs} add first-dir" \ 15788 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 15789 cd first-dir 15790 touch file1 file2 15791 dotest editor-3 "${testcvs} add file1 file2" \ 15792 "${SPROG} add: scheduling file .file1. for addition 15793 ${SPROG} add: scheduling file .file2. for addition 15794 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 15795 dotest editor-4 "${testcvs} -e ${TESTDIR}/editme -q ci" \ 15796 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 15797 initial revision: 1\.1 15798 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 15799 initial revision: 1\.1" 15800 dotest editor-5 "${testcvs} -q tag -b br" "T file1 15801 T file2" 15802 dotest editor-6 "${testcvs} -q update -r br" '' 15803 echo modify >>file1 15804 dotest editor-7 "${testcvs} -e ${TESTDIR}/editme -q ci" \ 15805 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 15806 new revision: 1\.1\.2\.1; previous revision: 1\.1" 15807 # OK, now we want to make sure "ci -r" puts in the branch 15808 # where appropriate. Note that we can check in on the branch 15809 # without being on the branch, because there is not a revision 15810 # already on the branch. If there were a revision on the branch, 15811 # CVS would correctly give an up-to-date check failed. 15812 dotest editor-8 "${testcvs} -q update -A" "U file1" 15813 echo add a line >>file2 15814 dotest editor-9 "${testcvs} -q -e ${TESTDIR}/editme ci -rbr file2" \ 15815 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 15816 new revision: 1\.1\.2\.1; previous revision: 1\.1" 15817 15818 dotest editor-log-file1 "${testcvs} log -N file1" " 15819 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 15820 Working file: file1 15821 head: 1\.1 15822 branch: 15823 locks: strict 15824 access list: 15825 keyword substitution: kv 15826 total revisions: 2; selected revisions: 2 15827 description: 15828 ---------------------------- 15829 revision 1\.1 15830 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 15831 branches: 1\.1\.2; 15832 x 15833 xCVS: ---------------------------------------------------------------------- 15834 xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically 15835 xCVS: 15836 xCVS: Committing in . 15837 xCVS: 15838 xCVS: Added Files: 15839 xCVS: file1 file2 15840 xCVS: ---------------------------------------------------------------------- 15841 ---------------------------- 15842 revision 1\.1\.2\.1 15843 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 15844 x 15845 xCVS: ---------------------------------------------------------------------- 15846 xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically 15847 xCVS: 15848 xCVS: Committing in . 15849 xCVS: 15850 xCVS: Modified Files: 15851 xCVS: Tag: br 15852 xCVS: file1 15853 xCVS: ---------------------------------------------------------------------- 15854 =============================================================================" 15855 15856 # The only difference between the two expect strings is the 15857 # presence or absence of "Committing in ." for 1.1.2.1. 15858 dotest editor-log-file2 "${testcvs} log -N file2" " 15859 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 15860 Working file: file2 15861 head: 1\.1 15862 branch: 15863 locks: strict 15864 access list: 15865 keyword substitution: kv 15866 total revisions: 2; selected revisions: 2 15867 description: 15868 ---------------------------- 15869 revision 1\.1 15870 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 15871 branches: 1\.1\.2; 15872 x 15873 xCVS: ---------------------------------------------------------------------- 15874 xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically 15875 xCVS: 15876 xCVS: Committing in . 15877 xCVS: 15878 xCVS: Added Files: 15879 xCVS: file1 file2 15880 xCVS: ---------------------------------------------------------------------- 15881 ---------------------------- 15882 revision 1\.1\.2\.1 15883 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 15884 x 15885 xCVS: ---------------------------------------------------------------------- 15886 xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically 15887 xCVS: 15888 xCVS: Modified Files: 15889 xCVS: Tag: br 15890 xCVS: file2 15891 xCVS: ---------------------------------------------------------------------- 15892 =============================================================================" " 15893 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 15894 Working file: file2 15895 head: 1\.1 15896 branch: 15897 locks: strict 15898 access list: 15899 keyword substitution: kv 15900 total revisions: 2; selected revisions: 2 15901 description: 15902 ---------------------------- 15903 revision 1\.1 15904 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 15905 branches: 1\.1\.2; 15906 x 15907 xCVS: ---------------------------------------------------------------------- 15908 xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically 15909 xCVS: 15910 xCVS: Committing in . 15911 xCVS: 15912 xCVS: Added Files: 15913 xCVS: file1 file2 15914 xCVS: ---------------------------------------------------------------------- 15915 ---------------------------- 15916 revision 1\.1\.2\.1 15917 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 15918 x 15919 xCVS: ---------------------------------------------------------------------- 15920 xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically 15921 xCVS: 15922 xCVS: Committing in . 15923 xCVS: 15924 xCVS: Modified Files: 15925 xCVS: Tag: br 15926 xCVS: file2 15927 xCVS: ---------------------------------------------------------------------- 15928 =============================================================================" 15929 15930 # Test CVS's response to an unchanged log message 15931 cat >${TESTDIR}/editme <<EOF 15932 #!${TESTSHELL} 15933 sleep 1 15934 exit 0 15935 EOF 15936 chmod +x ${TESTDIR}/editme 15937 dotest_fail editor-emptylog-1 "echo a |${testcvs} -e ${TESTDIR}/editme ci -f file1" \ 15938 " 15939 Log message unchanged or not specified 15940 a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs 15941 Action: (abort) ${CPROG} \[commit aborted\]: aborted by user" 15942 15943 # Test CVS's response to an empty log message 15944 cat >${TESTDIR}/editme <<EOF 15945 #!${TESTSHELL} 15946 sleep 1 15947 cat /dev/null >\$1 15948 exit 0 15949 EOF 15950 chmod +x ${TESTDIR}/editme 15951 dotest_fail editor-emptylog-1a "echo a |${testcvs} -e ${TESTDIR}/editme ci -f file1" \ 15952 " 15953 Log message unchanged or not specified 15954 a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs 15955 Action: (abort) ${CPROG} \[commit aborted\]: aborted by user" 15956 15957 # Test CVS's response to a log message with one blank line 15958 cat >${TESTDIR}/editme <<EOF 15959 #!${TESTSHELL} 15960 sleep 1 15961 echo >\$1 15962 exit 0 15963 EOF 15964 chmod +x ${TESTDIR}/editme 15965 dotest_fail editor-emptylog-1b "echo a |${testcvs} -e ${TESTDIR}/editme ci -f file1" \ 15966 " 15967 Log message unchanged or not specified 15968 a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs 15969 Action: (abort) ${CPROG} \[commit aborted\]: aborted by user" 15970 15971 # Test CVS's response to a log message with only comments 15972 cat >${TESTDIR}/editme <<EOF 15973 #!${TESTSHELL} 15974 sleep 1 15975 cat \$1 >${TESTDIR}/edit.new 15976 mv ${TESTDIR}/edit.new \$1 15977 exit 0 15978 EOF 15979 chmod +x ${TESTDIR}/editme 15980 dotest_fail editor-emptylog-1c "echo a |${testcvs} -e ${TESTDIR}/editme ci -f file1" \ 15981 " 15982 Log message unchanged or not specified 15983 a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs 15984 Action: (abort) ${CPROG} \[commit aborted\]: aborted by user" 15985 15986 # Test CVS's response to a log message that is zero bytes 15987 # in length. This caused core dumps in cvs 1.11.5 on Solaris 15988 # hosts. 15989 cd .. 15990 dotest editor-emptylog-continue-1 "${testcvs} -q co CVSROOT/loginfo" \ 15991 "U CVSROOT/loginfo" 15992 15993 cd CVSROOT 15994 cat <<\EOF >>loginfo 15995 DEFAULT (echo Start-Log;cat;echo End-Log) >> $CVSROOT/CVSROOT/commitlog 15996 EOF 15997 dotest editor-emptylog-continue-2 "$testcvs -Q ci -mloggem" 15998 15999 cd ../first-dir 16000 cat >${TESTDIR}/editme <<EOF 16001 #!${TESTSHELL} 16002 sleep 1 16003 cp /dev/null \$1 16004 exit 1 16005 EOF 16006 chmod +x ${TESTDIR}/editme 16007 dotest editor-emptylog-continue-3 "echo c |${testcvs} -e ${TESTDIR}/editme ci -f file1" \ 16008 "${CPROG} commit: warning: editor session failed 16009 16010 Log message unchanged or not specified 16011 a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs 16012 Action: (abort) ${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1 16013 new revision: 1\.2; previous revision: 1\.1" 16014 # The loginfo Log message should be an empty line and not "(null)" 16015 # which is what some fprintf() implementations do with "%s" 16016 # format and a NULL pointer... 16017 if $remote; then 16018 dotest editor-emptylog-continue-4r \ 16019 "cat $CVSROOT_DIRNAME/CVSROOT/commitlog" \ 16020 "Start-Log 16021 Update of $CVSROOT_DIRNAME/CVSROOT 16022 In directory $hostname:$TMPDIR/cvs-serv[0-9a-z]* 16023 16024 Modified Files: 16025 loginfo 16026 Log Message: 16027 loggem 16028 End-Log 16029 Start-Log 16030 Update of $CVSROOT_DIRNAME/first-dir 16031 In directory $hostname:$TMPDIR/cvs-serv[0-9a-z]* 16032 16033 Modified Files: 16034 file1 16035 Log Message: 16036 16037 End-Log" 16038 else 16039 dotest editor-emptylog-continue-4 \ 16040 "cat $CVSROOT_DIRNAME/CVSROOT/commitlog" \ 16041 "Start-Log 16042 Update of $CVSROOT_DIRNAME/CVSROOT 16043 In directory $hostname:$TESTDIR/1/CVSROOT 16044 16045 Modified Files: 16046 loginfo 16047 Log Message: 16048 loggem 16049 End-Log 16050 Start-Log 16051 Update of $CVSROOT_DIRNAME/first-dir 16052 In directory $hostname:$TESTDIR/1/first-dir 16053 16054 Modified Files: 16055 file1 16056 Log Message: 16057 16058 End-Log" 16059 fi 16060 # There should have an empty log message at this point 16061 dotest editor-emptylog-continue-5 "${testcvs} log -N -r1.2 file1" \ 16062 " 16063 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 16064 Working file: file1 16065 head: 1\.2 16066 branch: 16067 locks: strict 16068 access list: 16069 keyword substitution: kv 16070 total revisions: 3; selected revisions: 1 16071 description: 16072 ---------------------------- 16073 revision 1\.2 16074 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: +0 -0; commitid: ${commitid}; 16075 \*\*\* empty log message \*\*\* 16076 =============================================================================" 16077 16078 # clean up 16079 dokeep 16080 # restore the default loginfo script 16081 restore_adm 16082 cd ../.. 16083 rm -r 1 16084 rm $TESTDIR/editme 16085 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 16086 ;; 16087 16088 16089 16090 env) 16091 # Test to see if the CVS_PID environment variable is being set 16092 mkdir ${TESTDIR}/env 16093 cd ${TESTDIR}/env 16094 dotest env-1 "${testcvs} -Q co . >>${LOGFILE}" '' 16095 16096 cat > ${TESTDIR}/env/test-cvs-pid <<EOF 16097 #!${TESTSHELL} 16098 if test "x\$CVS_PID" != "x"; then 16099 # In local mode, there is no directory with the pid in it for use. 16100 # In remote mode the CVS_PID will be the parent process of the 16101 # cvs process that runs the commitinfo script. 16102 if test "x$remote" = "x:" ; then 16103 ppid=\`pwd | sed -e 's,.*/cvs-serv,,'\` 16104 else 16105 # This assumes that the -l switch puts PPID in the banner and does 16106 # not run the elements together such that whitespace surrounds the 16107 # pid and ppid in the output. This could be made slightly simpler 16108 # if all hosts had a 'ps' command that supported the -p switch, 16109 # but Solaris 7 /usr/ucb/ps does not and that may be the one we use. 16110 # It is because this is so messy that the CVS_PID feature exists. 16111 pid=\$\$ 16112 pidcmd="ps -o pid,ppid -p \$pid || ps -el || ps -al" 16113 if echo \$pidcmd | sh >pid.stdout 2> pid.stderr; then 16114 ppid=\`cat pid.stdout |\\ 16115 awk '/PPID/ { for (i=1; i <= NF; i++) { 16116 if (\$i == "PPID") ppidx = i; 16117 if (\$i == "PID") pidx = i; 16118 } 16119 next; 16120 } 16121 { print \$pidx " " \$ppidx }' |\\ 16122 grep "^\$pid " |\\ 16123 awk '{ print \$NF }'\` 16124 else 16125 ppid=unkown 16126 fi 16127 fi 16128 if test "x\$ppid" = "x\${CVS_PID}"; then 16129 # The PID looks okay to me 16130 # Clean up any temporary files 16131 rm -f pid.stdout pid.stderr 16132 exit 0 16133 else 16134 echo The environment variable CVS_PID is not properly set. 16135 echo It should have been set to \'\$ppid\' but instead was \'\$CVS_PID\' 16136 echo It is possible that this test is broken for your host. 16137 echo Current pid: \$pid 16138 [ -n "\$pidcmd" ] && echo "Command: \$pidcmd" 16139 [ -s pid.stdout ] && echo Standard Out: && cat pid.stdout 16140 [ -s pid.stderr ] && echo Standard Error: && cat pid.stderr 16141 exit 1 16142 fi 16143 else 16144 echo The environment variable CVS_PID is not set. 16145 exit 1 16146 fi 16147 EOF 16148 if test -n "$remotehost"; then 16149 $CVS_RSH $remotehost "chmod +x ${TESTDIR}/env/test-cvs-pid" 16150 else 16151 chmod +x ${TESTDIR}/env/test-cvs-pid 16152 fi 16153 cd CVSROOT 16154 echo "^env ${TESTDIR}/env/test-cvs-pid %r/%p %s" >>commitinfo 16155 dotest env-2 "${testcvs} -q ci -m test-pid commitinfo" \ 16156 "${CVSROOT_DIRNAME}/CVSROOT/commitinfo,v <-- commitinfo 16157 new revision: 1\.2; previous revision: 1\.1 16158 ${SPROG} commit: Rebuilding administrative file database" 16159 cd .. 16160 mkdir env 16161 dotest env-3 "${testcvs} -q add env" \ 16162 "Directory ${CVSROOT_DIRNAME}/env added to the repository" 16163 cd env 16164 echo testing >file1 16165 dotest env-4 "${testcvs} add file1" \ 16166 "${SPROG} add: scheduling file .file1. for addition 16167 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 16168 dotest env-5 "${testcvs} -q commit -m test-pid" \ 16169 "${CVSROOT_DIRNAME}/env/file1,v <-- file1 16170 initial revision: 1\.1" 16171 16172 dokeep 16173 # undo commitinfo changes 16174 restore_adm 16175 cd ../.. 16176 rm -fr $TESTDIR/env 16177 modify_repo rm -rf $CVSROOT_DIRNAME/env 16178 ;; 16179 16180 16181 16182 errmsg1) 16183 modify_repo mkdir $CVSROOT_DIRNAME/1dir 16184 mkdir 1 16185 cd 1 16186 dotest errmsg1-init-1 "$testcvs -Q co 1dir" 16187 cd 1dir 16188 touch foo 16189 dotest errmsg-init-2 "$testcvs -Q add foo" 16190 if ${testcvs} ci -m added >>${LOGFILE} 2>&1; then 16191 pass 164 16192 else 16193 fail 164 16194 fi 16195 cd ../.. 16196 mkdir 2 16197 cd 2 16198 if ${testcvs} -q co 1dir >>${LOGFILE}; then 16199 pass 165 16200 else 16201 fail 165 16202 fi 16203 chmod a-w 1dir 16204 cd ../1/1dir 16205 rm foo; 16206 if ${testcvs} rm foo >>${LOGFILE} 2>&1; then 16207 pass 166 16208 else 16209 fail 166 16210 fi 16211 if ${testcvs} ci -m removed >>${LOGFILE} 2>&1; then 16212 pass 167 16213 else 16214 fail 167 16215 fi 16216 16217 cd ../../2/1dir 16218 # The second case in the local and remote versions of errmsg1-168 16219 # below happens on Cygwin under Windows, where write privileges 16220 # aren't enforced properly. 16221 if $remote; then 16222 dotest errmsg1-168r "${testcvs} -q update" \ 16223 "${SPROG} update: \`foo' is no longer in the repository 16224 $CPROG update: unable to remove \./foo: Permission denied" \ 16225 "${SPROG} update: \`foo' is no longer in the repository" 16226 else 16227 dotest errmsg1-168 "${testcvs} -q update" \ 16228 "${SPROG} update: \`foo' is no longer in the repository 16229 ${SPROG} update: unable to remove foo: Permission denied" \ 16230 "${SPROG} update: \`foo' is no longer in the repository" 16231 fi 16232 16233 dokeep 16234 cd .. 16235 chmod u+w 1dir 16236 cd .. 16237 rm -r 1 2 16238 modify_repo rm -rf $CVSROOT_DIRNAME/1dir 16239 ;; 16240 16241 16242 16243 errmsg2) 16244 # More tests of various miscellaneous error handling, 16245 # and cvs add behavior in general. 16246 # See also test basicb-4a, concerning "cvs ci CVS". 16247 # Too many tests to mention test the simple cases of 16248 # adding files and directories. 16249 # Test basicb-2a10 tests cvs -n add. 16250 16251 # First the usual setup; create a directory first-dir. 16252 mkdir 1; cd 1 16253 dotest errmsg2-1 "$testcvs -q co -l ." 16254 mkdir first-dir 16255 dotest errmsg2-2 "${testcvs} add first-dir" \ 16256 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 16257 cd first-dir 16258 dotest_fail errmsg2-3 "${testcvs} add CVS" \ 16259 "${CPROG} add: cannot add special file .CVS.; skipping" 16260 touch file1 16261 # For the most part add returns a failure exitstatus if 16262 # there are any errors, even if the remaining files are 16263 # processed without incident. The "cannot add 16264 # special file" message fits this pattern, at 16265 # least currently. 16266 dotest_fail errmsg2-4 "${testcvs} add CVS file1" \ 16267 "${CPROG} add: cannot add special file .CVS.; skipping 16268 ${SPROG} add: scheduling file .file1. for addition 16269 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 16270 # I'm not sure these tests completely convey the various strange 16271 # behaviors that CVS had before it specially checked for "." and 16272 # "..". Suffice it to say that these are unlikely to work right 16273 # without a special case. 16274 dotest_fail errmsg2-5 "${testcvs} add ." \ 16275 "${CPROG} add: cannot add special file .\..; skipping" 16276 dotest_fail errmsg2-6 "${testcvs} add .." \ 16277 "${CPROG} add: cannot add special file .\.\..; skipping" 16278 # Make sure that none of the error messages left droppings 16279 # which interfere with normal operation. 16280 dotest errmsg2-7 "${testcvs} -q ci -m add-file1" \ 16281 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 16282 initial revision: 1\.1" 16283 mkdir sdir 16284 cd .. 16285 dotest errmsg2-8 "${testcvs} add first-dir/sdir" \ 16286 "Directory ${CVSROOT_DIRNAME}/first-dir/sdir added to the repository" 16287 # while we're here... check commit with no CVS directory 16288 dotest_fail errmsg2-8a "${testcvs} -q ci first-dir nonexistant" \ 16289 "${CPROG} commit: nothing known about .nonexistant' 16290 ${CPROG} \[commit aborted\]: correct above errors first!" 16291 dotest_fail errmsg2-8b "$testcvs -q ci nonexistant first-dir" \ 16292 "$CPROG commit: nothing known about .nonexistant' 16293 $CPROG \[commit aborted\]: correct above errors first!" 16294 dotest errmsg2-8c "$testcvs -q ci first-dir" 16295 16296 cd first-dir 16297 16298 touch file10 16299 mkdir sdir10 16300 dotest errmsg2-10 "${testcvs} add file10 sdir10" \ 16301 "${SPROG} add: scheduling file .file10. for addition 16302 Directory ${CVSROOT_DIRNAME}/first-dir/sdir10 added to the repository 16303 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 16304 dotest errmsg2-11 "${testcvs} -q ci -m add-file10" \ 16305 "$CVSROOT_DIRNAME/first-dir/file10,v <-- file10 16306 initial revision: 1\.1" 16307 # Try to see that there are no droppings left by 16308 # any of the previous tests. 16309 dotest errmsg2-12 "${testcvs} -q update" "" 16310 16311 # Now test adding files with '/' in the name, both one level 16312 # down and more than one level down. 16313 cd .. 16314 mkdir first-dir/sdir10/ssdir 16315 dotest errmsg2-13 "${testcvs} add first-dir/sdir10/ssdir" \ 16316 "Directory ${CVSROOT_DIRNAME}/first-dir/sdir10/ssdir added to the repository" 16317 16318 touch first-dir/sdir10/ssdir/ssfile 16319 dotest errmsg2-14 \ 16320 "${testcvs} add first-dir/sdir10/ssdir/ssfile" \ 16321 "${SPROG} add: scheduling file .first-dir/sdir10/ssdir/ssfile. for addition 16322 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 16323 touch first-dir/file15 16324 dotest errmsg2-15 "${testcvs} add first-dir/file15" \ 16325 "${SPROG} add: scheduling file .first-dir/file15. for addition 16326 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 16327 16328 # Now the case where we try to give it a directory which is not 16329 # under CVS control. 16330 mkdir bogus-dir 16331 touch bogus-dir/file16 16332 # FIXCVS: The first message, from local CVS, is nice. The second one 16333 # is not nice; would be good to fix remote CVS to give a clearer 16334 # message (e.g. the one from local CVS). But at least it is an 16335 # error message. 16336 dotest_fail errmsg2-16 "${testcvs} add bogus-dir/file16" \ 16337 "${SPROG} add: in directory \`bogus-dir': 16338 ${SPROG} \[add aborted\]: there is no version here; do .${SPROG} checkout. first" \ 16339 "${CPROG} add: cannot open CVS/Entries for reading: No such file or directory 16340 ${CPROG} \[add aborted\]: no repository" 16341 rm -r bogus-dir 16342 16343 # One error condition we don't test for is trying to add a file 16344 # or directory which already is there. 16345 16346 dotest errmsg2-17 "${testcvs} -q ci -m checkin" \ 16347 "$CVSROOT_DIRNAME/first-dir/file15,v <-- first-dir/file15 16348 initial revision: 1\.1 16349 $CVSROOT_DIRNAME/first-dir/sdir10/ssdir/ssfile,v <-- first-dir/sdir10/ssdir/ssfile 16350 initial revision: 1\.1" 16351 dotest errmsg2-18 "${testcvs} -Q tag test" '' 16352 16353 # trying to import the repository 16354 16355 if $remote; then :; else 16356 cd ${CVSROOT_DIRNAME} 16357 dotest_fail errmsg2-20 "${testcvs} import -mtest . A B" \ 16358 "${SPROG} \[import aborted\]: attempt to import the repository" 16359 dotest_fail errmsg2-21 "${testcvs} import -mtest first-dir A B" \ 16360 "${SPROG} \[import aborted\]: attempt to import the repository" 16361 fi 16362 16363 dokeep 16364 cd .. 16365 rm -r 1 16366 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 16367 ;; 16368 16369 16370 16371 errmsg3) 16372 # Test the *PANIC* message caused by missing administration files 16373 mkdir errmsg3 16374 cd errmsg3 16375 mkdir CVS 16376 dotest_fail errmsg3-1 "${testcvs} -q up" \ 16377 "${CPROG} update: in directory \`.': 16378 ${CPROG} update: CVS directory found without administrative files\. 16379 ${CPROG} update: Use CVS to create the CVS directory, or rename the 16380 ${CPROG} update: directory if it is intended to store something 16381 ${CPROG} update: besides CVS administrative files\. 16382 ${CPROG} \[update aborted\]: \*PANIC\* administration files missing!" 16383 16384 dokeep 16385 cd .. 16386 rm -r errmsg3 16387 ;; 16388 16389 16390 16391 close-stdout) 16392 # Ensure that cvs update -p FILE > /dev/full fails 16393 # Perform this test IFF /dev/full is a writable character device. 16394 if test -w /dev/full && test -c /dev/full; then 16395 mkdir close-stdout 16396 cd close-stdout 16397 echo a > file 16398 dotest close-stdout-1 "$testcvs -Q import -m. closeout X Y" '' 16399 dotest close-stdout-2 "$testcvs -Q co closeout" '' 16400 # Match either a bare `write error' or 16401 # `write error: No space left on device', 16402 # since closeout.c can produce both. 16403 dotest_fail close-stdout-3 \ 16404 "${testcvs} -Q update -p closeout/file > /dev/full" \ 16405 "${CPROG} \[update aborted\]: write error.*" 16406 16407 dokeep 16408 cd .. 16409 rm -r close-stdout 16410 modify_repo rm -rf $CVSROOT_DIRNAME/closeout 16411 else 16412 skip close-stdout '/dev/full is not available' 16413 fi 16414 ;; 16415 16416 16417 16418 debug-log-nonfatal) 16419 # Once upon a time, failure to create the debug log could be fatal. 16420 if $remote; then :; else 16421 remoteonly debug-log-nonfatal 16422 continue 16423 fi 16424 16425 mkdir $TESTDIR/unwritable 16426 chmod a-w $TESTDIR/unwritable 16427 if test -n "$CVS_CLIENT_LOG"; then 16428 save_CVS_CLIENT_LOG=$CVS_CLIENT_LOG 16429 fi 16430 CVS_CLIENT_LOG=$TESTDIR/unwritable/cvsclientlog 16431 export CVS_CLIENT_LOG 16432 16433 dotest debug-log-nonfatal-1 \ 16434 "$testcvs -Q co -p CVSROOT/config >/dev/null" \ 16435 "$CPROG checkout: opening to-server logfile $TESTDIR/unwritable/cvsclientlog.in: Permission denied 16436 $CPROG checkout: opening from-server logfile $TESTDIR/unwritable/cvsclientlog.out: Permission denied" 16437 16438 dokeep 16439 rm -rf $TESTDIR/unwritable 16440 unset CVS_CLIENT_LOG 16441 if test -n "$save_CVS_CLIENT_LOG"; then 16442 CVS_CLIENT_LOG=$save_CVS_CLIENT_LOG 16443 fi 16444 ;; 16445 16446 16447 16448 adderrmsg) 16449 # Test some of the error messages the 'add' command can return and 16450 # their reactions to '-q'. 16451 16452 # First the usual setup; create a directory first-dir. 16453 mkdir 1; cd 1 16454 dotest adderrmsg-init1 "${testcvs} -q co -l ." '' 16455 mkdir adderrmsg-dir 16456 dotest adderrmsg-init2 "${testcvs} add adderrmsg-dir" \ 16457 "Directory ${CVSROOT_DIRNAME}/adderrmsg-dir added to the repository" 16458 cd adderrmsg-dir 16459 16460 # try to add the admin dir 16461 dotest_fail adderrmsg-1 "${testcvs} add CVS" \ 16462 "${CPROG} add: cannot add special file .CVS.; skipping" 16463 # might not want to see this message when you 'cvs add *' 16464 dotest_fail adderrmsg-2 "${testcvs} -q add CVS" "" 16465 16466 # to test some other messages 16467 touch file1 16468 dotest adderrmsg-3 "${testcvs} add file1" \ 16469 "${SPROG} add: scheduling file .file1. for addition 16470 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 16471 16472 # add it twice 16473 dotest_fail adderrmsg-4 "${testcvs} add file1" \ 16474 "${SPROG} add: \`file1' has already been entered" 16475 dotest_fail adderrmsg-5 "${testcvs} -q add file1" "" 16476 16477 dotest adderrmsg-6 "${testcvs} -q ci -madd" \ 16478 "$CVSROOT_DIRNAME/adderrmsg-dir/file1,v <-- file1 16479 initial revision: 1\.1" 16480 16481 # file in Entries & repository 16482 dotest_fail adderrmsg-7 "${testcvs} add file1" \ 16483 "${SPROG} add: \`file1' already exists, with version number 1\.1" 16484 dotest_fail adderrmsg-8 "${testcvs} -q add file1" "" 16485 16486 # clean up 16487 dokeep 16488 cd ../.. 16489 rm -r 1 16490 modify_repo rm -rf $CVSROOT_DIRNAME/adderrmsg-dir 16491 ;; 16492 16493 16494 16495 opterrmsg) 16496 # Test some option parsing error messages 16497 16498 # No init is necessary since these error messages are printed b4 16499 # CVS looks for a sandbox or repository 16500 16501 # -z used to accept non-numeric arguments. This bit someone who 16502 # attempted `cvs -z -n up' when the -n was read as the argument to 16503 # -z. 16504 dotest_fail opterrmsg-1 "${testcvs} -z -n up" \ 16505 "${CPROG}: gzip compression level must be between 0 and 9" 16506 16507 # Some general -z checks 16508 dotest_fail opterrmsg-2 "${testcvs} -z -1 up" \ 16509 "${CPROG}: gzip compression level must be between 0 and 9" 16510 dotest_fail opterrmsg-3 "${testcvs} -z10 up" \ 16511 "${CPROG}: gzip compression level must be between 0 and 9" 16512 ;; 16513 16514 16515 16516 devcom) 16517 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 16518 mkdir 1 16519 cd 1 16520 dotest devcom-1 "$testcvs -q co first-dir" 16521 16522 cd first-dir 16523 echo abb >abb 16524 dotest devcom-2 "$testcvs add abb" \ 16525 "$SPROG add: scheduling file \`abb' for addition 16526 $SPROG add: use \`$SPROG commit' to add this file permanently" 16527 16528 dotest devcom-3 "$testcvs -q ci -m added" \ 16529 "$CVSROOT_DIRNAME/first-dir/abb,v <-- abb 16530 initial revision: 1\.1" 16531 16532 dotest_fail devcom-4 "$testcvs watch" "Usage$DOTSTAR" 16533 16534 dotest devcom-5 "$testcvs watch on" 16535 16536 echo abc >abc 16537 dotest devcom-6 "$testcvs add abc" \ 16538 "$SPROG add: scheduling file \`abc' for addition 16539 $SPROG add: use \`$SPROG commit' to add this file permanently" 16540 16541 dotest devcom-7 "$testcvs -q ci -m added" \ 16542 "$CVSROOT_DIRNAME/first-dir/abc,v <-- abc 16543 initial revision: 1\.1" 16544 16545 cd ../.. 16546 mkdir 2 16547 cd 2 16548 16549 dotest devcom-8 "$testcvs -q co first-dir" \ 16550 "U first-dir/abb 16551 U first-dir/abc" 16552 16553 cd first-dir 16554 dotest_fail devcom-9 "test -w abb" 16555 dotest_fail devcom-9b "test -w abc" 16556 16557 dotest devcom-10 "$testcvs editors" 16558 dotest devcom-11 "$testcvs edit abb" 16559 16560 # Here we test for the traditional ISO C ctime() date format. 16561 # We assume the C locale; I guess that works provided we set 16562 # LC_ALL at the start of this script but whether these 16563 # strings should vary based on locale does not strike me as 16564 # self-evident. 16565 dotest devcom-12 "$testcvs editors" \ 16566 "abb ${username} [SMTWF][uoehra][neduit] [JFAMSOND][aepuco][nbrylgptvc] [0-9 ][0-9] [0-9:]* [0-9][0-9][0-9][0-9] -0000 [-a-zA-Z_.0-9]* ${TESTDIR}/2/first-dir" 16567 16568 echo aaaa >>abb 16569 dotest devcom-13 "$testcvs ci -m modify abb" \ 16570 "${CVSROOT_DIRNAME}/first-dir/abb,v <-- abb 16571 new revision: 1\.2; previous revision: 1\.1" 16572 16573 # Unedit of a file not being edited should be a noop. 16574 dotest devcom-14 "$testcvs unedit abb" '' 16575 16576 dotest devcom-15 "$testcvs editors" "" 16577 16578 dotest_fail devcom-16 "test -w abb" 16579 16580 dotest devcom-17 "$testcvs edit abc" 16581 16582 # Unedit of an unmodified file. 16583 dotest devcom-18 "$testcvs unedit abc" 16584 dotest devcom-19 "$testcvs edit abc" 16585 16586 echo changedabc >abc 16587 # Try to unedit a modified file; cvs should ask for confirmation 16588 dotest devcom-20 "echo no | $testcvs unedit abc" \ 16589 "abc has been modified; revert changes? " 16590 16591 dotest devcom-21 "echo changedabc | cmp - abc" 16592 16593 # OK, now confirm the unedit 16594 dotest devcom-22 "echo yes |$testcvs unedit abc" \ 16595 "abc has been modified; revert changes? " 16596 16597 dotest devcom-23 "echo abc |cmp - abc" 16598 16599 dotest devcom-24 "$testcvs watchers" '' 16600 16601 # FIXME: This probably should be an error message instead 16602 # of silently succeeding and printing nothing. 16603 dotest devcom-a-nonexist "$testcvs watchers nonexist" '' 16604 16605 dotest devcom-a1 "$testcvs watch add" '' 16606 dotest devcom-a2 "$testcvs watchers" \ 16607 "abb $username edit unedit commit 16608 abc $username edit unedit commit" 16609 dotest devcom-a3 "$testcvs watch remove -a unedit abb" '' 16610 dotest devcom-a4 "$testcvs watchers abb" \ 16611 "abb $username edit commit" 16612 16613 # Check tagging and checking out while we have a CVS 16614 # directory in the repository. 16615 dotest devcom-t0 "${testcvs} -q tag tag" \ 16616 'T abb 16617 T abc' 16618 cd ../.. 16619 mkdir 3 16620 cd 3 16621 16622 # Test commented out because the bug it tests for is not fixed 16623 # The error is: 16624 # cvs watchers: cannot open CVS/Entries for reading: No such file or directory 16625 # cvs: ../../work/ccvs/src/fileattr.c:75: fileattr_read: Assertion `fileattr_stored_repos != ((void *)0)' failed. 16626 : dotest devcom-t-nonexist "${testcvs} watchers nonexist" fixme 16627 16628 dotest devcom-t1 "${testcvs} -q co -rtag first-dir/abb" \ 16629 'U first-dir/abb' 16630 cd .. 16631 # Since first-dir/abb is readonly, use -f. 16632 rm -rf 3 16633 16634 # Test checking out the directory rather than the file. 16635 mkdir 3 16636 cd 3 16637 dotest devcom-t2 "${testcvs} -q co -rtag first-dir" \ 16638 'U first-dir/abb 16639 U first-dir/abc' 16640 cd .. 16641 # Since the files are readonly, use -f. 16642 rm -rf 3 16643 16644 # Now do it again, after removing the val-tags file created 16645 # by devcom-t1 to force CVS to search the repository 16646 # containing CVS directories. 16647 rm ${CVSROOT_DIRNAME}/CVSROOT/val-tags 16648 mkdir 3 16649 cd 3 16650 dotest devcom-t3 "${testcvs} -q co -rtag first-dir" \ 16651 'U first-dir/abb 16652 U first-dir/abc' 16653 cd .. 16654 # Since the files are readonly, use -f. 16655 rm -rf 3 16656 16657 # Now remove all the file attributes 16658 cd 2/first-dir 16659 dotest devcom-b0 "${testcvs} watch off" '' 16660 dotest devcom-b1 "${testcvs} watch remove" '' 16661 # Test that CVS 1.6 and earlier can handle the repository. 16662 dotest_fail devcom-b2 "test -d ${CVSROOT_DIRNAME}/first-dir/CVS" 16663 16664 # Now test watching just some, not all, files. 16665 dotest devcom-some0 "${testcvs} watch on abc" '' 16666 cd ../.. 16667 mkdir 3 16668 cd 3 16669 dotest devcom-some1 "${testcvs} -q co first-dir" 'U first-dir/abb 16670 U first-dir/abc' 16671 dotest devcom-some2 "test -w first-dir/abb" '' 16672 dotest_fail devcom-some3 "test -w first-dir/abc" '' 16673 16674 dokeep 16675 cd .. 16676 # Use -f because of the readonly files. 16677 rm -rf 1 2 3 16678 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 16679 ;; 16680 16681 16682 16683 devcom2) 16684 # More watch tests, most notably setting watches on 16685 # files in various different states. 16686 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 16687 mkdir 1 16688 cd 1 16689 dotest devcom2-1 "${testcvs} -q co first-dir" '' 16690 cd first-dir 16691 16692 # This should probably be an error; setting a watch on a totally 16693 # unknown file is more likely to be a typo than intentional. 16694 # But that isn't the currently implemented behavior. 16695 dotest devcom2-2 "${testcvs} watch on w1" '' 16696 16697 touch w1 w2 w3 nw1 16698 dotest devcom2-3 "${testcvs} add w1 w2 w3 nw1" "${DOTSTAR}" 16699 # Letting the user set the watch here probably can be considered 16700 # a feature--although it leads to a few potentially strange 16701 # consequences like one user can set the watch and another actually 16702 # adds the file. 16703 dotest devcom2-4 "${testcvs} watch on w2" '' 16704 dotest devcom2-5 "${testcvs} -Q ci -m add-them" 16705 16706 # Note that this test differs in a subtle way from devcom-some0; 16707 # in devcom-some0 the watch is creating a new fileattr file, and 16708 # here we are modifying an existing one. 16709 dotest devcom2-6 "${testcvs} watch on w3" '' 16710 16711 # Now test that all the watches got set on the correct files 16712 # FIXME: CVS should have a way to report whether watches are 16713 # set, I think. The "check it out and see if it read-only" is 16714 # sort of OK, but is complicated by CVSREAD and doesn't help 16715 # if the file is added and not yet committed or some such. 16716 # Probably "cvs status" should report "watch: on" if watch is on 16717 # (and nothing if watch is off, so existing behavior is preserved). 16718 cd ../.. 16719 mkdir 2 16720 cd 2 16721 dotest devcom2-7 "${testcvs} -q co first-dir" 'U first-dir/nw1 16722 U first-dir/w1 16723 U first-dir/w2 16724 U first-dir/w3' 16725 dotest devcom2-8 "test -w first-dir/nw1" '' 16726 dotest_fail devcom2-9 "test -w first-dir/w1" '' 16727 dotest_fail devcom2-10 "test -w first-dir/w2" '' 16728 dotest_fail devcom2-11 "test -w first-dir/w3" '' 16729 16730 cd first-dir 16731 # OK, now we want to try files in various states with cvs edit. 16732 dotest_fail devcom2-12 "$testcvs edit w4" \ 16733 "${CPROG} edit: no such file w4; ignored" 16734 # Try the same thing with a per-directory watch set. 16735 dotest devcom2-13 "${testcvs} watch on" '' 16736 dotest_fail devcom2-14 "$testcvs edit w5" \ 16737 "${CPROG} edit: no such file w5; ignored" 16738 dotest devcom2-15 "${testcvs} editors" '' 16739 dotest devcom2-16 "${testcvs} editors w4" '' 16740 # Make sure there are no droppings lying around 16741 dotest devcom2-17 "cat ${CVSROOT_DIRNAME}/first-dir/CVS/fileattr" \ 16742 "Fw1 _watched= 16743 Fw2 _watched= 16744 Fw3 _watched= 16745 Fnw1 _watched= 16746 D _watched=" 16747 cd .. 16748 16749 # Do a little error testing 16750 dotest devcom2-18 "${testcvs} -q co -d first+dir first-dir" \ 16751 "U first${PLUS}dir/nw1 16752 U first${PLUS}dir/w1 16753 U first${PLUS}dir/w2 16754 U first${PLUS}dir/w3" 16755 cd first+dir 16756 dotest_fail devcom2-19 "${testcvs} edit" \ 16757 "${CPROG} \[edit aborted\]: current directory (${TESTDIR}/2/first${PLUS}dir) contains an invalid character (${PLUS},>;=\\\\t\\\\n)" 16758 16759 # Make sure there are no droppings lying around 16760 dotest devcom2-20 "cat ${CVSROOT_DIRNAME}/first-dir/CVS/fileattr" \ 16761 "Fw1 _watched= 16762 Fw2 _watched= 16763 Fw3 _watched= 16764 Fnw1 _watched= 16765 D _watched=" 16766 16767 dokeep 16768 cd ../.. 16769 # Use -f because of the readonly files. 16770 rm -rf 1 2 16771 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 16772 ;; 16773 16774 16775 16776 devcom3) 16777 # More watch tests, most notably handling of features designed 16778 # for future expansion. 16779 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 16780 mkdir 1 16781 cd 1 16782 16783 # Set up logging via the postwatch script hook. See the `info' test 16784 # for a list of tests where other script hooks are tested. 16785 dotest devcom3-init-1 "$testcvs -Q co CVSROOT" 16786 cd CVSROOT 16787 echo "ALL $TESTDIR/1/loggit %r %p %c" >>postwatch 16788 dotest devcom3-init-2 "$testcvs -Q ci -mlog-watch" 16789 cd .. # 1 16790 16791 cat >loggit <<EOF 16792 #!$TESTSHELL 16793 echo \${1+"\$@"} >>$TESTDIR/1/watch-log 16794 EOF 16795 # #^@&!^@ Cygwin. 16796 if test -n "$remotehost"; then 16797 $CVS_RSH $remotehost "chmod +x $TESTDIR/1/loggit" 16798 else 16799 chmod +x loggit 16800 fi 16801 16802 16803 16804 dotest devcom3-1 "$testcvs -q co first-dir" 16805 cd first-dir 16806 16807 touch w1 w2 16808 dotest devcom3-2 "${testcvs} add w1 w2" "${DOTSTAR}" 16809 dotest devcom3-3 "${testcvs} watch on w1 w2" '' 16810 dotest devcom3-4 "${testcvs} -Q ci -m add-them" 16811 16812 # OK, since we are about to delve into CVS's internals, make 16813 # sure that we seem to be correct about how they work. 16814 dotest devcom3-5 "cat ${CVSROOT_DIRNAME}/first-dir/CVS/fileattr" \ 16815 "Fw1 _watched= 16816 Fw2 _watched=" 16817 # Now write a few more lines, just as if we were a newer version 16818 # of CVS implementing some new feature. 16819 cat <<'EOF' >>${CVSROOT_DIRNAME}/first-dir/CVS/fileattr 16820 Enew line here 16821 G@#$^!@#=& 16822 EOF 16823 # Now get CVS to write to the fileattr file.... 16824 dotest devcom3-6 "${testcvs} watch off w1" '' 16825 # ...and make sure that it hasn't clobbered our new lines. 16826 # Note that writing these lines in another order would be OK 16827 # too. 16828 dotest devcom3-7 "cat ${CVSROOT_DIRNAME}/first-dir/CVS/fileattr" \ 16829 "Fw2 _watched= 16830 G@#..!@#=& 16831 Enew line here" 16832 16833 # See what CVS does when a file name is duplicated. The 16834 # behavior of all versions of CVS since file attributes were 16835 # implemented is that it nukes the duplications. This seems 16836 # reasonable enough, although it means it isn't clear how 16837 # useful duplicates would be for purposes of future 16838 # expansion. But in the interests of keeping behaviors 16839 # predictable, might as well test for it, I guess. 16840 echo 'Fw2 duplicate=' >>${CVSROOT_DIRNAME}/first-dir/CVS/fileattr 16841 dotest devcom3-8 "${testcvs} watch on w1" '' 16842 dotest devcom3-9 "cat ${CVSROOT_DIRNAME}/first-dir/CVS/fileattr" \ 16843 "Fw2 _watched= 16844 Fw1 _watched= 16845 Enew line here 16846 G@#..!@#=&" 16847 16848 # Now test disconnected "cvs edit" and the format of the 16849 # CVS/Notify file. 16850 if $remote; then 16851 CVS_SERVER_save=$CVS_SERVER 16852 CVS_SERVER=$TESTDIR/cvs-none; export CVS_SERVER 16853 16854 # The ${DOTSTAR} below matches the exact CVS server error message, 16855 # which in :fork: mode is: 16856 # "$SPROG \[edit aborted\]: cannot exec $TESTDIR/cvs-none: ${DOTSTAR}", 16857 # but which is: 16858 # "bash2: line 1: $TESTDIR/cvs-none: No such file or directory" 16859 # when testing across an :ext:/ssh link to my Linux 2.4 box. 16860 # 16861 # I can't even test for the second part of the error message, 16862 # from the client, which varies more consistently, usually either 16863 # "end of file from server" (if the process doing the exec exits 16864 # before the parent gets around to sending data to it) or 16865 # "received broken pipe signal" (if it is the other way around), 16866 # since HP-UX fails to output it. 16867 dotest_fail devcom3-9ar "$testcvs edit w1 2>/dev/null" 16868 dotest devcom3-9br "test -w w1" 16869 dotest devcom3-9cr "cat CVS/Notify" \ 16870 "Ew1 [SMTWF][uoehra][neduit] [JFAMSOND][aepuco][nbrylgptvc] [0-9 ][0-9] [0-9:]* [0-9][0-9][0-9][0-9] -0000 [-a-zA-Z_.0-9]* ${TESTDIR}/1/first-dir EUC" 16871 CVS_SERVER=${CVS_SERVER_save}; export CVS_SERVER 16872 if $proxy; then 16873 dotest_fail devcom3-9dp "$testcvs -q update" \ 16874 "This CVS server does not support disconnected \`cvs edit'\. For now, remove all \`CVS/Notify' files in your workspace and try your command again\." 16875 dotest devcom3-9ep "test -f CVS/Notify" 16876 rm CVS/Notify 16877 dotest devcom3-9hp "$testcvs watchers w1" 16878 else 16879 dotest devcom3-9dr "$testcvs -q update" 16880 dotest_fail devcom3-9er "test -f CVS/Notify" 16881 dotest devcom3-9fr "$testcvs watchers w1" \ 16882 "w1 $username tedit tunedit tcommit" 16883 fi 16884 dotest devcom3-9gr "$testcvs unedit w1" 16885 dotest devcom3-9hr "$testcvs watchers w1" 16886 fi 16887 16888 cd ../.. 16889 # OK, now change the tab to a space, and see that CVS gives 16890 # a reasonable error (this is database corruption but CVS should 16891 # not lose its mind). 16892 sed -e 's/Fw2 /Fw2 /' <$CVSROOT_DIRNAME/first-dir/CVS/fileattr \ 16893 >$CVSROOT_DIRNAME/first-dir/CVS/fileattr.new 16894 modify_repo mv $CVSROOT_DIRNAME/first-dir/CVS/fileattr.new \ 16895 $CVSROOT_DIRNAME/first-dir/CVS/fileattr 16896 mkdir 2; cd 2 16897 dotest_fail devcom3-10 "${testcvs} -Q co ." \ 16898 "${SPROG} \[checkout aborted\]: file attribute database corruption: tab missing in ${CVSROOT_DIRNAME}/first-dir/CVS/fileattr" 16899 16900 notifyworks=false 16901 if $remote; then 16902 if $proxy; then :; else 16903 notifyworks=: 16904 fi 16905 fi 16906 if $notifyworks; then 16907 dotest devcom3-postwatch-examine-1r "cat $TESTDIR/1/watch-log" \ 16908 "$CVSROOT_DIRNAME first-dir watch 16909 $CVSROOT_DIRNAME first-dir watch 16910 $CVSROOT_DIRNAME first-dir watch 16911 $CVSROOT_DIRNAME first-dir update 16912 $CVSROOT_DIRNAME first-dir server" 16913 else 16914 dotest devcom3-postwatch-examine-1 "cat $TESTDIR/1/watch-log" \ 16915 "$CVSROOT_DIRNAME first-dir watch 16916 $CVSROOT_DIRNAME first-dir watch 16917 $CVSROOT_DIRNAME first-dir watch" 16918 fi 16919 16920 dokeep 16921 restore_adm 16922 cd .. 16923 # Use -f because of the readonly files. 16924 rm -rf 1 2 16925 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 16926 ;; 16927 16928 16929 16930 watch4) 16931 # More watch tests, including adding directories. 16932 mkdir 1; cd 1 16933 dotest watch4-0a "${testcvs} -q co -l ." '' 16934 mkdir first-dir 16935 dotest watch4-0b "${testcvs} add first-dir" \ 16936 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 16937 16938 cd first-dir 16939 dotest watch4-1 "${testcvs} watch on" '' 16940 # This is just like the 173 test 16941 touch file1 16942 dotest watch4-2 "$testcvs add file1" \ 16943 "$SPROG add: scheduling file .file1. for addition 16944 $SPROG add: use .$SPROG commit. to add this file permanently" 16945 dotest watch4-3 "$testcvs -q ci -m add" \ 16946 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 16947 initial revision: 1\.1" 16948 # Now test the analogous behavior for directories. 16949 mkdir subdir 16950 dotest watch4-4 "${testcvs} add subdir" \ 16951 "Directory ${CVSROOT_DIRNAME}/first-dir/subdir added to the repository" 16952 cd subdir 16953 touch sfile 16954 dotest watch4-5 "${testcvs} add sfile" \ 16955 "${SPROG} add: scheduling file .sfile. for addition 16956 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 16957 dotest watch4-6 "${testcvs} -q ci -m add" \ 16958 "$CVSROOT_DIRNAME/first-dir/subdir/sfile,v <-- sfile 16959 initial revision: 1\.1" 16960 cd ../../.. 16961 mkdir 2; cd 2 16962 dotest watch4-7 "${testcvs} -q co first-dir" "U first-dir/file1 16963 U first-dir/subdir/sfile" 16964 dotest_fail watch4-8 "test -w first-dir/file1" '' 16965 dotest_fail watch4-9 "test -w first-dir/subdir/sfile" '' 16966 cd first-dir 16967 dotest watch4-10 "${testcvs} edit file1" '' 16968 echo 'edited in 2' >file1 16969 cd ../.. 16970 16971 cd 1/first-dir 16972 16973 # NOTE: I'm leaving in '' as acceptable 16974 # to maintain partial compatibility with CVS versions 16975 # prior to the edit check patch. 16976 editorsLineRE="file1 $username [SMTWF][uoehra][neduit] [JFAMSOND][aepuco][nbrylgptvc] [0-9 ][0-9] [0-9:]* [0-9][0-9][0-9][0-9] -0000 $hostname $TESTDIR/2/first-dir" 16977 dotest watch4-11 "$testcvs edit file1" "$editorsLineRE" 16978 16979 echo 'edited in 1' >file1 16980 dotest watch4-12 "${testcvs} -q ci -m edit-in-1" \ 16981 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 16982 new revision: 1\.2; previous revision: 1\.1" 16983 cd ../.. 16984 cd 2/first-dir 16985 dotest watch4-13 "${testcvs} -q update" \ 16986 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 16987 retrieving revision 1\.1 16988 retrieving revision 1\.2 16989 Merging differences between 1\.1 and 1\.2 into file1 16990 rcsmerge: warning: conflicts during merge 16991 ${SPROG} update: conflicts found in file1 16992 C file1" 16993 if (echo yes | ${testcvs} unedit file1) >>${LOGFILE}; then 16994 pass watch4-14 16995 else 16996 fail watch4-15 16997 fi 16998 # This could plausibly be defined to either go back to the revision 16999 # which was cvs edit'd (the status quo), or back to revision 1.2 17000 # (that is, the merge could update CVS/Base/file1). We pick the 17001 # former because it is easier to implement, not because we have 17002 # thought much about which is better. 17003 dotest watch4-16 "cat file1" '' 17004 # Make sure CVS really thinks we are at 1.1. 17005 dotest watch4-17 "${testcvs} -q update" "U file1" 17006 dotest watch4-18 "cat file1" "edited in 1" 17007 cd ../.. 17008 17009 # As a sanity check, make sure we are in the right place. 17010 dotest watch4-cleanup-1 "test -d 1" 17011 dotest watch4-cleanup-1 "test -d 2" 17012 17013 dokeep 17014 # Specify -f because of the readonly files. 17015 rm -rf 1 2 17016 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 17017 ;; 17018 17019 17020 17021 watch5) 17022 # This test was designed to catch a problem in server 17023 # mode where an 'cvs edit'd file disappeared from the 17024 # CVS/Base directory when 'cvs status' or 'cvs update' 17025 # was called on the file after the file was touched. 17026 # 17027 # This test is still here to prevent the bug from 17028 # being reintroduced. 17029 # 17030 # The rationale for having CVS/Base stay around is that 17031 # CVS/Base should be there if "cvs edit" has been run (this 17032 # may be helpful as a "cvs editors" analogue, it is 17033 # client-side and based on working directory not username; 17034 # but more importantly, it isn't clear why a "cvs status" 17035 # would act like an unedit, and even if it does, it would 17036 # need to make the file read-only again). 17037 17038 mkdir watch5; cd watch5 17039 dotest watch5-0a "${testcvs} -q co -l ." '' 17040 mkdir first-dir 17041 dotest watch5-0b "${testcvs} add first-dir" \ 17042 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 17043 17044 cd first-dir 17045 dotest watch5-1 "${testcvs} watch on" '' 17046 # This is just like the 173 test 17047 touch file1 17048 dotest watch5-2 "${testcvs} add file1" \ 17049 "${SPROG} add: scheduling file .file1. for addition 17050 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 17051 dotest watch5-3 "${testcvs} -q ci -m add" \ 17052 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 17053 initial revision: 1\.1" 17054 dotest watch5-4 "${testcvs} edit file1" '' 17055 dotest watch5-5 "test -f CVS/Base/file1" '' 17056 if ${testcvs} status file1 >>${LOGFILE} 2>&1; then 17057 pass watch5-6 17058 else 17059 fail watch5-6 17060 fi 17061 dotest watch5-7 "test -f CVS/Base/file1" '' 17062 17063 # Here's where the file used to dissappear 17064 touch file1 17065 if ${testcvs} status file1 >>${LOGFILE} 2>&1; then 17066 pass watch5-8 17067 else 17068 fail watch5-8 17069 fi 17070 dotest watch5-10 "test -f CVS/Base/file1" '' 17071 17072 # Make sure update won't remove the file either 17073 touch file1 17074 dotest watch5-11 "${testcvs} -q up" '' 17075 dotest watch5-12 "test -f CVS/Base/file1" '' 17076 17077 dokeep 17078 cd ../.. 17079 rm -r watch5 17080 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 17081 ;; 17082 17083 17084 17085 watch6-0) 17086 17087 # Make sure that default attributes are being set properly. 17088 # Specifying a directory has, it seems, never worked, 17089 # and 1.12.10 broke it completely. 17090 mkdir watch6-0; cd watch6-0 17091 17092 dotest watch6-0-setup-1 "$testcvs -Q co -ldtop ." 17093 cd top 17094 mkdir watch6-0 17095 dotest watch6-0-setup-2 "$testcvs -Q add watch6-0" 17096 cd watch6-0 17097 dotest watch6-0-1 "$testcvs watch add" 17098 dotest watch6-0-2 "grep -qE '^D' $CVSROOT_DIRNAME/watch6-0/CVS/fileattr" 17099 dotest watch6-0-3 "$testcvs watch remove" 17100 dotest_fail watch6-0-4 "grep -qE '^D' $CVSROOT_DIRNAME/watch6-0/CVS/fileattr 2>/dev/null" 17101 17102 dotest watch6-0-5 "$testcvs watch add ." 17103 dotest watch6-0-6 "grep -qE '^D' $CVSROOT_DIRNAME/watch6-0/CVS/fileattr" 17104 dotest watch6-0-7 "$testcvs watch remove ." 17105 dotest_fail watch6-0-8 "grep -qE '^D' $CVSROOT_DIRNAME/watch6-0/CVS/fileattr 2>/dev/null" 17106 17107 # OK, basic add/remove work. Now, make sure it works with named directories 17108 mkdir dir1 17109 mkdir dir2 17110 mkdir dir3 17111 echo afile>afile 17112 $testcvs -Q add afile dir1 dir2 dir3 17113 $testcvs -Q ci -m "Adding test files" 17114 17115 # Current directory should not be watched, but there should be a watch on the file, 17116 # and on dir1 & dir2, but not on dir3. 17117 dotest watch6-0-9 "$testcvs -Q watch add afile dir1 dir2" 17118 dotest_fail watch6-0-10 "grep -qE '^D' $CVSROOT_DIRNAME/watch6-0/CVS/fileattr 2>/dev/null" 17119 dotest watch6-0-11 "grep -qE '^Fafile' $CVSROOT_DIRNAME/watch6-0/CVS/fileattr" 17120 dotest watch6-0-12 "grep -qE '^D' $CVSROOT_DIRNAME/watch6-0/dir1/CVS/fileattr" 17121 dotest watch6-0-13 "grep -qE '^D' $CVSROOT_DIRNAME/watch6-0/dir2/CVS/fileattr" 17122 dotest_fail watch6-0-12 "grep -qE '^D' $CVSROOT_DIRNAME/watch6-0/dir3/CVS/fileattr 2>/dev/null" 17123 17124 dokeep 17125 cd ../../.. 17126 rm -rf watch6-0 17127 modify_repo rm -rf $CVSROOT_DIRNAME/watch6-0 17128 ;; 17129 17130 17131 17132 watch6) 17133 # Check that `cvs watch on' does not reset the fileattr file. 17134 mkdir watch6; cd watch6 17135 17136 dotest watch6-setup-1 "$testcvs -Q co -ldtop ." 17137 cd top 17138 mkdir watch6 17139 dotest watch6-setup-2 "$testcvs -Q add watch6" 17140 17141 # I don't recall why I had these next 3 lines. 17142 cd .. 17143 dotest watch6-setup-3 "$testcvs -Q co watch6" 17144 cd watch6 17145 17146 mkdir subdir 17147 dotest watch6-setup-4 "$testcvs -Q add subdir" 17148 cd subdir 17149 17150 # START watch add/remove sequence 17151 dotest watch6-1 "$testcvs -Q watch add" 17152 dotest watch6-2 \ 17153 "grep '_watchers' $CVSROOT_DIRNAME/watch6/subdir/CVS/fileattr >/dev/null" 17154 17155 dotest watch6-3 "$testcvs watch on" 17156 dotest watch6-4 \ 17157 "grep '_watchers' $CVSROOT_DIRNAME/watch6/subdir/CVS/fileattr >/dev/null" 17158 dotest watch6-5 \ 17159 "grep '_watched' $CVSROOT_DIRNAME/watch6/subdir/CVS/fileattr >/dev/null" 17160 17161 dotest watch6-6 "$testcvs watch off" 17162 dotest watch6-7 \ 17163 "grep '_watchers' $CVSROOT_DIRNAME/watch6/subdir/CVS/fileattr >/dev/null" 17164 dotest_fail watch6-8 \ 17165 "grep '_watched' $CVSROOT_DIRNAME/watch6/subdir/CVS/fileattr >/dev/null" 17166 17167 dotest watch6-9 "$testcvs watch remove" 17168 dotest_fail watch6-10 \ 17169 "test -d $CVSROOT_DIRNAME/test-directory/subdir/CVS" 17170 dotest_fail watch6-11 \ 17171 "test -f $CVSROOT_DIRNAME/test-directory/subdir/CVS/fileattr" 17172 # END watch add/remove sequence 17173 17174 echo Hi there >afile 17175 dotest watch6-12 "$testcvs -Q add afile" 17176 dotest watch6-13 "$testcvs ci -m 'A file' afile" \ 17177 "$CVSROOT_DIRNAME/watch6/subdir/afile,v <-- afile 17178 initial revision: 1.1" 17179 17180 # START watch add/remove sequence 17181 dotest watch6-14 "$testcvs -Q watch add" 17182 dotest watch6-15 \ 17183 "grep '_watchers' $CVSROOT_DIRNAME/watch6/subdir/CVS/fileattr >/dev/null" 17184 17185 dotest watch6-16 "$testcvs watch on" 17186 dotest watch6-17 \ 17187 "grep '_watchers' $CVSROOT_DIRNAME/watch6/subdir/CVS/fileattr >/dev/null" 17188 dotest watch6-18 \ 17189 "grep '_watched' $CVSROOT_DIRNAME/watch6/subdir/CVS/fileattr >/dev/null" 17190 17191 dotest watch6-19 "$testcvs watch off" 17192 dotest watch6-20 \ 17193 "grep '_watchers' $CVSROOT_DIRNAME/watch6/subdir/CVS/fileattr >/dev/null" 17194 dotest_fail watch6-21 \ 17195 "grep '_watched' $CVSROOT_DIRNAME/watch6/subdir/CVS/fileattr >/dev/null" 17196 17197 dotest watch6-22 "$testcvs watch remove" 17198 dotest_fail watch6-23 \ 17199 "test -d $CVSROOT_DIRNAME/test-directory/subdir/CVS" 17200 dotest_fail watch6-24 \ 17201 "test -f $CVSROOT_DIRNAME/test-directory/subdir/CVS/fileattr" 17202 # END watch add/remove sequence 17203 17204 if $keep; then 17205 echo Keeping $TESTDIR and exiting due to --keep 17206 exit 0 17207 fi 17208 cd ../../.. 17209 rm -r watch6 17210 modify_repo rm -rf $CVSROOT_DIRNAME/watch6 17211 ;; 17212 17213 17214 17215 edit-check) 17216 # This tests the edit -c/-f and related features. 17217 17218 mkdir edit-check; cd edit-check 17219 dotest edit-check-0a "$testcvs -q co -l ." 17220 mkdir first-dir 17221 dotest edit-check-0b "$testcvs add first-dir" \ 17222 "Directory $CVSROOT_DIRNAME/first-dir added to the repository" 17223 17224 cd first-dir 17225 dotest edit-check-1 "$testcvs watch on" 17226 17227 echo foo > file1 17228 dotest edit-check-2a "$testcvs add -minitial file1" \ 17229 "$SPROG [a-z]*: scheduling file .file1. for addition 17230 $SPROG [a-z]*: use .$SPROG commit. to add this file permanently" 17231 17232 dotest edit-check-2b "$testcvs commit -m 'c1' file1" \ 17233 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 17234 initial revision: 1\.1" 17235 17236 editorsLineRE="file1 $username [SMTWF][uoehra][neduit] [JFAMSOND][aepuco][nbrylgptvc] [0-9 ][0-9] [0-9:]* [0-9][0-9][0-9][0-9] -0000 $hostname $TESTDIR/edit-check/first-dir" 17237 17238 R_editorsLineRE="first-dir/file1 $username [SMTWF][uoehra][neduit] [JFAMSOND][aepuco][nbrylgptvc] [0-9 ][0-9] [0-9:]* [0-9][0-9][0-9][0-9] -0000 $hostname $TESTDIR/edit-check" 17239 F3_editorsLineRE="second-dir/file3 $username [SMTWF][uoehra][neduit] [JFAMSOND][aepuco][nbrylgptvc] [0-9 ][0-9] [0-9:]* [0-9][0-9][0-9][0-9] -0000 $hostname $TESTDIR/edit-check/first-dir" 17240 17241 A_editorsLineRE="file1 [-a-zA-Z0-9_]* [SMTWF][uoehra][neduit] [JFAMSOND][aepuco][nbrylgptvc] [0-9 ][0-9] [0-9:]* [0-9][0-9][0-9][0-9] -0000 $hostname $TESTDIR[0-9]*/edit-check/first-dir" 17242 17243 AF_editorsLineRE="file[12] [-a-zA-Z0-9_]* [SMTWF][uoehra][neduit] [JFAMSOND][aepuco][nbrylgptvc] [0-9 ][0-9] [0-9:]* [0-9][0-9][0-9][0-9] -0000 $hostname $TESTDIR/edit-check/first-dir" 17244 17245 NF_editorsLineRE=" [-a-zA-Z0-9_]* [SMTWF][uoehra][neduit] [JFAMSOND][aepuco][nbrylgptvc] [0-9 ][0-9] [0-9:]* [0-9][0-9][0-9][0-9] -0000 $hostname $TESTDIR/edit-check/first-dir" 17246 17247 dotest edit-check-3 "$testcvs edit file1" 17248 dotest edit-check-4 "$testcvs edit file1" "$editorsLineRE" 17249 17250 dotest_fail edit-check-5a "$testcvs edit -c file1" \ 17251 "$editorsLineRE 17252 $SPROG edit: Skipping file \`file1' due to existing editors\." 17253 17254 dotest edit-check-5b "$testcvs editors" "$editorsLineRE" 17255 17256 dotest edit-check-6a "$testcvs edit -c -f file1" "$editorsLineRE" 17257 dotest edit-check-6b "$testcvs editors" "$editorsLineRE" 17258 17259 dotest edit-check-7a "cat file1" "foo" 17260 echo "bar" > file1 17261 dotest_fail edit-check-7b "$testcvs edit -c file1" \ 17262 "$editorsLineRE 17263 $SPROG edit: Skipping file \`file1' due to existing editors\." 17264 dotest edit-check-7c "cat file1" "bar" 17265 17266 # edit-check-8a has issues. It copies the current (modified) 17267 # version of the file into CVS/Base, so that edit-check-9a and 17268 # edit-check-9b don't get the expected results. 17269 # Maybe unedit is *supposed* to return it to the state 17270 # it was in before the edit (even if it was modified), 17271 # but while that has a certain symetry, it doesn't seem 17272 # to pass the intuitive-usability test. 17273 # This aspect of the general problem could 17274 # be fixed by not overwriting pre-existing Base versions, 17275 # but it still wouldn't fix it if the user manually 17276 # modified the file before doing the first edit. 17277 # Because of the possibility that this is working as 17278 # intended, I'm just commenting out the test, not fixing 17279 # the issue. 17280 #dotest edit-check-8a "${testcvs} edit -c -f file1" \ 17281 # "${editorsLineRE}" 17282 dotest edit-check-8b "$testcvs editors" "$editorsLineRE" 17283 17284 dotest edit-check-9a "echo yes | $testcvs unedit file1" \ 17285 "file1 has been modified; revert changes? " 17286 dotest edit-check-9b "$testcvs editors" 17287 dotest edit-check-9c "cat file1" "foo" 17288 17289 dotest edit-check-10 "$testcvs edit -c file1" 17290 dotest_fail edit-check-11 "$testcvs edit -c file1" \ 17291 "$editorsLineRE 17292 $SPROG edit: Skipping file \`file1' due to existing editors\." 17293 17294 echo "morefoo" > file1 17295 dotest edit-check-12a "$testcvs commit -m 'c2' -c file1" \ 17296 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 17297 new revision: 1\.2; previous revision: 1\.1" 17298 dotest edit-check-12b "$testcvs editors file1" 17299 17300 chmod u+w file1 17301 echo "morebar" > file1 17302 dotest_fail edit-check-13a "$testcvs commit -m 'c3' -c file1" \ 17303 "$SPROG [a-z]*: Valid edit does not exist for file1 17304 $SPROG \[[a-z]* aborted\]: correct above errors first!" 17305 dotest edit-check-13b "$testcvs editors file1" 17306 17307 dotest edit-check-14a "$testcvs commit -m 'c4' -c -f file1" \ 17308 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 17309 new revision: 1\.3; previous revision: 1\.2" 17310 dotest edit-check-14b "$testcvs editors file1" 17311 17312 dotest edit-check-15 "$testcvs edit -c file1" 17313 cd .. 17314 17315 dotest edit-check-16a "echo yes | $testcvs release -d first-dir" \ 17316 "You have \[0\] altered files in this repository. 17317 Are you sure you want to release (and delete) directory \`first-dir': " 17318 dotest edit-check-16b "$testcvs -q update -d first-dir" \ 17319 "U first-dir/file1" 17320 cd first-dir 17321 dotest edit-check-16c "$testcvs editors file1" 17322 17323 cd .. 17324 dotest edit-check-17a "$testcvs edit -c" 17325 dotest_fail edit-check-17b "$testcvs edit -c" \ 17326 "$R_editorsLineRE 17327 $SPROG edit: Skipping file \`first-dir/file1' due to existing editors\." 17328 dotest edit-check-17c "$testcvs edit -c -f" "$R_editorsLineRE" 17329 17330 echo "more changes" > first-dir/file1 17331 dotest edit-check-18a "$testcvs -q commit -m 'c5' -c" \ 17332 "$CVSROOT_DIRNAME/first-dir/file1,v <-- first-dir/file1 17333 new revision: 1\.4; previous revision: 1\.3" 17334 dotest edit-check-18b "$testcvs editors" 17335 17336 cd first-dir 17337 17338 # Manually fake another editor: 17339 17340 # Try to gaurantee a seperate name for an "other" user editting 17341 # the file. 17342 otherUser="dummyUser" 17343 if [ x"$USER" = x"$otherUser" ] ; then 17344 otherUser="dummyUser2" 17345 fi 17346 if [ x"$LOGNAME" = x"$otherUser" ] ; then 17347 otherUser="dummyUser3" 17348 fi 17349 tabChar=' ' 17350 17351 backupFileattrName="$CVSROOT_DIRNAME/first-dir/CVS/bak.fileattr.$$" 17352 mv $CVSROOT_DIRNAME/first-dir/CVS/fileattr $backupFileattrName 17353 17354 otherDir="`pwd | sed 's%/edit-check/%2/edit-check/%'`" 17355 echo \ 17356 "Ffile1${tabChar}_watched=;_editors=$otherUser>Sat Oct 6 04:25:00 2001 -0000+`hostname`+$otherDir;_watchers=$otherUser>tedit+tunedit+tcommit 17357 D${tabChar}_watched=" > $CVSROOT_DIRNAME/first-dir/CVS/fileattr 17358 17359 editFileattrName="$CVSROOT_DIRNAME/first-dir/CVS/edit.fileattr.$$" 17360 cp $CVSROOT_DIRNAME/first-dir/CVS/fileattr $editFileattrName 17361 17362 O_editorsLineRE="file1 $otherUser [SMTWF][uoehra][neduit] [JFAMSOND][aepuco][nbrylgptvc] [0-9 ][0-9] [0-9:]* [0-9][0-9][0-9][0-9] -0000 $hostname $TESTDIR[0-9]/edit-check/first-dir" 17363 17364 dotest edit-check-19a "$testcvs edit file1" "$O_editorsLineRE" 17365 dotest edit-check-19b "$testcvs editors" \ 17366 "$A_editorsLineRE 17367 $NF_editorsLineRE" 17368 17369 dotest edit-check-20a "$testcvs unedit file1" 17370 dotest edit-check-20b "$testcvs editors" "$O_editorsLineRE" 17371 17372 dotest_fail edit-check-21a "$testcvs edit -c file1" \ 17373 "$O_editorsLineRE 17374 $SPROG edit: Skipping file \`file1' due to existing editors\." 17375 dotest edit-check-21b "$testcvs editors" "$O_editorsLineRE" 17376 17377 dotest edit-check-22a "$testcvs edit -c -f file1" "$O_editorsLineRE" 17378 dotest edit-check-22b "$testcvs editors" \ 17379 "$A_editorsLineRE 17380 $NF_editorsLineRE" 17381 17382 echo "Yet another change" >file1 17383 17384 dotest_fail edit-check-23a "$testcvs edit -c" \ 17385 "$A_editorsLineRE 17386 $NF_editorsLineRE 17387 $SPROG edit: Skipping file \`file1' due to existing editors\." 17388 17389 dotest edit-check-23b "$testcvs editors" \ 17390 "$A_editorsLineRE 17391 $NF_editorsLineRE" 17392 17393 dotest edit-check-24a "echo y | $testcvs unedit" \ 17394 "file1 has been modified; revert changes? " 17395 dotest edit-check-24b "$testcvs editors" "$O_editorsLineRE" 17396 dotest edit-check-24c "cat file1" "more changes" 17397 17398 dotest edit-check-25a "$testcvs unedit" 17399 dotest edit-check-25b "$testcvs editors" "$O_editorsLineRE" 17400 dotest_fail edit-check-25c "test -w file1" 17401 17402 dotest edit-check-26a "$testcvs edit file1" "$O_editorsLineRE" 17403 dotest edit-check-26b "$testcvs editors file1" \ 17404 "$A_editorsLineRE 17405 $NF_editorsLineRE" 17406 dotest edit-check-26c "test -w file1" 17407 17408 echo "Yet more changes" >file1 17409 dotest edit-check-27a "$testcvs -q commit -mmsg -c file1" \ 17410 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 17411 new revision: 1\.5; previous revision: 1\.4" 17412 dotest edit-check-27b "$testcvs editors" "$O_editorsLineRE" 17413 17414 chmod u+w file1 17415 echo "unofficial change" >file1 17416 17417 dotest_fail edit-check-28a "$testcvs -q commit -mmsg -c" \ 17418 "$SPROG commit: Valid edit does not exist for file1 17419 $SPROG \[commit aborted\]: correct above errors first!" 17420 dotest edit-check-28b "$testcvs editors" "$O_editorsLineRE" 17421 17422 dotest edit-check-29a "$testcvs -q commit -mmsg -c -f" \ 17423 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 17424 new revision: 1\.6; previous revision: 1\.5" 17425 dotest edit-check-29b "$testcvs editors" "$O_editorsLineRE" 17426 dotest edit-check-29c "cat file1" "unofficial change" 17427 17428 modify_repo cp "$backupFileattrName" \ 17429 $CVSROOT_DIRNAME/first-dir/CVS/fileattr 17430 dotest edit-check-30 "$testcvs editors" 17431 17432 # Make sure earlier unreported editors are reported properly 17433 # with the edit-check code running. 17434 if $remote; then 17435 CVS_SERVER_SAVED=$CVS_SERVER 17436 CVS_SERVER=$TESTDIR/cvs-none; export CVS_SERVER 17437 17438 # The $DOTSTAR matches the exact exec error message 17439 # (which varies) and either "end of file from server" 17440 # (if the process doing the exec exits before the parent 17441 # gets around to sending data to it) or "broken pipe" (if it 17442 # is the other way around). 17443 dotest_fail edit-check-31ar "$testcvs edit file1" \ 17444 "$SPROG \[edit aborted\]: cannot exec $TESTDIR/cvs-none: $DOTSTAR" 17445 dotest edit-check-31br "test -w file1" 17446 dotest edit-check-31cr "cat CVS/Notify" \ 17447 "Efile1 [SMTWF][uoehra][neduit] [JFAMSOND][aepuco][nbrylgptvc] [0-9 ][0-9] [0-9:]* [0-9][0-9][0-9][0-9] -0000 [-a-zA-Z_.0-9]* $TESTDIR/edit-check/first-dir EUC" 17448 CVS_SERVER=$CVS_SERVER_SAVED; export CVS_SERVER 17449 17450 dotest_fail edit-check-31dr "$testcvs edit -c file1" \ 17451 "$editorsLineRE 17452 $SPROG edit: Skipping file \`file1' due to existing editors\." 17453 dotest edit-check-31er "$testcvs editors file1" "$editorsLineRE" 17454 dotest edit-check-31fr "$testcvs unedit file1" 17455 fi 17456 17457 # Make sure it isn't confused by handling multiple files at 17458 # the same time: 17459 echo file2Data >file2 17460 17461 dotest edit-check-32a "$testcvs add file2" \ 17462 "$SPROG [a-z]*: scheduling file .file2. for addition 17463 $SPROG [a-z]*: use .$SPROG commit. to add this file permanently" 17464 17465 dotest edit-check-32b "$testcvs commit -m 'c1' file2" \ 17466 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 17467 initial revision: 1\.1" 17468 17469 mkdir second-dir 17470 dotest edit-check-32c "$testcvs add second-dir" \ 17471 "Directory $CVSROOT_DIRNAME/first-dir/second-dir added to the repository" 17472 cd second-dir 17473 echo ThirdFile >file3 17474 17475 dotest edit-check-32d "$testcvs add file3" \ 17476 "$SPROG [a-z]*: scheduling file .file3. for addition 17477 $SPROG [a-z]*: use .$SPROG commit. to add this file permanently" 17478 17479 dotest edit-check-32f "$testcvs commit -m 'c1' file3" \ 17480 "$CVSROOT_DIRNAME/first-dir/second-dir/file3,v <-- file3 17481 initial revision: 1\.1" 17482 dotest_fail edit-check-32g "test -w file3" 17483 17484 cd .. 17485 17486 dotest edit-check-33a "$testcvs edit -c" 17487 17488 dotest edit-check-33b "$testcvs editors" \ 17489 "$AF_editorsLineRE 17490 $AF_editorsLineRE 17491 $F3_editorsLineRE" 17492 dotest edit-check-33c "test -w second-dir/file3" 17493 17494 dotest_fail edit-check-34a "$testcvs edit -c file1 file2" \ 17495 "$AF_editorsLineRE 17496 $SPROG edit: Skipping file \`file1' due to existing editors\. 17497 $AF_editorsLineRE 17498 $SPROG edit: Skipping file \`file2' due to existing editors\." 17499 17500 dotest edit-check-34b "$testcvs editors file1 file2" \ 17501 "$editorsLineRE 17502 $AF_editorsLineRE" 17503 17504 dotest edit-check-35a "$testcvs unedit file1" 17505 dotest edit-check-35b "$testcvs editors" \ 17506 "$AF_editorsLineRE 17507 $F3_editorsLineRE" 17508 dotest edit-check-35c "test -w second-dir/file3" 17509 17510 dotest edit-check-36a "$testcvs unedit" 17511 dotest edit-check-36b "$testcvs editors" 17512 dotest_fail edit-check-36c "test -w second-dir/file3" 17513 17514 dokeep 17515 cd ../.. 17516 rm -rf edit-check 17517 rm -rf $CVSROOT_DIRNAME/first-dir 17518 ;; 17519 17520 17521 17522 unedit-without-baserev) 17523 mkdir 1; cd 1 17524 module=x 17525 17526 file=m 17527 echo foo > $file 17528 dotest unedit-without-baserev-1 \ 17529 "$testcvs -Q import -m . $module X Y" '' 17530 dotest unedit-without-baserev-2 "$testcvs -Q co $module" '' 17531 cd $module 17532 17533 dotest unedit-without-baserev-3 "$testcvs -Q edit $file" '' 17534 17535 echo add a line >> $file 17536 rm -f CVS/Baserev 17537 17538 # This will fail on most systems. 17539 dotest unedit-without-baserev-4 "echo yes |${testcvs} -Q unedit $file" \ 17540 "m has been modified; revert changes${QUESTION} ${CPROG} unedit: m not mentioned in CVS/Baserev 17541 ${CPROG} unedit: run update to complete the unedit" 17542 17543 # SunOS4.1.4 systems make it this far, but with a corrupted 17544 # CVS/Entries file. Demonstrate the corruption! 17545 dotest unedit-without-baserev-5 "cat CVS/Entries" \ 17546 "/$file/1\.1\.1\.1/${DOTSTAR}" 17547 17548 dotest unedit-without-baserev-6 "${testcvs} -q update" \ 17549 "$SPROG update: warning: \`m' was lost 17550 U m" 17551 17552 # OK, those were the easy cases. Now tackle the hard one 17553 # (the reason that CVS/Baserev was invented rather than just 17554 # getting the revision from CVS/Entries). This is very 17555 # similar to watch4-10 through watch4-18 but with Baserev 17556 # missing. 17557 cd ../.. 17558 mkdir 2; cd 2 17559 dotest unedit-without-baserev-7 "${testcvs} -Q co x" '' 17560 cd x 17561 17562 dotest unedit-without-baserev-10 "${testcvs} edit m" '' 17563 echo 'edited in 2' >m 17564 cd ../.. 17565 17566 cd 1/x 17567 17568 editorsLineRE="m $username [SMTWF][uoehra][neduit] [JFAMSOND][aepuco][nbrylgptvc] [0-9 ][0-9] [0-9:]* [0-9][0-9][0-9][0-9] -0000 $hostname $TESTDIR/2/x" 17569 dotest unedit-without-baserev-11 "$testcvs edit m" "$editorsLineRE" 17570 17571 echo 'edited in 1' >m 17572 dotest unedit-without-baserev-12 "${testcvs} -q ci -m edit-in-1" \ 17573 "$CVSROOT_DIRNAME/x/m,v <-- m 17574 new revision: 1\.2; previous revision: 1\.1" 17575 cd ../.. 17576 cd 2/x 17577 dotest unedit-without-baserev-13 "${testcvs} -q update" \ 17578 "RCS file: ${CVSROOT_DIRNAME}/x/m,v 17579 retrieving revision 1\.1\.1\.1 17580 retrieving revision 1\.2 17581 Merging differences between 1\.1\.1\.1 and 1\.2 into m 17582 rcsmerge: warning: conflicts during merge 17583 ${SPROG} update: conflicts found in m 17584 C m" 17585 rm CVS/Baserev 17586 dotest unedit-without-baserev-14 "echo yes |${testcvs} unedit m" \ 17587 "m has been modified; revert changes${QUESTION} ${CPROG} unedit: m not mentioned in CVS/Baserev 17588 ${CPROG} unedit: run update to complete the unedit" 17589 dotest unedit-without-baserev-15 "${testcvs} -q update" \ 17590 "$SPROG update: warning: \`m' was lost 17591 U m" 17592 # The following tests are kind of degenerate compared with 17593 # watch4-16 through watch4-18 but might as well make sure that 17594 # nothing seriously wrong has happened to the working directory. 17595 dotest unedit-without-baserev-16 "cat m" 'edited in 1' 17596 # Make sure CVS really thinks we are at 1.2. 17597 dotest unedit-without-baserev-17 "${testcvs} -q update" "" 17598 dotest unedit-without-baserev-18 "cat m" "edited in 1" 17599 17600 dokeep 17601 cd ../.. 17602 rm -rf 1 17603 rm -r 2 17604 modify_repo rm -rf $CVSROOT_DIRNAME/$module 17605 ;; 17606 17607 17608 17609 ignore) 17610 # On Windows, we can't check out CVSROOT, because the case 17611 # insensitivity means that this conflicts with cvsroot. 17612 mkdir ignore 17613 cd ignore 17614 17615 dotest ignore-1 "${testcvs} -q co CVSROOT" "U CVSROOT/${DOTSTAR}" 17616 cd CVSROOT 17617 echo rootig.c >cvsignore 17618 dotest ignore-2 "${testcvs} add cvsignore" "${SPROG}"' add: scheduling file `cvsignore'"'"' for addition 17619 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 17620 17621 dotest ignore-3 " ${testcvs} ci -m added" \ 17622 "${CPROG} commit: Examining \. 17623 ${CVSROOT_DIRNAME}/CVSROOT/cvsignore,v <-- cvsignore 17624 initial revision: 1\.1 17625 ${SPROG} commit: Rebuilding administrative file database" 17626 17627 cd .. 17628 if echo "yes" | ${testcvs} release -d CVSROOT >>${LOGFILE} ; then 17629 pass ignore-4 17630 else 17631 fail ignore-4 17632 fi 17633 17634 # CVS looks at the home dir from getpwuid, not HOME (is that correct 17635 # behavior?), so this is hard to test and we won't try. 17636 # echo foobar.c >${HOME}/.cvsignore 17637 CVSIGNORE=envig.c; export CVSIGNORE 17638 mkdir dir-to-import 17639 cd dir-to-import 17640 touch foobar.c bar.c rootig.c defig.o envig.c optig.c 17641 # We use sort because we can't predict the order in which 17642 # the files will be listed. 17643 dotest_sort ignore-5 "${testcvs} import -m m -I optig.c ignore/first-dir tag1 tag2" \ 17644 ' 17645 17646 I ignore/first-dir/defig.o 17647 I ignore/first-dir/envig.c 17648 I ignore/first-dir/optig.c 17649 I ignore/first-dir/rootig.c 17650 N ignore/first-dir/bar.c 17651 N ignore/first-dir/foobar.c 17652 No conflicts created by this import' 17653 dotest_sort ignore-6 "${testcvs} import -m m -I ! ignore/second-dir tag3 tag4" \ 17654 ' 17655 17656 N ignore/second-dir/bar.c 17657 N ignore/second-dir/defig.o 17658 N ignore/second-dir/envig.c 17659 N ignore/second-dir/foobar.c 17660 N ignore/second-dir/optig.c 17661 N ignore/second-dir/rootig.c 17662 No conflicts created by this import' 17663 cd .. 17664 rm -r dir-to-import 17665 17666 mkdir 1 17667 cd 1 17668 dotest ignore-7 "${testcvs} -q co -dsecond-dir ignore/second-dir" \ 17669 'U second-dir/bar.c 17670 U second-dir/defig.o 17671 U second-dir/envig.c 17672 U second-dir/foobar.c 17673 U second-dir/optig.c 17674 U second-dir/rootig.c' 17675 dotest ignore-8 "${testcvs} -q co -dfirst-dir ignore/first-dir" 'U first-dir/bar.c 17676 U first-dir/foobar.c' 17677 cd first-dir 17678 touch rootig.c defig.o envig.c optig.c notig.c 17679 dotest ignore-9 "${testcvs} -q update -I optig.c" "${QUESTION} notig.c" 17680 # The fact that CVS requires us to specify -I CVS here strikes me 17681 # as a bug. 17682 dotest_sort ignore-10 "${testcvs} -q update -I ! -I CVS" \ 17683 "${QUESTION} defig.o 17684 ${QUESTION} envig.c 17685 ${QUESTION} notig.c 17686 ${QUESTION} optig.c 17687 ${QUESTION} rootig.c" 17688 17689 # Now test that commands other than update also print "? notig.c" 17690 # where appropriate. Only test this for remote, because local 17691 # CVS only prints it on update. 17692 rm optig.c 17693 if $remote; then 17694 dotest ignore-11r "$testcvs -q diff" "$QUESTION notig.c" 17695 17696 # Force the server to be contacted. Ugh. Having CVS 17697 # contact the server for the sole purpose of checking 17698 # the CVSROOT/cvsignore file does not seem like such a 17699 # good idea, so I imagine this will continue to be 17700 # necessary. Oh well, at least we test CVS's ablity to 17701 # handle a file with a modified timestamp but unmodified 17702 # contents. 17703 touch bar.c 17704 17705 dotest ignore-11ar "$testcvs -q ci -m commit-it" \ 17706 "$QUESTION notig.c" 17707 fi 17708 17709 # now test .cvsignore files 17710 cd .. 17711 echo notig.c >first-dir/.cvsignore 17712 echo foobar.c >second-dir/.cvsignore 17713 touch first-dir/notig.c second-dir/notig.c second-dir/foobar.c 17714 dotest_sort ignore-12 "${testcvs} -qn update" \ 17715 "${QUESTION} first-dir/.cvsignore 17716 ${QUESTION} second-dir/.cvsignore 17717 ${QUESTION} second-dir/notig.c" 17718 dotest_sort ignore-13 "${testcvs} -qn update -I! -I CVS" \ 17719 "${QUESTION} first-dir/.cvsignore 17720 ${QUESTION} first-dir/defig.o 17721 ${QUESTION} first-dir/envig.c 17722 ${QUESTION} first-dir/rootig.c 17723 ${QUESTION} second-dir/.cvsignore 17724 ${QUESTION} second-dir/notig.c" 17725 17726 echo yes | dotest ignore-14 "${testcvs} release -d first-dir" \ 17727 "${QUESTION} \.cvsignore 17728 You have \[0\] altered files in this repository. 17729 Are you sure you want to release (and delete) directory .first-dir': " 17730 17731 echo add a line >>second-dir/foobar.c 17732 rm second-dir/notig.c second-dir/.cvsignore 17733 echo yes | dotest ignore-15 "${testcvs} release -d second-dir" \ 17734 "M foobar.c 17735 You have \[1\] altered files in this repository. 17736 Are you sure you want to release (and delete) directory .second-dir': " 17737 17738 dokeep 17739 cd ../.. 17740 rm -r ignore 17741 modify_repo rm -rf $CVSROOT_DIRNAME/ignore 17742 ;; 17743 17744 17745 17746 ignore-on-branch) 17747 # Test that CVS _doesn't_ ignore files on branches because they were 17748 # added to the trunk. 17749 mkdir ignore-on-branch; cd ignore-on-branch 17750 modify_repo mkdir $CVSROOT_DIRNAME/ignore-on-branch 17751 17752 # create file1 & file2 on trunk 17753 dotest ignore-on-branch-setup-1 "$testcvs -q co -dsetup ignore-on-branch" '' 17754 cd setup 17755 echo file1 >file1 17756 dotest ignore-on-branch-setup-2 "$testcvs -q add file1" \ 17757 "${SPROG} add: use .${SPROG} commit. to add this file permanently" 17758 dotest ignore-on-branch-setup-3 "$testcvs -q ci -mfile1 file1" \ 17759 "$CVSROOT_DIRNAME/ignore-on-branch/file1,v <-- file1 17760 initial revision: 1\.1" 17761 dotest ignore-on-branch-setup-4 "$testcvs -q tag -b branch" 'T file1' 17762 echo file2 >file2 17763 dotest ignore-on-branch-setup-5 "$testcvs -q add file2" \ 17764 "${SPROG} add: use .${SPROG} commit. to add this file permanently" 17765 dotest ignore-on-branch-setup-6 "$testcvs -q ci -mtrunk file2" \ 17766 "$CVSROOT_DIRNAME/ignore-on-branch/file2,v <-- file2 17767 initial revision: 1\.1" 17768 17769 cd .. 17770 17771 # Check out branch. 17772 # 17773 # - This was the original failure case - file2 would not be flagged 17774 # with a '?' 17775 dotest ignore-on-branch-1 "$testcvs -q co -rbranch ignore-on-branch" \ 17776 'U ignore-on-branch/file1' 17777 cd ignore-on-branch 17778 echo file2 on branch >file2 17779 dotest ignore-on-branch-2 "$testcvs -nq update" '? file2' 17780 17781 # Now set up for a join. One of the original fixes for this would 17782 # print out a 'U' and a '?' during a join which added a file. 17783 if $remote; then 17784 dotest ignore-on-branch-3 "$testcvs -q tag -b branch2" \ 17785 '? file2 17786 T file1' 17787 else 17788 dotest ignore-on-branch-3 "$testcvs -q tag -b branch2" 'T file1' 17789 fi 17790 dotest ignore-on-branch-4 "$testcvs -q add file2" \ 17791 "${SPROG} add: use .${SPROG} commit. to add this file permanently" 17792 dotest ignore-on-branch-5 "$testcvs -q ci -mbranch file2" \ 17793 "$CVSROOT_DIRNAME/ignore-on-branch/file2,v <-- file2 17794 new revision: 1\.1\.2\.2; previous revision: 1\.1\.2\.1" 17795 dotest ignore-on-branch-6 "$testcvs -q up -rbranch2" \ 17796 "${SPROG} update: \`file2' is no longer in the repository" 17797 dotest ignore-on-branch-7 "$testcvs -q up -jbranch" 'U file2' 17798 17799 dokeep 17800 cd ../.. 17801 rm -r ignore-on-branch 17802 modify_repo rm -rf $CVSROOT_DIRNAME/ignore-on-branch 17803 ;; 17804 17805 17806 17807 binfiles) 17808 # Test cvs's ability to handle binary files. 17809 # List of binary file tests: 17810 # * conflicts, "cvs admin": binfiles 17811 # * branching and joining: binfiles2 17812 # * adding and removing files: binfiles3 17813 # * -k wrappers: binwrap, binwrap2, binwrap3 17814 # * "cvs import" and wrappers: binwrap, binwrap2, binwrap3 17815 # * -k option to "cvs import": none yet, as far as I know. 17816 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 17817 mkdir 1; cd 1 17818 dotest binfiles-1 "${testcvs} -q co first-dir" '' 17819 ${AWK} 'BEGIN { printf "%c%c%c@%c%c", 2, 10, 137, 13, 10 }' \ 17820 </dev/null | ${TR} '@' '\000' >binfile.dat 17821 cat binfile.dat binfile.dat >binfile2.dat 17822 cd first-dir 17823 cp ../binfile.dat binfile 17824 dotest binfiles-2 "${testcvs} add -kb binfile" \ 17825 "${SPROG}"' add: scheduling file `binfile'\'' for addition 17826 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 17827 dotest binfiles-3 "${testcvs} -q ci -m add-it" \ 17828 "$CVSROOT_DIRNAME/first-dir/binfile,v <-- binfile 17829 initial revision: 1\.1" 17830 cd ../.. 17831 mkdir 2; cd 2 17832 dotest binfiles-4 "${testcvs} -q co first-dir" 'U first-dir/binfile' 17833 cd first-dir 17834 dotest binfiles-5 "cmp ../../1/binfile.dat binfile" '' 17835 # Testing that sticky options is -kb is the closest thing we have 17836 # to testing that binary files work right on non-unix machines 17837 # (until there is automated testing for such machines, of course). 17838 dotest binfiles-5.5 "${testcvs} status binfile" \ 17839 "=================================================================== 17840 File: binfile Status: Up-to-date 17841 17842 Working revision: 1\.1.* 17843 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/binfile,v 17844 Commit Identifier: ${commitid} 17845 Sticky Tag: (none) 17846 Sticky Date: (none) 17847 Sticky Options: -kb" 17848 17849 # Test that "-kk" does not override "-kb" 17850 cd ../.. 17851 mkdir 2a; cd 2a 17852 dotest binfiles-4 "${testcvs} -q co -kk first-dir" 'U first-dir/binfile' 17853 cd first-dir 17854 # Testing that sticky options is -kb is the closest thing we have 17855 # to testing that binary files work right on non-unix machines 17856 # (until there is automated testing for such machines, of course). 17857 dotest binfiles-5.5 "${testcvs} status binfile" \ 17858 "=================================================================== 17859 File: binfile Status: Up-to-date 17860 17861 Working revision: 1\.1.* 17862 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/binfile,v 17863 Commit Identifier: ${commitid} 17864 Sticky Tag: (none) 17865 Sticky Date: (none) 17866 Sticky Options: -kb" 17867 17868 # Test whether the default options from the RCS file are 17869 # also used when operating on files instead of whole 17870 # directories 17871 cd ../.. 17872 rm -r 2a 17873 mkdir 3; cd 3 17874 dotest binfiles-5.5b0 "${testcvs} -q co first-dir/binfile" \ 17875 'U first-dir/binfile' 17876 cd first-dir 17877 dotest binfiles-5.5b1 "${testcvs} status binfile" \ 17878 "=================================================================== 17879 File: binfile Status: Up-to-date 17880 17881 Working revision: 1\.1.* 17882 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/binfile,v 17883 Commit Identifier: ${commitid} 17884 Sticky Tag: (none) 17885 Sticky Date: (none) 17886 Sticky Options: -kb" 17887 cd ../.. 17888 rm -r 3 17889 # test that "-kk" does not override "-kb" 17890 mkdir 3; cd 3 17891 dotest binfiles-5.5b0 "${testcvs} -q co -kk first-dir/binfile" \ 17892 'U first-dir/binfile' 17893 cd first-dir 17894 dotest binfiles-5.5b1 "${testcvs} status binfile" \ 17895 "=================================================================== 17896 File: binfile Status: Up-to-date 17897 17898 Working revision: 1\.1.* 17899 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/binfile,v 17900 Commit Identifier: ${commitid} 17901 Sticky Tag: (none) 17902 Sticky Date: (none) 17903 Sticky Options: -kb" 17904 cd ../.. 17905 rm -r 3 17906 cd 2/first-dir 17907 17908 cp ../../1/binfile2.dat binfile 17909 dotest binfiles-6 "${testcvs} -q ci -m modify-it" \ 17910 "$CVSROOT_DIRNAME/first-dir/binfile,v <-- binfile 17911 new revision: 1\.2; previous revision: 1\.1" 17912 cd ../../1/first-dir 17913 dotest binfiles-7 "${testcvs} -q update" '[UP] binfile' 17914 dotest binfiles-8 "cmp ../binfile2.dat binfile" '' 17915 17916 # Now test handling of conflicts with binary files. 17917 cp ../binfile.dat binfile 17918 dotest binfiles-con0 "${testcvs} -q ci -m modify-it" \ 17919 "$CVSROOT_DIRNAME/first-dir/binfile,v <-- binfile 17920 new revision: 1\.3; previous revision: 1\.2" 17921 cd ../../2/first-dir 17922 echo 'edits in dir 2' >binfile 17923 dotest binfiles-con1 "${testcvs} -q update" \ 17924 "$SPROG update: nonmergeable file needs merge 17925 $SPROG update: revision 1\.3 from repository is now in binfile 17926 $SPROG update: file from working directory is now in \.#binfile\.1\.2 17927 C binfile" 17928 17929 dotest_fail binfiles-con1b "$testcvs -q up" "C binfile" 17930 17931 dotest binfiles-con2 "cmp binfile ../../1/binfile.dat" '' 17932 dotest binfiles-con3 "cat .#binfile.1.2" 'edits in dir 2' 17933 17934 cp ../../1/binfile2.dat binfile 17935 dotest binfiles-con4 "$testcvs -q ci -m resolve-it" \ 17936 "$CVSROOT_DIRNAME/first-dir/binfile,v <-- binfile 17937 new revision: 1\.4; previous revision: 1\.3" 17938 cd ../../1/first-dir 17939 dotest binfiles-con5 "${testcvs} -q update" '[UP] binfile' 17940 17941 dotest binfiles-9 "${testcvs} -q update -A" '' 17942 # "-kk" no longer does anything with "-kb" 17943 dotest binfiles-10 "${testcvs} -q update -kk" '' 17944 dotest binfiles-11 "${testcvs} -q update" '' 17945 # "-kk" no longer does anything with "-kb" 17946 dotest binfiles-12 "${testcvs} -q update -A" '' 17947 dotest binfiles-13 "${testcvs} -q update -A" '' 17948 17949 cd ../.. 17950 17951 mkdir 3 17952 cd 3 17953 dotest binfiles-13a0 "${testcvs} -q co -r HEAD first-dir" \ 17954 'U first-dir/binfile' 17955 cd first-dir 17956 dotest binfiles-13a1 "${testcvs} status binfile" \ 17957 "=================================================================== 17958 File: binfile Status: Up-to-date 17959 17960 Working revision: 1\.4.* 17961 Repository revision: 1\.4 ${CVSROOT_DIRNAME}/first-dir/binfile,v 17962 Commit Identifier: ${commitid} 17963 Sticky Tag: HEAD (revision: 1\.4) 17964 Sticky Date: (none) 17965 Sticky Options: -kb" 17966 cd ../.. 17967 rm -r 3 17968 17969 cd 2/first-dir 17970 echo 'this file is $''RCSfile$' >binfile 17971 dotest binfiles-14a "${testcvs} -q ci -m modify-it" \ 17972 "$CVSROOT_DIRNAME/first-dir/binfile,v <-- binfile 17973 new revision: 1\.5; previous revision: 1\.4" 17974 dotest binfiles-14b "cat binfile" 'this file is $''RCSfile$' 17975 # See binfiles-5.5 for discussion of -kb. 17976 dotest binfiles-14c "${testcvs} status binfile" \ 17977 "=================================================================== 17978 File: binfile Status: Up-to-date 17979 17980 Working revision: 1\.5.* 17981 Repository revision: 1\.5 ${CVSROOT_DIRNAME}/first-dir/binfile,v 17982 Commit Identifier: ${commitid} 17983 Sticky Tag: (none) 17984 Sticky Date: (none) 17985 Sticky Options: -kb" 17986 dotest binfiles-14d "${testcvs} admin -kv binfile" \ 17987 "RCS file: ${CVSROOT_DIRNAME}/first-dir/binfile,v 17988 done" 17989 # cvs admin doesn't change the checked-out file or its sticky 17990 # kopts. There probably should be a way which does (but 17991 # what if the file is modified? And do we try to version 17992 # control the kopt setting?) 17993 dotest binfiles-14e "cat binfile" 'this file is $''RCSfile$' 17994 dotest binfiles-14f "${testcvs} status binfile" \ 17995 "=================================================================== 17996 File: binfile Status: Up-to-date 17997 17998 Working revision: 1\.5.* 17999 Repository revision: 1\.5 ${CVSROOT_DIRNAME}/first-dir/binfile,v 18000 Commit Identifier: ${commitid} 18001 Sticky Tag: (none) 18002 Sticky Date: (none) 18003 Sticky Options: -kb" 18004 dotest binfiles-14g "${testcvs} -q update -A" '[UP] binfile' 18005 dotest binfiles-14h "cat binfile" 'this file is binfile,v' 18006 dotest binfiles-14i "${testcvs} status binfile" \ 18007 "=================================================================== 18008 File: binfile Status: Up-to-date 18009 18010 Working revision: 1\.5.* 18011 Repository revision: 1\.5 ${CVSROOT_DIRNAME}/first-dir/binfile,v 18012 Commit Identifier: ${commitid} 18013 Sticky Tag: (none) 18014 Sticky Date: (none) 18015 Sticky Options: -kv" 18016 18017 # Do sticky options work when used with 'cvs update'? 18018 echo "Not a binary file." > nibfile 18019 dotest binfiles-sticky1 "${testcvs} -q add nibfile" \ 18020 "${SPROG} add: use .${SPROG} commit. to add this file permanently" 18021 dotest binfiles-sticky2 "${testcvs} -q ci -m add-it nibfile" \ 18022 "$CVSROOT_DIRNAME/first-dir/nibfile,v <-- nibfile 18023 initial revision: 1\.1" 18024 dotest binfiles-sticky3 "${testcvs} -q update -kb nibfile" \ 18025 '[UP] nibfile' 18026 dotest binfiles-sticky4 "${testcvs} -q status nibfile" \ 18027 "=================================================================== 18028 File: nibfile Status: Up-to-date 18029 18030 Working revision: 1\.1.* 18031 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/nibfile,v 18032 Commit Identifier: ${commitid} 18033 Sticky Tag: (none) 18034 Sticky Date: (none) 18035 Sticky Options: -kb" 18036 18037 # Now test that -A can clear the sticky option. 18038 dotest binfiles-sticky5 "${testcvs} -q update -A nibfile" \ 18039 "[UP] nibfile" 18040 dotest binfiles-sticky6 "${testcvs} -q status nibfile" \ 18041 "=================================================================== 18042 File: nibfile Status: Up-to-date 18043 18044 Working revision: 1\.1.* 18045 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/nibfile,v 18046 Commit Identifier: ${commitid} 18047 Sticky Tag: (none) 18048 Sticky Date: (none) 18049 Sticky Options: (none)" 18050 dotest binfiles-15 "${testcvs} -q admin -kb nibfile" \ 18051 "RCS file: ${CVSROOT_DIRNAME}/first-dir/nibfile,v 18052 done" 18053 dotest binfiles-16 "${testcvs} -q update nibfile" "[UP] nibfile" 18054 dotest binfiles-17 "${testcvs} -q status nibfile" \ 18055 "=================================================================== 18056 File: nibfile Status: Up-to-date 18057 18058 Working revision: 1\.1.* 18059 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/nibfile,v 18060 Commit Identifier: ${commitid} 18061 Sticky Tag: (none) 18062 Sticky Date: (none) 18063 Sticky Options: -kb" 18064 18065 dotest binfiles-o1 "${testcvs} admin -o1.3:: binfile" \ 18066 "RCS file: ${CVSROOT_DIRNAME}/first-dir/binfile,v 18067 deleting revision 1\.5 18068 deleting revision 1\.4 18069 done" 18070 dotest binfiles-o2 "${testcvs} admin -o::1.3 binfile" \ 18071 "RCS file: ${CVSROOT_DIRNAME}/first-dir/binfile,v 18072 deleting revision 1\.2 18073 deleting revision 1\.1 18074 done" 18075 dotest binfiles-o3 "${testcvs} -q log -h -N binfile" " 18076 RCS file: ${CVSROOT_DIRNAME}/first-dir/binfile,v 18077 Working file: binfile 18078 head: 1\.3 18079 branch: 18080 locks: strict 18081 access list: 18082 keyword substitution: v 18083 total revisions: 1 18084 =============================================================================" 18085 18086 # Check that the contents were right. This isn't the hard case 18087 # (in which RCS_delete_revs does a diff), but might as well. 18088 dotest binfiles-o4 "${testcvs} -q update binfile" "U binfile" 18089 dotest binfiles-o5 "cmp binfile ../../1/binfile.dat" "" 18090 18091 dokeep 18092 cd ../.. 18093 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 18094 rm -r 1 2 18095 ;; 18096 18097 18098 18099 binfiles2) 18100 # Test cvs's ability to handle binary files, particularly branching 18101 # and joining. The key thing we are worrying about is that CVS 18102 # doesn't print "cannot merge binary files" or some such, in 18103 # situations where no merging is required. 18104 # See also "join" which does this with non-binary files. 18105 # 18106 # Cases (we are merging from the branch to the trunk): 18107 # binfile.dat) File added on branch, not on trunk. 18108 # File should be marked for addition. 18109 # brmod) File modified on branch, not on trunk. 18110 # File should be copied over to trunk (no merging is needed). 18111 # brmod-trmod) File modified on branch, also on trunk. 18112 # This is a conflict. Present the user with both files and 18113 # let them figure it out. 18114 # brmod-wdmod) File modified on branch, not modified in the trunk 18115 # repository, but modified in the (trunk) working directory. 18116 # This is also a conflict. 18117 18118 modify_repo mkdir ${CVSROOT_DIRNAME}/first-dir 18119 mkdir 1; cd 1 18120 dotest binfiles2-1 "${testcvs} -q co first-dir" '' 18121 cd first-dir 18122 18123 # The most important thing here is that binfile, binfile2, &c 18124 # each be distinct from each other. We also make sure to include 18125 # a few likely end-of-line patterns to make sure nothing is 18126 # being munged as if in text mode. 18127 ${AWK} 'BEGIN { printf "%c%c%c@%c%c", 2, 10, 137, 13, 10 }' \ 18128 </dev/null | ${TR} '@' '\000' >../binfile 18129 # Use binfl2 rather than binfile2 because of a problem with Cygwin 18130 # and Samba. that causes cat to report that the input and output file 18131 # are the same when outputting to binfile3. Why? I don't know, but 18132 # it is consistently reproducible. 18133 cat ../binfile ../binfile >../binfl2 18134 cat ../binfl2 ../binfile >../binfile3 18135 18136 # FIXCVS: unless a branch has at least one file on it, 18137 # tag_check_valid won't know it exists. So if brmod didn't 18138 # exist, we would have to invent it. 18139 cp ../binfile brmod 18140 cp ../binfile brmod-trmod 18141 cp ../binfile brmod-wdmod 18142 dotest binfiles2-1a \ 18143 "${testcvs} add -kb brmod brmod-trmod brmod-wdmod" \ 18144 "${SPROG} add: scheduling file .brmod. for addition 18145 ${SPROG} add: scheduling file .brmod-trmod. for addition 18146 ${SPROG} add: scheduling file .brmod-wdmod. for addition 18147 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 18148 dotest binfiles2-1b "${testcvs} -q ci -m add" \ 18149 "$CVSROOT_DIRNAME/first-dir/brmod,v <-- brmod 18150 initial revision: 1\.1 18151 $CVSROOT_DIRNAME/first-dir/brmod-trmod,v <-- brmod-trmod 18152 initial revision: 1\.1 18153 $CVSROOT_DIRNAME/first-dir/brmod-wdmod,v <-- brmod-wdmod 18154 initial revision: 1\.1" 18155 dotest binfiles2-2 "${testcvs} -q tag -b br" 'T brmod 18156 T brmod-trmod 18157 T brmod-wdmod' 18158 dotest binfiles2-3 "${testcvs} -q update -r br" '' 18159 cp ../binfile binfile.dat 18160 dotest binfiles2-4 "${testcvs} add -kb binfile.dat" \ 18161 "${SPROG} add: scheduling file .binfile\.dat. for addition on branch .br. 18162 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 18163 cp ../binfl2 brmod 18164 cp ../binfl2 brmod-trmod 18165 cp ../binfl2 brmod-wdmod 18166 dotest binfiles2-5 "${testcvs} -q ci -m br-changes" \ 18167 "$CVSROOT_DIRNAME/first-dir/Attic/binfile\.dat,v <-- binfile\.dat 18168 new revision: 1\.1\.2\.1; previous revision: 1\.1 18169 $CVSROOT_DIRNAME/first-dir/brmod,v <-- brmod 18170 new revision: 1\.1\.2\.1; previous revision: 1\.1 18171 $CVSROOT_DIRNAME/first-dir/brmod-trmod,v <-- brmod-trmod 18172 new revision: 1\.1\.2\.1; previous revision: 1\.1 18173 $CVSROOT_DIRNAME/first-dir/brmod-wdmod,v <-- brmod-wdmod 18174 new revision: 1\.1\.2\.1; previous revision: 1\.1" 18175 dotest binfiles2-6 "${testcvs} -q update -A" \ 18176 "${SPROG} update: \`binfile\.dat' is no longer in the repository 18177 [UP] brmod 18178 [UP] brmod-trmod 18179 [UP] brmod-wdmod" 18180 dotest_fail binfiles2-7 "test -f binfile.dat" '' 18181 dotest binfiles2-7-brmod "cmp ../binfile brmod" 18182 cp ../binfile3 brmod-trmod 18183 dotest binfiles2-7a "${testcvs} -q ci -m tr-modify" \ 18184 "$CVSROOT_DIRNAME/first-dir/brmod-trmod,v <-- brmod-trmod 18185 new revision: 1\.2; previous revision: 1\.1" 18186 cp ../binfile3 brmod-wdmod 18187 18188 dotest binfiles2-8 "${testcvs} -q update -j br" \ 18189 "U binfile\.dat 18190 U brmod 18191 ${SPROG} update: nonmergeable file needs merge 18192 ${SPROG} update: revision 1.1.2.1 from repository is now in brmod-trmod 18193 ${SPROG} update: file from working directory is now in .#brmod-trmod.1.2 18194 C brmod-trmod 18195 M brmod-wdmod 18196 ${SPROG} update: nonmergeable file needs merge 18197 ${SPROG} update: revision 1.1.2.1 from repository is now in brmod-wdmod 18198 ${SPROG} update: file from working directory is now in .#brmod-wdmod.1.1 18199 C brmod-wdmod" 18200 18201 dotest binfiles2-9 "cmp ../binfile binfile.dat" 18202 dotest binfiles2-9-brmod "cmp ../binfl2 brmod" 18203 dotest binfiles2-9-brmod-trmod "cmp ../binfl2 brmod-trmod" 18204 dotest binfiles2-9-brmod-trmod "cmp ../binfl2 brmod-wdmod" 18205 dotest binfiles2-9a-brmod-trmod "cmp ../binfile3 .#brmod-trmod.1.2" 18206 dotest binfiles2-9a-brmod-wdmod "cmp ../binfile3 .#brmod-wdmod.1.1" 18207 18208 # Test that everything was properly scheduled. 18209 dotest binfiles2-10 "${testcvs} -q ci -m checkin" \ 18210 "$CVSROOT_DIRNAME/first-dir/binfile\.dat,v <-- binfile\.dat 18211 new revision: 1\.2; previous revision: 1\.1 18212 $CVSROOT_DIRNAME/first-dir/brmod,v <-- brmod 18213 new revision: 1\.2; previous revision: 1\.1 18214 $CVSROOT_DIRNAME/first-dir/brmod-trmod,v <-- brmod-trmod 18215 new revision: 1\.3; previous revision: 1\.2 18216 $CVSROOT_DIRNAME/first-dir/brmod-wdmod,v <-- brmod-wdmod 18217 new revision: 1\.2; previous revision: 1\.1" 18218 18219 dotest_fail binfiles2-o1 "${testcvs} -q admin -o :1.2 brmod-trmod" \ 18220 "RCS file: ${CVSROOT_DIRNAME}/first-dir/brmod-trmod,v 18221 deleting revision 1\.2 18222 ${SPROG} admin: ${CVSROOT_DIRNAME}/first-dir/brmod-trmod,v: can't remove branch point 1\.1 18223 ${SPROG} admin: RCS file for .brmod-trmod. not modified\." 18224 dotest binfiles2-o2 "${testcvs} -q admin -o 1.1.2.1: brmod-trmod" \ 18225 "RCS file: ${CVSROOT_DIRNAME}/first-dir/brmod-trmod,v 18226 deleting revision 1\.1\.2\.1 18227 done" 18228 dotest binfiles2-o3 "${testcvs} -q admin -o :1.2 brmod-trmod" \ 18229 "RCS file: ${CVSROOT_DIRNAME}/first-dir/brmod-trmod,v 18230 deleting revision 1\.2 18231 deleting revision 1\.1 18232 done" 18233 dotest binfiles2-o4 "${testcvs} -q log -N brmod-trmod" " 18234 RCS file: ${CVSROOT_DIRNAME}/first-dir/brmod-trmod,v 18235 Working file: brmod-trmod 18236 head: 1\.3 18237 branch: 18238 locks: strict 18239 access list: 18240 keyword substitution: b 18241 total revisions: 1; selected revisions: 1 18242 description: 18243 ---------------------------- 18244 revision 1\.3 18245 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 18246 checkin 18247 =============================================================================" 18248 18249 dokeep 18250 cd ../.. 18251 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 18252 rm -r 1 18253 ;; 18254 18255 18256 18257 binfiles3) 18258 # More binary file tests, especially removing, adding, &c. 18259 # See "binfiles" for a list of binary file tests. 18260 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 18261 mkdir 1; cd 1 18262 dotest binfiles3-1 "${testcvs} -q co first-dir" '' 18263 ${AWK} 'BEGIN { printf "%c%c%c@%c%c", 2, 10, 137, 13, 10 }' \ 18264 </dev/null | ${TR} '@' '\000' >binfile.dat 18265 cd first-dir 18266 echo hello >file1 18267 dotest binfiles3-2 "${testcvs} add file1" \ 18268 "${SPROG} add: scheduling file .file1. for addition 18269 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 18270 dotest binfiles3-3 "${testcvs} -q ci -m add-it" \ 18271 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 18272 initial revision: 1\.1" 18273 rm file1 18274 dotest binfiles3-4 "${testcvs} rm file1" \ 18275 "${SPROG} remove: scheduling .file1. for removal 18276 ${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 18277 dotest binfiles3-5 "${testcvs} -q ci -m remove-it" \ 18278 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 18279 new revision: delete; previous revision: 1\.1" 18280 cp ../binfile.dat file1 18281 dotest binfiles3-6 "${testcvs} add -kb file1" \ 18282 "$SPROG add: Re-adding file .file1. after dead revision 1\.2\. 18283 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 18284 # The idea behind this test is to make sure that the file 18285 # gets opened in binary mode to send to "cvs ci". 18286 dotest binfiles3-6a "cat CVS/Entries" \ 18287 "/file1/0/[A-Za-z0-9 :]*/-kb/ 18288 D" 18289 # TODO: This just tests the case where the old keyword 18290 # expansion mode is the default (RCS_getexpand == NULL 18291 # in checkaddfile()); should also test the case in which 18292 # we are changing it from one non-default value to another. 18293 dotest binfiles3-7 "$testcvs -q ci -m readd-it" \ 18294 "$SPROG commit: changing keyword expansion mode to -kb 18295 $CVSROOT_DIRNAME/first-dir/file1,v <-- file1 18296 new revision: 1\.3; previous revision: 1\.2" 18297 dotest binfiles3-8 "${testcvs} -q log -h -N file1" " 18298 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 18299 Working file: file1 18300 head: 1\.3 18301 branch: 18302 locks: strict 18303 access list: 18304 keyword substitution: b 18305 total revisions: 3 18306 =============================================================================" 18307 18308 # OK, now test admin -o on a binary file. See "admin" 18309 # test for a more complete list of admin -o tests. 18310 cp ${TESTDIR}/1/binfile.dat ${TESTDIR}/1/binfile4.dat 18311 echo '%%$$##@@!!jjiiuull' | ${TR} j '\000' >>${TESTDIR}/1/binfile4.dat 18312 cp ${TESTDIR}/1/binfile4.dat ${TESTDIR}/1/binfile5.dat 18313 echo 'aawwee%$$##@@!!jjil' | ${TR} w '\000' >>${TESTDIR}/1/binfile5.dat 18314 18315 cp ../binfile4.dat file1 18316 dotest binfiles3-9 "${testcvs} -q ci -m change" \ 18317 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 18318 new revision: 1\.4; previous revision: 1\.3" 18319 cp ../binfile5.dat file1 18320 dotest binfiles3-10 "${testcvs} -q ci -m change" \ 18321 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 18322 new revision: 1\.5; previous revision: 1\.4" 18323 dotest binfiles3-11 "${testcvs} admin -o 1.3::1.5 file1" \ 18324 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 18325 deleting revision 1\.4 18326 done" 18327 dotest binfiles3-12 "${testcvs} -q update -r 1.3 file1" "U file1" 18328 dotest binfiles3-13 "cmp file1 ${TESTDIR}/1/binfile.dat" "" 18329 18330 dokeep 18331 cd ../.. 18332 rm -r 1 18333 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 18334 ;; 18335 18336 18337 18338 mcopy) 18339 # See comment at "mwrap" test for list of other wrappers tests. 18340 # Test cvs's ability to handle nonmergeable files specified with 18341 # -m 'COPY' in wrappers. Similar to the binfiles2 test, 18342 # which tests the same thing for binary files 18343 # (which are non-mergeable in the same sense). 18344 # 18345 # Cases (we are merging from the branch to the trunk): 18346 # brmod) File modified on branch, not on trunk. 18347 # File should be copied over to trunk (no merging is needed). 18348 # brmod-trmod) File modified on branch, also on trunk. 18349 # This is a conflict. Present the user with both files and 18350 # let them figure it out. 18351 # brmod-wdmod) File modified on branch, not modified in the trunk 18352 # repository, but modified in the (trunk) working directory. 18353 # This is also a conflict. 18354 18355 # For the moment, remote CVS can't pass wrappers from CVSWRAPPERS 18356 # (see wrap_send). So skip these tests for remote. 18357 if $remote; then :; else 18358 18359 mkdir ${CVSROOT_DIRNAME}/first-dir 18360 mkdir 1; cd 1 18361 dotest mcopy-1 "${testcvs} -q co first-dir" '' 18362 cd first-dir 18363 18364 # FIXCVS: unless a branch has at least one file on it, 18365 # tag_check_valid won't know it exists. So if brmod didn't 18366 # exist, we would have to invent it. 18367 echo 'brmod initial contents' >brmod 18368 echo 'brmod-trmod initial contents' >brmod-trmod 18369 echo 'brmod-wdmod initial contents' >brmod-wdmod 18370 echo "* -m 'COPY'" >.cvswrappers 18371 dotest mcopy-1a \ 18372 "${testcvs} add .cvswrappers brmod brmod-trmod brmod-wdmod" \ 18373 "${SPROG} add: scheduling file .\.cvswrappers. for addition 18374 ${SPROG} add: scheduling file .brmod. for addition 18375 ${SPROG} add: scheduling file .brmod-trmod. for addition 18376 ${SPROG} add: scheduling file .brmod-wdmod. for addition 18377 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 18378 dotest mcopy-1b "${testcvs} -q ci -m add" \ 18379 "$CVSROOT_DIRNAME/first-dir/\.cvswrappers,v <-- \.cvswrappers 18380 initial revision: 1\.1 18381 $CVSROOT_DIRNAME/first-dir/brmod,v <-- brmod 18382 initial revision: 1\.1 18383 $CVSROOT_DIRNAME/first-dir/brmod-trmod,v <-- brmod-trmod 18384 initial revision: 1\.1 18385 $CVSROOT_DIRNAME/first-dir/brmod-wdmod,v <-- brmod-wdmod 18386 initial revision: 1\.1" 18387 18388 # NOTE: .cvswrappers files are broken (see comment in 18389 # src/wrapper.c). So doing everything via the environment 18390 # variable is a workaround. Better would be to test them 18391 # both. 18392 CVSWRAPPERS="* -m 'COPY'" 18393 export CVSWRAPPERS 18394 dotest mcopy-2 "${testcvs} -q tag -b br" 'T \.cvswrappers 18395 T brmod 18396 T brmod-trmod 18397 T brmod-wdmod' 18398 dotest mcopy-3 "${testcvs} -q update -r br" '' 18399 echo 'modify brmod on br' >brmod 18400 echo 'modify brmod-trmod on br' >brmod-trmod 18401 echo 'modify brmod-wdmod on br' >brmod-wdmod 18402 dotest mcopy-5 "${testcvs} -q ci -m br-changes" \ 18403 "$CVSROOT_DIRNAME/first-dir/brmod,v <-- brmod 18404 new revision: 1\.1\.2\.1; previous revision: 1\.1 18405 $CVSROOT_DIRNAME/first-dir/brmod-trmod,v <-- brmod-trmod 18406 new revision: 1\.1\.2\.1; previous revision: 1\.1 18407 $CVSROOT_DIRNAME/first-dir/brmod-wdmod,v <-- brmod-wdmod 18408 new revision: 1\.1\.2\.1; previous revision: 1\.1" 18409 dotest mcopy-6 "${testcvs} -q update -A" \ 18410 "[UP] brmod 18411 [UP] brmod-trmod 18412 [UP] brmod-wdmod" 18413 dotest mcopy-7 "cat brmod brmod-trmod brmod-wdmod" \ 18414 "brmod initial contents 18415 brmod-trmod initial contents 18416 brmod-wdmod initial contents" 18417 18418 echo 'modify brmod-trmod again on trunk' >brmod-trmod 18419 dotest mcopy-7a "${testcvs} -q ci -m tr-modify" \ 18420 "$CVSROOT_DIRNAME/first-dir/brmod-trmod,v <-- brmod-trmod 18421 new revision: 1\.2; previous revision: 1\.1" 18422 echo 'modify brmod-wdmod in working dir' >brmod-wdmod 18423 18424 dotest mcopy-8 "${testcvs} -q update -j br" \ 18425 "U brmod 18426 ${SPROG} update: nonmergeable file needs merge 18427 ${SPROG} update: revision 1.1.2.1 from repository is now in brmod-trmod 18428 ${SPROG} update: file from working directory is now in .#brmod-trmod.1.2 18429 C brmod-trmod 18430 M brmod-wdmod 18431 ${SPROG} update: nonmergeable file needs merge 18432 ${SPROG} update: revision 1.1.2.1 from repository is now in brmod-wdmod 18433 ${SPROG} update: file from working directory is now in .#brmod-wdmod.1.1 18434 C brmod-wdmod" 18435 18436 dotest mcopy-9 "cat brmod brmod-trmod brmod-wdmod" \ 18437 "modify brmod on br 18438 modify brmod-trmod on br 18439 modify brmod-wdmod on br" 18440 dotest mcopy-9a "cat .#brmod-trmod.1.2 .#brmod-wdmod.1.1" \ 18441 "modify brmod-trmod again on trunk 18442 modify brmod-wdmod in working dir" 18443 18444 # Test that everything was properly scheduled. 18445 dotest mcopy-10 "${testcvs} -q ci -m checkin" \ 18446 "$CVSROOT_DIRNAME/first-dir/brmod,v <-- brmod 18447 new revision: 1\.2; previous revision: 1\.1 18448 $CVSROOT_DIRNAME/first-dir/brmod-trmod,v <-- brmod-trmod 18449 new revision: 1\.3; previous revision: 1\.2 18450 $CVSROOT_DIRNAME/first-dir/brmod-wdmod,v <-- brmod-wdmod 18451 new revision: 1\.2; previous revision: 1\.1" 18452 18453 dokeep 18454 cd ../.. 18455 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 18456 rm -r 1 18457 unset CVSWRAPPERS 18458 fi # end of tests to be skipped for remote 18459 ;; 18460 18461 18462 18463 binwrap) 18464 # Test the ability to specify binary-ness based on file name. 18465 # See "mwrap" for a list of other wrappers tests. 18466 18467 mkdir dir-to-import 18468 cd dir-to-import 18469 touch foo.c foo.exe 18470 18471 # While we're here, test for rejection of duplicate tag names. 18472 dotest_fail binwrap-0 \ 18473 "${testcvs} import -m msg -I ! first-dir dup dup" \ 18474 "${CPROG} \[import aborted\]: tag .dup. was specified more than once" 18475 18476 if ${testcvs} import -m message -I ! -W "*.exe -k 'b'" \ 18477 first-dir tag1 tag2 >>${LOGFILE}; then 18478 pass binwrap-1 18479 else 18480 fail binwrap-1 18481 fi 18482 cd .. 18483 rm -r dir-to-import 18484 dotest binwrap-2 "${testcvs} -q co first-dir" 'U first-dir/foo.c 18485 U first-dir/foo.exe' 18486 dotest binwrap-3 "${testcvs} -q status first-dir" \ 18487 "=================================================================== 18488 File: foo\.c Status: Up-to-date 18489 18490 Working revision: 1\.1\.1\.1.* 18491 Repository revision: 1\.1\.1\.1 ${CVSROOT_DIRNAME}/first-dir/foo\.c,v 18492 Commit Identifier: ${commitid} 18493 Sticky Tag: (none) 18494 Sticky Date: (none) 18495 Sticky Options: (none) 18496 18497 =================================================================== 18498 File: foo\.exe Status: Up-to-date 18499 18500 Working revision: 1\.1\.1\.1.* 18501 Repository revision: 1\.1\.1\.1 ${CVSROOT_DIRNAME}/first-dir/foo\.exe,v 18502 Commit Identifier: ${commitid} 18503 Sticky Tag: (none) 18504 Sticky Date: (none) 18505 Sticky Options: -kb" 18506 18507 dokeep 18508 rm -r first-dir 18509 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 18510 ;; 18511 18512 18513 18514 binwrap2) 18515 # Test the ability to specify binary-ness based on file name. 18516 # See "mwrap" for a list of other wrappers tests. 18517 18518 mkdir dir-to-import 18519 cd dir-to-import 18520 touch foo.c foo.exe 18521 18522 # Specify that all files are binary except *.c. 18523 # The order seems to matter, with the earlier rules taking 18524 # precedence. I'm not sure whether that is good or not, 18525 # but it is the current behavior. 18526 if ${testcvs} import -m message -I ! \ 18527 -W "*.c -k 'o'" -W "* -k 'b'" \ 18528 first-dir tag1 tag2 >>${LOGFILE}; then 18529 pass binwrap2-1 18530 else 18531 fail binwrap2-1 18532 fi 18533 cd .. 18534 rm -r dir-to-import 18535 dotest binwrap2-2 "${testcvs} -q co first-dir" 'U first-dir/foo.c 18536 U first-dir/foo.exe' 18537 dotest binwrap2-3 "${testcvs} -q status first-dir" \ 18538 "=================================================================== 18539 File: foo\.c Status: Up-to-date 18540 18541 Working revision: 1\.1\.1\.1.* 18542 Repository revision: 1\.1\.1\.1 ${CVSROOT_DIRNAME}/first-dir/foo\.c,v 18543 Commit Identifier: ${commitid} 18544 Sticky Tag: (none) 18545 Sticky Date: (none) 18546 Sticky Options: -ko 18547 18548 =================================================================== 18549 File: foo\.exe Status: Up-to-date 18550 18551 Working revision: 1\.1\.1\.1.* 18552 Repository revision: 1\.1\.1\.1 ${CVSROOT_DIRNAME}/first-dir/foo\.exe,v 18553 Commit Identifier: ${commitid} 18554 Sticky Tag: (none) 18555 Sticky Date: (none) 18556 Sticky Options: -kb" 18557 18558 dokeep 18559 rm -r first-dir 18560 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 18561 ;; 18562 18563 18564 18565 binwrap3) 18566 # Test communication of file-specified -k wrappers between 18567 # client and server, in `import': 18568 # 18569 # 1. Set up a directory tree, populate it with files. 18570 # 2. Give each directory a different .cvswrappers file. 18571 # 3. Give the server its own .cvswrappers file. 18572 # 4. Import the whole tree, see if the right files got set 18573 # to binary. 18574 # 18575 # The tree has a top ("0th") level, and two subdirs, sub1/ 18576 # and sub2/; sub2/ contains directory subsub/. Every 18577 # directory has a .cvswrappers file as well as regular 18578 # files. 18579 # 18580 # In the file names, "foo-b.*" should end up binary, and 18581 # "foo-t.*" should end up text. Don't worry about the two 18582 # letter extensions; they're just there to help me keep 18583 # things straight. 18584 # 18585 # Here's the directory tree: 18586 # 18587 # ./ 18588 # .cvswrappers 18589 # foo-b.c0 18590 # foo-b.sb 18591 # foo-t.c1 18592 # foo-t.st 18593 # 18594 # sub1/ sub2/ 18595 # .cvswrappers .cvswrappers 18596 # foo-b.c1 foo-b.sb 18597 # foo-b.sb foo-b.st 18598 # foo-t.c0 foo-t.c0 18599 # foo-t.st foo-t.c1 18600 # foo-t.c2 18601 # foo-t.c3 18602 # 18603 # subsub/ 18604 # .cvswrappers 18605 # foo-b.c3 18606 # foo-b.sb 18607 # foo-t.c0 18608 # foo-t.c1 18609 # foo-t.c2 18610 # foo-t.st 18611 18612 binwrap3_line1="This is a test file " 18613 binwrap3_line2="containing little of use " 18614 binwrap3_line3="except this non-haiku" 18615 18616 binwrap3_text="${binwrap3_line1}${binwrap3_line2}${binwrap3_line3}" 18617 18618 cd ${TESTDIR} 18619 18620 # On Windows, we can't check out CVSROOT, because the case 18621 # insensitivity means that this conflicts with cvsroot. 18622 mkdir wnt 18623 cd wnt 18624 18625 mkdir binwrap3 # the 0th dir 18626 mkdir binwrap3/sub1 18627 mkdir binwrap3/sub2 18628 mkdir binwrap3/sub2/subsub 18629 18630 echo "bar*" > binwrap3/.cvswrappers 18631 echo "*.c0 -k 'b'" >> binwrap3/.cvswrappers 18632 echo "whatever -k 'b'" >> binwrap3/.cvswrappers 18633 echo ${binwrap3_text} > binwrap3/foo-b.c0 18634 echo ${binwrap3_text} > binwrap3/bar-t.c0 18635 echo ${binwrap3_text} > binwrap3/foo-b.sb 18636 echo ${binwrap3_text} > binwrap3/foo-t.sb 18637 echo ${binwrap3_text} > binwrap3/foo-t.c1 18638 echo ${binwrap3_text} > binwrap3/foo-t.st 18639 18640 echo "bar* -k 'kv'" > binwrap3/sub1/.cvswrappers 18641 echo "*.c1 -k 'b'" >> binwrap3/sub1/.cvswrappers 18642 echo "whatever -k 'b'" >> binwrap3/sub1/.cvswrappers 18643 echo ${binwrap3_text} > binwrap3/sub1/foo-b.c1 18644 echo ${binwrap3_text} > binwrap3/sub1/bar-t.c1 18645 echo ${binwrap3_text} > binwrap3/sub1/foo-b.sb 18646 echo ${binwrap3_text} > binwrap3/sub1/foo-t.sb 18647 echo ${binwrap3_text} > binwrap3/sub1/foo-t.c0 18648 echo ${binwrap3_text} > binwrap3/sub1/foo-t.st 18649 18650 echo "bar*" > binwrap3/sub2/.cvswrappers 18651 echo "*.st -k 'b'" >> binwrap3/sub2/.cvswrappers 18652 echo ${binwrap3_text} > binwrap3/sub2/foo-b.sb 18653 echo ${binwrap3_text} > binwrap3/sub2/foo-t.sb 18654 echo ${binwrap3_text} > binwrap3/sub2/foo-b.st 18655 echo ${binwrap3_text} > binwrap3/sub2/bar-t.st 18656 echo ${binwrap3_text} > binwrap3/sub2/foo-t.c0 18657 echo ${binwrap3_text} > binwrap3/sub2/foo-t.c1 18658 echo ${binwrap3_text} > binwrap3/sub2/foo-t.c2 18659 echo ${binwrap3_text} > binwrap3/sub2/foo-t.c3 18660 18661 echo "bar* -k 'kv'" > binwrap3/sub2/subsub/.cvswrappers 18662 echo "*.c3 -k 'b'" >> binwrap3/sub2/subsub/.cvswrappers 18663 echo "foo -k 'b'" >> binwrap3/sub2/subsub/.cvswrappers 18664 echo "c0* -k 'b'" >> binwrap3/sub2/subsub/.cvswrappers 18665 echo ${binwrap3_text} > binwrap3/sub2/subsub/foo-b.c3 18666 echo ${binwrap3_text} > binwrap3/sub2/subsub/bar-t.c3 18667 echo ${binwrap3_text} > binwrap3/sub2/subsub/foo-b.sb 18668 echo ${binwrap3_text} > binwrap3/sub2/subsub/foo-t.sb 18669 echo ${binwrap3_text} > binwrap3/sub2/subsub/foo-t.c0 18670 echo ${binwrap3_text} > binwrap3/sub2/subsub/foo-t.c1 18671 echo ${binwrap3_text} > binwrap3/sub2/subsub/foo-t.c2 18672 echo ${binwrap3_text} > binwrap3/sub2/subsub/foo-t.st 18673 18674 # Now set up CVSROOT/cvswrappers, the easy way: 18675 dotest binwrap3-1 "${testcvs} -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}" 18676 cd CVSROOT 18677 # This destroys anything currently in cvswrappers, but 18678 # presumably other tests will take care of it themselves if 18679 # they use cvswrappers: 18680 echo "foo-t.sb" > cvswrappers 18681 echo "foo*.sb -k 'b'" >> cvswrappers 18682 dotest binwrap3-2 "${testcvs} -q ci -m cvswrappers-mod" \ 18683 "$CVSROOT_DIRNAME/CVSROOT/cvswrappers,v <-- cvswrappers 18684 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 18685 $SPROG commit: Rebuilding administrative file database" 18686 cd .. 18687 18688 # Avoid environmental interference 18689 CVSWRAPPERS_save=${CVSWRAPPERS} 18690 unset CVSWRAPPERS 18691 18692 # Do the import 18693 cd binwrap3 18694 # Not importing .cvswrappers tests whether the client is really 18695 # letting the server know "honestly" whether the file is binary, 18696 # rather than just letting the server see the .cvswrappers file. 18697 dotest binwrap3-2a \ 18698 "${testcvs} import -m . -I .cvswrappers binwrap3 tag1 tag2" \ 18699 "[NI] ${DOTSTAR}" 18700 18701 # OK, now test "cvs add". 18702 cd .. 18703 rm -r binwrap3 18704 dotest binwrap3-2b "${testcvs} co binwrap3" "${DOTSTAR}" 18705 cd binwrap3 18706 cd sub2 18707 echo "*.newbin -k 'b'" > .cvswrappers 18708 echo .cvswrappers >.cvsignore 18709 echo .cvsignore >>.cvsignore 18710 touch file1.newbin file1.txt 18711 dotest binwrap3-2c "${testcvs} add file1.newbin file1.txt" \ 18712 "${SPROG} add: scheduling file .file1\.newbin. for addition 18713 ${SPROG} add: scheduling file .file1\.txt. for addition 18714 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 18715 dotest binwrap3-2d "${testcvs} -q ci -m add" \ 18716 "$CVSROOT_DIRNAME/binwrap3/sub2/file1\.newbin,v <-- file1\.newbin 18717 initial revision: 1\.1 18718 $CVSROOT_DIRNAME/binwrap3/sub2/file1\.txt,v <-- file1\.txt 18719 initial revision: 1\.1" 18720 cd .. 18721 18722 # Now check out the module and see which files are binary. 18723 cd .. 18724 rm -r binwrap3 18725 dotest binwrap3-3 "${testcvs} co binwrap3" "${DOTSTAR}" 18726 cd binwrap3 18727 18728 # Running "cvs status" and matching output is too 18729 # error-prone, too likely to falsely fail. Instead, we'll 18730 # just grep the Entries lines: 18731 18732 dotest binwrap3-top1 "grep foo-b.c0 ./CVS/Entries" \ 18733 "/foo-b.c0/1.1.1.1/[A-Za-z0-9 :]*/-kb/" 18734 18735 dotest binwrap3-top2 "grep foo-b.sb ./CVS/Entries" \ 18736 "/foo-b.sb/1.1.1.1/[A-Za-z0-9 :]*/-kb/" 18737 18738 dotest binwrap3-top3 "grep foo-t.c1 ./CVS/Entries" \ 18739 "/foo-t.c1/1.1.1.1/[A-Za-z0-9 :]*//" 18740 18741 dotest binwrap3-top4 "grep foo-t.st ./CVS/Entries" \ 18742 "/foo-t.st/1.1.1.1/[A-Za-z0-9 :]*//" 18743 18744 dotest binwrap3-top5 "grep foo-t.sb ./CVS/Entries" \ 18745 "/foo-t.sb/1.1.1.1/[A-Za-z0-9 :]*//" 18746 18747 dotest binwrap3-top6 "grep bar-t.c0 ./CVS/Entries" \ 18748 "/bar-t.c0/1.1.1.1/[A-Za-z0-9 :]*//" 18749 18750 dotest binwrap3-sub1-1 "grep foo-b.c1 sub1/CVS/Entries" \ 18751 "/foo-b.c1/1.1.1.1/[A-Za-z0-9 :]*/-kb/" 18752 18753 dotest binwrap3-sub1-2 "grep foo-b.sb sub1/CVS/Entries" \ 18754 "/foo-b.sb/1.1.1.1/[A-Za-z0-9 :]*/-kb/" 18755 18756 dotest binwrap3-sub1-3 "grep foo-t.c0 sub1/CVS/Entries" \ 18757 "/foo-t.c0/1.1.1.1/[A-Za-z0-9 :]*//" 18758 18759 dotest binwrap3-sub1-4 "grep foo-t.st sub1/CVS/Entries" \ 18760 "/foo-t.st/1.1.1.1/[A-Za-z0-9 :]*//" 18761 18762 dotest binwrap3-sub1-5 "grep foo-t.sb sub1/CVS/Entries" \ 18763 "/foo-t.sb/1.1.1.1/[A-Za-z0-9 :]*//" 18764 18765 dotest binwrap3-sub1-6 "grep bar-t.c1 sub1/CVS/Entries" \ 18766 "/bar-t.c1/1.1.1.1/[A-Za-z0-9 :]*//" 18767 18768 dotest binwrap3-sub2-1 "grep foo-b.sb sub2/CVS/Entries" \ 18769 "/foo-b.sb/1.1.1.1/[A-Za-z0-9 :]*/-kb/" 18770 18771 dotest binwrap3-sub2-2 "grep foo-b.st sub2/CVS/Entries" \ 18772 "/foo-b.st/1.1.1.1/[A-Za-z0-9 :]*/-kb/" 18773 18774 dotest binwrap3-sub2-3 "grep foo-t.c0 sub2/CVS/Entries" \ 18775 "/foo-t.c0/1.1.1.1/[A-Za-z0-9 :]*//" 18776 18777 dotest binwrap3-sub2-4 "grep foo-t.c1 sub2/CVS/Entries" \ 18778 "/foo-t.c1/1.1.1.1/[A-Za-z0-9 :]*//" 18779 18780 dotest binwrap3-sub2-5 "grep foo-t.c2 sub2/CVS/Entries" \ 18781 "/foo-t.c2/1.1.1.1/[A-Za-z0-9 :]*//" 18782 18783 dotest binwrap3-sub2-6 "grep foo-t.c3 sub2/CVS/Entries" \ 18784 "/foo-t.c3/1.1.1.1/[A-Za-z0-9 :]*//" 18785 18786 dotest binwrap3-sub2-7 "grep foo-t.sb sub2/CVS/Entries" \ 18787 "/foo-t.sb/1.1.1.1/[A-Za-z0-9 :]*//" 18788 18789 dotest binwrap3-sub2-8 "grep bar-t.st sub2/CVS/Entries" \ 18790 "/bar-t.st/1.1.1.1/[A-Za-z0-9 :]*//" 18791 18792 dotest binwrap3-subsub1 "grep foo-b.c3 sub2/subsub/CVS/Entries" \ 18793 "/foo-b.c3/1.1.1.1/[A-Za-z0-9 :]*/-kb/" 18794 18795 dotest binwrap3-subsub2 "grep foo-b.sb sub2/subsub/CVS/Entries" \ 18796 "/foo-b.sb/1.1.1.1/[A-Za-z0-9 :]*/-kb/" 18797 18798 dotest binwrap3-subsub3 "grep foo-t.c0 sub2/subsub/CVS/Entries" \ 18799 "/foo-t.c0/1.1.1.1/[A-Za-z0-9 :]*//" 18800 18801 dotest binwrap3-subsub4 "grep foo-t.c1 sub2/subsub/CVS/Entries" \ 18802 "/foo-t.c1/1.1.1.1/[A-Za-z0-9 :]*//" 18803 18804 dotest binwrap3-subsub5 "grep foo-t.c2 sub2/subsub/CVS/Entries" \ 18805 "/foo-t.c2/1.1.1.1/[A-Za-z0-9 :]*//" 18806 18807 dotest binwrap3-subsub6 "grep foo-t.st sub2/subsub/CVS/Entries" \ 18808 "/foo-t.st/1.1.1.1/[A-Za-z0-9 :]*//" 18809 18810 dotest binwrap3-subsub7 "grep foo-t.sb sub2/subsub/CVS/Entries" \ 18811 "/foo-t.sb/1.1.1.1/[A-Za-z0-9 :]*//" 18812 18813 dotest binwrap3-subsub8 "grep bar-t.c3 sub2/subsub/CVS/Entries" \ 18814 "/bar-t.c3/1.1.1.1/[A-Za-z0-9 :]*//" 18815 18816 dotest binwrap3-sub2-add1 "grep file1.newbin sub2/CVS/Entries" \ 18817 "/file1.newbin/1.1/[A-Za-z0-9 :]*/-kb/" 18818 dotest binwrap3-sub2-add2 "grep file1.txt sub2/CVS/Entries" \ 18819 "/file1.txt/1.1/[A-Za-z0-9 :]*//" 18820 18821 # Restore and clean up 18822 dokeep 18823 cd .. 18824 rm -r binwrap3 CVSROOT 18825 cd .. 18826 rm -r wnt 18827 modify_repo rm -rf $CVSROOT_DIRNAME/binwrap3 18828 CVSWRAPPERS=${CVSWRAPPERS_save} 18829 ;; 18830 18831 18832 18833 mwrap) 18834 # Tests of various wrappers features: 18835 # -m 'COPY' and cvs update: mwrap 18836 # -m 'COPY' and joining: mcopy 18837 # -k: binwrap, binwrap2 18838 # -t/-f: hasn't been written yet. 18839 # 18840 # Tests of different ways of specifying wrappers: 18841 # CVSROOT/cvswrappers: mwrap 18842 # -W: binwrap, binwrap2 18843 # .cvswrappers in working directory, local: mcopy 18844 # CVSROOT/cvswrappers, .cvswrappers remote: binwrap3 18845 # CVSWRAPPERS environment variable: mcopy 18846 18847 # This test is similar to binfiles-con1; -m 'COPY' specifies 18848 # non-mergeableness the same way that -kb does. 18849 18850 # On Windows, we can't check out CVSROOT, because the case 18851 # insensitivity means that this conflicts with cvsroot. 18852 mkdir wnt 18853 cd wnt 18854 18855 dotest mwrap-c1 "${testcvs} -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}" 18856 cd CVSROOT 18857 echo "* -m 'COPY'" >>cvswrappers 18858 dotest mwrap-c2 "${testcvs} -q ci -m wrapper-mod" \ 18859 "$CVSROOT_DIRNAME/CVSROOT/cvswrappers,v <-- cvswrappers 18860 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 18861 $SPROG commit: Rebuilding administrative file database" 18862 cd .. 18863 mkdir m1; cd m1 18864 dotest mwrap-1 "${testcvs} -q co -l ." '' 18865 mkdir first-dir 18866 dotest mwrap-2 "${testcvs} add first-dir" \ 18867 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 18868 cd first-dir 18869 touch aa 18870 dotest mwrap-3 "${testcvs} add aa" \ 18871 "${SPROG} add: scheduling file .aa. for addition 18872 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 18873 dotest mwrap-4 "${testcvs} -q ci -m add" \ 18874 "$CVSROOT_DIRNAME/first-dir/aa,v <-- aa 18875 initial revision: 1\.1" 18876 cd ../.. 18877 mkdir m2; cd m2 18878 dotest mwrap-5 "${testcvs} -q co first-dir" "U first-dir/aa" 18879 cd first-dir 18880 echo "changed in m2" >aa 18881 dotest mwrap-6 "${testcvs} -q ci -m m2-mod" \ 18882 "$CVSROOT_DIRNAME/first-dir/aa,v <-- aa 18883 new revision: 1\.2; previous revision: 1\.1" 18884 cd ../.. 18885 cd m1/first-dir 18886 echo "changed in m1" >aa 18887 dotest mwrap-7 "$testcvs -nq update" \ 18888 "$SPROG update: nonmergeable file needs merge 18889 $SPROG update: revision 1\.2 from repository is now in aa 18890 $SPROG update: file from working directory is now in \.#aa\.1\.1 18891 C aa" 18892 dotest mwrap-8 "$testcvs -q update" \ 18893 "$SPROG update: nonmergeable file needs merge 18894 $SPROG update: revision 1\.2 from repository is now in aa 18895 $SPROG update: file from working directory is now in \.#aa\.1\.1 18896 C aa" 18897 dotest mwrap-9 "cat aa" "changed in m2" 18898 dotest mwrap-10 "cat .#aa.1.1" "changed in m1" 18899 18900 dokeep 18901 restore_adm 18902 cd ../.. 18903 rm -r CVSROOT 18904 rm -r m1 m2 18905 cd .. 18906 rm -r wnt 18907 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 18908 ;; 18909 18910 18911 18912 info) 18913 # Administrative file tests. 18914 # Here is a list of where each administrative file is tested: 18915 # loginfo: info 18916 # modules: modules, modules2, modules3 18917 # cvsignore: ignore 18918 # verifymsg: info 18919 # cvswrappers: mwrap 18920 # taginfo: taginfo 18921 # posttag: posttag 18922 # postadmin: admin 18923 # postwatch: devcom3 18924 # config: config 18925 # config2: MinCompressionLevel and MaxCompressionLevel in config 18926 18927 # On Windows, we can't check out CVSROOT, because the case 18928 # insensitivity means that this conflicts with cvsroot. 18929 mkdir wnt 18930 cd wnt 18931 18932 dotest info-1 "$testcvs -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}" 18933 cd CVSROOT 18934 dotest info-2 "$testcvs -Q tag info-start" 18935 sed -e's/%p/ALL/' <loginfo >tmploginfo 18936 mv tmploginfo loginfo 18937 echo "ALL sh -c \"echo x\${=MYENV}\${=OTHER}y\${=ZEE}=\$USER=\$COMMITID=\$SESSIONID=\$CVSROOT= >>$TESTDIR/testlog; cat >/dev/null\"" >> loginfo 18938 # The following cases test the format string substitution 18939 echo "ALL echo %{} >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 18940 echo "ALL echo %x >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 18941 echo "ALL echo % >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 18942 echo "ALL echo %{sxVv} >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 18943 echo "ALL echo %{v} >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 18944 echo "ALL echo %s %s >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 18945 echo "ALL echo %{V}AX >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 18946 echo "first-dir echo %sux >>$TESTDIR/testlog2; cat >/dev/null" \ 18947 >> loginfo 18948 sed -e's/^UseNewInfoFmtStrings=yes$/#&/' <config >tmpconfig 18949 mv tmpconfig config 18950 18951 # Might be nice to move this to crerepos tests; it should 18952 # work to create a loginfo file if you didn't create one 18953 # with "cvs init". 18954 : dotest info-2 "$testcvs add loginfo" \ 18955 "$SPROG add: scheduling file \`loginfo' for addition 18956 $SPROG add: use \`$SPROG commit' to add this file permanently" 18957 18958 dotest_fail info-3 "$testcvs -q ci -m new-loginfo" \ 18959 "$TESTDIR/cvsroot/CVSROOT/config,v <-- config 18960 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 18961 $CVSROOT_DIRNAME/CVSROOT/loginfo,v <-- loginfo 18962 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 18963 $SPROG commit: Rebuilding administrative file database 18964 $SPROG commit: loginfo:[0-9]*: no such user variable \${=MYENV} 18965 $SPROG \[commit aborted\]: Unknown format character in info file (''). 18966 Info files are the hook files, verifymsg, taginfo, commitinfo, etc\." 18967 cd .. 18968 18969 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 18970 dotest info-5 "$testcvs -q co first-dir" '' 18971 cd first-dir 18972 touch file1 18973 dotest info-6 "$testcvs add file1" \ 18974 "$SPROG add: scheduling file \`file1' for addition 18975 $SPROG add: use \`$SPROG commit' to add this file permanently" 18976 echo "cvs -s OTHER=not-this -s MYENV=env-" >>$HOME/.cvsrc 18977 dotest info-6b "$testcvs -q -s OTHER=value ci -m add-it" \ 18978 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 18979 initial revision: 1\.1 18980 $SPROG commit: loginfo:[0-9]*: no such user variable \${=ZEE} 18981 $SPROG commit: warning: Set to use deprecated info format strings\. Establish 18982 compatibility with the new info file format strings (add a temporary .1. in 18983 all info files after each .%. which doesn.t represent a literal percent) 18984 and set UseNewInfoFmtStrings=yes in CVSROOT/config\. After that, convert 18985 individual command lines and scripts to handle the new format at your 18986 leisure\." \ 18987 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 18988 initial revision: 1\.1 18989 $SPROG commit: warning: Set to use deprecated info format strings\. Establish 18990 compatibility with the new info file format strings (add a temporary .1. in 18991 all info files after each .%. which doesn.t represent a literal percent) 18992 and set UseNewInfoFmtStrings=yes in CVSROOT/config\. After that, convert 18993 individual command lines and scripts to handle the new format at your 18994 leisure\. 18995 $SPROG commit: loginfo:[0-9]*: no such user variable \${=ZEE}" 18996 echo line0 >>file1 18997 dotest info-6c "$testcvs -q -sOTHER=foo ci -m mod-it" \ 18998 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 18999 new revision: 1\.2; previous revision: 1\.1 19000 $SPROG commit: loginfo:[0-9]*: no such user variable \${=ZEE} 19001 $SPROG commit: warning: Set to use deprecated info format strings\. Establish 19002 compatibility with the new info file format strings (add a temporary .1. in 19003 all info files after each .%. which doesn.t represent a literal percent) 19004 and set UseNewInfoFmtStrings=yes in CVSROOT/config\. After that, convert 19005 individual command lines and scripts to handle the new format at your 19006 leisure\." \ 19007 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 19008 new revision: 1\.2; previous revision: 1\.1 19009 $SPROG commit: warning: Set to use deprecated info format strings\. Establish 19010 compatibility with the new info file format strings (add a temporary .1. in 19011 all info files after each .%. which doesn.t represent a literal percent) 19012 and set UseNewInfoFmtStrings=yes in CVSROOT/config\. After that, convert 19013 individual command lines and scripts to handle the new format at your 19014 leisure\. 19015 $SPROG commit: loginfo:[0-9]*: no such user variable \${=ZEE}" 19016 echo line1 >>file1 19017 dotest info-7 "${testcvs} -q -s OTHER=value -s ZEE=z ci -m mod-it" \ 19018 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 19019 new revision: 1\.3; previous revision: 1\.2 19020 $SPROG commit: warning: Set to use deprecated info format strings\. Establish 19021 compatibility with the new info file format strings (add a temporary .1. in 19022 all info files after each .%. which doesn.t represent a literal percent) 19023 and set UseNewInfoFmtStrings=yes in CVSROOT/config\. After that, convert 19024 individual command lines and scripts to handle the new format at your 19025 leisure\." 19026 19027 cd .. 19028 dotest info-9 "cat $TESTDIR/testlog" \ 19029 "xenv-valueyz=${username}=${commitid}=${commitid}=${CVSROOT_DIRNAME}=" 19030 dotest info-10 "cat $TESTDIR/testlog2" \ 19031 'first-dir 19032 first-dir 19033 first-dir 19034 first-dir file1,,NONE,1.1 19035 first-dir 1.1 19036 first-dir file1 %s 19037 first-dir NONEAX 19038 first-dir file1ux 19039 first-dir 19040 first-dir 19041 first-dir 19042 first-dir file1,,1.1,1.2 19043 first-dir 1.2 19044 first-dir file1 %s 19045 first-dir 1.1AX 19046 first-dir file1ux 19047 first-dir 19048 first-dir 19049 first-dir 19050 first-dir file1,,1.2,1.3 19051 first-dir 1.3 19052 first-dir file1 %s 19053 first-dir 1.2AX 19054 first-dir file1ux' 19055 19056 # and make sure adding a '1' in the format strings really does ensure 19057 # ensure backwards compatibility. 19058 # 19059 # these tests are identical to the above except for the loginfo setup 19060 # and the project name 19061 cd CVSROOT 19062 dotest info-setup-intfmt-1 "$testcvs -q up -prinfo-start config >config" 19063 dotest info-setup-intfmt-2 "$testcvs -q up -prinfo-start loginfo >loginfo" 19064 sed -e's/%p/ALL/' <loginfo >tmploginfo 19065 mv tmploginfo loginfo 19066 echo "ALL sh -c \"echo x\${=MYENV}\${=OTHER}y\${=ZEE}=\$USER=\$CVSROOT= >>$TESTDIR/testlog; cat >/dev/null\"" >> loginfo 19067 # The following cases test the format string substitution 19068 echo "ALL echo %1{} >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 19069 echo "ALL echo %1x >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 19070 echo "ALL echo %1 >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 19071 echo "ALL echo %1{sxVv} >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 19072 echo "ALL echo %1{v} >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 19073 echo "ALL echo %1s %%s >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 19074 echo "ALL echo %1{V}AX >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 19075 echo "third-dir echo %1sux >>$TESTDIR/testlog2; cat >/dev/null" \ 19076 >> loginfo 19077 19078 dotest info-setup-intfmt-2 "${testcvs} -q -s ZEE=garbage ci -m nuke-admin-for-info-intfmt" \ 19079 "$TESTDIR/cvsroot/CVSROOT/config,v <-- config 19080 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19081 $TESTDIR/cvsroot/CVSROOT/loginfo,v <-- loginfo 19082 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19083 $SPROG commit: Rebuilding administrative file database 19084 $SPROG commit: warning: Set to use deprecated info format strings\. Establish 19085 compatibility with the new info file format strings (add a temporary .1. in 19086 all info files after each .%. which doesn.t represent a literal percent) 19087 and set UseNewInfoFmtStrings=yes in CVSROOT/config\. After that, convert 19088 individual command lines and scripts to handle the new format at your 19089 leisure\." 19090 cd .. 19091 19092 # delete the logs now so the results look more like the last tests 19093 # (they won't include the config file update) 19094 rm ${TESTDIR}/testlog ${TESTDIR}/testlog2 19095 19096 modify_repo mkdir $CVSROOT_DIRNAME/third-dir 19097 dotest info-intfmt-5 "${testcvs} -q co third-dir" '' 19098 cd third-dir 19099 touch file1 19100 dotest info-intfmt-6 "${testcvs} add file1" \ 19101 "${SPROG}"' add: scheduling file `file1'\'' for addition 19102 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 19103 echo "cvs -s OTHER=not-this -s MYENV=env-" >>$HOME/.cvsrc 19104 dotest info-intfmt-6b "${testcvs} -q -s OTHER=value ci -m add-it" \ 19105 "${TESTDIR}/cvsroot/third-dir/file1,v <-- file1 19106 initial revision: 1\.1 19107 ${SPROG} commit: loginfo:[0-9]*: no such user variable \${=ZEE} 19108 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19109 the new argument format and remove '1's from your info file format strings\. 19110 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19111 the new argument format and remove '1's from your info file format strings\. 19112 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19113 the new argument format and remove '1's from your info file format strings\. 19114 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19115 the new argument format and remove '1's from your info file format strings\. 19116 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19117 the new argument format and remove '1's from your info file format strings\. 19118 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19119 the new argument format and remove '1's from your info file format strings\. 19120 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19121 the new argument format and remove '1's from your info file format strings\. 19122 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19123 the new argument format and remove '1's from your info file format strings\." 19124 echo line0 >>file1 19125 dotest info-intfmt-6c "${testcvs} -q -sOTHER=foo ci -m mod-it" \ 19126 "${TESTDIR}/cvsroot/third-dir/file1,v <-- file1 19127 new revision: 1\.2; previous revision: 1\.1 19128 ${SPROG} commit: loginfo:[0-9]*: no such user variable \${=ZEE} 19129 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19130 the new argument format and remove '1's from your info file format strings\. 19131 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19132 the new argument format and remove '1's from your info file format strings\. 19133 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19134 the new argument format and remove '1's from your info file format strings\. 19135 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19136 the new argument format and remove '1's from your info file format strings\. 19137 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19138 the new argument format and remove '1's from your info file format strings\. 19139 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19140 the new argument format and remove '1's from your info file format strings\. 19141 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19142 the new argument format and remove '1's from your info file format strings\. 19143 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19144 the new argument format and remove '1's from your info file format strings\." 19145 echo line1 >>file1 19146 dotest info-intfmt-7 "${testcvs} -q -s OTHER=value -s ZEE=z ci -m mod-it" \ 19147 "${TESTDIR}/cvsroot/third-dir/file1,v <-- file1 19148 new revision: 1\.3; previous revision: 1\.2 19149 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19150 the new argument format and remove '1's from your info file format strings\. 19151 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19152 the new argument format and remove '1's from your info file format strings\. 19153 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19154 the new argument format and remove '1's from your info file format strings\. 19155 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19156 the new argument format and remove '1's from your info file format strings\. 19157 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19158 the new argument format and remove '1's from your info file format strings\. 19159 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19160 the new argument format and remove '1's from your info file format strings\. 19161 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19162 the new argument format and remove '1's from your info file format strings\. 19163 ${SPROG} commit: Using deprecated info format strings\. Convert your scripts to use 19164 the new argument format and remove '1's from your info file format strings\." 19165 19166 cd .. 19167 dotest info-intfmt-9 "cat $TESTDIR/testlog" "xenv-valueyz=${username}=${TESTDIR}/cvsroot=" 19168 dotest info-intfmt-10 "cat $TESTDIR/testlog2" \ 19169 'third-dir 19170 third-dir 19171 third-dir 19172 third-dir file1,,NONE,1.1 19173 third-dir 1.1 19174 third-dir file1 %s 19175 third-dir NONEAX 19176 third-dir file1ux 19177 third-dir 19178 third-dir 19179 third-dir 19180 third-dir file1,,1.1,1.2 19181 third-dir 1.2 19182 third-dir file1 %s 19183 third-dir 1.1AX 19184 third-dir file1ux 19185 third-dir 19186 third-dir 19187 third-dir 19188 third-dir file1,,1.2,1.3 19189 third-dir 1.3 19190 third-dir file1 %s 19191 third-dir 1.2AX 19192 third-dir file1ux' 19193 19194 rm ${TESTDIR}/testlog ${TESTDIR}/testlog2 19195 19196 # test the new format strings too 19197 cd CVSROOT 19198 dotest info-setup-newfmt-1 "$testcvs -q up -prinfo-start loginfo >loginfo" 19199 echo "ALL sh -c \"echo x\${=MYENV}\${=OTHER}y\${=ZEE}=\$USER=\$CVSROOT= >>$TESTDIR/testlog; cat >/dev/null\" %{sVv}" >> loginfo 19200 # The following cases test the format string substitution 19201 echo "ALL echo %p \"%{sTVv}\" >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 19202 echo "ALL echo %{v} >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 19203 echo "ALL echo %s >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 19204 echo "ALL echo %{V}AX >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 19205 echo "second-dir echo %sux >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo 19206 dotest info-setup-newfmt-2 "$testcvs -q -s ZEE=garbage ci -m nuke-admin-for-info-newfmt" \ 19207 "${CVSROOT_DIRNAME}/CVSROOT/loginfo,v <-- loginfo 19208 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19209 ${SPROG} commit: Rebuilding administrative file database" 19210 cd .. 19211 19212 # delete the logs now so the results look more like the last tests 19213 # (they won't include the config file update) 19214 rm ${TESTDIR}/testlog ${TESTDIR}/testlog2 19215 19216 modify_repo mkdir $CVSROOT_DIRNAME/fourth-dir 19217 dotest info-newfmt-1 "${testcvs} -q co fourth-dir" '' 19218 cd fourth-dir 19219 touch file1 19220 dotest info-newfmt-2 "${testcvs} add file1" \ 19221 "${SPROG}"' add: scheduling file `file1'\'' for addition 19222 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 19223 echo "cvs -s OTHER=not-this -s MYENV=env-" >>$HOME/.cvsrc 19224 dotest info-newfmt-3 "$testcvs -q -s OTHER=value ci -m add-it" \ 19225 "$TESTDIR/cvsroot/fourth-dir/file1,v <-- file1 19226 initial revision: 1\.1 19227 $SPROG commit: loginfo:[0-9]*: no such user variable \${=ZEE}" 19228 echo line0 >>file1 19229 dotest info-newfmt-4 "$testcvs -q -sOTHER=foo ci -m mod-it" \ 19230 "$TESTDIR/cvsroot/fourth-dir/file1,v <-- file1 19231 new revision: 1\.2; previous revision: 1\.1 19232 $SPROG commit: loginfo:[0-9]*: no such user variable \${=ZEE}" 19233 echo line1 >>file1 19234 dotest info-newfmt-5 "${testcvs} -q -s OTHER=value -s ZEE=z ci -m mod-it" \ 19235 "${TESTDIR}/cvsroot/fourth-dir/file1,v <-- file1 19236 new revision: 1\.3; previous revision: 1\.2" 19237 19238 cd .. 19239 dotest info-newfmt-6 "cat $TESTDIR/testlog" \ 19240 "xenv-valueyz=${username}=${TESTDIR}/cvsroot=" 19241 dotest info-newfmt-7 "cat $TESTDIR/testlog2" \ 19242 'fourth-dir file1 NONE 1\.1 19243 1\.1 19244 file1 19245 NONEAX 19246 fourth-dir file1 1\.1 1\.2 19247 1\.2 19248 file1 19249 1\.1AX 19250 fourth-dir file1 1\.2 1\.3 19251 1\.3 19252 file1 19253 1\.2AX' 19254 19255 # clean up after newfmt tests 19256 cd CVSROOT 19257 dotest info-cleanup-newfmt-1 "$testcvs -q up -prinfo-start loginfo >loginfo" 19258 dotest info-cleanup-newfmt-2 "$testcvs -q ci -m nuke-loginfo" \ 19259 "$CVSROOT_DIRNAME/CVSROOT/loginfo,v <-- loginfo 19260 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19261 $SPROG commit: Rebuilding administrative file database" 19262 19263 # clean up the logs 19264 rm ${TESTDIR}/testlog ${TESTDIR}/testlog2 19265 19266 # Now test verifymsg 19267 cat >${TESTDIR}/vscript <<EOF 19268 #!${TESTSHELL} 19269 echo vscript "\$@" 19270 if sed 1q < \$1 | grep '^BugId:[ ]*[0-9][0-9]*$' > /dev/null; then 19271 exit 0 19272 elif sed 1q < \$1 | grep '^BugId:[ ]*new$' > /dev/null; then 19273 echo A new bugid was found. >> \$1 19274 exit 0 19275 else 19276 echo "No BugId found." 19277 sleep 1 19278 exit 1 19279 fi 19280 EOF 19281 cat >${TESTDIR}/vscript2 <<EOF 19282 #!${TESTSHELL} 19283 echo vscript2 "\$@" 19284 if test -f CVS/Repository; then 19285 repo=\`cat CVS/Repository\` 19286 else 19287 repo=\`pwd\` 19288 fi 19289 echo \$repo 19290 if echo "\$repo" |grep yet-another/ >/dev/null 2>&1; then 19291 exit 1 19292 else 19293 exit 0 19294 fi 19295 EOF 19296 # Grumble, grumble, mumble, search for "Cygwin". 19297 if test -n "$remotehost"; then 19298 $CVS_RSH $remotehost "chmod +x ${TESTDIR}/vscript*" 19299 else 19300 chmod +x ${TESTDIR}/vscript* 19301 fi 19302 echo "^first-dir/yet-another\\(/\\|\$\\) ${TESTDIR}/vscript2 %l %{sV}" >verifymsg 19303 echo "^first-dir\\(/\\|\$\\) ${TESTDIR}/vscript %l %{sV}" >>verifymsg 19304 echo "^missing-script\$ ${TESTDIR}/bogus %l" >>verifymsg 19305 echo "^missing-var\$ ${TESTDIR}/vscript %l \${=Bogus}" >>verifymsg 19306 # first test the directory independant verifymsg 19307 dotest info-v1 "${testcvs} -q ci -m add-verification" \ 19308 "$CVSROOT_DIRNAME/CVSROOT/verifymsg,v <-- verifymsg 19309 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19310 $SPROG commit: Rebuilding administrative file database" 19311 19312 cd ../first-dir 19313 echo line2 >>file1 19314 dotest_fail info-v2 "${testcvs} -q ci -m bogus" \ 19315 "vscript $tempname file1 1\.3 19316 No BugId found\. 19317 ${SPROG} \[commit aborted\]: Message verification failed" 19318 19319 cat >${TESTDIR}/comment.tmp <<EOF 19320 BugId: 42 19321 and many more lines after it 19322 EOF 19323 dotest info-v3 "${testcvs} -q ci -F ${TESTDIR}/comment.tmp" \ 19324 "vscript $tempname file1 1\.3 19325 $CVSROOT_DIRNAME/first-dir/file1,v <-- file1 19326 new revision: 1\.4; previous revision: 1\.3" 19327 rm ${TESTDIR}/comment.tmp 19328 19329 cd .. 19330 mkdir another-dir 19331 cd another-dir 19332 touch file2 19333 dotest_fail info-v4 \ 19334 "${testcvs} import -m bogus first-dir/another x y" \ 19335 "vscript $tempname - Imported sources NONE 19336 No BugId found\. 19337 ${SPROG} \[import aborted\]: Message verification failed" 19338 19339 # now verify that directory dependent verifymsgs work 19340 dotest info-v5 \ 19341 "${testcvs} import -m bogus first-dir/yet-another x y" \ 19342 "vscript2 $tempname - Imported sources NONE 19343 $TESTDIR/wnt/another-dir 19344 N first-dir/yet-another/file2 19345 19346 No conflicts created by this import" \ 19347 "vscript2 $tempname - Imported sources NONE 19348 $CVSROOT_DIRNAME/first-dir/yet-another 19349 N first-dir/yet-another/file2 19350 19351 No conflicts created by this import" 19352 19353 # FIXCVS 19354 # 19355 # note that in the local case the error message is the same as 19356 # info-v5 19357 # 19358 # This means that the verifymsg scripts cannot reliably and 19359 # consistantly obtain information on which directory is being 19360 # committed to. Thus it is currently useless for them to be 19361 # running in every dir. They should either be run once or 19362 # directory information should be passed. 19363 if $remote; then 19364 dotest_fail info-v6r \ 19365 "${testcvs} import -m bogus first-dir/yet-another/and-another x y" \ 19366 "vscript2 $tempname - Imported sources NONE 19367 $CVSROOT_DIRNAME/first-dir/yet-another/and-another 19368 $SPROG \[import aborted\]: Message verification failed" 19369 else 19370 dotest info-v6 \ 19371 "${testcvs} import -m bogus first-dir/yet-another/and-another x y" \ 19372 "vscript2 $tempname - Imported sources NONE 19373 $TESTDIR/wnt/another-dir 19374 N first-dir/yet-another/and-another/file2 19375 19376 No conflicts created by this import" 19377 fi 19378 19379 # check that errors invoking the script cause verification failure 19380 # 19381 # The second text below occurs on Cygwin, where I assume execvp 19382 # does not return to let CVS print the error message when its 19383 # argument does not exist. 19384 dotest_fail info-v7 "${testcvs} import -m bogus missing-script x y" \ 19385 "${SPROG} import: cannot exec ${TESTDIR}/bogus: No such file or directory 19386 ${SPROG} \[import aborted\]: Message verification failed" \ 19387 "${SPROG} \[import aborted\]: Message verification failed" 19388 19389 dotest_fail info-v8 "${testcvs} import -m bogus missing-var x y" \ 19390 "${SPROG} import: verifymsg:4: no such user variable \${=Bogus} 19391 ${SPROG} \[import aborted\]: Message verification failed" 19392 19393 rm file2 19394 cd .. 19395 rmdir another-dir 19396 19397 cd CVSROOT 19398 echo "RereadLogAfterVerify=always" >>config 19399 dotest info-rereadlog-1 "${testcvs} -q ci -m add-RereadLogAfterVerify=always" \ 19400 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 19401 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19402 $SPROG commit: Rebuilding administrative file database" 19403 cd ../first-dir 19404 echo line3 >>file1 19405 cat >${TESTDIR}/comment.tmp <<EOF 19406 BugId: new 19407 See what happens next. 19408 EOF 19409 dotest info-reread-2 "${testcvs} -q ci -F ${TESTDIR}/comment.tmp" \ 19410 "vscript $tempname file1 1\.4 19411 $CVSROOT_DIRNAME/first-dir/file1,v <-- file1 19412 new revision: 1\.5; previous revision: 1\.4" 19413 dotest info-reread-3 "${testcvs} -q log -N -r1.5 file1" " 19414 .* 19415 BugId: new 19416 See what happens next. 19417 A new bugid was found. 19418 =============================================================================" 19419 19420 cd ../CVSROOT 19421 grep -v "RereadLogAfterVerify" config > config.new 19422 mv config.new config 19423 echo "RereadLogAfterVerify=stat" >>config 19424 dotest info-reread-4 \ 19425 "$testcvs -q ci -m add-RereadLogAfterVerify=stat" \ 19426 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 19427 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19428 $SPROG commit: Rebuilding administrative file database" 19429 cd ../first-dir 19430 echo line4 >>file1 19431 cat >${TESTDIR}/comment.tmp <<EOF 19432 BugId: new 19433 See what happens next with stat. 19434 EOF 19435 dotest info-reread-5 "${testcvs} -q ci -F ${TESTDIR}/comment.tmp" \ 19436 "vscript $tempname file1 1\.5 19437 $CVSROOT_DIRNAME/first-dir/file1,v <-- file1 19438 new revision: 1\.6; previous revision: 1\.5" 19439 dotest info-reread-6 "${testcvs} -q log -N -r1.6 file1" " 19440 .* 19441 BugId: new 19442 See what happens next with stat. 19443 A new bugid was found. 19444 =============================================================================" 19445 19446 cd ../CVSROOT 19447 grep -v "RereadLogAfterVerify" config > config.new 19448 mv config.new config 19449 echo "RereadLogAfterVerify=never" >>config 19450 dotest info-reread-7 \ 19451 "$testcvs -q ci -m add-RereadLogAfterVerify=never" \ 19452 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 19453 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19454 $SPROG commit: Rebuilding administrative file database" 19455 cd ../first-dir 19456 echo line5 >>file1 19457 cat >${TESTDIR}/comment.tmp <<EOF 19458 BugId: new 19459 See what happens next. 19460 EOF 19461 dotest info-reread-8 "${testcvs} -q ci -F ${TESTDIR}/comment.tmp" \ 19462 "vscript $tempname file1 1\.6 19463 $CVSROOT_DIRNAME/first-dir/file1,v <-- file1 19464 new revision: 1\.7; previous revision: 1\.6" 19465 dotest info-reread-6 "${testcvs} -q log -N -r1.7 file1" " 19466 .* 19467 BugId: new 19468 See what happens next. 19469 =============================================================================" 19470 19471 cd ../CVSROOT 19472 dotest info-reread-cleanup-1 "$testcvs -q up -prinfo-start config >config" 19473 # Append the NULL format string until we remove the deprecation 19474 # warning for lack of format strings. 19475 echo 'DEFAULT false %n' >verifymsg 19476 echo 'DEFAULT true %n' >>verifymsg 19477 dotest info-multdef "${testcvs} -q ci -m multdef" \ 19478 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 19479 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19480 $CVSROOT_DIRNAME/CVSROOT/verifymsg,v <-- verifymsg 19481 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19482 $SPROG commit: Rebuilding administrative file database" 19483 19484 cd ../CVSROOT 19485 dotest info-reread--cleanup-1 \ 19486 "$testcvs -q up -prinfo-start verifymsg >verifymsg" 19487 dotest info-cleanup-verifymsg "$testcvs -q ci -m nuke-verifymsg" \ 19488 "$SPROG commit: Multiple .DEFAULT. lines (1 and 2) in verifymsg file 19489 $CVSROOT_DIRNAME/CVSROOT/verifymsg,v <-- verifymsg 19490 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19491 $SPROG commit: Rebuilding administrative file database" 19492 19493 dokeep 19494 rm ${TESTDIR}/vscript* 19495 cd .. 19496 19497 dotest info-cleanup-0 "$testcvs -n release -d CVSROOT" \ 19498 "You have \[0\] altered files in this repository\." 19499 19500 dotest info-cleanup-1 \ 19501 "echo yes |${testcvs} -q release -d CVSROOT >/dev/null" 19502 dotest info-cleanup-2 \ 19503 "echo yes |${testcvs} -q release -d first-dir >/dev/null" 19504 dotest info-cleanup-3 \ 19505 "echo yes |${testcvs} -q release -d third-dir >/dev/null" 19506 dotest info-cleanup-4 \ 19507 "echo yes |${testcvs} -q release -d fourth-dir >/dev/null" 19508 19509 dokeep 19510 cd .. 19511 rm -r wnt 19512 rm $HOME/.cvsrc 19513 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir \ 19514 $CVSROOT_DIRNAME/third-dir \ 19515 $CVSROOT_DIRNAME/fourth-dir 19516 ;; 19517 19518 19519 19520 taginfo) 19521 # Tests of the CVSROOT/taginfo file. See the comment at the 19522 # "info" tests for a full list of administrative file tests. 19523 19524 # all the oldfmt stuff can come out once we finish deprecating 19525 # the old info file command line format stuff. 19526 # 19527 # grep the code for SUPPORT_OLD_INFO_FMT_STRINGS and see the stuff 19528 # in configure.in about oldinfoformatsupport 19529 19530 mkdir 1; cd 1 19531 dotest taginfo-init-1 "$testcvs -q co CVSROOT" "U CVSROOT/$DOTSTAR" 19532 cd CVSROOT 19533 dotest taginfo-init-2 "$testcvs -Q tag taginfo-start" 19534 cat >$TESTDIR/1/loggit <<EOF 19535 #!$TESTSHELL 19536 if test "\$1" = rejectme; then 19537 exit 1 19538 else 19539 echo "\$@" >>$TESTDIR/1/taglog 19540 exit 0 19541 fi 19542 EOF 19543 # #^@&!^@ Cygwin. 19544 if test -n "$remotehost"; then 19545 $CVS_RSH $remotehost "chmod +x ${TESTDIR}/1/loggit" 19546 else 19547 chmod +x ${TESTDIR}/1/loggit 19548 fi 19549 echo "ALL ${TESTDIR}/1/loggit" >>taginfo 19550 sed -e's/^UseNewInfoFmtStrings=yes$/#&/' <config >tmpconfig 19551 mv tmpconfig config 19552 sed -e's/%p/ALL/' <loginfo >tmploginfo 19553 mv tmploginfo loginfo 19554 dotest taginfo-2 "${testcvs} -q ci -m check-in-taginfo" \ 19555 "$TESTDIR/cvsroot/CVSROOT/config,v <-- config 19556 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19557 $CVSROOT_DIRNAME/CVSROOT/loginfo,v <-- loginfo 19558 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19559 $CVSROOT_DIRNAME/CVSROOT/taginfo,v <-- taginfo 19560 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19561 $SPROG commit: Rebuilding administrative file database" 19562 cd .. 19563 19564 # taginfo-3 used to rely on the top-level CVS directory 19565 # being created to add "first-dir" to the repository. Since 19566 # that won't happen anymore, we create the directory in the 19567 # repository. 19568 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 19569 dotest taginfo-3 "$testcvs -q co first-dir" 19570 19571 cd first-dir 19572 echo first >file1 19573 dotest taginfo-4 "${testcvs} add file1" \ 19574 "${SPROG} add: scheduling file .file1. for addition 19575 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 19576 dotest taginfo-5 "${testcvs} -q ci -m add-it" \ 19577 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 19578 initial revision: 1\.1" \ 19579 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 19580 initial revision: 1\.1 19581 $SPROG commit: warning: Set to use deprecated info format strings\. Establish 19582 compatibility with the new info file format strings (add a temporary '1' in 19583 all info files after each '%' which doesn't represent a literal percent) 19584 and set UseNewInfoFmtStrings=yes in CVSROOT/config\. After that, convert 19585 individual command lines and scripts to handle the new format at your 19586 leisure\." 19587 dotest taginfo-6 "${testcvs} -q tag tag1" \ 19588 "${SPROG} tag: warning: taginfo line contains no format strings: 19589 \"${TESTDIR}/1/loggit\" 19590 Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this 19591 usage is deprecated\. 19592 T file1" 19593 dotest taginfo-7 "${testcvs} -q tag -b br" \ 19594 "${SPROG} tag: warning: taginfo line contains no format strings: 19595 \"${TESTDIR}/1/loggit\" 19596 Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this 19597 usage is deprecated\. 19598 T file1" 19599 dotest taginfo-8 "$testcvs -q update -r br" 19600 echo add text on branch >>file1 19601 dotest taginfo-9 "${testcvs} -q ci -m modify-on-br" \ 19602 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 19603 new revision: 1\.1\.2\.1; previous revision: 1\.1" \ 19604 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 19605 new revision: 1\.1\.2\.1; previous revision: 1\.1 19606 $SPROG commit: warning: Set to use deprecated info format strings\. Establish 19607 compatibility with the new info file format strings (add a temporary '1' in 19608 all info files after each '%' which doesn't represent a literal percent) 19609 and set UseNewInfoFmtStrings=yes in CVSROOT/config\. After that, convert 19610 individual command lines and scripts to handle the new format at your 19611 leisure\." 19612 dotest taginfo-10 "${testcvs} -q tag -F -c brtag" \ 19613 "${SPROG} tag: warning: taginfo line contains no format strings: 19614 \"${TESTDIR}/1/loggit\" 19615 Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this 19616 usage is deprecated\. 19617 T file1" 19618 19619 dotest_fail taginfo-11 "${testcvs} -q tag rejectme" \ 19620 "${SPROG} tag: warning: taginfo line contains no format strings: 19621 \"${TESTDIR}/1/loggit\" 19622 Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this 19623 usage is deprecated\. 19624 ${SPROG} tag: Pre-tag check failed 19625 ${SPROG} \[tag aborted\]: correct the above errors first!" 19626 19627 # When we are using taginfo to allow/disallow, it would be 19628 # convenient to be able to use "cvs -n tag" to test whether 19629 # the allow/disallow functionality is working as expected. 19630 dotest taginfo-12 "${testcvs} -nq tag rejectme" \ 19631 "${SPROG} tag: warning: taginfo line contains no format strings: 19632 \"${TESTDIR}/1/loggit\" 19633 Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this 19634 usage is deprecated\. 19635 T file1" 19636 19637 # But when taginfo is used for logging, it is a pain for -n 19638 # to call taginfo, since taginfo doesn't know whether -n was 19639 # specified or not. 19640 dotest taginfo-13 "${testcvs} -nq tag would-be-tag" \ 19641 "${SPROG} tag: warning: taginfo line contains no format strings: 19642 \"${TESTDIR}/1/loggit\" 19643 Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this 19644 usage is deprecated\. 19645 T file1" 19646 19647 # Deleting: the cases are basically either the tag existed, 19648 # or it didn't exist. 19649 dotest taginfo-14 "${testcvs} -q tag -d tag1" \ 19650 "${SPROG} tag: warning: taginfo line contains no format strings: 19651 \"${TESTDIR}/1/loggit\" 19652 Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this 19653 usage is deprecated\. 19654 D file1" 19655 dotest taginfo-15 "${testcvs} -q tag -d tag1" \ 19656 "${SPROG} tag: warning: taginfo line contains no format strings: 19657 \"${TESTDIR}/1/loggit\" 19658 Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this 19659 usage is deprecated\." 19660 19661 # Likewise with rtag. 19662 dotest taginfo-16 "${testcvs} -q rtag tag1 first-dir" \ 19663 "${SPROG} rtag: warning: taginfo line contains no format strings: 19664 \"${TESTDIR}/1/loggit\" 19665 Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this 19666 usage is deprecated\." 19667 dotest taginfo-17 "${testcvs} -q rtag -d tag1 first-dir" \ 19668 "${SPROG} rtag: warning: taginfo line contains no format strings: 19669 \"${TESTDIR}/1/loggit\" 19670 Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this 19671 usage is deprecated\." 19672 dotest taginfo-18 "${testcvs} -q rtag -d tag1 first-dir" \ 19673 "${SPROG} rtag: warning: taginfo line contains no format strings: 19674 \"${TESTDIR}/1/loggit\" 19675 Filling in old defaults ('%t %o %p %{sv}'), but please be aware that this 19676 usage is deprecated\." 19677 19678 # The "br" example should be passing 1.1.2 or 1.1.0.2. 19679 # But it turns out that is very hard to implement, since 19680 # check_fileproc doesn't know what branch number it will 19681 # get. Probably the whole thing should be re-architected 19682 # so that taginfo only allows/denies tagging, and a new 19683 # hook, which is done from tag_fileproc, does logging. 19684 # That would solve this, some more subtle races, and also 19685 # the fact that it is nice for users to run "-n tag foo" to 19686 # see whether a tag would be allowed. Failing that, 19687 # I suppose passing "1.1.branch" or "branch" for "br" 19688 # would be an improvement. 19689 dotest taginfo-examine-1 "cat ${TESTDIR}/1/taglog" \ 19690 "tag1 add first-dir file1 1\.1 19691 br add first-dir file1 1\.1 19692 brtag mov first-dir file1 1\.1\.2\.1 19693 tag1 del first-dir file1 1\.1 19694 tag1 del first-dir 19695 tag1 add first-dir file1 1\.1 19696 tag1 del first-dir file1 1\.1 19697 tag1 del first-dir" 19698 19699 # now that we've tested the default operation, try a new 19700 # style fmt string. 19701 rm $TESTDIR/1/taglog 19702 cd .. 19703 cd CVSROOT 19704 dotest taginfo-newfmt-init-1 \ 19705 "$testcvs -q up -prtaginfo-start taginfo >taginfo" 19706 echo "ALL $TESTDIR/1/loggit %r %t %o %b %p %{sTVv}" >>taginfo 19707 dotest taginfo-newfmt-init-2 "$testcvs -q ci -m check-in-taginfo" \ 19708 "$TESTDIR/cvsroot/CVSROOT/taginfo,v <-- taginfo 19709 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19710 $SPROG commit: Rebuilding administrative file database" \ 19711 "$TESTDIR/cvsroot/CVSROOT/taginfo,v <-- taginfo 19712 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19713 $SPROG commit: Rebuilding administrative file database 19714 $SPROG commit: warning: Set to use deprecated info format strings\. Establish 19715 compatibility with the new info file format strings (add a temporary '1' in 19716 all info files after each '%' which doesn't represent a literal percent) 19717 and set UseNewInfoFmtStrings=yes in CVSROOT/config\. After that, convert 19718 individual command lines and scripts to handle the new format at your 19719 leisure\." 19720 19721 cat >${TESTDIR}/1/loggit <<EOF 19722 #!${TESTSHELL} 19723 if test "\$1" = rejectme; then 19724 exit 1 19725 else 19726 while test "\$#" -gt 0; do 19727 echo "\$1" >>${TESTDIR}/1/taglog 19728 shift 19729 done 19730 exit 0 19731 fi 19732 EOF 19733 19734 cd .. 19735 cd first-dir 19736 dotest taginfo-newfmt-2 "${testcvs} -q update -A" "[UP] file1" 19737 echo "bull pucky" >'file 2' 19738 dotest taginfo-newfmt-2b "${testcvs} add 'file 2'" \ 19739 "${SPROG} add: scheduling file .file 2. for addition 19740 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 19741 dotest taginfo-newfmt-2c "$testcvs -q ci -m add-it" \ 19742 "$TESTDIR/cvsroot/first-dir/file 2,v <-- file 2 19743 initial revision: 1\.1" \ 19744 "$TESTDIR/cvsroot/first-dir/file 2,v <-- file 2 19745 initial revision: 1\.1 19746 $SPROG commit: warning: Set to use deprecated info format strings\. Establish 19747 compatibility with the new info file format strings (add a temporary '1' in 19748 all info files after each '%' which doesn't represent a literal percent) 19749 and set UseNewInfoFmtStrings=yes in CVSROOT/config\. After that, convert 19750 individual command lines and scripts to handle the new format at your 19751 leisure\." 19752 19753 dotest taginfo-newfmt-3 "${testcvs} -q tag tag1" \ 19754 "T file 2 19755 T file1" 19756 dotest taginfo-newfmt-4 "${testcvs} -q tag tag3" \ 19757 "T file 2 19758 T file1" 19759 dotest taginfo-newfmt-5 "$testcvs -q tag -rtag1 tag4" \ 19760 "T file 2 19761 T file1" 19762 19763 dotest taginfo-newfmt-examine-1 "cat ${TESTDIR}/1/taglog" \ 19764 "$TESTDIR/cvsroot 19765 tag1 19766 add 19767 N 19768 first-dir 19769 file 2 19770 19771 NONE 19772 1\.1 19773 file1 19774 19775 NONE 19776 1\.1 19777 $TESTDIR/cvsroot 19778 tag3 19779 add 19780 N 19781 first-dir 19782 file 2 19783 19784 NONE 19785 1\.1 19786 file1 19787 19788 NONE 19789 1\.1 19790 $TESTDIR/cvsroot 19791 tag4 19792 add 19793 N 19794 first-dir 19795 file 2 19796 tag1 19797 NONE 19798 1\.1 19799 file1 19800 tag1 19801 NONE 19802 1\.1" 19803 19804 # now update to use the new format strings (really, disable support 19805 # of the old format) and run the whole gamut of tests again. 19806 rm ${TESTDIR}/1/taglog 19807 cd .. 19808 cd CVSROOT 19809 cat >${TESTDIR}/1/loggit <<EOF 19810 #!${TESTSHELL} 19811 if test "\$1" = rejectme; then 19812 exit 1 19813 else 19814 echo "\$@" >>${TESTDIR}/1/taglog 19815 exit 0 19816 fi 19817 EOF 19818 dotest taginfo-newfmt-init-7 \ 19819 "$testcvs -q up -prtaginfo-start taginfo >taginfo" 19820 echo "ALL ${TESTDIR}/1/loggit %{t} %b %{o} %p %{sTVv}" >>taginfo 19821 echo "UseNewInfoFmtStrings=yes" >>config 19822 dotest taginfo-newfmt-7 "$testcvs -q ci -m check-in-taginfo" \ 19823 "$TESTDIR/cvsroot/CVSROOT/config,v <-- config 19824 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19825 $TESTDIR/cvsroot/CVSROOT/taginfo,v <-- taginfo 19826 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19827 $SPROG commit: Rebuilding administrative file database" \ 19828 "$TESTDIR/cvsroot/CVSROOT/config,v <-- config 19829 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19830 $TESTDIR/cvsroot/CVSROOT/taginfo,v <-- taginfo 19831 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19832 $SPROG commit: Rebuilding administrative file database 19833 $SPROG commit: warning: Set to use deprecated info format strings\. Establish 19834 compatibility with the new info file format strings (add a temporary '1' in 19835 all info files after each '%' which doesn't represent a literal percent) 19836 and set UseNewInfoFmtStrings=yes in CVSROOT/config\. After that, convert 19837 individual command lines and scripts to handle the new format at your 19838 leisure\." 19839 19840 cd ../first-dir 19841 dotest taginfo-newfmt-8 "${testcvs} -q tag tag1" "" 19842 mkdir sdir 19843 dotest taginfo-newfmt-8b "${testcvs} -q add sdir" \ 19844 "Directory ${TESTDIR}/cvsroot/first-dir/sdir added to the repository" 19845 touch sdir/file3 19846 dotest taginfo-newfmt-8c "${testcvs} -q add sdir/file3" \ 19847 "${SPROG} add: use .${SPROG} commit. to add this file permanently" 19848 dotest taginfo-newfmt-8d "${testcvs} -q ci -m added-sdir" \ 19849 "${TESTDIR}/cvsroot/first-dir/sdir/file3,v <-- sdir/file3 19850 initial revision: 1\.1" 19851 dotest taginfo-newfmt-9 "${testcvs} -q tag -b br" \ 19852 "T file 2 19853 W file1 : br already exists on branch 1\.1\.2\.1 : NOT MOVING tag to branch 1\.1\.0\.4 19854 T sdir/file3" 19855 dotest taginfo-newfmt-10 "${testcvs} -q update -r br" "[UP] file1" 19856 echo add more text on branch >>file1 19857 dotest taginfo-newfmt-11 "${testcvs} -q ci -m modify-on-br" \ 19858 "${TESTDIR}/cvsroot/first-dir/file1,v <-- file1 19859 new revision: 1\.1\.2\.2; previous revision: 1\.1\.2\.1" 19860 dotest taginfo-newfmt-12 "${testcvs} -q tag -F -c brtag" \ 19861 "T file 2 19862 T file1 19863 T sdir/file3" 19864 19865 # we are being called once for each directory. I'm not sure 19866 # I like this, but I'm also not sure how hard it would be to change, 19867 # It seems like it would be more trouble than it is really worth 19868 # to let a partial tag go through... 19869 dotest_fail taginfo-newfmt-13 "${testcvs} -q tag rejectme" \ 19870 "${SPROG} tag: Pre-tag check failed 19871 ${SPROG} tag: Pre-tag check failed 19872 ${SPROG} \[tag aborted\]: correct the above errors first!" 19873 19874 # When we are using taginfo to allow/disallow, it would be 19875 # convenient to be able to use "cvs -n tag" to test whether 19876 # the allow/disallow functionality is working as expected. 19877 # see the comment before taginfo-newfmt-15 for notes on 19878 # pretag and posttag proc 19879 dotest taginfo-newfmt-14 "${testcvs} -nq tag rejectme" \ 19880 "T file 2 19881 T file1 19882 T sdir/file3" 19883 19884 # But when taginfo is used for logging, it is a pain for -n 19885 # to call taginfo, since taginfo doesn't know whether -n was 19886 # specified or not. (this could be fixed pretty easily now 19887 # with a new fmt string. i suppose it would be better to 19888 # have a pretag proc and a posttag proc, though.) 19889 dotest taginfo-newfmt-15 "${testcvs} -nq tag would-be-tag" \ 19890 "T file 2 19891 T file1 19892 T sdir/file3" 19893 19894 # Deleting: the cases are basically either the tag existed, 19895 # or it didn't exist. 19896 dotest taginfo-newfmt-16 "${testcvs} -q tag -d tag1" \ 19897 "D file 2 19898 D file1" 19899 dotest taginfo-newfmt-17 "${testcvs} -q tag -d tag1" "" 19900 19901 # Likewise with rtag. 19902 dotest taginfo-newfmt-18 "${testcvs} -q rtag tag1 first-dir" "" 19903 dotest taginfo-newfmt-19 "${testcvs} -q rtag -d tag1 first-dir" "" 19904 dotest taginfo-newfmt-20 "${testcvs} -q rtag -d tag1 first-dir" "" 19905 19906 # The "br" example should be passing 1.1.2 or 1.1.0.2. 19907 # But it turns out that is very hard to implement, since 19908 # check_fileproc doesn't know what branch number it will 19909 # get. Probably the whole thing should be re-architected 19910 # so that taginfo only allows/denies tagging, and a new 19911 # hook, which is done from tag_fileproc, does logging. 19912 # That would solve this, some more subtle races, and also 19913 # the fact that it is nice for users to run "-n tag foo" to 19914 # see whether a tag would be allowed. Failing that, 19915 # I suppose passing "1.1.branch" or "branch" for "br" 19916 # would be an improvement. 19917 dotest taginfo-newfmt-examine-2 "cat ${TESTDIR}/1/taglog" \ 19918 "tag1 N add first-dir 19919 br T add first-dir file 2 NONE 1\.1 19920 br T add first-dir/sdir file3 NONE 1\.1 19921 brtag N mov first-dir file 2 br NONE 1\.1 file1 br 1\.1\.2\.1 1\.1\.2\.2 19922 brtag N mov first-dir/sdir file3 br NONE 1\.1 19923 tag1 ? del first-dir file 2 br 1\.1 1\.1 file1 br 1\.1 1\.1 19924 tag1 ? del first-dir/sdir 19925 tag1 ? del first-dir 19926 tag1 ? del first-dir/sdir 19927 tag1 N add first-dir file 2 NONE 1\.1 file1 NONE 1\.1 19928 tag1 N add first-dir/sdir file3 NONE 1\.1 19929 tag1 ? del first-dir file 2 1\.1 1\.1 file1 1\.1 1\.1 19930 tag1 ? del first-dir/sdir file3 1\.1 1\.1 19931 tag1 ? del first-dir 19932 tag1 ? del first-dir/sdir" 19933 19934 dokeep 19935 restore_adm 19936 cd ../.. 19937 rm -r 1 19938 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 19939 ;; 19940 19941 19942 19943 posttag) 19944 # Tests of the CVSROOT/taginfo file. See the comment at the 19945 # "info" tests for a full list of administrative file tests. 19946 19947 mkdir 1; cd 1 19948 19949 dotest posttag-init-1 "$testcvs -q co CVSROOT" "U CVSROOT/$DOTSTAR" 19950 19951 # now that we've tested the default operation, try a new 19952 # style fmt string. 19953 cd CVSROOT 19954 echo "ALL $TESTDIR/1/loggit %r %t %o %b %p %{sVv}" >posttag 19955 dotest posttag-init-2 "$testcvs -q ci -m check-in-taginfo" \ 19956 "$TESTDIR/cvsroot/CVSROOT/posttag,v <-- posttag 19957 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 19958 $SPROG commit: Rebuilding administrative file database" 19959 cd .. 19960 19961 cat >$TESTDIR/1/loggit <<EOF 19962 #!$TESTSHELL 19963 if test "\$1" = rejectme; then 19964 error=: 19965 else 19966 error=false 19967 fi 19968 19969 while [ -n "\$1" ]; do 19970 echo "\$1" >>$TESTDIR/1/taglog 19971 shift 19972 done 19973 19974 if \$error; then 19975 exit 1 19976 fi 19977 exit 0 19978 EOF 19979 # #^@&!^@ Cygwin. 19980 if test -n "$remotehost"; then 19981 $CVS_RSH $remotehost "chmod +x $TESTDIR/1/loggit" 19982 else 19983 chmod +x $TESTDIR/1/loggit 19984 fi 19985 19986 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 19987 dotest posttag-init-3 "$testcvs -q co first-dir" 19988 19989 cd first-dir 19990 echo first >file1 19991 echo "bull pucky" >'file 2' 19992 dotest posttag-init-4 "$testcvs add file1 'file 2'" \ 19993 "$SPROG add: scheduling file \`file1' for addition 19994 $SPROG add: scheduling file \`file 2' for addition 19995 $SPROG add: use \`$SPROG commit' to add these files permanently" 19996 dotest posttag-init-5 "$testcvs -q ci -m add-it" \ 19997 "$CVSROOT_DIRNAME/first-dir/file 2,v <-- file 2 19998 initial revision: 1\.1 19999 $CVSROOT_DIRNAME/first-dir/file1,v <-- file1 20000 initial revision: 1\.1" 20001 20002 dotest posttag-1 "$testcvs -q tag tag1" \ 20003 "T file 2 20004 T file1" 20005 dotest posttag-2 "$testcvs -q tag tag3" \ 20006 "T file 2 20007 T file1" 20008 20009 dotest posttag-3 "$testcvs -q tag rejectme" \ 20010 "T file 2 20011 T file1" 20012 20013 dotest posttag-4 "$testcvs -q tag -d rejectme" \ 20014 "D file 2 20015 D file1" 20016 20017 dotest posttag-examine-1 "cat $TESTDIR/1/taglog" \ 20018 "$TESTDIR/cvsroot 20019 tag1 20020 add 20021 N 20022 first-dir 20023 file 2 20024 NONE 20025 1\.1 20026 file1 20027 NONE 20028 1\.1 20029 $TESTDIR/cvsroot 20030 tag3 20031 add 20032 N 20033 first-dir 20034 file 2 20035 NONE 20036 1\.1 20037 file1 20038 NONE 20039 1\.1 20040 $TESTDIR/cvsroot 20041 rejectme 20042 add 20043 N 20044 first-dir 20045 file 2 20046 NONE 20047 1.1 20048 file1 20049 NONE 20050 1.1 20051 $TESTDIR/cvsroot 20052 rejectme 20053 del 20054 ? 20055 first-dir 20056 file 2 20057 1.1 20058 1.1 20059 file1 20060 1.1 20061 1.1" 20062 20063 dokeep 20064 cd ../.. 20065 restore_adm 20066 rm -r 1 20067 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 20068 ;; 20069 20070 20071 20072 config) 20073 # Tests of the CVSROOT/config file. See the comment at the 20074 # "info" tests for a full list of administrative file tests. 20075 20076 # See note in keywordexpand about config errors from a proxied 20077 # primary. 20078 if $noredirect; then 20079 notnoredirect config 20080 continue 20081 fi 20082 20083 # On Windows, we can't check out CVSROOT, because the case 20084 # insensitivity means that this conflicts with cvsroot. 20085 mkdir wnt 20086 cd wnt 20087 20088 dotest config-init-1 "$testcvs -q co CVSROOT" "U CVSROOT/$DOTSTAR" 20089 cd CVSROOT 20090 dotest config-init-2 "$testcvs -Q tag config-start" 20091 echo 'bogus line' >>config 20092 dotest config-3 "$testcvs -q ci -m change-to-bogus-line" \ 20093 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20094 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20095 $SPROG commit: Rebuilding administrative file database" 20096 dotest config-3a "$testcvs -Q update -jHEAD -jconfig-start" \ 20097 "$SPROG [a-z]*: $SECONDARY_CVSROOT_DIRNAME/CVSROOT/config \[[1-9][0-9]*\]: syntax error: missing \`=' between keyword and value 20098 RCS file: $CVSROOT_DIRNAME/CVSROOT/config,v 20099 retrieving revision 1.[0-9]* 20100 retrieving revision 1.[0-9]* 20101 Merging differences between 1.[0-9]* and 1.[0-9]* into config" 20102 echo 'BogusOption=yes' >>config 20103 if $proxy; then 20104 dotest config-4p "$testcvs -q ci -m change-to-bogus-opt" \ 20105 "$SPROG [a-z]*: $SECONDARY_CVSROOT_DIRNAME/CVSROOT/config \[[1-9][0-9]*\]: syntax error: missing \`=' between keyword and value 20106 $SPROG [a-z]*: $CVSROOT_DIRNAME/CVSROOT/config \[[1-9][0-9]*\]: syntax error: missing \`=' between keyword and value 20107 $CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20108 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20109 $SPROG commit: Rebuilding administrative file database" 20110 else 20111 dotest config-4 "$testcvs -q ci -m change-to-bogus-opt" \ 20112 "$SPROG [a-z]*: $SECONDARY_CVSROOT_DIRNAME/CVSROOT/config \[[1-9][0-9]*\]: syntax error: missing \`=' between keyword and value 20113 $CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20114 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20115 $SPROG commit: Rebuilding administrative file database" 20116 fi 20117 20118 if $proxy; then 20119 : # FIXME: don't try in proxy mode 20120 else 20121 # Now test the HistoryLogPath and HistorySearchPath options. 20122 mkdir $TESTDIR/historylogs 20123 echo >config \ 20124 'HistoryLogPath=$CVSROOT/../historylogs/%Y-%m-%d-%H-%M-%S' 20125 echo 'HistorySearchPath=$CVSROOT/../historylogs/*' >>config 20126 20127 # The warning is left over from the previous test. 20128 dotest config-5 "$testcvs -q ci -m set-HistoryLogPath" \ 20129 "$SPROG [a-z]*: $CVSROOT_DIRNAME/CVSROOT/config \[[1-9][0-9]*\]: unrecognized keyword \`BogusOption' 20130 $CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20131 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20132 $SPROG commit: Rebuilding administrative file database" 20133 20134 echo '# noop' >> config 20135 dotest config-6 "$testcvs -q ci -mlog-commit" \ 20136 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20137 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20138 $SPROG commit: Rebuilding administrative file database" 20139 20140 echo '# noop' >> config 20141 dotest config-7 "$testcvs -q ci -mlog-commit" \ 20142 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20143 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20144 $SPROG commit: Rebuilding administrative file database" 20145 20146 # The log entry was intentionally split across multiple files. 20147 dotest config-8 "ls -l $TESTDIR/historylogs/*" \ 20148 "-rw-rw-r--.*$TESTDIR/historylogs/2[0-9][0-9][0-9]-[01][0-9]-[0-3][0-9]-[0-2][0-9]-[0-5][0-9]-[0-5][0-9] 20149 -rw-rw-r--.*$TESTDIR/historylogs/2[0-9][0-9][0-9]-[01][0-9]-[0-3][0-9]-[0-2][0-9]-[0-5][0-9]-[0-5][0-9]" 20150 20151 # Should still see both commits. 20152 if $remote; then 20153 dotest config-9r "$testcvs history -ea" \ 20154 "M [0-9-]* [0-9:]* ${PLUS}0000 $username 1\.[0-9]* config CVSROOT == <remote> 20155 M [0-9-]* [0-9:]* ${PLUS}0000 $username 1\.[0-9]* config CVSROOT == <remote>" 20156 else 20157 dotest config-9 "$testcvs history -ea" \ 20158 "M [0-9-]* [0-9:]* ${PLUS}0000 $username 1\.[0-9]* config CVSROOT == $TESTDIR/wnt/CVSROOT 20159 M [0-9-]* [0-9:]* ${PLUS}0000 $username 1\.[0-9]* config CVSROOT == $TESTDIR/wnt/CVSROOT" 20160 fi 20161 20162 # Remove this now to see what kind of error messages we get. 20163 rm -r $TESTDIR/historylogs 20164 fi 20165 20166 dokeep 20167 restore_adm 20168 cd ../.. 20169 rm -r wnt 20170 ;; 20171 20172 20173 20174 config2) 20175 # Tests of the CVSROOT/config file. See the comment at the 20176 # "info" tests for a full list of administrative file tests. 20177 20178 # No point in testing compression effects in local mode. 20179 if $remote; then :; else 20180 remoteonly config2 20181 continue 20182 fi 20183 20184 # On Windows, we can't check out CVSROOT, because the case 20185 # insensitivity means that this conflicts with cvsroot. 20186 mkdir wnt 20187 cd wnt 20188 20189 # Set MinCompressionLevel and MaxCompressionLevel in config. 20190 dotest config2-init-1 "$testcvs -q co CVSROOT" "U CVSROOT/$DOTSTAR" 20191 dotest config2-init-1b "$testcvs -Q tag initial" 20192 cd CVSROOT 20193 cat << EOF >> config 20194 MinCompressionLevel=5 20195 MaxCompressionLevel=6 20196 EOF 20197 dotest config2-init-2 \ 20198 "$testcvs -q ci -m set-compression-constraints" \ 20199 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20200 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20201 $SPROG commit: Rebuilding administrative file database" 20202 20203 # Verify that the server reports forcing compression to an allowed 20204 # level. 20205 20206 # Too high. 20207 dotest config2-1 "$testcvs -z9 update" \ 20208 "$SPROG server: Forcing compression level 6 (allowed: 5 <= z <= 6)\. 20209 $SPROG update: Updating \." 20210 # Too low. 20211 dotest config2-2 "$testcvs -z1 update" \ 20212 "$SPROG server: Forcing compression level 5 (allowed: 5 <= z <= 6)\. 20213 $SPROG update: Updating \." 20214 # From zero. 20215 dotest config2-3 "$testcvs update" \ 20216 "$SPROG server: Forcing compression level 5 (allowed: 5 <= z <= 6)\. 20217 $SPROG update: Updating \." 20218 # Just right. 20219 dotest config2-3 "$testcvs -z5 update" \ 20220 "$SPROG update: Updating \." 20221 20222 # Check that compression may be forced to 0. 20223 dotest config2-init-2b "$testcvs -z5 up -jHEAD -jinitial" "$DOTSTAR" 20224 cat << EOF >> config 20225 MaxCompressionLevel=0 20226 EOF 20227 dotest config2-init-3 "$testcvs -qz5 ci -m no-compression" \ 20228 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20229 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20230 $SPROG commit: Rebuilding administrative file database" 20231 20232 # Too high. 20233 dotest config2-5 "$testcvs -z9 update" \ 20234 "$SPROG server: Forcing compression level 0 (allowed: 0 <= z <= 0)\. 20235 $SPROG update: Updating \." 20236 # Just right. 20237 dotest config2-6 "$testcvs update" \ 20238 "$SPROG update: Updating \." 20239 20240 # And verify effect without restrictions. 20241 dotest config2-init-3b "$testcvs up -jHEAD -jinitial" "$DOTSTAR" 20242 dotest config2-init-4 "$testcvs -q ci -m change-to-comment" \ 20243 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20244 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20245 $SPROG commit: Rebuilding administrative file database" 20246 dotest config2-7 "$testcvs update" \ 20247 "$SPROG update: Updating \." 20248 20249 dokeep 20250 restore_adm 20251 cd ../.. 20252 rm -r wnt 20253 ;; 20254 20255 config3) 20256 # Verify comments, white space, & [rootspecs] in CVSROOT/config 20257 # 20258 # `cvs server' `-c' option tested in `server' test 20259 modify_repo mkdir $CVSROOT_DIRNAME/config3 20260 mkdir config3 20261 cd config3 20262 20263 dotest config3-init-1 "$testcvs -q co CVSROOT" "U CVSROOT/$DOTSTAR" 20264 cd CVSROOT 20265 20266 # I break the usual sanity.sh indentation standard for here-docs 20267 # mostly to test that leading white-space is now ignored. 20268 dotest config3-init-1b "$testcvs -Q tag initial-config" 20269 20270 cat <<EOF >>config 20271 # Ignore a comment with leading spaces. 20272 GLOBAL-BAD-OPTION=WWW 20273 20274 [/ignore/this/root] 20275 [/and/this/one] 20276 IGNORED-BAD-OPTION=YYY 20277 EOF 20278 dotest config3-init-2 \ 20279 "$testcvs -q ci -m test-root-specs" \ 20280 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20281 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20282 $SPROG commit: Rebuilding administrative file database" 20283 20284 cd .. 20285 dotest config3-1 "$testcvs co config3" \ 20286 "$SPROG [a-z]*: $SECONDARY_CVSROOT_DIRNAME/CVSROOT/config \[[0-9]*\]: unrecognized keyword \`GLOBAL-BAD-OPTION' 20287 $SPROG checkout: Updating config3" 20288 20289 cd CVSROOT 20290 dotest config3-init-2a "$testcvs -Q up -jHEAD -jinitial-config" \ 20291 "$DOTSTAR 20292 Merging differences between 1\.[0-9]* and 1\.[0-9]* into config" 20293 20294 cat <<EOF >>config 20295 # Ignore a comment with leading spaces. 20296 20297 [/ignore/this/root] 20298 [/and/this/one] 20299 IGNORED-BAD-OPTION=YYY 20300 # Ignore a comment with leading spaces. 20301 20302 [/some/other/root] 20303 20304 # Comments and blank lines do not affect fall-through behavior. 20305 20306 [$CVSROOT_DIRNAME] 20307 [$SECONDARY_CVSROOT_DIRNAME] 20308 20309 # Comments and blank lines do not affect fall-through behavior. 20310 20311 [/yet/another/root] 20312 # Ignore a comment with leading spaces. 20313 PROCESS-BAD-OPTION=XXX 20314 EOF 20315 dotest config3-init-3 \ 20316 "$testcvs -q ci -m test-root-specs" \ 20317 "$SPROG [a-z]*: $CVSROOT_DIRNAME/CVSROOT/config \[[0-9]*\]: unrecognized keyword \`GLOBAL-BAD-OPTION' 20318 $CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20319 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20320 $SPROG commit: Rebuilding administrative file database" \ 20321 "$SPROG [a-z]*: $SECONDARY_CVSROOT_DIRNAME/CVSROOT/config \[[0-9]*\]: unrecognized keyword \`GLOBAL-BAD-OPTION' 20322 $SPROG [a-z]*: $CVSROOT_DIRNAME/CVSROOT/config \[[0-9]*\]: unrecognized keyword \`GLOBAL-BAD-OPTION' 20323 $CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20324 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20325 $SPROG commit: Rebuilding administrative file database" 20326 20327 cd .. 20328 dotest config3-2 "$testcvs co config3" \ 20329 "$SPROG [a-z]*: $SECONDARY_CVSROOT_DIRNAME/CVSROOT/config \[[0-9]*\]: unrecognized keyword \`PROCESS-BAD-OPTION' 20330 $SPROG checkout: Updating config3" 20331 20332 # The next few tests make sure both global options and root 20333 # specific options are processed by setting the history log and 20334 # search paths in different locations and then verifying that 20335 # both registered. It also verifies that a key for a different 20336 # root is ignored. 20337 cd CVSROOT 20338 dotest config3-init-3a "$testcvs -Q up -jHEAD -jinitial-config" \ 20339 "$DOTSTAR 20340 Merging differences between 1\.[0-9]* and 1\.[0-9]* into config" 20341 20342 cat <<EOF >>config 20343 HistoryLogPath=$TESTDIR/historylog 20344 20345 [/ignore/this/root] 20346 [/and/this/one] 20347 IGNORED-BAD-OPTION=YYY 20348 20349 [/some/other/root] 20350 [$CVSROOT_DIRNAME] 20351 [$SECONDARY_CVSROOT_DIRNAME] 20352 [/yet/another/root] 20353 HistorySearchPath=$TESTDIR/historylog 20354 20355 [/ignore/another/root] 20356 [/and/this/one/too] 20357 ANOTHER-IGNORED-BAD-OPTION=ZZZ 20358 20359 [$CVSROOT_DIRNAME] 20360 [$SECONDARY_CVSROOT_DIRNAME] 20361 LogHistory=TMAR 20362 EOF 20363 dotest config3-init-4 \ 20364 "$testcvs -q ci -m test-root-specs" \ 20365 "$SPROG [a-z]*: $CVSROOT_DIRNAME/CVSROOT/config \[[0-9]*\]: unrecognized keyword \`PROCESS-BAD-OPTION' 20366 $CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20367 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20368 $SPROG commit: Rebuilding administrative file database" \ 20369 "$SPROG [a-z]*: $SECONDARY_CVSROOT_DIRNAME/CVSROOT/config \[[0-9]*\]: unrecognized keyword \`PROCESS-BAD-OPTION' 20370 $SPROG [a-z]*: $CVSROOT_DIRNAME/CVSROOT/config \[[0-9]*\]: unrecognized keyword \`PROCESS-BAD-OPTION' 20371 $CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20372 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20373 $SPROG commit: Rebuilding administrative file database" 20374 20375 cd .. 20376 dotest config3-3 "$testcvs co -d config3-2 config3" \ 20377 "$SPROG checkout: Updating config3-2" 20378 20379 cd config3-2 20380 touch newfile 20381 dotest config3-4 "$testcvs -Q add newfile" 20382 dotest config3-5 "$testcvs -q ci -madd-file" \ 20383 "$CVSROOT_DIRNAME/config3/newfile,v <-- newfile 20384 initial revision: 1\.1" 20385 20386 dotest config3-6 "$testcvs rtag testtag config3" \ 20387 "$SPROG rtag: Tagging config3" 20388 20389 cd .. 20390 dotest config3-7 "$testcvs history -ea" \ 20391 "A [0-9-]* [0-9:]* ${PLUS}0000 $username 1\.1 newfile config3 == [-_/a-zA-Z0-9<>]* 20392 T [0-9-]* [0-9:]* ${PLUS}0000 $username config3 \[testtag:A\]" 20393 20394 dokeep 20395 restore_adm 20396 cd .. 20397 rm -r config3 20398 modify_repo rm -rf $CVSROOT_DIRNAME/config3 20399 ;; 20400 20401 20402 20403 config4) 20404 # TmpDir 20405 mkdir config4 20406 cd config4 20407 20408 dotest config4-init-1 "$testcvs -q co CVSROOT" "U CVSROOT/$DOTSTAR" 20409 cd CVSROOT 20410 mkdir $TESTDIR/config4/tmp 20411 echo "TmpDir=$TESTDIR/config4/tmp" >>config 20412 echo "DEFAULT $TESTDIR/config4/verify %l" >>verifymsg 20413 dotest config4-init-2 "$testcvs -q ci -m change-tmpdir" \ 20414 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20415 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20416 $CVSROOT_DIRNAME/CVSROOT/verifymsg,v <-- verifymsg 20417 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20418 $SPROG commit: Rebuilding administrative file database" 20419 20420 cat >$TESTDIR/config4/verify <<EOF 20421 #! /bin/sh 20422 echo \$1 20423 exit 0 20424 EOF 20425 chmod a+x $TESTDIR/config4/verify 20426 dotest config4-1 \ 20427 "$testcvs -q ci -fmtest-tmpdir config" \ 20428 "$TESTDIR/config4/tmp/$tempfile 20429 $CVSROOT_DIRNAME/CVSROOT/config,v <-- config 20430 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 20431 $SPROG commit: Rebuilding administrative file database" 20432 20433 dokeep 20434 restore_adm 20435 cd ../.. 20436 rm -r config4 20437 modify_repo rm -rf $CVSROOT_DIRNAME/config4 20438 ;; 20439 20440 20441 20442 serverpatch) 20443 # Test remote CVS handling of unpatchable files. This isn't 20444 # much of a test for local CVS. 20445 # We test this with some keyword expansion games, but the situation 20446 # also arises if the user modifies the file while CVS is running. 20447 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 20448 mkdir 1 20449 cd 1 20450 dotest serverpatch-1 "$testcvs -q co first-dir" 20451 20452 cd first-dir 20453 20454 # Add a file with an RCS keyword. 20455 echo '$''Name$' > file1 20456 echo '1' >> file1 20457 dotest serverpatch-2 "$testcvs add file1" \ 20458 "$SPROG add: scheduling file \`file1' for addition 20459 $SPROG add: use \`$SPROG commit' to add this file permanently" 20460 20461 dotest serverpatch-3 "${testcvs} -q commit -m add" \ 20462 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 20463 initial revision: 1\.1" 20464 20465 # Tag the file. 20466 dotest serverpatch-4 "${testcvs} -q tag tag file1" 'T file1' 20467 20468 # Check out a tagged copy of the file. 20469 cd ../.. 20470 mkdir 2 20471 cd 2 20472 dotest serverpatch-5 "${testcvs} -q co -r tag first-dir" \ 20473 'U first-dir/file1' 20474 20475 # Remove the tag. This will leave the tag string in the 20476 # expansion of the Name keyword. 20477 dotest serverpatch-6 "${testcvs} -q update -A first-dir" '' 20478 20479 # Modify and check in the first copy. 20480 cd ../1/first-dir 20481 echo '2' >> file1 20482 dotest serverpatch-7 "${testcvs} -q ci -mx file1" \ 20483 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 20484 new revision: 1\.2; previous revision: 1\.1" 20485 20486 # Now update the second copy. When using remote CVS, the 20487 # patch will fail, forcing the file to be refetched. 20488 cd ../../2/first-dir 20489 dotest serverpatch-8 "${testcvs} -q update" \ 20490 'U file1' \ 20491 "P file1 20492 ${CPROG} update: checksum failure after patch to \./file1; will refetch 20493 ${CPROG} client: refetching unpatchable files 20494 $SPROG update: warning: \`file1' was lost 20495 U file1" 20496 20497 dokeep 20498 cd ../.. 20499 rm -r 1 2 20500 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 20501 ;; 20502 20503 20504 20505 log) 20506 # Test selecting revisions with cvs log. 20507 # See also log2 tests for more tests. 20508 # See also branches-14.3 for logging with a branch off of a branch. 20509 # See also multibranch-14 for logging with several branches off the 20510 # same branchpoint. 20511 # Tests of each option to cvs log: 20512 # -h: admin-19a-log 20513 # -N: log, log2, admin-19a-log 20514 # -b, -r: log 20515 # -d: logopt, rcs 20516 # -s: logopt, rcs3 20517 # -R: logopt, rcs3 20518 # -w, -t: not tested yet (TODO) 20519 20520 # Check in a file with a few revisions and branches. 20521 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 20522 dotest log-1 "$testcvs -q co first-dir" 20523 cd first-dir 20524 echo 'first revision' > file1 20525 echo 'first revision' > file2 20526 dotest log-2 "${testcvs} add file1 file2" \ 20527 "${SPROG} add: scheduling file .file1. for addition 20528 ${SPROG} add: scheduling file .file2. for addition 20529 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 20530 20531 # While we're at it, check multi-line comments, input from file, 20532 # and trailing whitespace trimming 20533 echo 'line 1 ' >${TESTDIR}/comment.tmp 20534 echo ' ' >>${TESTDIR}/comment.tmp 20535 echo 'line 2 ' >>${TESTDIR}/comment.tmp 20536 echo ' ' >>${TESTDIR}/comment.tmp 20537 echo ' ' >>${TESTDIR}/comment.tmp 20538 dotest log-3 "${testcvs} -q commit -F ${TESTDIR}/comment.tmp" \ 20539 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 20540 initial revision: 1\.1 20541 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 20542 initial revision: 1\.1" 20543 rm -f ${TESTDIR}/comment.tmp 20544 20545 echo 'second revision' > file1 20546 echo 'second revision' > file2 20547 dotest log-4 "${testcvs} -q ci -m2 file1 file2" \ 20548 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 20549 new revision: 1\.2; previous revision: 1\.1 20550 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 20551 new revision: 1\.2; previous revision: 1\.1" 20552 20553 dotest log-5 "${testcvs} -q tag -b branch file1" 'T file1' 20554 dotest log-5a "${testcvs} -q tag tag1 file2" 'T file2' 20555 20556 echo 'third revision' > file1 20557 echo 'third revision' > file2 20558 dotest log-6 "${testcvs} -q ci -m3 file1 file2" \ 20559 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 20560 new revision: 1\.3; previous revision: 1\.2 20561 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 20562 new revision: 1\.3; previous revision: 1\.2" 20563 20564 dotest log-6a "${testcvs} -q tag tag2 file2" 'T file2' 20565 20566 dotest log-7 "${testcvs} -q update -r branch" \ 20567 "[UP] file1 20568 ${SPROG} update: \`file2' is no longer in the repository" 20569 20570 echo 'first branch revision' > file1 20571 dotest log-8 "${testcvs} -q ci -m1b file1" \ 20572 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 20573 new revision: 1\.2\.2\.1; previous revision: 1\.2" 20574 20575 dotest log-9 "${testcvs} -q tag tag file1" 'T file1' 20576 20577 echo 'second branch revision' > file1 20578 dotest log-10 "${testcvs} -q ci -m2b file1" \ 20579 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 20580 new revision: 1\.2\.2\.2; previous revision: 1\.2\.2\.1" 20581 20582 # Set up a bunch of shell variables to make the later tests 20583 # easier to describe.= 20584 log_header1=" 20585 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 20586 Working file: file1 20587 head: 1\.3 20588 branch: 20589 locks: strict 20590 access list:" 20591 rlog_header1=" 20592 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 20593 head: 1\.3 20594 branch: 20595 locks: strict 20596 access list:" 20597 log_tags1='symbolic names: 20598 tag: 1\.2\.2\.1 20599 branch: 1\.2\.0\.2' 20600 log_keyword='keyword substitution: kv' 20601 log_dash='---------------------------- 20602 revision' 20603 log_date="date: ${ISO8601DATE}; author: ${username}; state: Exp;" 20604 log_lines=" lines: ${PLUS}1 -1;" 20605 log_commitid=" commitid: ${commitid};" 20606 log_rev1="${log_dash} 1\.1 20607 ${log_date}${log_commitid} 20608 line 1 20609 20610 line 2" 20611 log_rev2="${log_dash} 1\.2 20612 ${log_date}${log_lines}${log_commitid} 20613 branches: 1\.2\.2; 20614 2" 20615 log_rev3="${log_dash} 1\.3 20616 ${log_date}${log_lines}${log_commitid} 20617 3" 20618 log_rev1b="${log_dash} 1\.2\.2\.1 20619 ${log_date}${log_lines}${log_commitid} 20620 1b" 20621 log_rev2b="${log_dash} 1\.2\.2\.2 20622 ${log_date}${log_lines}${log_commitid} 20623 2b" 20624 log_trailer='=============================================================================' 20625 20626 # Now, finally, test the log output. 20627 20628 dotest log-11 "${testcvs} log file1" \ 20629 "${log_header1} 20630 ${log_tags1} 20631 ${log_keyword} 20632 total revisions: 5; selected revisions: 5 20633 description: 20634 ${log_rev3} 20635 ${log_rev2} 20636 ${log_rev1} 20637 ${log_rev2b} 20638 ${log_rev1b} 20639 ${log_trailer}" 20640 20641 dotest log-12 "${testcvs} log -N file1" \ 20642 "${log_header1} 20643 ${log_keyword} 20644 total revisions: 5; selected revisions: 5 20645 description: 20646 ${log_rev3} 20647 ${log_rev2} 20648 ${log_rev1} 20649 ${log_rev2b} 20650 ${log_rev1b} 20651 ${log_trailer}" 20652 20653 dotest log-13 "${testcvs} log -b file1" \ 20654 "${log_header1} 20655 ${log_tags1} 20656 ${log_keyword} 20657 total revisions: 5; selected revisions: 3 20658 description: 20659 ${log_rev3} 20660 ${log_rev2} 20661 ${log_rev1} 20662 ${log_trailer}" 20663 20664 dotest log-14 "${testcvs} log -r file1" \ 20665 "${log_header1} 20666 ${log_tags1} 20667 ${log_keyword} 20668 total revisions: 5; selected revisions: 1 20669 description: 20670 ${log_rev3} 20671 ${log_trailer}" 20672 20673 dotest log-14a "${testcvs} log -rHEAD file1" \ 20674 "${log_header1} 20675 ${log_tags1} 20676 ${log_keyword} 20677 total revisions: 5; selected revisions: 1 20678 description: 20679 ${log_rev3} 20680 ${log_trailer}" 20681 20682 # The user might not realize that "-r" must not take a space. 20683 # In the error message, HEAD is a file name, not a tag name (which 20684 # might be confusing itself). 20685 dotest_fail log-14b "${testcvs} log -r HEAD file1" \ 20686 "${SPROG} log: nothing known about HEAD 20687 ${log_header1} 20688 ${log_tags1} 20689 ${log_keyword} 20690 total revisions: 5; selected revisions: 1 20691 description: 20692 ${log_rev3} 20693 ${log_trailer}" 20694 20695 # Check that unusual syntax works correctly. 20696 20697 dotest log-14c "${testcvs} log -r: file1" \ 20698 "${log_header1} 20699 ${log_tags1} 20700 ${log_keyword} 20701 total revisions: 5; selected revisions: 1 20702 description: 20703 ${log_rev3} 20704 ${log_trailer}" 20705 dotest log-14d "${testcvs} log -r, file1" \ 20706 "${log_header1} 20707 ${log_tags1} 20708 ${log_keyword} 20709 total revisions: 5; selected revisions: 1 20710 description: 20711 ${log_rev3} 20712 ${log_trailer}" 20713 dotest log-14e "${testcvs} log -r. file1" \ 20714 "${log_header1} 20715 ${log_tags1} 20716 ${log_keyword} 20717 total revisions: 5; selected revisions: 1 20718 description: 20719 ${log_rev3} 20720 ${log_trailer}" 20721 dotest log-14f "${testcvs} log -r:: file1" \ 20722 "${log_header1} 20723 ${log_tags1} 20724 ${log_keyword} 20725 total revisions: 5; selected revisions: 0 20726 description: 20727 ${log_trailer}" 20728 20729 dotest log-15 "${testcvs} log -r1.2 file1" \ 20730 "${log_header1} 20731 ${log_tags1} 20732 ${log_keyword} 20733 total revisions: 5; selected revisions: 1 20734 description: 20735 ${log_rev2} 20736 ${log_trailer}" 20737 20738 dotest log-16 "${testcvs} log -r1.2.2 file1" \ 20739 "${log_header1} 20740 ${log_tags1} 20741 ${log_keyword} 20742 total revisions: 5; selected revisions: 2 20743 description: 20744 ${log_rev2b} 20745 ${log_rev1b} 20746 ${log_trailer}" 20747 20748 # This test would fail with the old invocation of rlog, but it 20749 # works with the builtin log support. 20750 dotest log-17 "${testcvs} log -rbranch file1" \ 20751 "${log_header1} 20752 ${log_tags1} 20753 ${log_keyword} 20754 total revisions: 5; selected revisions: 2 20755 description: 20756 ${log_rev2b} 20757 ${log_rev1b} 20758 ${log_trailer}" 20759 20760 dotest log-18 "${testcvs} log -r1.2.2. file1" \ 20761 "${log_header1} 20762 ${log_tags1} 20763 ${log_keyword} 20764 total revisions: 5; selected revisions: 1 20765 description: 20766 ${log_rev2b} 20767 ${log_trailer}" 20768 20769 # Multiple -r options are undocumented; see comments in 20770 # cvs.texinfo about whether they should be deprecated. 20771 dotest log-18a "${testcvs} log -r1.2.2.2 -r1.3:1.3 file1" \ 20772 "${log_header1} 20773 ${log_tags1} 20774 ${log_keyword} 20775 total revisions: 5; selected revisions: 2 20776 description: 20777 ${log_rev3} 20778 ${log_rev2b} 20779 ${log_trailer}" 20780 20781 # This test would fail with the old invocation of rlog, but it 20782 # works with the builtin log support. 20783 dotest log-19 "${testcvs} log -rbranch. file1" \ 20784 "${log_header1} 20785 ${log_tags1} 20786 ${log_keyword} 20787 total revisions: 5; selected revisions: 1 20788 description: 20789 ${log_rev2b} 20790 ${log_trailer}" 20791 20792 dotest log-20 "${testcvs} log -r1.2: file1" \ 20793 "${log_header1} 20794 ${log_tags1} 20795 ${log_keyword} 20796 total revisions: 5; selected revisions: 2 20797 description: 20798 ${log_rev3} 20799 ${log_rev2} 20800 ${log_trailer}" 20801 20802 dotest log-20a "${testcvs} log -r1.2:: file1" \ 20803 "${log_header1} 20804 ${log_tags1} 20805 ${log_keyword} 20806 total revisions: 5; selected revisions: 1 20807 description: 20808 ${log_rev3} 20809 ${log_trailer}" 20810 20811 dotest log-21 "${testcvs} log -r:1.2 file1" \ 20812 "${log_header1} 20813 ${log_tags1} 20814 ${log_keyword} 20815 total revisions: 5; selected revisions: 2 20816 description: 20817 ${log_rev2} 20818 ${log_rev1} 20819 ${log_trailer}" 20820 20821 dotest log-21a "${testcvs} log -r::1.2 file1" \ 20822 "${log_header1} 20823 ${log_tags1} 20824 ${log_keyword} 20825 total revisions: 5; selected revisions: 2 20826 description: 20827 ${log_rev2} 20828 ${log_rev1} 20829 ${log_trailer}" 20830 20831 dotest log-22 "${testcvs} log -r1.1:1.2 file1" \ 20832 "${log_header1} 20833 ${log_tags1} 20834 ${log_keyword} 20835 total revisions: 5; selected revisions: 2 20836 description: 20837 ${log_rev2} 20838 ${log_rev1} 20839 ${log_trailer}" 20840 20841 dotest log-22a "${testcvs} log -r1.1::1.2 file1" \ 20842 "${log_header1} 20843 ${log_tags1} 20844 ${log_keyword} 20845 total revisions: 5; selected revisions: 1 20846 description: 20847 ${log_rev2} 20848 ${log_trailer}" 20849 20850 dotest log-22b "${testcvs} log -r1.1::1.3 file1" \ 20851 "${log_header1} 20852 ${log_tags1} 20853 ${log_keyword} 20854 total revisions: 5; selected revisions: 2 20855 description: 20856 ${log_rev3} 20857 ${log_rev2} 20858 ${log_trailer}" 20859 20860 dotest log-23 "${testcvs} log -rfoo:: file1" \ 20861 "${SPROG} log: warning: no revision .foo. in .${CVSROOT_DIRNAME}/first-dir/file1,v. 20862 ${log_header1} 20863 ${log_tags1} 20864 ${log_keyword} 20865 total revisions: 5; selected revisions: 0 20866 description: 20867 ${log_trailer}" 20868 20869 dotest log-24 "${testcvs} log -rfoo::1.3 file1" \ 20870 "${SPROG} log: warning: no revision .foo. in .${CVSROOT_DIRNAME}/first-dir/file1,v. 20871 ${log_header1} 20872 ${log_tags1} 20873 ${log_keyword} 20874 total revisions: 5; selected revisions: 0 20875 description: 20876 ${log_trailer}" 20877 20878 dotest log-25 "${testcvs} log -r::foo file1" \ 20879 "${SPROG} log: warning: no revision .foo. in .${CVSROOT_DIRNAME}/first-dir/file1,v. 20880 ${log_header1} 20881 ${log_tags1} 20882 ${log_keyword} 20883 total revisions: 5; selected revisions: 0 20884 description: 20885 ${log_trailer}" 20886 20887 dotest log-26 "${testcvs} log -r1.1::foo file1" \ 20888 "${SPROG} log: warning: no revision .foo. in .${CVSROOT_DIRNAME}/first-dir/file1,v. 20889 ${log_header1} 20890 ${log_tags1} 20891 ${log_keyword} 20892 total revisions: 5; selected revisions: 0 20893 description: 20894 ${log_trailer}" 20895 20896 # Test BASE pseudotag 20897 dotest log-27 "${testcvs} log -rBASE file1" \ 20898 "${log_header1} 20899 ${log_tags1} 20900 ${log_keyword} 20901 total revisions: 5; selected revisions: 1 20902 description: 20903 ${log_rev2b} 20904 ${log_trailer}" 20905 20906 dotest log-28 "${testcvs} -q up -r1.2 file1" "[UP] file1" 20907 dotest log-29 "${testcvs} log -rBASE file1" \ 20908 "${log_header1} 20909 ${log_tags1} 20910 ${log_keyword} 20911 total revisions: 5; selected revisions: 1 20912 description: 20913 ${log_rev2} 20914 ${log_trailer}" 20915 20916 dotest log-30 "${testcvs} -q up -rbranch file1" "[UP] file1" 20917 20918 # Now the same tests but with rlog 20919 20920 dotest log-r11 "${testcvs} rlog first-dir/file1" \ 20921 "${rlog_header1} 20922 ${log_tags1} 20923 ${log_keyword} 20924 total revisions: 5; selected revisions: 5 20925 description: 20926 ${log_rev3} 20927 ${log_rev2} 20928 ${log_rev1} 20929 ${log_rev2b} 20930 ${log_rev1b} 20931 ${log_trailer}" 20932 20933 dotest log-r12 "${testcvs} rlog -N first-dir/file1" \ 20934 "${rlog_header1} 20935 ${log_keyword} 20936 total revisions: 5; selected revisions: 5 20937 description: 20938 ${log_rev3} 20939 ${log_rev2} 20940 ${log_rev1} 20941 ${log_rev2b} 20942 ${log_rev1b} 20943 ${log_trailer}" 20944 20945 dotest log-r13 "${testcvs} rlog -b first-dir/file1" \ 20946 "${rlog_header1} 20947 ${log_tags1} 20948 ${log_keyword} 20949 total revisions: 5; selected revisions: 3 20950 description: 20951 ${log_rev3} 20952 ${log_rev2} 20953 ${log_rev1} 20954 ${log_trailer}" 20955 20956 dotest log-r14 "${testcvs} rlog -r first-dir/file1" \ 20957 "${rlog_header1} 20958 ${log_tags1} 20959 ${log_keyword} 20960 total revisions: 5; selected revisions: 1 20961 description: 20962 ${log_rev3} 20963 ${log_trailer}" 20964 20965 dotest log-r14a "${testcvs} rlog -rHEAD first-dir/file1" \ 20966 "${rlog_header1} 20967 ${log_tags1} 20968 ${log_keyword} 20969 total revisions: 5; selected revisions: 1 20970 description: 20971 ${log_rev3} 20972 ${log_trailer}" 20973 20974 dotest_fail log-r14b "${testcvs} rlog -r HEAD first-dir/file1" \ 20975 "${SPROG} rlog: cannot find module .HEAD. - ignored 20976 ${rlog_header1} 20977 ${log_tags1} 20978 ${log_keyword} 20979 total revisions: 5; selected revisions: 1 20980 description: 20981 ${log_rev3} 20982 ${log_trailer}" 20983 20984 dotest log-r14c "${testcvs} rlog -r: first-dir/file1" \ 20985 "${rlog_header1} 20986 ${log_tags1} 20987 ${log_keyword} 20988 total revisions: 5; selected revisions: 1 20989 description: 20990 ${log_rev3} 20991 ${log_trailer}" 20992 dotest log-r14d "${testcvs} rlog -r, first-dir/file1" \ 20993 "${rlog_header1} 20994 ${log_tags1} 20995 ${log_keyword} 20996 total revisions: 5; selected revisions: 1 20997 description: 20998 ${log_rev3} 20999 ${log_trailer}" 21000 dotest log-r14e "${testcvs} rlog -r. first-dir/file1" \ 21001 "${rlog_header1} 21002 ${log_tags1} 21003 ${log_keyword} 21004 total revisions: 5; selected revisions: 1 21005 description: 21006 ${log_rev3} 21007 ${log_trailer}" 21008 dotest log-r14f "${testcvs} rlog -r:: first-dir/file1" \ 21009 "${rlog_header1} 21010 ${log_tags1} 21011 ${log_keyword} 21012 total revisions: 5; selected revisions: 0 21013 description: 21014 ${log_trailer}" 21015 21016 dotest log-r15 "${testcvs} rlog -r1.2 first-dir/file1" \ 21017 "${rlog_header1} 21018 ${log_tags1} 21019 ${log_keyword} 21020 total revisions: 5; selected revisions: 1 21021 description: 21022 ${log_rev2} 21023 ${log_trailer}" 21024 21025 dotest log-r16 "${testcvs} rlog -r1.2.2 first-dir/file1" \ 21026 "${rlog_header1} 21027 ${log_tags1} 21028 ${log_keyword} 21029 total revisions: 5; selected revisions: 2 21030 description: 21031 ${log_rev2b} 21032 ${log_rev1b} 21033 ${log_trailer}" 21034 21035 dotest log-r17 "${testcvs} rlog -rbranch first-dir/file1" \ 21036 "${rlog_header1} 21037 ${log_tags1} 21038 ${log_keyword} 21039 total revisions: 5; selected revisions: 2 21040 description: 21041 ${log_rev2b} 21042 ${log_rev1b} 21043 ${log_trailer}" 21044 21045 dotest log-r18 "${testcvs} rlog -r1.2.2. first-dir/file1" \ 21046 "${rlog_header1} 21047 ${log_tags1} 21048 ${log_keyword} 21049 total revisions: 5; selected revisions: 1 21050 description: 21051 ${log_rev2b} 21052 ${log_trailer}" 21053 21054 dotest log-r18a "${testcvs} rlog -r1.2.2.2 -r1.3:1.3 first-dir/file1" \ 21055 "${rlog_header1} 21056 ${log_tags1} 21057 ${log_keyword} 21058 total revisions: 5; selected revisions: 2 21059 description: 21060 ${log_rev3} 21061 ${log_rev2b} 21062 ${log_trailer}" 21063 21064 dotest log-r19 "${testcvs} rlog -rbranch. first-dir/file1" \ 21065 "${rlog_header1} 21066 ${log_tags1} 21067 ${log_keyword} 21068 total revisions: 5; selected revisions: 1 21069 description: 21070 ${log_rev2b} 21071 ${log_trailer}" 21072 21073 dotest log-r20 "${testcvs} rlog -r1.2: first-dir/file1" \ 21074 "${rlog_header1} 21075 ${log_tags1} 21076 ${log_keyword} 21077 total revisions: 5; selected revisions: 2 21078 description: 21079 ${log_rev3} 21080 ${log_rev2} 21081 ${log_trailer}" 21082 21083 dotest log-r20a "${testcvs} rlog -r1.2:: first-dir/file1" \ 21084 "${rlog_header1} 21085 ${log_tags1} 21086 ${log_keyword} 21087 total revisions: 5; selected revisions: 1 21088 description: 21089 ${log_rev3} 21090 ${log_trailer}" 21091 21092 dotest log-r21 "${testcvs} rlog -r:1.2 first-dir/file1" \ 21093 "${rlog_header1} 21094 ${log_tags1} 21095 ${log_keyword} 21096 total revisions: 5; selected revisions: 2 21097 description: 21098 ${log_rev2} 21099 ${log_rev1} 21100 ${log_trailer}" 21101 21102 dotest log-r21a "${testcvs} rlog -r::1.2 first-dir/file1" \ 21103 "${rlog_header1} 21104 ${log_tags1} 21105 ${log_keyword} 21106 total revisions: 5; selected revisions: 2 21107 description: 21108 ${log_rev2} 21109 ${log_rev1} 21110 ${log_trailer}" 21111 21112 dotest log-r22 "${testcvs} rlog -r1.1:1.2 first-dir/file1" \ 21113 "${rlog_header1} 21114 ${log_tags1} 21115 ${log_keyword} 21116 total revisions: 5; selected revisions: 2 21117 description: 21118 ${log_rev2} 21119 ${log_rev1} 21120 ${log_trailer}" 21121 21122 dotest log-r22a "${testcvs} rlog -r1.1::1.2 first-dir/file1" \ 21123 "${rlog_header1} 21124 ${log_tags1} 21125 ${log_keyword} 21126 total revisions: 5; selected revisions: 1 21127 description: 21128 ${log_rev2} 21129 ${log_trailer}" 21130 21131 dotest log-r22b "${testcvs} rlog -r1.1::1.3 first-dir/file1" \ 21132 "${rlog_header1} 21133 ${log_tags1} 21134 ${log_keyword} 21135 total revisions: 5; selected revisions: 2 21136 description: 21137 ${log_rev3} 21138 ${log_rev2} 21139 ${log_trailer}" 21140 21141 dotest log-r23 "${testcvs} rlog -rfoo:: first-dir/file1" \ 21142 "${SPROG} rlog: warning: no revision .foo. in .${CVSROOT_DIRNAME}/first-dir/file1,v. 21143 ${rlog_header1} 21144 ${log_tags1} 21145 ${log_keyword} 21146 total revisions: 5; selected revisions: 0 21147 description: 21148 ${log_trailer}" 21149 21150 dotest log-r24 "${testcvs} rlog -rfoo::1.3 first-dir/file1" \ 21151 "${SPROG} rlog: warning: no revision .foo. in .${CVSROOT_DIRNAME}/first-dir/file1,v. 21152 ${rlog_header1} 21153 ${log_tags1} 21154 ${log_keyword} 21155 total revisions: 5; selected revisions: 0 21156 description: 21157 ${log_trailer}" 21158 21159 dotest log-r25 "${testcvs} rlog -r::foo first-dir/file1" \ 21160 "${SPROG} rlog: warning: no revision .foo. in .${CVSROOT_DIRNAME}/first-dir/file1,v. 21161 ${rlog_header1} 21162 ${log_tags1} 21163 ${log_keyword} 21164 total revisions: 5; selected revisions: 0 21165 description: 21166 ${log_trailer}" 21167 21168 dotest log-r26 "${testcvs} rlog -r1.1::foo first-dir/file1" \ 21169 "${SPROG} rlog: warning: no revision .foo. in .${CVSROOT_DIRNAME}/first-dir/file1,v. 21170 ${rlog_header1} 21171 ${log_tags1} 21172 ${log_keyword} 21173 total revisions: 5; selected revisions: 0 21174 description: 21175 ${log_trailer}" 21176 21177 # Test BASE pseudotag 21178 dotest log-r27 "${testcvs} rlog -rBASE first-dir/file1" \ 21179 "${SPROG} rlog: warning: no revision .BASE. in .${CVSROOT_DIRNAME}/first-dir/file1,v. 21180 ${rlog_header1} 21181 ${log_tags1} 21182 ${log_keyword} 21183 total revisions: 5; selected revisions: 0 21184 description: 21185 ${log_trailer}" 21186 21187 dotest log-r28 "${testcvs} -q up -r1.2 file1" "[UP] file1" 21188 dotest log-r29 "${testcvs} rlog -rBASE first-dir/file1" \ 21189 "${SPROG} rlog: warning: no revision .BASE. in .${CVSROOT_DIRNAME}/first-dir/file1,v. 21190 ${rlog_header1} 21191 ${log_tags1} 21192 ${log_keyword} 21193 total revisions: 5; selected revisions: 0 21194 description: 21195 ${log_trailer}" 21196 21197 # Test when head is dead 21198 21199 dotest log-d0 "${testcvs} -q up -A" \ 21200 "[UP] file1 21201 U file2" 21202 dotest log-d1 "${testcvs} -q rm -f file1" \ 21203 "${SPROG} remove: use .${SPROG} commit. to remove this file permanently" 21204 dotest log-d2 "${testcvs} -q ci -m4" \ 21205 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 21206 new revision: delete; previous revision: 1\.3" 21207 21208 log_header1=" 21209 RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file1,v 21210 Working file: file1 21211 head: 1\.4 21212 branch: 21213 locks: strict 21214 access list:" 21215 rlog_header1=" 21216 RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file1,v 21217 head: 1\.4 21218 branch: 21219 locks: strict 21220 access list:" 21221 log_header2=" 21222 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 21223 Working file: file2 21224 head: 1\.3 21225 branch: 21226 locks: strict 21227 access list:" 21228 rlog_header2=" 21229 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 21230 head: 1\.3 21231 branch: 21232 locks: strict 21233 access list:" 21234 log_tags2='symbolic names: 21235 tag2: 1\.3 21236 tag1: 1\.2' 21237 log_rev4="${log_dash} 1\.4 21238 date: ${ISO8601DATE}; author: ${username}; state: dead; lines: ${PLUS}0 -0; commitid: ${commitid}; 21239 4" 21240 log_rev22="${log_dash} 1\.2 21241 ${log_date}${log_lines}${log_commitid} 21242 2" 21243 21244 dotest log-d3 "${testcvs} log -rbranch file1" \ 21245 "${log_header1} 21246 ${log_tags1} 21247 ${log_keyword} 21248 total revisions: 6; selected revisions: 2 21249 description: 21250 ${log_rev2b} 21251 ${log_rev1b} 21252 ${log_trailer}" 21253 dotest log-rd3 "${testcvs} rlog -rbranch first-dir/file1" \ 21254 "${rlog_header1} 21255 ${log_tags1} 21256 ${log_keyword} 21257 total revisions: 6; selected revisions: 2 21258 description: 21259 ${log_rev2b} 21260 ${log_rev1b} 21261 ${log_trailer}" 21262 dotest log-d4 "${testcvs} -q log -rbranch" \ 21263 "${log_header1} 21264 ${log_tags1} 21265 ${log_keyword} 21266 total revisions: 6; selected revisions: 2 21267 description: 21268 ${log_rev2b} 21269 ${log_rev1b} 21270 ${log_trailer} 21271 ${SPROG} log: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v. 21272 ${log_header2} 21273 ${log_tags2} 21274 ${log_keyword} 21275 total revisions: 3; selected revisions: 0 21276 description: 21277 ${log_trailer}" 21278 dotest log-d4a "${testcvs} -q log -t -rbranch" \ 21279 "${log_header1} 21280 ${log_tags1} 21281 ${log_keyword} 21282 total revisions: 6 21283 description: 21284 ${log_trailer} 21285 ${SPROG} log: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v. 21286 ${log_header2} 21287 ${log_tags2} 21288 ${log_keyword} 21289 total revisions: 3 21290 description: 21291 ${log_trailer}" 21292 dotest log-d4b "${testcvs} -q log -tS -rbranch" \ 21293 "${log_header1} 21294 ${log_tags1} 21295 ${log_keyword} 21296 total revisions: 6; selected revisions: 2 21297 description: 21298 ${log_trailer} 21299 ${SPROG} log: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v." 21300 dotest log-d4c "${testcvs} -q log -h -rbranch" \ 21301 "${log_header1} 21302 ${log_tags1} 21303 ${log_keyword} 21304 total revisions: 6 21305 ${log_trailer} 21306 ${SPROG} log: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v. 21307 ${log_header2} 21308 ${log_tags2} 21309 ${log_keyword} 21310 total revisions: 3 21311 ${log_trailer}" 21312 dotest log-d4d "${testcvs} -q log -hS -rbranch" \ 21313 "${log_header1} 21314 ${log_tags1} 21315 ${log_keyword} 21316 total revisions: 6; selected revisions: 2 21317 ${log_trailer} 21318 ${SPROG} log: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v." 21319 dotest log-d4e "$testcvs -q log -R -rbranch" \ 21320 "$CVSROOT_DIRNAME/first-dir/Attic/file1,v 21321 $CVSROOT_DIRNAME/first-dir/file2,v" 21322 dotest log-d4f "${testcvs} -q log -R -S -rbranch" \ 21323 "${CVSROOT_DIRNAME}/first-dir/Attic/file1,v 21324 ${SPROG} log: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v." 21325 dotest log-rd4 "${testcvs} -q rlog -rbranch first-dir" \ 21326 "${rlog_header1} 21327 ${log_tags1} 21328 ${log_keyword} 21329 total revisions: 6; selected revisions: 2 21330 description: 21331 ${log_rev2b} 21332 ${log_rev1b} 21333 ${log_trailer} 21334 ${SPROG} rlog: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v. 21335 ${rlog_header2} 21336 ${log_tags2} 21337 ${log_keyword} 21338 total revisions: 3; selected revisions: 0 21339 description: 21340 ${log_trailer}" 21341 dotest log-rd4a "${testcvs} -q rlog -t -rbranch first-dir" \ 21342 "${rlog_header1} 21343 ${log_tags1} 21344 ${log_keyword} 21345 total revisions: 6 21346 description: 21347 ${log_trailer} 21348 ${SPROG} rlog: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v. 21349 ${rlog_header2} 21350 ${log_tags2} 21351 ${log_keyword} 21352 total revisions: 3 21353 description: 21354 ${log_trailer}" 21355 dotest log-rd4b "${testcvs} -q rlog -St -rbranch first-dir" \ 21356 "${rlog_header1} 21357 ${log_tags1} 21358 ${log_keyword} 21359 total revisions: 6; selected revisions: 2 21360 description: 21361 ${log_trailer} 21362 ${SPROG} rlog: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v." 21363 dotest log-rd4c "${testcvs} -q rlog -h -rbranch first-dir" \ 21364 "${rlog_header1} 21365 ${log_tags1} 21366 ${log_keyword} 21367 total revisions: 6 21368 ${log_trailer} 21369 ${SPROG} rlog: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v. 21370 ${rlog_header2} 21371 ${log_tags2} 21372 ${log_keyword} 21373 total revisions: 3 21374 ${log_trailer}" 21375 dotest log-rd4d "${testcvs} -q rlog -Sh -rbranch first-dir" \ 21376 "${rlog_header1} 21377 ${log_tags1} 21378 ${log_keyword} 21379 total revisions: 6; selected revisions: 2 21380 ${log_trailer} 21381 ${SPROG} rlog: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v." 21382 dotest log-rd4e "${testcvs} -q rlog -R -rbranch first-dir" \ 21383 "${CVSROOT_DIRNAME}/first-dir/Attic/file1,v 21384 ${CVSROOT_DIRNAME}/first-dir/file2,v" 21385 dotest log-rd4f "${testcvs} -q rlog -R -S -rbranch first-dir" \ 21386 "${CVSROOT_DIRNAME}/first-dir/Attic/file1,v 21387 ${SPROG} rlog: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v." 21388 dotest log-d5 "${testcvs} log -r1.2.2.1:1.2.2.2 file1" \ 21389 "${log_header1} 21390 ${log_tags1} 21391 ${log_keyword} 21392 total revisions: 6; selected revisions: 2 21393 description: 21394 ${log_rev2b} 21395 ${log_rev1b} 21396 ${log_trailer}" 21397 dotest log-rd5 "${testcvs} rlog -r1.2.2.1:1.2.2.2 first-dir/file1" \ 21398 "${rlog_header1} 21399 ${log_tags1} 21400 ${log_keyword} 21401 total revisions: 6; selected revisions: 2 21402 description: 21403 ${log_rev2b} 21404 ${log_rev1b} 21405 ${log_trailer}" 21406 dotest log-d6 "${testcvs} -q log -r1.2.2.1:1.2.2.2" \ 21407 "${log_header1} 21408 ${log_tags1} 21409 ${log_keyword} 21410 total revisions: 6; selected revisions: 2 21411 description: 21412 ${log_rev2b} 21413 ${log_rev1b} 21414 ${log_trailer} 21415 ${log_header2} 21416 ${log_tags2} 21417 ${log_keyword} 21418 total revisions: 3; selected revisions: 0 21419 description: 21420 ${log_trailer}" 21421 dotest log-rd6 "${testcvs} -q rlog -r1.2.2.1:1.2.2.2 first-dir" \ 21422 "${rlog_header1} 21423 ${log_tags1} 21424 ${log_keyword} 21425 total revisions: 6; selected revisions: 2 21426 description: 21427 ${log_rev2b} 21428 ${log_rev1b} 21429 ${log_trailer} 21430 ${rlog_header2} 21431 ${log_tags2} 21432 ${log_keyword} 21433 total revisions: 3; selected revisions: 0 21434 description: 21435 ${log_trailer}" 21436 dotest log-d7 "${testcvs} log -r1.2:1.3 file1" \ 21437 "${log_header1} 21438 ${log_tags1} 21439 ${log_keyword} 21440 total revisions: 6; selected revisions: 2 21441 description: 21442 ${log_rev3} 21443 ${log_rev2} 21444 ${log_trailer}" 21445 dotest log-rd7 "${testcvs} -q rlog -r1.2:1.3 first-dir/file1" \ 21446 "${rlog_header1} 21447 ${log_tags1} 21448 ${log_keyword} 21449 total revisions: 6; selected revisions: 2 21450 description: 21451 ${log_rev3} 21452 ${log_rev2} 21453 ${log_trailer}" 21454 dotest log-d8 "${testcvs} -q log -rtag1:tag2" \ 21455 "${SPROG} log: warning: no revision .tag1. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v. 21456 ${SPROG} log: warning: no revision .tag2. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v. 21457 ${log_header1} 21458 ${log_tags1} 21459 ${log_keyword} 21460 total revisions: 6; selected revisions: 0 21461 description: 21462 ${log_trailer} 21463 ${log_header2} 21464 ${log_tags2} 21465 ${log_keyword} 21466 total revisions: 3; selected revisions: 2 21467 description: 21468 ${log_rev3} 21469 ${log_rev22} 21470 ${log_trailer}" 21471 dotest log-d8a "${testcvs} -q log -rtag1:tag2 -S" \ 21472 "${SPROG} log: warning: no revision .tag1. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v. 21473 ${SPROG} log: warning: no revision .tag2. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v. 21474 ${log_header2} 21475 ${log_tags2} 21476 ${log_keyword} 21477 total revisions: 3; selected revisions: 2 21478 description: 21479 ${log_rev3} 21480 ${log_rev22} 21481 ${log_trailer}" 21482 dotest log-rd8 "${testcvs} -q rlog -rtag1:tag2 first-dir" \ 21483 "${SPROG} rlog: warning: no revision .tag1. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v. 21484 ${SPROG} rlog: warning: no revision .tag2. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v. 21485 ${rlog_header1} 21486 ${log_tags1} 21487 ${log_keyword} 21488 total revisions: 6; selected revisions: 0 21489 description: 21490 ${log_trailer} 21491 ${rlog_header2} 21492 ${log_tags2} 21493 ${log_keyword} 21494 total revisions: 3; selected revisions: 2 21495 description: 21496 ${log_rev3} 21497 ${log_rev22} 21498 ${log_trailer}" 21499 dotest log-rd8a "${testcvs} -q rlog -rtag1:tag2 -S first-dir" \ 21500 "${SPROG} rlog: warning: no revision .tag1. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v. 21501 ${SPROG} rlog: warning: no revision .tag2. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v. 21502 ${rlog_header2} 21503 ${log_tags2} 21504 ${log_keyword} 21505 total revisions: 3; selected revisions: 2 21506 description: 21507 ${log_rev3} 21508 ${log_rev22} 21509 ${log_trailer}" 21510 21511 dotest log-d99 "${testcvs} -q up -rbranch" \ 21512 "[UP] file1 21513 ${SPROG} update: \`file2' is no longer in the repository" 21514 21515 # Now test outdating revisions 21516 21517 dotest log-o0 "${testcvs} admin -o 1.2.2.2:: file1" \ 21518 "RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file1,v 21519 done" 21520 dotest log-o1 "${testcvs} admin -o ::1.2.2.1 file1" \ 21521 "RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file1,v 21522 done" 21523 dotest log-o2 "${testcvs} admin -o 1.2.2.1:: file1" \ 21524 "RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file1,v 21525 deleting revision 1\.2\.2\.2 21526 done" 21527 dotest log-o3 "${testcvs} log file1" \ 21528 "${log_header1} 21529 ${log_tags1} 21530 ${log_keyword} 21531 total revisions: 5; selected revisions: 5 21532 description: 21533 ${log_rev4} 21534 ${log_rev3} 21535 ${log_rev2} 21536 ${log_rev1} 21537 ${log_rev1b} 21538 ${log_trailer}" 21539 dotest log-ro3 "${testcvs} rlog first-dir/file1" \ 21540 "${rlog_header1} 21541 ${log_tags1} 21542 ${log_keyword} 21543 total revisions: 5; selected revisions: 5 21544 description: 21545 ${log_rev4} 21546 ${log_rev3} 21547 ${log_rev2} 21548 ${log_rev1} 21549 ${log_rev1b} 21550 ${log_trailer}" 21551 dotest log-o4 "${testcvs} -q update -p -r 1.2.2.1 file1" \ 21552 "first branch revision" 21553 21554 dokeep 21555 cd .. 21556 rm -r first-dir 21557 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 21558 ;; 21559 21560 21561 21562 log2) 21563 # More "cvs log" tests, for example the file description. 21564 21565 # Check in a file 21566 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 21567 dotest log2-1 "$testcvs -q co first-dir" 21568 cd first-dir 21569 echo 'first revision' > file1 21570 dotest log2-2 "${testcvs} add -m file1-is-for-testing file1" \ 21571 "${SPROG}"' add: scheduling file `file1'\'' for addition 21572 '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently' 21573 dotest log2-3 "${testcvs} -q commit -m 1" \ 21574 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 21575 initial revision: 1\.1" 21576 # Setting the file description with add -m doesn't yet work 21577 # client/server, so skip log2-4 for remote. 21578 if $remote; then :; else 21579 21580 dotest log2-4 "${testcvs} log -N file1" " 21581 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 21582 Working file: file1 21583 head: 1\.1 21584 branch: 21585 locks: strict 21586 access list: 21587 keyword substitution: kv 21588 total revisions: 1; selected revisions: 1 21589 description: 21590 file1-is-for-testing 21591 ---------------------------- 21592 revision 1\.1 21593 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 21594 1 21595 =============================================================================" 21596 21597 fi # end of tests skipped for remote 21598 21599 dotest log2-5 "${testcvs} admin -t-change-description file1" \ 21600 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 21601 done" 21602 dotest log2-6 "${testcvs} log -N file1" " 21603 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 21604 Working file: file1 21605 head: 1\.1 21606 branch: 21607 locks: strict 21608 access list: 21609 keyword substitution: kv 21610 total revisions: 1; selected revisions: 1 21611 description: 21612 change-description 21613 ---------------------------- 21614 revision 1\.1 21615 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 21616 1 21617 =============================================================================" 21618 21619 echo 'longer description' >${TESTDIR}/descrip 21620 echo 'with two lines' >>${TESTDIR}/descrip 21621 dotest log2-7 "${testcvs} admin -t${TESTDIR}/descrip file1" \ 21622 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 21623 done" 21624 dotest_fail log2-7a "${testcvs} admin -t${TESTDIR}/nonexist file1" \ 21625 "${CPROG} \[admin aborted\]: can't stat ${TESTDIR}/nonexist: No such file or directory" 21626 dotest log2-8 "${testcvs} log -N file1" " 21627 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 21628 Working file: file1 21629 head: 1\.1 21630 branch: 21631 locks: strict 21632 access list: 21633 keyword substitution: kv 21634 total revisions: 1; selected revisions: 1 21635 description: 21636 longer description 21637 with two lines 21638 ---------------------------- 21639 revision 1\.1 21640 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 21641 1 21642 =============================================================================" 21643 21644 # TODO: `cvs admin -t "my message" file1' is a request to 21645 # read the message from stdin and to operate on two files. 21646 # Should test that there is an error because "my message" 21647 # doesn't exist. 21648 21649 dotest log2-9 "echo change from stdin | ${testcvs} admin -t -q file1" "" 21650 dotest log2-10 "${testcvs} log -N file1" " 21651 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 21652 Working file: file1 21653 head: 1\.1 21654 branch: 21655 locks: strict 21656 access list: 21657 keyword substitution: kv 21658 total revisions: 1; selected revisions: 1 21659 description: 21660 change from stdin 21661 ---------------------------- 21662 revision 1\.1 21663 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 21664 1 21665 =============================================================================" 21666 21667 dokeep 21668 cd .. 21669 rm $TESTDIR/descrip 21670 rm -r first-dir 21671 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 21672 ;; 21673 21674 21675 21676 logopt) 21677 # Some tests of log.c's option parsing and such things. 21678 mkdir 1; cd 1 21679 dotest logopt-1 "$testcvs -q co -l ." '' 21680 mkdir first-dir 21681 dotest logopt-2 "$testcvs add first-dir" \ 21682 "Directory $CVSROOT_DIRNAME/first-dir added to the repository" 21683 cd first-dir 21684 echo hi >file1 21685 dotest logopt-3 "${testcvs} add file1" \ 21686 "${SPROG} add: scheduling file .file1. for addition 21687 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 21688 dotest logopt-4 "${testcvs} -q ci -m add file1" \ 21689 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 21690 initial revision: 1\.1" 21691 cd .. 21692 21693 dotest logopt-5 "${testcvs} log -R -d 2038-01-01" \ 21694 "${SPROG} log: Logging \. 21695 ${SPROG} log: Logging first-dir 21696 ${CVSROOT_DIRNAME}/first-dir/file1,v" 21697 dotest logopt-6 "${testcvs} log -d 2038-01-01 -R" \ 21698 "${SPROG} log: Logging \. 21699 ${SPROG} log: Logging first-dir 21700 ${CVSROOT_DIRNAME}/first-dir/file1,v" 21701 dotest logopt-6a "${testcvs} log -Rd 2038-01-01" \ 21702 "${SPROG} log: Logging \. 21703 ${SPROG} log: Logging first-dir 21704 ${CVSROOT_DIRNAME}/first-dir/file1,v" 21705 dotest logopt-7 "${testcvs} log -s Exp -R" \ 21706 "${SPROG} log: Logging \. 21707 ${SPROG} log: Logging first-dir 21708 ${CVSROOT_DIRNAME}/first-dir/file1,v" 21709 21710 dokeep 21711 cd .. 21712 rm -r 1 21713 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 21714 ;; 21715 21716 21717 21718 ann) 21719 # Tests of "cvs annotate". See also: 21720 # basica-10 A simple annotate test 21721 # rcs Annotate and the year 2000 21722 # keywordlog Annotate and $Log. 21723 mkdir 1; cd 1 21724 dotest ann-1 "$testcvs -q co -l ." 21725 mkdir first-dir 21726 dotest ann-2 "${testcvs} add first-dir" \ 21727 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 21728 cd first-dir 21729 cat >file1 <<EOF 21730 this 21731 is 21732 the 21733 ancestral 21734 file 21735 EOF 21736 dotest ann-3 "${testcvs} add file1" \ 21737 "${SPROG} add: scheduling file .file1. for addition 21738 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 21739 dotest ann-4 "${testcvs} -q ci -m add file1" \ 21740 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 21741 initial revision: 1\.1" 21742 cat >file1 <<EOF 21743 this 21744 is 21745 a 21746 file 21747 21748 with 21749 a 21750 blank 21751 line 21752 EOF 21753 dotest ann-5 "${testcvs} -q ci -m modify file1" \ 21754 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 21755 new revision: 1\.2; previous revision: 1\.1" 21756 dotest ann-6 "${testcvs} -q tag -b br" "T file1" 21757 cat >file1 <<EOF 21758 this 21759 is 21760 a 21761 trunk file 21762 21763 with 21764 a 21765 blank 21766 line 21767 EOF 21768 dotest ann-7 "${testcvs} -q ci -m modify file1" \ 21769 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 21770 new revision: 1\.3; previous revision: 1\.2" 21771 dotest ann-8 "${testcvs} -q update -r br" "[UP] file1" 21772 cat >file1 <<EOF 21773 this 21774 is 21775 a 21776 file 21777 21778 with 21779 a 21780 blank 21781 line 21782 and some 21783 branched content 21784 EOF 21785 dotest ann-9 "${testcvs} -q ci -m modify" \ 21786 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 21787 new revision: 1\.2\.2\.1; previous revision: 1\.2" 21788 # Note that this annotates the trunk despite the presence 21789 # of a sticky tag in the current directory. This is 21790 # fairly bogus, but it is the longstanding behavior for 21791 # whatever that is worth. 21792 dotest ann-10 "${testcvs} ann" \ 21793 " 21794 Annotations for file1 21795 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 21796 1\.1 ($username8 *[0-9a-zA-Z-]*): this 21797 1\.1 ($username8 *[0-9a-zA-Z-]*): is 21798 1\.2 ($username8 *[0-9a-zA-Z-]*): a 21799 1\.3 ($username8 *[0-9a-zA-Z-]*): trunk file 21800 1\.2 ($username8 *[0-9a-zA-Z-]*): 21801 1\.2 ($username8 *[0-9a-zA-Z-]*): with 21802 1\.2 ($username8 *[0-9a-zA-Z-]*): a 21803 1\.2 ($username8 *[0-9a-zA-Z-]*): blank 21804 1\.2 ($username8 *[0-9a-zA-Z-]*): line" 21805 dotest ann-11 "${testcvs} ann -r br" \ 21806 " 21807 Annotations for file1 21808 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 21809 1\.1 ($username8 *[0-9a-zA-Z-]*): this 21810 1\.1 ($username8 *[0-9a-zA-Z-]*): is 21811 1\.2 ($username8 *[0-9a-zA-Z-]*): a 21812 1\.1 ($username8 *[0-9a-zA-Z-]*): file 21813 1\.2 ($username8 *[0-9a-zA-Z-]*): 21814 1\.2 ($username8 *[0-9a-zA-Z-]*): with 21815 1\.2 ($username8 *[0-9a-zA-Z-]*): a 21816 1\.2 ($username8 *[0-9a-zA-Z-]*): blank 21817 1\.2 ($username8 *[0-9a-zA-Z-]*): line 21818 1\.2\.2\.1 ($username8 *[0-9a-zA-Z-]*): and some 21819 1\.2\.2\.1 ($username8 *[0-9a-zA-Z-]*): branched content" 21820 # FIXCVS: shouldn't "-r 1.2.0.2" be the same as "-r br"? 21821 dotest ann-12 "${testcvs} ann -r 1.2.0.2 file1" "" 21822 dotest ann-13 "${testcvs} ann -r 1.2.2 file1" \ 21823 " 21824 Annotations for file1 21825 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 21826 1\.1 ($username8 *[0-9a-zA-Z-]*): this 21827 1\.1 ($username8 *[0-9a-zA-Z-]*): is 21828 1\.2 ($username8 *[0-9a-zA-Z-]*): a 21829 1\.1 ($username8 *[0-9a-zA-Z-]*): file 21830 1\.2 ($username8 *[0-9a-zA-Z-]*): 21831 1\.2 ($username8 *[0-9a-zA-Z-]*): with 21832 1\.2 ($username8 *[0-9a-zA-Z-]*): a 21833 1\.2 ($username8 *[0-9a-zA-Z-]*): blank 21834 1\.2 ($username8 *[0-9a-zA-Z-]*): line 21835 1\.2\.2\.1 ($username8 *[0-9a-zA-Z-]*): and some 21836 1\.2\.2\.1 ($username8 *[0-9a-zA-Z-]*): branched content" 21837 dotest_fail ann-14 "$testcvs ann -r bill-clintons-chastity file1" \ 21838 "$SPROG \[annotate aborted\]: no such tag \`bill-clintons-chastity'" 21839 21840 # Now get rid of the working directory and test rannotate 21841 21842 cd ../.. 21843 rm -r 1 21844 dotest ann-r10 "${testcvs} rann first-dir" \ 21845 " 21846 Annotations for first-dir/file1 21847 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 21848 1\.1 ($username8 *[0-9a-zA-Z-]*): this 21849 1\.1 ($username8 *[0-9a-zA-Z-]*): is 21850 1\.2 ($username8 *[0-9a-zA-Z-]*): a 21851 1\.3 ($username8 *[0-9a-zA-Z-]*): trunk file 21852 1\.2 ($username8 *[0-9a-zA-Z-]*): 21853 1\.2 ($username8 *[0-9a-zA-Z-]*): with 21854 1\.2 ($username8 *[0-9a-zA-Z-]*): a 21855 1\.2 ($username8 *[0-9a-zA-Z-]*): blank 21856 1\.2 ($username8 *[0-9a-zA-Z-]*): line" 21857 dotest ann-r11 "${testcvs} rann -r br first-dir" \ 21858 " 21859 Annotations for first-dir/file1 21860 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 21861 1\.1 ($username8 *[0-9a-zA-Z-]*): this 21862 1\.1 ($username8 *[0-9a-zA-Z-]*): is 21863 1\.2 ($username8 *[0-9a-zA-Z-]*): a 21864 1\.1 ($username8 *[0-9a-zA-Z-]*): file 21865 1\.2 ($username8 *[0-9a-zA-Z-]*): 21866 1\.2 ($username8 *[0-9a-zA-Z-]*): with 21867 1\.2 ($username8 *[0-9a-zA-Z-]*): a 21868 1\.2 ($username8 *[0-9a-zA-Z-]*): blank 21869 1\.2 ($username8 *[0-9a-zA-Z-]*): line 21870 1\.2\.2\.1 ($username8 *[0-9a-zA-Z-]*): and some 21871 1\.2\.2\.1 ($username8 *[0-9a-zA-Z-]*): branched content" 21872 dotest ann-r12 "${testcvs} rann -r 1.2.0.2 first-dir/file1" "" 21873 dotest ann-r13 "${testcvs} rann -r 1.2.2 first-dir/file1" \ 21874 " 21875 Annotations for first-dir/file1 21876 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 21877 1\.1 ($username8 *[0-9a-zA-Z-]*): this 21878 1\.1 ($username8 *[0-9a-zA-Z-]*): is 21879 1\.2 ($username8 *[0-9a-zA-Z-]*): a 21880 1\.1 ($username8 *[0-9a-zA-Z-]*): file 21881 1\.2 ($username8 *[0-9a-zA-Z-]*): 21882 1\.2 ($username8 *[0-9a-zA-Z-]*): with 21883 1\.2 ($username8 *[0-9a-zA-Z-]*): a 21884 1\.2 ($username8 *[0-9a-zA-Z-]*): blank 21885 1\.2 ($username8 *[0-9a-zA-Z-]*): line 21886 1\.2\.2\.1 ($username8 *[0-9a-zA-Z-]*): and some 21887 1\.2\.2\.1 ($username8 *[0-9a-zA-Z-]*): branched content" 21888 dotest_fail ann-r14 "$testcvs rann -r bill-clintons-chastity first-dir/file1" \ 21889 "$SPROG \[rannotate aborted\]: no such tag \`bill-clintons-chastity'" 21890 21891 dokeep 21892 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 21893 ;; 21894 21895 21896 21897 ann-id) 21898 # Demonstrate that cvs-1.9.28.1 improperly expands rcs keywords in 21899 # the output of `cvs annotate' -- it uses values from the previous 21900 # delta. In this case, `1.1' instead of `1.2', even though it puts 21901 # the proper version number on the prefix to each line of output. 21902 mkdir 1; cd 1 21903 dotest ann-id-1 "$testcvs -q co -l ." 21904 module=x 21905 mkdir $module 21906 dotest ann-id-2 "${testcvs} add $module" \ 21907 "Directory ${CVSROOT_DIRNAME}/$module added to the repository" 21908 cd $module 21909 21910 file=m 21911 echo '$Id''$' > $file 21912 21913 dotest ann-id-3 "$testcvs add $file" \ 21914 "$SPROG add: scheduling file .$file. for addition 21915 $SPROG add: use .$SPROG commit. to add this file permanently" 21916 dotest ann-id-4 "$testcvs -Q ci -m . $file" 21917 21918 echo line2 >> $file 21919 dotest ann-id-5 "$testcvs -Q ci -m . $file" 21920 21921 # The version number after $file,v should be `1.2'. 21922 # 1.9.28.1 puts `1.1' there. 21923 dotest ann-id-6 "$testcvs -Q ann $file" \ 21924 " 21925 Annotations for $file 21926 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 21927 1.2 ($username8 *[0-9a-zA-Z-]*): "'\$'"Id: $file,v 1.1 [0-9/]* [0-9:]* $username Exp "'\$'" 21928 1.2 ($username8 *[0-9a-zA-Z-]*): line2" 21929 21930 dokeep 21931 cd ../.. 21932 rm -rf 1 21933 modify_repo rm -rf $CVSROOT_DIRNAME/$module 21934 ;; 21935 21936 21937 21938 crerepos) 21939 # Various tests relating to creating repositories, operating 21940 # on repositories created with old versions of CVS, etc. 21941 21942 CVS_SERVER_save=$CVS_SERVER 21943 21944 # Because this test is all about -d options and such, it 21945 # at least to some extent needs to be different for remote vs. 21946 # local. 21947 if $remote; then 21948 21949 # Use :ext: rather than :fork:. Most of the tests use :fork:, 21950 # so we want to make sure that we test :ext: _somewhere_. 21951 # Make sure 'rsh' works first. 21952 require_rsh "$CVS_RSH" 21953 if test $? -eq 77; then 21954 skip crerepos "$skipreason" 21955 continue 21956 fi 21957 21958 # Make sure server ignores real $HOME/.cvsrc: 21959 cat >$TESTDIR/cvs-setHome <<EOF 21960 #!$TESTSHELL 21961 HOME=$HOME 21962 export HOME 21963 exec $CVS_SERVER "\$@" 21964 EOF 21965 chmod a+x $TESTDIR/cvs-setHome 21966 21967 # Note that we set CVS_SERVER at the beginning. 21968 CVS_SERVER=$TESTDIR/cvs-setHome; export CVS_SERVER 21969 CREREPOS_ROOT=:ext:$host$TESTDIR/crerepos 21970 else # local 21971 CREREPOS_ROOT=$TESTDIR/crerepos 21972 fi 21973 21974 # First, if the repository doesn't exist at all... 21975 dotest_fail crerepos-1 \ 21976 "${testcvs} -d ${TESTDIR}/crerepos co cvs-sanity" \ 21977 "${SPROG} \[checkout aborted\]: ${TESTDIR}/crerepos/CVSROOT: .*" 21978 mkdir crerepos 21979 21980 # The repository exists but CVSROOT doesn't. 21981 dotest_fail crerepos-2 \ 21982 "${testcvs} -d ${TESTDIR}/crerepos co cvs-sanity" \ 21983 "${SPROG} \[checkout aborted\]: ${TESTDIR}/crerepos/CVSROOT: .*" 21984 mkdir crerepos/CVSROOT 21985 21986 # Checkout of nonexistent module 21987 dotest_fail crerepos-3 \ 21988 "${testcvs} -d ${TESTDIR}/crerepos co cvs-sanity" \ 21989 "${SPROG} checkout: cannot find module .cvs-sanity. - ignored" 21990 21991 # Now test that CVS works correctly without a modules file 21992 # or any of that other stuff. In particular, it *must* 21993 # function if administrative files added to CVS recently (since 21994 # CVS 1.3) do not exist, because the repository might have 21995 # been created with an old version of CVS. 21996 mkdir 1; cd 1 21997 dotest crerepos-4 \ 21998 "${testcvs} -q -d ${TESTDIR}/crerepos co CVSROOT" \ 21999 '' 22000 dotest crerepos-5 \ 22001 "echo yes | $testcvs -d $TESTDIR/crerepos release -d CVSROOT" \ 22002 "You have \[0\] altered files in this repository\. 22003 Are you sure you want to release (and delete) directory \`CVSROOT': " 22004 rm -rf CVS 22005 cd .. 22006 # The directory 1 should be empty 22007 dotest crerepos-6 "rmdir 1" 22008 22009 if $remote; then 22010 # Test that CVS rejects a relative path in CVSROOT. 22011 mkdir 1; cd 1 22012 # Note that having the client reject the pathname (as :fork: 22013 # does), does _not_ test for the bugs we are trying to catch 22014 # here. The point is that malicious clients might send all 22015 # manner of things and the server better protect itself. 22016 dotest_fail crerepos-6a-r \ 22017 "${testcvs} -q -d :ext:`hostname`:../crerepos get ." \ 22018 "${CPROG} checkout: CVSROOT may only specify a positive, non-zero, integer port (not .\.\..)\. 22019 ${CPROG} checkout: Perhaps you entered a relative pathname${QUESTION} 22020 ${CPROG} \[checkout aborted\]: Bad CVSROOT: .:ext:${hostname}:\.\./crerepos.\." 22021 cd .. 22022 rm -r 1 22023 22024 mkdir 1; cd 1 22025 dotest_fail crerepos-6b-r \ 22026 "${testcvs} -d :ext:`hostname`:crerepos init" \ 22027 "${CPROG} init: CVSROOT requires a path spec: 22028 ${CPROG} init: :(gserver|kserver|pserver):\[\[user\]\[:password\]@\]host\[:\[port\]\]/path 22029 ${CPROG} init: \[:(ext|server):\]\[\[user\]@\]host\[:\]/path 22030 ${CPROG} \[init aborted\]: Bad CVSROOT: .:ext:${hostname}:crerepos.\." 22031 cd .. 22032 rm -r 1 22033 else # local 22034 # Test that CVS rejects a relative path in CVSROOT. 22035 22036 mkdir 1; cd 1 22037 # Set CVS_RSH=false since ocassionally (e.g. when CVS_RSH=ssh on 22038 # some systems) some rsh implementations will block because they 22039 # can look up '..' and want to ask the user about the unknown host 22040 # key or somesuch. Which error message we get depends on whether 22041 # false finishes running before we try to talk to it or not. 22042 dotest_fail crerepos-6a "CVS_RSH=false ${testcvs} -q -d ../crerepos get ." \ 22043 "${SPROG} \[checkout aborted\]: end of file from server (consult above messages if any)" \ 22044 "${SPROG} \[checkout aborted\]: received broken pipe signal" 22045 cd .. 22046 rm -r 1 22047 22048 mkdir 1; cd 1 22049 dotest_fail crerepos-6b "${testcvs} -d crerepos init" \ 22050 "${SPROG} init: CVSROOT must be an absolute pathname (not .crerepos.) 22051 ${SPROG} init: when using local access method\. 22052 ${SPROG} \[init aborted\]: Bad CVSROOT: .crerepos.\." 22053 cd .. 22054 rm -r 1 22055 fi # end of tests to be skipped for remote 22056 22057 # CVS should have created a history file. If the administrator 22058 # doesn't need it and wants to save on disk space, they just 22059 # delete it and set LogHistory = the empty string in config. 22060 dotest crerepos-7 "test -f $TESTDIR/crerepos/CVSROOT/history" 22061 22062 # Now test mixing repositories. This kind of thing tends to 22063 # happen accidentally when people work with several repositories. 22064 mkdir 1; cd 1 22065 dotest crerepos-8 "${testcvs} -q co -l ." '' 22066 mkdir first-dir 22067 dotest crerepos-9 "${testcvs} add first-dir" \ 22068 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 22069 cd first-dir 22070 touch file1 22071 dotest crerepos-10 "${testcvs} add file1" \ 22072 "${SPROG} add: scheduling file .file1. for addition 22073 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 22074 dotest crerepos-11 "${testcvs} -q ci -m add-it" \ 22075 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 22076 initial revision: 1\.1" 22077 cd ../.. 22078 rm -r 1 22079 22080 mkdir 1; cd 1 22081 dotest crerepos-12 "$testcvs -d $CREREPOS_ROOT -q co -l ." 22082 mkdir crerepos-dir 22083 dotest crerepos-13 "$testcvs add crerepos-dir" \ 22084 "Directory $TESTDIR/crerepos/crerepos-dir added to the repository" 22085 cd crerepos-dir 22086 touch cfile 22087 dotest crerepos-14 "${testcvs} add cfile" \ 22088 "${SPROG} add: scheduling file .cfile. for addition 22089 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 22090 dotest crerepos-15 "${testcvs} -q ci -m add-it" \ 22091 "$TESTDIR/crerepos/crerepos-dir/cfile,v <-- cfile 22092 initial revision: 1\.1" 22093 cd ../.. 22094 rm -r 1 22095 22096 mkdir 1; cd 1 22097 dotest crerepos-16 "${testcvs} co first-dir" \ 22098 "${SPROG} checkout: Updating first-dir 22099 U first-dir/file1" 22100 dotest crerepos-17 "${testcvs} -d ${CREREPOS_ROOT} co crerepos-dir" \ 22101 "${SPROG} checkout: Updating crerepos-dir 22102 U crerepos-dir/cfile" 22103 dotest crerepos-18 "${testcvs} update" \ 22104 "${SPROG} update: Updating first-dir 22105 ${SPROG} update: Updating crerepos-dir" 22106 22107 cd .. 22108 22109 CVS_SERVER=$CVS_SERVER_save; export CVS_SERVER 22110 22111 if $keep; then 22112 echo Keeping ${TESTDIR} and exiting due to --keep 22113 exit 0 22114 fi 22115 22116 dokeep 22117 rm -f $TESTDIR/cvs-setHome 22118 rm -r 1 22119 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 22120 rm -rf $TESTDIR/crerepos 22121 ;; 22122 22123 22124 22125 rcs) 22126 # Test ability to import an RCS file. Note that this format 22127 # is fixed--files written by RCS5, and other software which 22128 # implements this format, will be out there "forever" and 22129 # CVS must always be able to import such files. 22130 22131 # See tests admin-13, admin-25 and rcs-8a for exporting RCS files. 22132 22133 # Save the timezone and set it to UTC for these tests to make the 22134 # value more predicatable. 22135 save_TZ=$TZ 22136 TZ=UTC0; export TZ 22137 22138 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 22139 22140 # Currently the way to import an RCS file is to copy it 22141 # directly into the repository. 22142 # 22143 # This file was written by RCS 5.7, and then the dates were 22144 # hacked so that we test year 2000 stuff. Note also that 22145 # "author" names are just strings, as far as importing 22146 # RCS files is concerned--they need not correspond to user 22147 # IDs on any particular system. 22148 # 22149 # I also tried writing a file with the RCS supplied with 22150 # HPUX A.09.05. According to "man rcsintro" this is 22151 # "Revision Number: 3.0; Release Date: 83/05/11". There 22152 # were a few minor differences like whitespace but at least 22153 # in simple cases like this everything else seemed the same 22154 # as the file written by RCS 5.7 (so I won't try to make it 22155 # a separate test case). 22156 22157 cat <<EOF >$TESTDIR/file1,v 22158 head 1.3; 22159 access; 22160 symbols; 22161 locks; strict; 22162 comment @# @; 22163 22164 22165 1.3 22166 date ${RAWRCSDATE2000A}; author kingdon; state Exp; 22167 branches; 22168 next 1.2; 22169 22170 1.2 22171 date ${RAWRCSDATE1996A}; author kingdon; state Exp; 22172 branches; 22173 next 1.1; 22174 22175 1.1 22176 date ${RAWRCSDATE1996B}; author kingdon; state Exp; 22177 branches; 22178 next ; 22179 22180 22181 desc 22182 @file1 is for testing CVS 22183 @ 22184 22185 22186 1.3 22187 log 22188 @delete second line; modify twelfth line 22189 @ 22190 text 22191 @This is the first line 22192 This is the third line 22193 This is the fourth line 22194 This is the fifth line 22195 This is the sixth line 22196 This is the seventh line 22197 This is the eighth line 22198 This is the ninth line 22199 This is the tenth line 22200 This is the eleventh line 22201 This is the twelfth line (and what a line it is) 22202 This is the thirteenth line 22203 @ 22204 22205 22206 1.2 22207 log 22208 @add more lines 22209 @ 22210 text 22211 @a1 1 22212 This is the second line 22213 d11 1 22214 a11 1 22215 This is the twelfth line 22216 @ 22217 22218 22219 1.1 22220 log 22221 @add file1 22222 @ 22223 text 22224 @d2 12 22225 @ 22226 EOF 22227 modify_repo mv $TESTDIR/file1,v $CVSROOT_DIRNAME/first-dir/file1,v 22228 22229 dotest rcs-1 "$testcvs -q co first-dir" 'U first-dir/file1' 22230 cd first-dir 22231 dotest rcs-2 "$testcvs -q log" " 22232 RCS file: $CVSROOT_DIRNAME/first-dir/file1,v 22233 Working file: file1 22234 head: 1\.3 22235 branch: 22236 locks: strict 22237 access list: 22238 symbolic names: 22239 keyword substitution: kv 22240 total revisions: 3; selected revisions: 3 22241 description: 22242 file1 is for testing CVS 22243 ---------------------------- 22244 revision 1\.3 22245 date: ${ISO8601DATE2000A}; author: kingdon; state: Exp; lines: ${PLUS}1 -2; 22246 delete second line; modify twelfth line 22247 ---------------------------- 22248 revision 1\.2 22249 date: ${ISO8601DATE1996A}; author: kingdon; state: Exp; lines: ${PLUS}12 -0; 22250 add more lines 22251 ---------------------------- 22252 revision 1\.1 22253 date: ${ISO8601DATE1996B}; author: kingdon; state: Exp; 22254 add file1 22255 =============================================================================" 22256 22257 # Note that the dates here are chosen so that (a) we test 22258 # at least one date after 2000, (b) we will notice if the 22259 # month and day are getting mixed up with each other. 22260 # TODO: also test that year isn't getting mixed up with month 22261 # or day, for example 01-02-03. 22262 22263 # ISO8601 format. There are many, many, other variations 22264 # specified by ISO8601 which we should be testing too. 22265 dotest rcs-3 "${testcvs} -q log -d '1996-12-11<'" " 22266 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 22267 Working file: file1 22268 head: 1\.3 22269 branch: 22270 locks: strict 22271 access list: 22272 symbolic names: 22273 keyword substitution: kv 22274 total revisions: 3; selected revisions: 1 22275 description: 22276 file1 is for testing CVS 22277 ---------------------------- 22278 revision 1\.3 22279 date: ${ISO8601DATE2000A}; author: kingdon; state: Exp; lines: ${PLUS}1 -2; 22280 delete second line; modify twelfth line 22281 =============================================================================" 22282 22283 # RFC822 format (as amended by RFC1123). 22284 dotest rcs-4 "${testcvs} -q log -d '<3 Apr 2000 00:00'" \ 22285 " 22286 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 22287 Working file: file1 22288 head: 1\.3 22289 branch: 22290 locks: strict 22291 access list: 22292 symbolic names: 22293 keyword substitution: kv 22294 total revisions: 3; selected revisions: 2 22295 description: 22296 file1 is for testing CVS 22297 ---------------------------- 22298 revision 1\.2 22299 date: ${ISO8601DATE1996A}; author: kingdon; state: Exp; lines: ${PLUS}12 -0; 22300 add more lines 22301 ---------------------------- 22302 revision 1\.1 22303 date: ${ISO8601DATE1996B}; author: kingdon; state: Exp; 22304 add file1 22305 =============================================================================" 22306 22307 # Intended behavior for "cvs annotate" is that it displays the 22308 # last two digits of the year. Make sure it does that rather 22309 # than some bogosity like "100". 22310 dotest rcs-4a "${testcvs} annotate file1" \ 22311 " 22312 Annotations for file1 22313 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 22314 1\.1 (kingdon 24-Nov-96): This is the first line 22315 1\.2 (kingdon 24-Nov-96): This is the third line 22316 1\.2 (kingdon 24-Nov-96): This is the fourth line 22317 1\.2 (kingdon 24-Nov-96): This is the fifth line 22318 1\.2 (kingdon 24-Nov-96): This is the sixth line 22319 1\.2 (kingdon 24-Nov-96): This is the seventh line 22320 1\.2 (kingdon 24-Nov-96): This is the eighth line 22321 1\.2 (kingdon 24-Nov-96): This is the ninth line 22322 1\.2 (kingdon 24-Nov-96): This is the tenth line 22323 1\.2 (kingdon 24-Nov-96): This is the eleventh line 22324 1\.3 (kingdon 24-Nov-00): This is the twelfth line (and what a line it is) 22325 1\.2 (kingdon 24-Nov-96): This is the thirteenth line" 22326 22327 # Probably should split this test into two at this point (file1 22328 # above this line and file2 below), as the two share little 22329 # data/setup. 22330 22331 # OK, here is another one. This one was written by hand based on 22332 # doc/RCSFILES and friends. One subtle point is that none of 22333 # the lines end with newlines; that is a feature which we 22334 # should be testing. 22335 cat <<EOF >$TESTDIR/file2,v 22336 head 1.5 ; 22337 branch 1.2.6; 22338 access ; 22339 symbols branch:1.2.6; 22340 locks; 22341 testofanewphrase @without newphrase we'd have trouble extending @@ all@ ; 22342 1.5 date 71.01.01.01.00.00; author joe; state bogus; branches; next 1.4; 22343 1.4 date 71.01.01.00.00.05; author joe; state bogus; branches; next 1.3; 22344 1.3 date 70.12.31.15.00.05; author joe; state bogus; branches; next 1.2; 22345 1.2 date 70.12.31.12.15.05; author me; state bogus; branches 1.2.6.1; next 1.1; 22346 1.1 date 70.12.31.11.00.05; author joe; state bogus; branches; next; newph; 22347 1.2.6.1 date 71.01.01.08.00.05; author joe; state Exp; branches; next; 22348 desc @@ 22349 1.5 log @@ newphrase1; newphrase2 42; text @head revision@ 22350 1.4 log @@ text @d1 1 22351 a1 1 22352 new year revision@ 22353 1.3 log @@ text @d1 1 22354 a1 1 22355 old year revision@ 22356 1.2 log @@ text @d1 1 22357 a1 1 22358 mid revision@ 1.1 22359 22360 log @@ text @d1 1 22361 a1 1 22362 start revision@ 22363 1.2.6.1 log @@ text @d1 1 22364 a1 1 22365 branch revision@ 22366 EOF 22367 modify_repo mv $TESTDIR/file2,v $CVSROOT_DIRNAME/first-dir/file2,v 22368 # ' Match the single quote in above here doc -- for font-lock mode. 22369 22370 # First test the default branch. 22371 dotest rcs-5 "${testcvs} -q update file2" "U file2" 22372 dotest rcs-6 "cat file2" "branch revision" 22373 22374 # Check in a revision on the branch to force CVS to 22375 # interpret every revision in the file. 22376 dotest rcs-6a "${testcvs} -q update -r branch file2" "" 22377 echo "next branch revision" > file2 22378 dotest rcs-6b "${testcvs} -q ci -m mod file2" \ 22379 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 22380 new revision: 1\.2\.6\.2; previous revision: 1\.2\.6\.1" 22381 22382 # Now get rid of the default branch, it will get in the way. 22383 dotest rcs-7 "${testcvs} admin -b file2" \ 22384 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 22385 done" 22386 # But we do want to make sure that "cvs admin" leaves the newphrases 22387 # in the file. 22388 # The extra whitespace regexps are for the RCS library, which does 22389 # not preserve whitespace in the dogmatic manner of RCS 5.7. -twp 22390 dotest rcs-8 \ 22391 "grep testofanewphrase ${CVSROOT_DIRNAME}/first-dir/file2,v" \ 22392 "testofanewphrase[ ][ ]*@without newphrase we'd have trouble extending @@ all@[ ]*;" 22393 # The easiest way to test for newphrases in deltas and deltatexts 22394 # is to just look at the whole file, I guess. 22395 dotest rcs-8a "cat ${CVSROOT_DIRNAME}/first-dir/file2,v" \ 22396 "head 1\.5; 22397 access; 22398 symbols 22399 branch:1.2.6; 22400 locks; 22401 22402 testofanewphrase @without newphrase we'd have trouble extending @@ all@; 22403 22404 1\.5 22405 date 71\.01\.01\.01\.00\.00; author joe; state bogus; 22406 branches; 22407 next 1\.4; 22408 22409 1\.4 22410 date 71\.01\.01\.00\.00\.05; author joe; state bogus; 22411 branches; 22412 next 1\.3; 22413 22414 1\.3 22415 date 70\.12\.31\.15\.00\.05; author joe; state bogus; 22416 branches; 22417 next 1\.2; 22418 22419 1\.2 22420 date 70\.12\.31\.12\.15\.05; author me; state bogus; 22421 branches 22422 1\.2\.6\.1; 22423 next 1\.1; 22424 22425 1\.1 22426 date 70\.12\.31\.11\.00\.05; author joe; state bogus; 22427 branches; 22428 next ; 22429 newph ; 22430 22431 1\.2\.6\.1 22432 date 71\.01\.01\.08\.00\.05; author joe; state Exp; 22433 branches; 22434 next 1\.2\.6\.2; 22435 22436 1\.2\.6\.2 22437 date [0-9.]*; author ${username}; state Exp; 22438 branches; 22439 next ; 22440 commitid ${commitid}; 22441 22442 22443 desc 22444 @@ 22445 22446 22447 1\.5 22448 log 22449 @@ 22450 newphrase1 ; 22451 newphrase2 42; 22452 text 22453 @head revision@ 22454 22455 22456 1\.4 22457 log 22458 @@ 22459 text 22460 @d1 1 22461 a1 1 22462 new year revision@ 22463 22464 22465 1\.3 22466 log 22467 @@ 22468 text 22469 @d1 1 22470 a1 1 22471 old year revision@ 22472 22473 22474 1\.2 22475 log 22476 @@ 22477 text 22478 @d1 1 22479 a1 1 22480 mid revision@ 22481 22482 22483 1\.1 22484 log 22485 @@ 22486 text 22487 @d1 1 22488 a1 1 22489 start revision@ 22490 22491 22492 1\.2\.6\.1 22493 log 22494 @@ 22495 text 22496 @d1 1 22497 a1 1 22498 branch revision@ 22499 22500 22501 1\.2\.6\.2 22502 log 22503 @mod 22504 @ 22505 text 22506 @d1 1 22507 a1 1 22508 next branch revision 22509 @" 22510 22511 dotest rcs-9 "${testcvs} -q update -p -D '1970-12-31 11:30 UT' file2" \ 22512 "start revision" 22513 22514 dotest rcs-10 "${testcvs} -q update -p -D '1970-12-31 12:30 UT' file2" \ 22515 "mid revision" 22516 22517 dotest rcs-11 "${testcvs} -q update -p -D '1971-01-01 00:30 UT' file2" \ 22518 "new year revision" 22519 22520 # Same test as rcs-10, but with am/pm. 22521 dotest rcs-12 "${testcvs} -q update -p -D 'December 31, 1970 12:30pm UT' file2" \ 22522 "mid revision" 22523 22524 # Same test as rcs-11, but with am/pm. 22525 dotest rcs-13 "${testcvs} -q update -p -D 'January 1, 1971 12:30am UT' file2" \ 22526 "new year revision" 22527 22528 # OK, now make sure cvs log doesn't have any trouble with the 22529 # newphrases and such. 22530 dotest rcs-14 "${testcvs} -q log file2" " 22531 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 22532 Working file: file2 22533 head: 1\.5 22534 branch: 22535 locks: 22536 access list: 22537 symbolic names: 22538 branch: 1\.2\.6 22539 keyword substitution: kv 22540 total revisions: 7; selected revisions: 7 22541 description: 22542 ---------------------------- 22543 revision 1\.5 22544 date: 1971-01-01 01:00:00 [+-]0000; author: joe; state: bogus; lines: ${PLUS}1 -1; 22545 \*\*\* empty log message \*\*\* 22546 ---------------------------- 22547 revision 1\.4 22548 date: 1971-01-01 00:00:05 [+-]0000; author: joe; state: bogus; lines: ${PLUS}1 -1; 22549 \*\*\* empty log message \*\*\* 22550 ---------------------------- 22551 revision 1\.3 22552 date: 1970-12-31 15:00:05 [+-]0000; author: joe; state: bogus; lines: ${PLUS}1 -1; 22553 \*\*\* empty log message \*\*\* 22554 ---------------------------- 22555 revision 1\.2 22556 date: 1970-12-31 12:15:05 [+-]0000; author: me; state: bogus; lines: ${PLUS}1 -1; 22557 branches: 1\.2\.6; 22558 \*\*\* empty log message \*\*\* 22559 ---------------------------- 22560 revision 1\.1 22561 date: 1970-12-31 11:00:05 [+-]0000; author: joe; state: bogus; 22562 \*\*\* empty log message \*\*\* 22563 ---------------------------- 22564 revision 1\.2\.6\.2 22565 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -1; commitid: ${commitid}; 22566 mod 22567 ---------------------------- 22568 revision 1\.2\.6\.1 22569 date: 1971-01-01 08:00:05 [+-]0000; author: joe; state: Exp; lines: ${PLUS}1 -1; 22570 \*\*\* empty log message \*\*\* 22571 =============================================================================" 22572 # Now test each date format for "cvs log -d". 22573 # Earlier than 1971-01-01 22574 dotest rcs-15 "${testcvs} -q log -d '<1971-01-01 00:00 GMT' file2 \ 22575 | grep revision" \ 22576 "total revisions: 7; selected revisions: 3 22577 revision 1\.3 22578 revision 1\.2 22579 revision 1\.1" 22580 # Later than 1971-01-01 22581 dotest rcs-16 "${testcvs} -q log -d '1971-01-01 00:00 GMT<' file2 \ 22582 | grep revision" \ 22583 "total revisions: 7; selected revisions: 4 22584 revision 1\.5 22585 revision 1\.4 22586 revision 1\.2\.6\.2 22587 revision 1\.2\.6\.1" 22588 # Alternate syntaxes for later and earlier; multiple -d options 22589 dotest rcs-17 "${testcvs} -q log -d '>1971-01-01 00:00 GMT' \ 22590 -d '1970-12-31 12:15 GMT>' file2 | grep revision" \ 22591 "total revisions: 7; selected revisions: 5 22592 revision 1\.5 22593 revision 1\.4 22594 revision 1\.1 22595 revision 1\.2\.6\.2 22596 revision 1\.2\.6\.1" 22597 # Range, and single date 22598 dotest rcs-18 "${testcvs} -q log -d '1970-12-31 11:30 GMT' \ 22599 -d '1971-01-01 00:00:05 GMT<1971-01-01 01:00:01 GMT' \ 22600 file2 | grep revision" \ 22601 "total revisions: 7; selected revisions: 2 22602 revision 1\.5 22603 revision 1\.1" 22604 # Alternate range syntax; equality 22605 dotest rcs-19 "${testcvs} -q log \ 22606 -d '1971-01-01 01:00:01 GMT>=1971-01-01 00:00:05 GMT' \ 22607 file2 | grep revision" \ 22608 "total revisions: 7; selected revisions: 2 22609 revision 1\.5 22610 revision 1\.4" 22611 22612 dokeep 22613 TZ=$save_TZ 22614 cd .. 22615 rm -r first-dir 22616 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 22617 ;; 22618 22619 22620 22621 rcs2) 22622 # More date tests. Might as well do this as a separate 22623 # test from "rcs", so that we don't need to perturb the 22624 # "written by RCS 5.7" RCS file. 22625 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 22626 # Significance of various dates: 22627 # * At least one Y2K standard refers to recognizing 9 Sep 1999 22628 # (as an example of a pre-2000 date, I guess). 22629 # * At least one Y2K standard refers to recognizing 1 Jan 2001 22630 # (as an example of a post-2000 date, I guess). 22631 # * Many Y2K standards refer to 2000 being a leap year. 22632 cat <<EOF >$TESTDIR/file1,v 22633 head 1.7; access; symbols; locks; strict; 22634 1.7 date 2004.08.31.01.01.01; author sue; state; branches; next 1.6; 22635 1.6 date 2004.02.29.01.01.01; author sue; state; branches; next 1.5; 22636 1.5 date 2003.02.28.01.01.01; author sue; state; branches; next 1.4; 22637 1.4 date 2001.01.01.01.01.01; author sue; state; branches; next 1.3; 22638 1.3 date 2000.02.29.01.01.01; author sue; state; branches; next 1.2; 22639 1.2 date 99.09.09.01.01.01; author sue; state; branches; next 1.1; 22640 1.1 date 98.09.10.01.01.01; author sue; state; branches; next; 22641 desc @a test file@ 22642 1.7 log @@ text @head revision@ 22643 1.6 log @@ text @d1 1 22644 a1 1 22645 2004 was a great year for leaping@ 22646 1.5 log @@ text @d1 1 22647 a1 1 22648 2003 wasn't@ 22649 1.4 log @@ text @d1 1 22650 a1 1 22651 two year hiatus@ 22652 1.3 log @@ text @d1 1 22653 a1 1 22654 2000 is also a good year for leaping@ 22655 1.2 log @@ text @d1 1 22656 a1 1 22657 Tonight we're going to party like it's a certain year@ 22658 1.1 log @@ text @d1 1 22659 a1 1 22660 Need to start somewhere@ 22661 EOF 22662 modify_repo mv $TESTDIR/file1,v $CVSROOT_DIRNAME/first-dir/file1,v 22663 # ' Match the 3rd single quote in the here doc -- for font-lock mode. 22664 22665 dotest rcs2-1 "${testcvs} -q co first-dir" 'U first-dir/file1' 22666 cd first-dir 22667 22668 # 9 Sep 1999 22669 dotest rcs2-2 "${testcvs} -q update -p -D '1999-09-09 11:30 UT' file1" \ 22670 "Tonight we're going to party like it's a certain year" 22671 # 1 Jan 2001. 22672 dotest rcs2-3 "${testcvs} -q update -p -D '2001-01-01 11:30 UT' file1" \ 22673 "two year hiatus" 22674 # 29 Feb 2000 22675 dotest rcs2-4 "${testcvs} -q update -p -D '2000-02-29 11:30 UT' file1" \ 22676 "2000 is also a good year for leaping" 22677 # 29 Feb 2003 is invalid 22678 dotest_fail rcs2-5 "${testcvs} -q update -p -D '2003-02-29 11:30 UT' file1" \ 22679 "$CPROG \[update aborted\]: Can't parse date/time: \`2003-02-29 11:30 UT'" 22680 22681 dotest rcs2-6 "${testcvs} -q update -p -D 2007-01-07 file1" \ 22682 "head revision" 22683 # This assumes that the clock of the machine running the tests 22684 # is set to at least the year 1998 or so. There don't seem 22685 # to be a lot of ways to test the relative date code (short 22686 # of something like LD_LIBRARY_PRELOAD'ing in our own 22687 # getttimeofday, or hacking the CVS source with testing 22688 # features, which always seems to be problematic since then 22689 # someone feels like documenting them and things go downhill 22690 # from there). 22691 # 22692 # These tests can be expected to fail 3 times every 400 years 22693 # starting Feb. 29, 2096 (because 8 years from that date would 22694 # be Feb. 29, 2100, which is an invalid date -- 2100 isn't a 22695 # leap year because it's divisible by 100 but not by 400). 22696 22697 dotest rcs2-7 "${testcvs} -q update -p -D '96 months' file1" \ 22698 "head revision" 22699 dotest rcs2-8 "${testcvs} -q update -p -D '8 years' file1" \ 22700 "head revision" 22701 22702 dokeep 22703 cd .. 22704 rm -r first-dir 22705 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 22706 ;; 22707 22708 22709 22710 rcs3) 22711 # More RCS file tests, in particular at least some of the 22712 # error handling issues. 22713 mkdir ${CVSROOT_DIRNAME}/first-dir 22714 cat <<EOF >$TESTDIR/file1,v 22715 head 1.1; access; symbols; locks; expand o; 1.1 date 2007.03.20.04.03.02 22716 ; author jeremiah ;state ; branches; next;desc@@1.1log@@text@head@ 22717 EOF 22718 modify_repo mv $TESTDIR/file1,v $CVSROOT_DIRNAME/first-dir/file1,v 22719 mkdir 1; cd 1 22720 # CVS requires whitespace between "desc" and its value. 22721 # The rcsfile(5) manpage doesn't really seem to answer the 22722 # question one way or the other (it has a grammar but almost 22723 # nothing about lexical analysis). 22724 dotest_fail rcs3-1 "${testcvs} -q co first-dir" \ 22725 "${SPROG} \[checkout aborted\]: EOF while looking for value in RCS file ${CVSROOT_DIRNAME}/first-dir/file1,v" 22726 cat <<EOF >$TESTDIR/file1,v 22727 head 1.1; access; symbols; locks; expand o; 1.1 date 2007.03.20.04.03.02 22728 ; author jeremiah ;state ; branches; next;desc @@1.1log@@text@head@ 22729 EOF 22730 modify_repo mv $TESTDIR/file1,v $CVSROOT_DIRNAME/first-dir/file1,v 22731 # Whitespace issues, likewise. 22732 dotest_fail rcs3-2 "${testcvs} -q co first-dir" \ 22733 "${SPROG} \[checkout aborted\]: unexpected '.x6c' reading revision number in RCS file ${CVSROOT_DIRNAME}/first-dir/file1,v" 22734 cat <<EOF >$TESTDIR/file1,v 22735 head 1.1; access; symbols; locks; expand o; 1.1 date 2007.03.20.04.03.02 22736 ; author jeremiah ;state ; branches; next;desc @@1.1 log@@text@head@ 22737 EOF 22738 modify_repo mv $TESTDIR/file1,v $CVSROOT_DIRNAME/first-dir/file1,v 22739 # Charming array of different messages for similar 22740 # whitespace issues (depending on where the whitespace is). 22741 dotest_fail rcs3-3 "${testcvs} -q co first-dir" \ 22742 "${SPROG} \[checkout aborted\]: EOF while looking for value in RCS file ${CVSROOT_DIRNAME}/first-dir/file1,v" 22743 cat <<EOF >$TESTDIR/file1,v 22744 head 1.1; access; symbols; locks; expand o; 1.1 date 2007.03.20.04.03.02 22745 ; author jeremiah ;state ; branches; next;desc @@1.1 log @@text @head@ 22746 EOF 22747 modify_repo mv $TESTDIR/file1,v $CVSROOT_DIRNAME/first-dir/file1,v 22748 dotest rcs3-4 "${testcvs} -q co first-dir" 'U first-dir/file1' 22749 22750 # Ouch, didn't expect this one. FIXCVS. Or maybe just remove 22751 # the feature, if this is a -s problem? 22752 dotest_fail rcs3-5 "${testcvs} log -s nostate first-dir/file1" \ 22753 "${DOTSTAR}ssertion.*failed${DOTSTAR}" "${DOTSTAR}failed assertion${DOTSTAR}" 22754 cd first-dir 22755 dotest_fail rcs3-5a "${testcvs} log -s nostate file1" \ 22756 "${DOTSTAR}ssertion.*failed${DOTSTAR}" "${DOTSTAR}failed assertion${DOTSTAR}" 22757 cd .. 22758 22759 # See remote code above for rationale for cd. 22760 cd first-dir 22761 dotest rcs3-6 "${testcvs} log -R file1" \ 22762 "${CVSROOT_DIRNAME}/first-dir/file1,v" 22763 22764 # OK, now put an extraneous '\0' at the end. 22765 mv $CVSROOT_DIRNAME/first-dir/file1,v $TESTDIR/file1,v 22766 ${AWK} </dev/null 'BEGIN { printf "@%c", 10 }' | ${TR} '@' '\000' \ 22767 >>$TESTDIR/file1,v 22768 modify_repo mv $TESTDIR/file1,v $CVSROOT_DIRNAME/first-dir/file1,v 22769 dotest_fail rcs3-7 "${testcvs} log -s nostate file1" \ 22770 "${SPROG} \[log aborted\]: unexpected '.x0' reading revision number in RCS file ${CVSROOT_DIRNAME}/first-dir/file1,v" 22771 22772 dokeep 22773 cd ../.. 22774 rm -r 1 22775 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 22776 ;; 22777 22778 22779 22780 rcs4) 22781 # Fix a bug that shows up when checking out files by date with the 22782 # "-D date" command line option. There is code in the original to 22783 # handle a special case. If the date search finds revision 1.1 it 22784 # is supposed to check whether revision 1.1.1.1 has the same date 22785 # stamp, which would indicate that the file was originally brought 22786 # in with "cvs import". In that case it is supposed to return the 22787 # vendor branch version 1.1.1.1. 22788 # 22789 # However, there is a bug in the code. It actually compares 22790 # the date of revision 1.1 for equality with the date given 22791 # on the command line -- clearly wrong. This commit fixes 22792 # the coding bug. 22793 # 22794 # There is an additional bug which is _not_ fixed yet. 22795 # The date comparison should not be a strict 22796 # equality test. It should allow a fudge factor of, say, 2-3 22797 # seconds. Old versions of CVS created the two revisions 22798 # with two separate invocations of the RCS "ci" command. We 22799 # have many old files in the tree in which the dates of 22800 # revisions 1.1 and 1.1.1.1 differ by 1 second. 22801 22802 # Need a predictable time zone. 22803 save_TZ=$TZ 22804 TZ=UTC0; export TZ 22805 22806 mkdir rcs4 22807 cd rcs4 22808 22809 mkdir imp-dir 22810 cd imp-dir 22811 echo 'OpenMunger sources' >file1 22812 22813 # choose a time in the past to demonstrate the problem 22814 touch -t 200012010123 file1 22815 22816 dotest_sort rcs4-1 \ 22817 "${testcvs} import -d -m add rcs4-dir openmunger openmunger-1_0" \ 22818 ' 22819 22820 N rcs4-dir/file1 22821 No conflicts created by this import' 22822 echo 'OpenMunger sources release 1.1 extras' >>file1 22823 touch -t 200112011234 file1 22824 dotest_sort rcs4-2 \ 22825 "${testcvs} import -d -m add rcs4-dir openmunger openmunger-1_1" \ 22826 ' 22827 22828 No conflicts created by this import 22829 U rcs4-dir/file1' 22830 cd .. 22831 # Next checkout the new module 22832 dotest rcs4-3 \ 22833 "${testcvs} -q co rcs4-dir" \ 22834 'U rcs4-dir/file1' 22835 cd rcs4-dir 22836 echo 'local change' >> file1 22837 22838 # commit a local change 22839 dotest rcs4-4 "${testcvs} -q commit -m hack file1" \ 22840 "$CVSROOT_DIRNAME/rcs4-dir/file1,v <-- file1 22841 new revision: 1\.2; previous revision: 1\.1" 22842 # now see if we get version 1.1 or 1.1.1.1 when we ask for 22843 # a checkout by time... it really should be 1.1.1.1 as 22844 # that was indeed the version that was visible at the target 22845 # time. 22846 dotest rcs4-5 \ 22847 "${testcvs} -q update -D 'October 1, 2001 UTC' file1" \ 22848 '[UP] file1' 22849 dotest rcs4-6 \ 22850 "${testcvs} -q status file1" \ 22851 '=================================================================== 22852 File: file1 Status: Up-to-date 22853 22854 Working revision: 1\.1\.1\.1.* 22855 Repository revision: 1\.1\.1\.1 '${CVSROOT_DIRNAME}'/rcs4-dir/file1,v 22856 Commit Identifier: '${commitid}' 22857 Sticky Tag: (none) 22858 Sticky Date: 2001\.10\.01\.00\.00\.00 22859 Sticky Options: (none)' 22860 22861 dokeep 22862 TZ=$save_TZ 22863 cd ../.. 22864 rm -r rcs4 22865 modify_repo rm -rf $CVSROOT_DIRNAME/rcs4-dir 22866 ;; 22867 22868 22869 22870 rcs5) 22871 # Some tests of the $Log keyword and log message without a trailing 22872 # EOL. This used to look ugly and, in the worst case, could cause 22873 # a seg fault due to a buffer overflow. 22874 # 22875 # Note that it should not be possible to create this situation via a 22876 # CVS server (and any client), since the server itself inserts the 22877 # trailing EOL onto log messages that are missing one. Still, we 22878 # shouldn't segfault due to a corrupt RCS file and I think that a log 22879 # message without the trailing EOL doesn't actually violate the RCS 22880 # spec, though it doesn't appear to be possible to create such a log 22881 # message using RCS 5.7. 22882 22883 modify_repo mkdir $CVSROOT_DIRNAME/rcs5 22884 cat <<\EOF >$TESTDIR/file1,v 22885 head 1.1; 22886 access; 22887 symbols; 22888 locks; 22889 expand kv; 22890 22891 1.1 date 2007.03.20.04.03.02; author jeremiah; state Ext; branches; next; 22892 22893 desc 22894 @@ 22895 22896 1.1 22897 log 22898 @he always had very fine wine@ 22899 text 22900 @line1 22901 /* 22902 EOF 22903 echo ' * History: $''Log$' >>$TESTDIR/file1,v 22904 cat <<\EOF >>$TESTDIR/file1,v 22905 */ 22906 line5 22907 @ 22908 EOF 22909 modify_repo mv $TESTDIR/file1,v $CVSROOT_DIRNAME/rcs5/file1,v 22910 22911 mkdir rcs5 22912 cd rcs5 22913 dotest rcs5-1 "$testcvs -Q co rcs5" 22914 dotest rcs5-2 "cat rcs5/file1" \ 22915 "line1 22916 /\\* 22917 \\* History: "'\$'"Log: file1,v "'\$'" 22918 \\* History: Revision 1\.1 2007/03/20 04:03:02 jeremiah 22919 \\* History: he always had very fine wine 22920 \\* History: 22921 \\*/ 22922 line5" 22923 22924 cd .. 22925 rm -r rcs5 22926 modify_repo rm -rf $CVSROOT_DIRNAME/rcs5 22927 ;; 22928 22929 22930 22931 lockfiles) 22932 # Tests of CVS lock files. 22933 # TODO-maybe: Add a test where we arrange for a loginfo 22934 # script (or some such) to ensure that locks are in place 22935 # so then we can see how they are behaving. 22936 22937 if $proxy; then 22938 # don't even try 22939 continue 22940 fi 22941 22942 mkdir 1; cd 1 22943 mkdir sdir 22944 mkdir sdir/ssdir 22945 echo file >sdir/ssdir/file1 22946 dotest lockfiles-1 \ 22947 "${testcvs} -Q import -m import-it first-dir bar baz" "" 22948 cd .. 22949 22950 mkdir 2; cd 2 22951 dotest lockfiles-2 "${testcvs} -q co first-dir" \ 22952 "U first-dir/sdir/ssdir/file1" 22953 dotest lockfiles-3 "${testcvs} -Q co CVSROOT" "" 22954 cd CVSROOT 22955 echo "LockDir=${TESTDIR}/locks" >>config 22956 dotest lockfiles-4 "${testcvs} -q ci -m config-it" \ 22957 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 22958 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 22959 $SPROG commit: Rebuilding administrative file database" 22960 cd ../first-dir/sdir/ssdir 22961 # The error message appears twice because Lock_Cleanup only 22962 # stops recursing after the first attempt. 22963 dotest_fail lockfiles-5 "${testcvs} -q update" \ 22964 "${SPROG} \[update aborted\]: cannot stat ${TESTDIR}/locks: No such file or directory" 22965 mkdir ${TESTDIR}/locks 22966 # Grumble, mumble. Cygwin. 22967 if test -n "$remotehost"; then 22968 $CVS_RSH $remotehost "chmod u=rwx,g=r,o= ${TESTDIR}/locks" 22969 else 22970 chmod u=rwx,g=r,o= ${TESTDIR}/locks 22971 fi 22972 save_umask=`umask` 22973 umask 0077 22974 CVSUMASK=0077; export CVSUMASK 22975 dotest lockfiles-6 "${testcvs} -q update" "" 22976 # TODO: should also be testing that CVS continues to honor the 22977 # umask and CVSUMASK normally. In the case of the umask, CVS 22978 # doesn't seem to use it for much (although it perhaps should). 22979 dotest lockfiles-7 "ls ${TESTDIR}/locks/first-dir/sdir/ssdir" "" 22980 22981 # The policy is that when CVS creates new lock directories, they 22982 # inherit the permissions from the parent directory. CVSUMASK 22983 # isn't right, because typically the reason for LockDir is to 22984 # use a different set of permissions. 22985 # 22986 # Bah! Cygwin! 22987 if test -n "$remotehost"; then 22988 dotest lockfiles-7a "$CVS_RSH $remotehost 'ls -ld ${TESTDIR}/locks/first-dir'" \ 22989 "drwxr-----.*first-dir" 22990 dotest lockfiles-7b "$CVS_RSH $remotehost 'ls -ld ${TESTDIR}/locks/first-dir/sdir/ssdir'" \ 22991 "drwxr-----.*first-dir/sdir/ssdir" 22992 else 22993 dotest lockfiles-7a "ls -ld ${TESTDIR}/locks/first-dir" \ 22994 "drwxr-----.*first-dir" 22995 dotest lockfiles-7b "ls -ld ${TESTDIR}/locks/first-dir/sdir/ssdir" \ 22996 "drwxr-----.*first-dir/sdir/ssdir" 22997 fi 22998 22999 cd ../../.. 23000 dotest lockfiles-8 "${testcvs} -q update" "" 23001 dotest lockfiles-9 "${testcvs} -q co -l ." "" 23002 23003 ### 23004 ### There are race conditions in the following tests, but hopefully 23005 ### the 5 seconds the first process waits to remove the lockdir and 23006 ### the 30 seconds CVS waits betweens checks will be significant 23007 ### enough to render the case moot. 23008 ### 23009 # Considers the following cases: 23010 # 23011 # Lock Present 23012 # Operation Allowed (case #) 23013 # 23014 # Read Promotable Write 23015 # _______ __________ ______ 23016 # Read |Yes (1) Yes (2) No (3) 23017 # Promotable Read |Yes (4) No (5) No (6) 23018 # Write |No (7) No (8) No (9) 23019 # 23020 # Tests do not appear in same ordering as table: 23021 # 1. Read when read locks are present... 23022 # 2. Read when promotable locks are present... 23023 # 3. Don't read when write locks present... 23024 # 4. Read but don't write when read locks are present... (fail 23025 # commit up-to-date check with promotable lock present). 23026 # 5. Don't allow promotable read when promotable locks are present... 23027 # (fail to perform commit up-to-date check with promotable lock 23028 # present). 23029 # 6. Don't allow promotable read when write locks are present... 23030 # (fail to perform commit up-to-date check with promotable lock 23031 # present). 23032 # 7. Don't write when read locks are present... 23033 # 8. Don't write when promotable locks are present... 23034 # 9. Don't write when write locks are present... 23035 23036 # 3. Don't read when write locks present... 23037 mkdir "$TESTDIR/locks/first-dir/#cvs.lock" 23038 (sleep 5; rmdir "$TESTDIR/locks/first-dir/#cvs.lock")& 23039 dotest lockfiles-10 "$testcvs -q co -l first-dir" \ 23040 "$SPROG checkout: \[[0-9:]*\] waiting for $username's lock in $CVSROOT_DIRNAME/first-dir 23041 $SPROG checkout: \[[0-9:]*\] obtained lock in $CVSROOT_DIRNAME/first-dir" 23042 23043 # 1. Read when read locks are present... 23044 touch "$TESTDIR/locks/first-dir/#cvs.rfl.test.lock" 23045 dotest lockfiles-11 "$testcvs -q co -l first-dir" 23046 rm "$TESTDIR/locks/first-dir/#cvs.rfl.test.lock" 23047 23048 # 2. Read when promotable locks are present... 23049 cd .. 23050 mkdir 3; cd 3 23051 touch "$TESTDIR/locks/first-dir/sdir/ssdir/#cvs.pfl.test.lock" 23052 dotest lockfiles-12 "$testcvs -q co first-dir" \ 23053 "U first-dir/sdir/ssdir/file1" 23054 rm "$TESTDIR/locks/first-dir/sdir/ssdir/#cvs.pfl.test.lock" 23055 23056 # 7. Don't write when read locks are present... 23057 echo I always have trouble coming up with witty text for the test files >>first-dir/sdir/ssdir/file1 23058 touch "$TESTDIR/locks/first-dir/sdir/ssdir/#cvs.rfl.test.lock" 23059 (sleep 5; rm "$TESTDIR/locks/first-dir/sdir/ssdir/#cvs.rfl.test.lock")& 23060 dotest lockfiles-13 "$testcvs -q ci -mconflict first-dir" \ 23061 "$SPROG commit: \[[0-9:]*\] waiting for $username's lock in $CVSROOT_DIRNAME/first-dir/sdir/ssdir 23062 $SPROG commit: \[[0-9:]*\] obtained lock in $CVSROOT_DIRNAME/first-dir/sdir/ssdir 23063 $CVSROOT_DIRNAME/first-dir/sdir/ssdir/file1,v <-- first-dir/sdir/ssdir/file1 23064 new revision: 1\.2; previous revision: 1\.1" 23065 23066 # 4. Read but don't write when read locks are present... (fail 23067 # commit up-to-date check with promotable lock present). 23068 cd ../2 23069 echo something that would render readers all full of smiles >>first-dir/sdir/ssdir/file1 23070 touch "$TESTDIR/locks/first-dir/sdir/ssdir/#cvs.rfl.test.lock" 23071 dotest_fail lockfiles-14 "$testcvs -q ci -mnot-up-to-date first-dir" \ 23072 "$SPROG commit: Up-to-date check failed for \`first-dir/sdir/ssdir/file1' 23073 $SPROG \[commit aborted\]: correct above errors first!" 23074 rm "$TESTDIR/locks/first-dir/sdir/ssdir/#cvs.rfl.test.lock" 23075 23076 # 5. Don't allow promotable read when promotable locks are present... 23077 # (fail to perform commit up-to-date check with promotable lock 23078 # present). 23079 touch "$TESTDIR/locks/first-dir/sdir/ssdir/#cvs.pfl.test.lock" 23080 (sleep 5; rm "$TESTDIR/locks/first-dir/sdir/ssdir/#cvs.pfl.test.lock")& 23081 dotest_fail lockfiles-15 "$testcvs -q ci -mnot-up-to-date first-dir" \ 23082 "$SPROG commit: \[[0-9:]*\] waiting for $username's lock in $CVSROOT_DIRNAME/first-dir/sdir/ssdir 23083 $SPROG commit: \[[0-9:]*\] obtained lock in $CVSROOT_DIRNAME/first-dir/sdir/ssdir 23084 $SPROG commit: Up-to-date check failed for \`first-dir/sdir/ssdir/file1' 23085 $SPROG \[commit aborted\]: correct above errors first!" 23086 23087 # 6. Don't allow promotable read when write locks are present... 23088 # (fail to perform commit up-to-date check with promotable lock 23089 # present). 23090 mkdir "$TESTDIR/locks/first-dir/sdir/ssdir/#cvs.lock" 23091 (sleep 5; rmdir "$TESTDIR/locks/first-dir/sdir/ssdir/#cvs.lock")& 23092 dotest_fail lockfiles-16 "$testcvs -q ci -mnot-up-to-date first-dir" \ 23093 "$SPROG commit: \[[0-9:]*\] waiting for $username's lock in $CVSROOT_DIRNAME/first-dir/sdir/ssdir 23094 $SPROG commit: \[[0-9:]*\] obtained lock in $CVSROOT_DIRNAME/first-dir/sdir/ssdir 23095 $SPROG commit: Up-to-date check failed for \`first-dir/sdir/ssdir/file1' 23096 $SPROG \[commit aborted\]: correct above errors first!" 23097 23098 # 8. Don't write when promotable locks are present... 23099 dotest lockfiles-17 "$testcvs -Q up -C first-dir/sdir/ssdir" 23100 echo the kinds of smiles that light faces for miles >>first-dir/sdir/ssdir/file1 23101 touch "$TESTDIR/locks/first-dir/sdir/ssdir/#cvs.pfl.test.lock" 23102 (sleep 5; rm "$TESTDIR/locks/first-dir/sdir/ssdir/#cvs.pfl.test.lock")& 23103 dotest lockfiles-18 "$testcvs -q ci -mnot-up-to-date first-dir" \ 23104 "$SPROG commit: \[[0-9:]*\] waiting for $username's lock in $CVSROOT_DIRNAME/first-dir/sdir/ssdir 23105 $SPROG commit: \[[0-9:]*\] obtained lock in $CVSROOT_DIRNAME/first-dir/sdir/ssdir 23106 $CVSROOT_DIRNAME/first-dir/sdir/ssdir/file1,v <-- first-dir/sdir/ssdir/file1 23107 new revision: 1\.3; previous revision: 1\.2" 23108 23109 # 9. Don't write when write locks are present... 23110 echo yet this poem would probably only give longfellow bile >>first-dir/sdir/ssdir/file1 23111 mkdir "$TESTDIR/locks/first-dir/sdir/ssdir/#cvs.lock" 23112 (sleep 5; rmdir "$TESTDIR/locks/first-dir/sdir/ssdir/#cvs.lock")& 23113 dotest lockfiles-19 "$testcvs -q ci -mnot-up-to-date first-dir" \ 23114 "$SPROG commit: \[[0-9:]*\] waiting for $username's lock in $CVSROOT_DIRNAME/first-dir/sdir/ssdir 23115 $SPROG commit: \[[0-9:]*\] obtained lock in $CVSROOT_DIRNAME/first-dir/sdir/ssdir 23116 $CVSROOT_DIRNAME/first-dir/sdir/ssdir/file1,v <-- first-dir/sdir/ssdir/file1 23117 new revision: 1\.4; previous revision: 1\.3" 23118 23119 # 10. Don't write when history locks are present... 23120 echo have you ever heard a poem quite so vile\? >>first-dir/sdir/ssdir/file1 23121 mkdir "$TESTDIR/locks/CVSROOT/#cvs.history.lock" 23122 (sleep 5; rmdir "$TESTDIR/locks/CVSROOT/#cvs.history.lock")& 23123 dotest lockfiles-20 "$testcvs -q ci -mnot-up-to-date first-dir" \ 23124 "$CVSROOT_DIRNAME/first-dir/sdir/ssdir/file1,v <-- first-dir/sdir/ssdir/file1 23125 new revision: 1\.5; previous revision: 1\.4 23126 $SPROG commit: \[[0-9:]*\] waiting for $username's lock in $CVSROOT_DIRNAME/CVSROOT 23127 $SPROG commit: \[[0-9:]*\] obtained lock in $CVSROOT_DIRNAME/CVSROOT" 23128 23129 dotest lockfiles-21 "$testcvs -Q tag newtag first-dir" 23130 23131 rm $CVSROOT_DIRNAME/CVSROOT/val-tags 23132 mkdir "$TESTDIR/locks/CVSROOT/#cvs.val-tags.lock" 23133 (sleep 5; rmdir "$TESTDIR/locks/CVSROOT/#cvs.val-tags.lock")& 23134 dotest lockfiles-22 "$testcvs -q up -r newtag first-dir" \ 23135 "$SPROG update: \[[0-9:]*\] waiting for $username's lock in $CVSROOT_DIRNAME/CVSROOT 23136 $SPROG update: \[[0-9:]*\] obtained lock in $CVSROOT_DIRNAME/CVSROOT" 23137 23138 cd CVSROOT 23139 dotest lockfiles-cleanup-1 "$testcvs -q up -pr1.1 config >config" "" 23140 dotest lockfiles-cleanup-2 "$testcvs -q ci -m config-it" \ 23141 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 23142 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 23143 $SPROG commit: Rebuilding administrative file database" 23144 23145 dokeep 23146 cd ../.. 23147 # Restore umask. 23148 umask $save_umask 23149 unset CVSUMASK 23150 rm -r $TESTDIR/locks 23151 rm -r 1 2 3 23152 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 23153 ;; 23154 23155 23156 23157 backuprecover) 23158 # Tests to make sure we get the expected behavior 23159 # when we recover a repository from an old backup 23160 # 23161 # Details: 23162 # Backup will be older than some developer's workspaces 23163 # This means the first attempt at an update will fail 23164 # The workaround for this is to replace the CVS 23165 # directories with those from a "new" checkout from 23166 # the recovered repository. Due to this, multiple 23167 # merges should cause conflicts (the same data 23168 # will be merged more than once). 23169 # A workspace updated before the date of the recovered 23170 # copy will not need any extra attention 23171 # 23172 # Note that backuprecover-15 is probably a failure case 23173 # If nobody else had a more recent update, the data would be lost 23174 # permanently 23175 # Granted, the developer should have been notified not to do this 23176 # by now, but still... 23177 # 23178 mkdir backuprecover; cd backuprecover 23179 mkdir 1; cd 1 23180 dotest backuprecover-1 "$testcvs -q co -l ." 23181 mkdir first-dir 23182 dotest backuprecover-2 "${testcvs} add first-dir" \ 23183 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 23184 cd first-dir 23185 mkdir dir 23186 dotest backuprecover-3 "${testcvs} add dir" \ 23187 "Directory ${CVSROOT_DIRNAME}/first-dir/dir added to the repository" 23188 touch file1 dir/file2 23189 dotest backuprecover-4 "${testcvs} -q add file1 dir/file2" \ 23190 "${SPROG} add: use \`${SPROG} commit' to add these files permanently" 23191 dotest backuprecover-5 "${testcvs} -q ci -mtest" \ 23192 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 23193 initial revision: 1\.1 23194 $CVSROOT_DIRNAME/first-dir/dir/file2,v <-- dir/file2 23195 initial revision: 1\.1" 23196 echo "Line one" >>file1 23197 echo " is the place" >>file1 23198 echo " we like to begin" >>file1 23199 echo "Anything else" >>file1 23200 echo " looks like" >>file1 23201 echo " a sin" >>file1 23202 echo "File 2" >>dir/file2 23203 echo " is the place" >>dir/file2 23204 echo " the rest of it goes" >>dir/file2 23205 echo "Why I don't use" >>dir/file2 23206 echo " something like 'foo'" >>dir/file2 23207 echo " God only knows" >>dir/file2 23208 dotest backuprecover-6 "${testcvs} -q ci -mtest" \ 23209 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 23210 new revision: 1\.2; previous revision: 1\.1 23211 $CVSROOT_DIRNAME/first-dir/dir/file2,v <-- dir/file2 23212 new revision: 1\.2; previous revision: 1\.1" 23213 23214 # Simulate the lazy developer 23215 # (he did some work but didn't check it in...) 23216 cd ../.. 23217 mkdir 2; cd 2 23218 dotest backuprecover-7 "${testcvs} -Q co first-dir" '' 23219 cd first-dir 23220 sed -e "s/looks like/just looks like/" file1 >tmp; mv tmp file1 23221 sed -e "s/don't use/don't just use/" dir/file2 >tmp; mv tmp dir/file2 23222 23223 # developer 1 is on a roll 23224 cd ../../1/first-dir 23225 echo "I need some more words" >>file1 23226 echo " to fill up this space" >>file1 23227 echo " anything else would be a disgrace" >>file1 23228 echo "My rhymes cross many boundries" >>dir/file2 23229 echo " this time it's files" >>dir/file2 23230 echo " a word that fits here would be something like dials" >>dir/file2 23231 dotest backuprecover-8 "${testcvs} -q ci -mtest" \ 23232 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 23233 new revision: 1\.3; previous revision: 1\.2 23234 $CVSROOT_DIRNAME/first-dir/dir/file2,v <-- dir/file2 23235 new revision: 1\.3; previous revision: 1\.2" 23236 23237 # Save a backup copy 23238 cp -R $CVSROOT_DIRNAME/first-dir $TESTDIR/backup 23239 23240 # Simulate developer 3 23241 cd ../.. 23242 mkdir 3; cd 3 23243 dotest backuprecover-9a "${testcvs} -Q co first-dir" '' 23244 cd first-dir 23245 echo >>file1 23246 echo >>dir/file2 23247 echo "Developer 1 makes very lame rhymes" >>file1 23248 echo " I think he should quit and become a mime" >>file1 23249 echo "What the %*^# kind of rhyme crosses a boundry?" >>dir/file2 23250 echo " I think you should quit and get a job in the foundry" >>dir/file2 23251 dotest backuprecover-9b "${testcvs} -q ci -mtest" \ 23252 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 23253 new revision: 1\.4; previous revision: 1\.3 23254 $CVSROOT_DIRNAME/first-dir/dir/file2,v <-- dir/file2 23255 new revision: 1\.4; previous revision: 1\.3" 23256 23257 # Developer 4 so we can simulate a conflict later... 23258 cd ../.. 23259 mkdir 4; cd 4 23260 dotest backuprecover-10 "${testcvs} -Q co first-dir" '' 23261 cd first-dir 23262 sed -e "s/quit and/be fired so he can/" dir/file2 >tmp; mv tmp dir/file2 23263 23264 # And back to developer 1 23265 cd ../../1/first-dir 23266 dotest backuprecover-11 "${testcvs} -Q update" '' 23267 echo >>file1 23268 echo >>dir/file2 23269 echo "Oh yeah, well rhyme this" >>file1 23270 echo " developer three" >>file1 23271 echo " you want opposition" >>file1 23272 echo " you found some in me!" >>file1 23273 echo "I'll give you mimes" >>dir/file2 23274 echo " and foundries galore!" >>dir/file2 23275 echo " your head will spin" >>dir/file2 23276 echo " once you find what's in store!" >>dir/file2 23277 dotest backuprecover-12 "${testcvs} -q ci -mtest" \ 23278 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 23279 new revision: 1\.5; previous revision: 1\.4 23280 $CVSROOT_DIRNAME/first-dir/dir/file2,v <-- dir/file2 23281 new revision: 1\.5; previous revision: 1\.4" 23282 23283 # developer 3'll do a bit of work that never gets checked in 23284 cd ../../3/first-dir 23285 dotest backuprecover-13 "${testcvs} -Q update" '' 23286 sed -e "s/very/some extremely/" file1 >tmp; mv tmp file1 23287 dotest backuprecover-14 "${testcvs} -q ci -mtest" \ 23288 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 23289 new revision: 1\.6; previous revision: 1\.5" 23290 echo >>file1 23291 echo "Tee hee hee hee" >>file1 23292 echo >>dir/file2 23293 echo "Find what's in store?" >>dir/file2 23294 echo " Oh, I'm so sure!" >>dir/file2 23295 echo " You've got an ill, and I have the cure!" >>dir/file2 23296 23297 # Slag the original and restore it a few revisions back 23298 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 23299 modify_repo mv $TESTDIR/backup $CVSROOT_DIRNAME/first-dir 23300 23301 # Have developer 1 try an update and lose some data 23302 # 23303 # Feel free to imagine the horrific scream of despair 23304 cd ../../1/first-dir 23305 dotest backuprecover-15 "${testcvs} update" \ 23306 "${SPROG} update: Updating . 23307 U file1 23308 ${SPROG} update: Updating dir 23309 U dir/file2" 23310 23311 # Developer 3 tries the same thing (he has an office) 23312 # but fails without losing data since all of his files have 23313 # uncommitted changes 23314 cd ../../3/first-dir 23315 dotest_fail backuprecover-16 "${testcvs} update" \ 23316 "${SPROG} update: Updating \. 23317 ${SPROG} \[update aborted\]: could not find desired version 1\.6 in ${CVSROOT_DIRNAME}/first-dir/file1,v" 23318 23319 # create our workspace fixin' script 23320 cd ../.. 23321 echo \ 23322 "#!$TESTSHELL 23323 23324 # This script will copy the CVS database dirs from the checked out 23325 # version of a newly recovered repository and replace the CVS 23326 # database dirs in a workspace with later revisions than those in the 23327 # recovered repository 23328 cd repos-first-dir 23329 DATADIRS=\`find . -name CVS -print\` 23330 cd ../first-dir 23331 find . -name CVS -print | xargs rm -rf 23332 for file in \${DATADIRS}; do 23333 cp -R ../repos-first-dir/\${file} \${file} 23334 done" >fixit 23335 23336 # We only need to fix the workspaces of developers 3 and 4 23337 # (1 lost all her data and 2 has an update date from 23338 # before the date the backup was made) 23339 cd 3 23340 dotest backuprecover-17 \ 23341 "${testcvs} -Q co -d repos-first-dir first-dir" '' 23342 cd ../4 23343 dotest backuprecover-18 \ 23344 "${testcvs} -Q co -d repos-first-dir first-dir" '' 23345 sh ../fixit 23346 cd ../3; sh ../fixit 23347 23348 # (re)commit developer 3's stuff 23349 cd first-dir 23350 dotest backuprecover-19 "${testcvs} -q ci -mrecover/merge" \ 23351 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 23352 new revision: 1\.4; previous revision: 1\.3 23353 $CVSROOT_DIRNAME/first-dir/dir/file2,v <-- dir/file2 23354 new revision: 1\.4; previous revision: 1\.3" 23355 23356 # and we should get a conflict on developer 4's stuff 23357 cd ../../4/first-dir 23358 dotest backuprecover-20 "${testcvs} update" \ 23359 "${SPROG} update: Updating \. 23360 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 23361 retrieving revision 1\.3 23362 retrieving revision 1\.4 23363 Merging differences between 1\.3 and 1\.4 into file1 23364 rcsmerge: warning: conflicts during merge 23365 ${SPROG} update: conflicts found in file1 23366 C file1 23367 ${SPROG} update: Updating dir 23368 RCS file: ${CVSROOT_DIRNAME}/first-dir/dir/file2,v 23369 retrieving revision 1\.3 23370 retrieving revision 1\.4 23371 Merging differences between 1\.3 and 1\.4 into file2 23372 rcsmerge: warning: conflicts during merge 23373 ${SPROG} update: conflicts found in dir/file2 23374 C dir/file2" 23375 sed -e \ 23376 "/^<<<<<<</,/^=======/d 23377 /^>>>>>>>/d" file1 >tmp; mv tmp file1 23378 sed -e \ 23379 "/^<<<<<<</,/^=======/d 23380 /^>>>>>>>/d 23381 s/quit and/be fired so he can/" dir/file2 >tmp; mv tmp dir/file2 23382 dotest backuprecover-21 "${testcvs} -q ci -mrecover/merge" \ 23383 "$CVSROOT_DIRNAME/first-dir/dir/file2,v <-- dir/file2 23384 new revision: 1\.5; previous revision: 1\.4" 23385 23386 # go back and commit developer 2's stuff to prove it can still be done 23387 cd ../../2/first-dir 23388 dotest backuprecover-22 "${testcvs} -Q update" \ 23389 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 23390 retrieving revision 1\.2 23391 retrieving revision 1\.4 23392 Merging differences between 1\.2 and 1\.4 into file1 23393 RCS file: ${CVSROOT_DIRNAME}/first-dir/dir/file2,v 23394 retrieving revision 1\.2 23395 retrieving revision 1\.5 23396 Merging differences between 1\.2 and 1\.5 into file2" 23397 dotest backuprecover-23 "${testcvs} -q ci -mtest" \ 23398 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 23399 new revision: 1\.5; previous revision: 1\.4 23400 $CVSROOT_DIRNAME/first-dir/dir/file2,v <-- dir/file2 23401 new revision: 1\.6; previous revision: 1\.5" 23402 23403 # and restore the data to developer 1 23404 cd ../../1/first-dir 23405 dotest backuprecover-24 "${testcvs} -Q update" '' 23406 23407 dokeep 23408 cd ../../.. 23409 rm -r backuprecover 23410 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 23411 ;; 23412 23413 23414 23415 sshstdio) 23416 # CVS_RSH=ssh can have a problem with a non-blocking stdio 23417 # in some cases. So, this test is all about testing :ext: 23418 # with CVS_RSH=ssh. The problem is that not all machines 23419 # will necessarily have ssh available, so be prepared to 23420 # skip this test. 23421 23422 if $proxy; then 23423 notproxy sshstdio 23424 continue 23425 fi 23426 23427 if $remote; then :; else 23428 remoteonly sshstdio 23429 continue 23430 fi 23431 23432 require_ssh 23433 if test $? -eq 77; then 23434 skip sshstdio "$skipreason" 23435 continue 23436 fi 23437 23438 SSHSTDIO_ROOT=:ext:$host$CVSROOT_DIRNAME 23439 23440 mkdir sshstdio; cd sshstdio 23441 dotest sshstdio-1 "$testcvs -d $SSHSTDIO_ROOT -q co -l ." 23442 mkdir first-dir 23443 dotest sshstdio-2 "$testcvs add first-dir" \ 23444 "Directory $CVSROOT_DIRNAME/first-dir added to the repository" 23445 cd first-dir 23446 a='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 23447 c='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 23448 # Generate 1024 lines of $a 23449 cnt=0 23450 echo $a > aaa 23451 while [ $cnt -lt 5 ] ; do 23452 cnt=`expr $cnt + 1` ; 23453 mv aaa aaa.old 23454 cat aaa.old aaa.old aaa.old aaa.old > aaa 23455 done 23456 dotest sshstdio-3 "$testcvs -q add aaa" \ 23457 "$SPROG add: use .$SPROG commit. to add this file permanently" 23458 dotest sshstdio-4 "$testcvs -q ci -mcreate aaa" \ 23459 "$CVSROOT_DIRNAME/first-dir/aaa,v <-- aaa 23460 initial revision: 1\.1" 23461 # replace lines 1, 512, 513, 1024 with $c 23462 sed 510q < aaa > aaa.old 23463 (echo $c; cat aaa.old; echo $c; \ 23464 echo $c; cat aaa.old; echo $c) > aaa 23465 dotest sshstdio-5 "$testcvs -q ci -mmodify-it aaa" \ 23466 "$CVSROOT_DIRNAME/first-dir/aaa,v <-- aaa 23467 new revision: 1\.2; previous revision: 1\.1" 23468 cat > wrapper.sh <<EOF 23469 #!$TESTSHELL 23470 exec "\$@" 2>&1 < /dev/null | cat 23471 EOF 23472 chmod +x wrapper.sh 23473 ./wrapper.sh \ 23474 $testcvs -z5 -Q diff --side-by-side -W 500 -r 1.1 -r 1.2 \ 23475 aaa > wrapper.dif 23476 23477 $testcvs -z5 -Q diff --side-by-side -W 500 -r 1.1 -r 1.2 \ 23478 aaa > good.dif 23479 23480 dotest sshstdio-6 "cmp wrapper.dif good.dif" 23481 23482 dokeep 23483 cd ../.. 23484 CVS_RSH=$save_CVS_RSH; export CVS_RSH 23485 rm -r sshstdio 23486 rm -rf $CVSROOT_DIRNAME/first-dir 23487 ;; 23488 23489 23490 23491 parseroot2) 23492 # Test some :ext: roots for consistancy. 23493 if $remote; then :; else 23494 remoteonly parseroot2 23495 continue 23496 fi 23497 23498 require_rsh "$CVS_RSH" 23499 if test $? -eq 77; then 23500 skip parseroot2 "$skipreason" 23501 continue 23502 fi 23503 23504 # Test checking out and subsequently updating with some different 23505 # CVSROOTs. 23506 23507 # A standard case, hostname:dirname. 23508 mkdir parseroot2; cd parseroot2 23509 save_CVSROOT=$CVSROOT 23510 CVSROOT=$host:$CVSROOT_DIRNAME 23511 dotest parseroot2-1 "$testcvs -Q co CVSROOT" 23512 cd CVSROOT 23513 dotest parseroot2-2 "$testcvs -Q up" 23514 cd .. 23515 23516 # A degenerate remote case, just the server name and the directory 23517 # name, with no :'s to help parsing. It can be mistaken for a 23518 # relative directory name. 23519 rm -r CVSROOT 23520 CVSROOT=$host$CVSROOT_DIRNAME 23521 dotest parseroot2-3 "$testcvs -Q co CVSROOT" 23522 cd CVSROOT 23523 dotest parseroot2-4 "$testcvs -Q up" 23524 23525 dokeep 23526 cd ../.. 23527 CVSROOT=$save_CVSROOT 23528 rm -r parseroot2 23529 ;; 23530 23531 23532 23533 parseroot3) 23534 # Test some :ext: roots for consistancy. 23535 if $remote; then :; else 23536 remoteonly parseroot3 23537 continue 23538 fi 23539 23540 require_rsh "$CVS_RSH" 23541 if test $? -eq 77; then 23542 skip parseroot3 "$skipreason" 23543 continue 23544 fi 23545 23546 # Test checking out and subsequently updating with some different 23547 # CVSROOTs. 23548 23549 # A standard case, hostname:dirname. 23550 mkdir parseroot3; cd parseroot3 23551 save_CVSROOT=$CVSROOT 23552 save_CVS_RSH=$CVS_RSH 23553 save_CVS_SERVER=$CVS_SERVER 23554 unset CVS_RSH 23555 unset CVS_SERVER 23556 CVSROOT=":ext;CVS_RSH=$save_CVS_RSH;CVS_SERVER=$save_CVS_SERVER:$host:$CVSROOT_DIRNAME" 23557 dotest parseroot3-1 "$testcvs -Q co CVSROOT" 23558 cd CVSROOT 23559 dotest parseroot3-2 "$testcvs -Q up" 23560 cd .. 23561 23562 # Initial checkout. 23563 rm -r CVSROOT 23564 CVSROOT=":ext;cvs_RSH=$save_CVS_RSH;CVS_Server=$save_CVS_SERVER:$host$CVSROOT_DIRNAME" 23565 dotest parseroot3-3 "$testcvs -Q co CVSROOT" 23566 cd CVSROOT 23567 dotest parseroot3-4 "$testcvs -Q up" 23568 cd .. 23569 23570 # Checkout bogus values for Redirect 23571 rm -r CVSROOT 23572 CVSROOT=":ext;Redirect=bogus;CVS_RSH=$save_CVS_RSH;CVS_SERVER=$save_CVS_SERVER:$host$CVSROOT_DIRNAME" 23573 dotest parseroot3-5 "$testcvs -Q co CVSROOT" \ 23574 "$SPROG checkout: CVSROOT: unrecognized value \`bogus' for \`Redirect'" 23575 cd CVSROOT 23576 # FIXCVS: parse_cvsroot is called more often that is 23577 # desirable. 23578 dotest parseroot3-6 "$testcvs -Q up" \ 23579 "$SPROG update: CVSROOT: unrecognized value \`bogus' for \`Redirect'" 23580 cd .. 23581 23582 # Checkout good values for Redirect 23583 rm -r CVSROOT 23584 CVSROOT=":EXT;Redirect=no;CVS_RSH=$save_CVS_RSH;CVS_SERVER=$save_CVS_SERVER:$host$CVSROOT_DIRNAME" 23585 dotest parseroot3-7 "$testcvs -Q co CVSROOT" 23586 cd CVSROOT 23587 dotest parseroot3-8 "$testcvs -Q up" 23588 cd .. 23589 23590 dotest parseroot3-9 "$testcvs -Q co -ldtop ." 23591 dotest parseroot3-10 "test -d top" 23592 dotest parseroot3-11 "test -d top/CVS" 23593 dotest parseroot3-10 "cat top/CVS/Root" "$CVSROOT" 23594 23595 dokeep 23596 cd .. 23597 CVSROOT=$save_CVSROOT 23598 CVS_RSH=$save_CVS_RSH 23599 CVS_SERVER=$save_CVS_SERVER 23600 export CVS_RSH CVS_SERVER 23601 rm -r parseroot3 23602 ;; 23603 23604 23605 23606 history) 23607 # CVSROOT/history tests: 23608 # history: various "cvs history" invocations 23609 # basic2: Generating the CVSROOT/history file via CVS commands. 23610 23611 # Put in some data for the history file (discarding what was 23612 # there before). Note that this file format is fixed; the 23613 # user may wish to analyze data from a previous version of 23614 # CVS. If we phase out this format, it should be done 23615 # slowly and carefully. 23616 23617 if $proxy; then 23618 # don't even try 23619 continue 23620 fi 23621 23622 cat <<EOF >$CVSROOT_DIRNAME/CVSROOT/history 23623 O3395c677|anonymous|<remote>/*0|ccvs||ccvs 23624 O3396c677|anonymous|<remote>/src|ccvs||src 23625 O3397c677|kingdon|<remote>/*0|ccvs||ccvs 23626 M339cafae|nk|<remote>|ccvs/src|1.229|sanity.sh 23627 M339cafff|anonymous|<remote>|ccvs/src|1.23|Makefile 23628 M339dc339|kingdon|~/work/*0|ccvs/src|1.231|sanity.sh 23629 W33a6eada|anonymous|<remote>*4|ccvs/emx||Makefile.in 23630 C3b235f50|kingdon|<remote>|ccvs/emx|1.3|README 23631 M3b23af50|kingdon|~/work/*0|ccvs/doc|1.281|cvs.texinfo 23632 EOF 23633 23634 dotest history-1 "${testcvs} history -e -a" \ 23635 "O 1997-06-04 19:48 ${PLUS}0000 anonymous ccvs =ccvs= <remote>/\* 23636 O 1997-06-05 14:00 ${PLUS}0000 anonymous ccvs =src= <remote>/\* 23637 M 1997-06-10 01:38 ${PLUS}0000 anonymous 1\.23 Makefile ccvs/src == <remote> 23638 W 1997-06-17 19:51 ${PLUS}0000 anonymous Makefile\.in ccvs/emx == <remote>/emx 23639 O 1997-06-06 08:12 ${PLUS}0000 kingdon ccvs =ccvs= <remote>/\* 23640 M 1997-06-10 21:12 ${PLUS}0000 kingdon 1\.231 sanity\.sh ccvs/src == ~/work/ccvs/src 23641 C 2001-06-10 11:51 ${PLUS}0000 kingdon 1\.3 README ccvs/emx == <remote> 23642 M 2001-06-10 17:33 ${PLUS}0000 kingdon 1\.281 cvs\.texinfo ccvs/doc == ~/work/ccvs/doc 23643 M 1997-06-10 01:36 ${PLUS}0000 nk 1\.229 sanity\.sh ccvs/src == <remote>" 23644 23645 dotest history-2 "${testcvs} history -e -a -D '10 Jun 1997 13:00 UT'" \ 23646 "W 1997-06-17 19:51 ${PLUS}0000 anonymous Makefile\.in ccvs/emx == <remote>/emx 23647 M 1997-06-10 21:12 ${PLUS}0000 kingdon 1\.231 sanity\.sh ccvs/src == ~/work/ccvs/src 23648 C 2001-06-10 11:51 ${PLUS}0000 kingdon 1\.3 README ccvs/emx == <remote> 23649 M 2001-06-10 17:33 ${PLUS}0000 kingdon 1\.281 cvs\.texinfo ccvs/doc == ~/work/ccvs/doc" 23650 23651 dotest history-3 "${testcvs} history -e -a -D '10 Jun 2001 13:00 UT'" \ 23652 "M 2001-06-10 17:33 ${PLUS}0000 kingdon 1\.281 cvs\.texinfo ccvs/doc == ~/work/ccvs/doc" 23653 23654 dotest history-4 "${testcvs} history -ac sanity.sh" \ 23655 "M 1997-06-10 21:12 ${PLUS}0000 kingdon 1\.231 sanity\.sh ccvs/src == ~/work/ccvs/src 23656 M 1997-06-10 01:36 ${PLUS}0000 nk 1\.229 sanity\.sh ccvs/src == <remote>" 23657 23658 dotest history-5 "${testcvs} history -a -xCGUWAMR README sanity.sh" \ 23659 "M 1997-06-10 21:12 ${PLUS}0000 kingdon 1\.231 sanity\.sh ccvs/src == ~/work/ccvs/src 23660 C 2001-06-10 11:51 ${PLUS}0000 kingdon 1\.3 README ccvs/emx == <remote> 23661 M 1997-06-10 01:36 ${PLUS}0000 nk 1\.229 sanity\.sh ccvs/src == <remote>" 23662 23663 dotest history-6 "${testcvs} history -xCGUWAMR -a -f README -f sanity.sh" \ 23664 "M 1997-06-10 21:12 ${PLUS}0000 kingdon 1\.231 sanity\.sh ccvs/src == ~/work/ccvs/src 23665 C 2001-06-10 11:51 ${PLUS}0000 kingdon 1\.3 README ccvs/emx == <remote> 23666 M 1997-06-10 01:36 ${PLUS}0000 nk 1\.229 sanity\.sh ccvs/src == <remote>" 23667 23668 dotest history-7 "${testcvs} history -xCGUWAMR -a -f sanity.sh README" \ 23669 "M 1997-06-10 21:12 ${PLUS}0000 kingdon 1\.231 sanity\.sh ccvs/src == ~/work/ccvs/src 23670 C 2001-06-10 11:51 ${PLUS}0000 kingdon 1\.3 README ccvs/emx == <remote> 23671 M 1997-06-10 01:36 ${PLUS}0000 nk 1\.229 sanity\.sh ccvs/src == <remote>" 23672 23673 dotest history-8 "${testcvs} history -ca -D '1970-01-01 00:00 UT'" \ 23674 "M 1997-06-10 01:36 ${PLUS}0000 nk 1\.229 sanity.sh ccvs/src == <remote> 23675 M 1997-06-10 01:38 ${PLUS}0000 anonymous 1\.23 Makefile ccvs/src == <remote> 23676 M 1997-06-10 21:12 ${PLUS}0000 kingdon 1\.231 sanity.sh ccvs/src == ~/work/ccvs/src 23677 M 2001-06-10 17:33 ${PLUS}0000 kingdon 1\.281 cvs.texinfo ccvs/doc == ~/work/ccvs/doc" 23678 23679 dotest history-9 "${testcvs} history -acl" \ 23680 "M 2001-06-10 17:33 ${PLUS}0000 kingdon 1\.281 cvs.texinfo ccvs/doc == ~/work/ccvs/doc 23681 M 1997-06-10 01:38 ${PLUS}0000 anonymous 1\.23 Makefile ccvs/src == <remote> 23682 M 1997-06-10 21:12 ${PLUS}0000 kingdon 1\.231 sanity.sh ccvs/src == ~/work/ccvs/src" 23683 23684 dotest history-10 "${testcvs} history -lca -D '1970-01-01 00:00 UT'" \ 23685 "M 2001-06-10 17:33 ${PLUS}0000 kingdon 1\.281 cvs.texinfo ccvs/doc == ~/work/ccvs/doc 23686 M 1997-06-10 01:38 ${PLUS}0000 anonymous 1\.23 Makefile ccvs/src == <remote> 23687 M 1997-06-10 21:12 ${PLUS}0000 kingdon 1\.231 sanity.sh ccvs/src == ~/work/ccvs/src" 23688 23689 dotest history-11 "${testcvs} history -aw" \ 23690 "O 1997-06-04 19:48 ${PLUS}0000 anonymous ccvs =ccvs= <remote>/\* 23691 O 1997-06-05 14:00 ${PLUS}0000 anonymous ccvs =src= <remote>/\* 23692 O 1997-06-06 08:12 ${PLUS}0000 kingdon ccvs =ccvs= <remote>/\*" 23693 23694 dotest history-12 "${testcvs} history -aw -D'1970-01-01 00:00 UT'" \ 23695 "O 1997-06-04 19:48 ${PLUS}0000 anonymous ccvs =ccvs= <remote>/\* 23696 O 1997-06-05 14:00 ${PLUS}0000 anonymous ccvs =src= <remote>/\* 23697 O 1997-06-06 08:12 ${PLUS}0000 kingdon ccvs =ccvs= <remote>/\*" 23698 ;; 23699 23700 23701 23702 big) 23703 23704 # Test ability to operate on big files. Intention is to 23705 # test various realloc'ing code in RCS_deltas, rcsgetkey, 23706 # etc. "big" is currently defined to be 1000 lines (64000 23707 # bytes), which in terms of files that users will use is not 23708 # large, merely average, but my reasoning is that this 23709 # should be big enough to make sure realloc'ing is going on 23710 # and that raising it a lot would start to stress resources 23711 # on machines which run the tests, without any significant 23712 # benefit. 23713 23714 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 23715 dotest big-1 "$testcvs -q co first-dir" 23716 cd first-dir 23717 for i in 0 1 2 3 4 5 6 7 8 9; do 23718 for j in 0 1 2 3 4 5 6 7 8 9; do 23719 for k in 0 1 2 3 4 5 6 7 8 9; do 23720 echo \ 23721 "This is line ($i,$j,$k) which goes into the file file1 for testing" >>file1 23722 done 23723 done 23724 done 23725 dotest big-2 "$testcvs add file1" \ 23726 "$SPROG add: scheduling file .file1. for addition 23727 $SPROG add: use .$SPROG commit. to add this file permanently" 23728 dotest big-3 "$testcvs -q ci -m add" \ 23729 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 23730 initial revision: 1\.1" 23731 cd .. 23732 mkdir 2 23733 cd 2 23734 dotest big-4 "$testcvs -q get first-dir" "U first-dir/file1" 23735 cd ../first-dir 23736 echo "add a line to the end" >>file1 23737 23738 dotest_fail big-4b "$testcvs -q diff -u" \ 23739 "Index: file1 23740 =================================================================== 23741 RCS file: $CVSROOT_DIRNAME/first-dir/file1,v 23742 retrieving revision 1\.1 23743 diff -u -r1\.1 file1 23744 --- file1 $RFCDATE 1\.1 23745 $PLUS$PLUS$PLUS file1 $RFCDATE 23746 @@ -998,3 ${PLUS}998,4 @@ 23747 This is line (9,9,7) which goes into the file file1 for testing 23748 This is line (9,9,8) which goes into the file file1 for testing 23749 This is line (9,9,9) which goes into the file file1 for testing 23750 ${PLUS}add a line to the end" 23751 23752 dotest big-5 "$testcvs -q ci -m modify" \ 23753 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 23754 new revision: 1\.2; previous revision: 1\.1" 23755 cd ../2/first-dir 23756 # The idea here is particularly to test the Rcs-diff response 23757 # and the reallocing thereof, for remote. 23758 dotest big-6 "$testcvs -q update" "[UP] file1" 23759 23760 dokeep 23761 cd ../.. 23762 rm -r first-dir 2 23763 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 23764 ;; 23765 23766 23767 23768 modes) 23769 # Test repository permissions (CVSUMASK and so on). 23770 # Although the tests in this section "cheat" by testing 23771 # repository permissions, which are sort of not a user-visible 23772 # sort of thing, the modes do have user-visible consequences, 23773 # such as whether a second user can check out the files. But 23774 # it would be awkward to test the consequences, so we don't. 23775 23776 # Solaris /bin/sh doesn't support export -n. I'm not sure 23777 # what we can do about this, other than hope that whoever 23778 # is running the tests doesn't have CVSUMASK set. 23779 #export -n CVSUMASK # if unset, defaults to 002 23780 23781 save_umask=`umask` 23782 umask 077 23783 mkdir 1; cd 1 23784 dotest modes-1 "${testcvs} -q co -l ." '' 23785 mkdir first-dir 23786 dotest modes-2 "${testcvs} add first-dir" \ 23787 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 23788 cd first-dir 23789 touch aa 23790 dotest modes-3 "${testcvs} add aa" \ 23791 "${SPROG} add: scheduling file .aa. for addition 23792 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 23793 dotest modes-4 "${testcvs} -q ci -m add" \ 23794 "$CVSROOT_DIRNAME/first-dir/aa,v <-- aa 23795 initial revision: 1\.1" 23796 # Yawn. Cygwin. 23797 if test -n "$remotehost"; then 23798 dotest modes-5remotehost "$CVS_RSH $remotehost 'ls -l ${CVSROOT_DIRNAME}/first-dir/aa,v'" \ 23799 "-r--r--r-- .*" 23800 else 23801 dotest modes-5 "ls -l ${CVSROOT_DIRNAME}/first-dir/aa,v" \ 23802 "-r--r--r-- .*" 23803 fi 23804 23805 # Test for whether we can set the execute bit. 23806 chmod +x aa 23807 echo change it >>aa 23808 dotest modes-6 "${testcvs} -q ci -m set-execute-bit" \ 23809 "$CVSROOT_DIRNAME/first-dir/aa,v <-- aa 23810 new revision: 1\.2; previous revision: 1\.1" 23811 # If CVS let us update the execute bit, it would be set here. 23812 # But it doesn't, and as far as I know that is longstanding 23813 # CVS behavior. 23814 # 23815 # Yeah, yeah. Search for "Cygwin". 23816 if test -n "$remotehost"; then 23817 dotest modes-7remotehost "$CVS_RSH $remotehost 'ls -l ${CVSROOT_DIRNAME}/first-dir/aa,v'" \ 23818 "-r--r--r-- .*" 23819 else 23820 dotest modes-7 "ls -l ${CVSROOT_DIRNAME}/first-dir/aa,v" \ 23821 "-r--r--r-- .*" 23822 fi 23823 23824 # OK, now manually change the modes and see what happens. 23825 # 23826 # Cygwin, already. 23827 if test -n "$remotehost"; then 23828 $CVS_RSH $remotehost "chmod g=r,o= ${CVSROOT_DIRNAME}/first-dir/aa,v" 23829 else 23830 chmod g=r,o= ${CVSROOT_DIRNAME}/first-dir/aa,v 23831 fi 23832 echo second line >>aa 23833 dotest modes-7a "${testcvs} -q ci -m set-execute-bit" \ 23834 "$CVSROOT_DIRNAME/first-dir/aa,v <-- aa 23835 new revision: 1\.3; previous revision: 1\.2" 23836 # Cygwin. 23837 if test -n "$remotehost"; then 23838 dotest modes-7bremotehost "$CVS_RSH $remotehost 'ls -l ${CVSROOT_DIRNAME}/first-dir/aa,v'" \ 23839 "-r--r----- .*" 23840 else 23841 dotest modes-7b "ls -l ${CVSROOT_DIRNAME}/first-dir/aa,v" \ 23842 "-r--r----- .*" 23843 fi 23844 23845 CVSUMASK=007 23846 export CVSUMASK 23847 touch ab 23848 # Might as well test the execute bit too. 23849 chmod +x ab 23850 dotest modes-8 "$testcvs add ab" \ 23851 "$SPROG add: scheduling file .ab. for addition 23852 $SPROG add: use .$SPROG commit. to add this file permanently" 23853 dotest modes-9 "$testcvs -q ci -m add" \ 23854 "$CVSROOT_DIRNAME/first-dir/ab,v <-- ab 23855 initial revision: 1\.1" 23856 23857 # The ssh-wrapper script set up by this script forwards CVSUMASK to 23858 # the server. In practice it would be set on the server in some 23859 # other manner (for instance, by the `env' command, or as an option 23860 # in the xinted.conf file). 23861 # 23862 # I don't recall why, but I used to look for: 23863 # 23864 # dotest modes-10remotehost \ 23865 # "$CVS_RSH $remotehost 'ls -l $CVSROOT_DIRNAME/first-dir/ab,v'" \ 23866 # "-r--r--r--.*" 23867 # 23868 # here when $remotehost was set. I'm not sure why. Maybe this was 23869 # one of the innumerable Cygwin issues? 23870 dotest modes-10 "ls -l $CVSROOT_DIRNAME/first-dir/ab,v" \ 23871 "-r-xr-x---.*" 23872 23873 # OK, now add a file on a branch. Check that the mode gets 23874 # set the same way (it is a different code path in CVS). 23875 dotest modes-11 "${testcvs} -q tag -b br" 'T aa 23876 T ab' 23877 dotest modes-12 "${testcvs} -q update -r br" '' 23878 touch ac 23879 dotest modes-13 "${testcvs} add ac" \ 23880 "${SPROG} add: scheduling file .ac. for addition on branch .br. 23881 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 23882 # Not sure it really makes sense to refer to a "previous revision" 23883 # when we are just now adding the file; as far as I know 23884 # that is longstanding CVS behavior, for what it's worth. 23885 dotest modes-14 "${testcvs} -q ci -m add" \ 23886 "$CVSROOT_DIRNAME/first-dir/Attic/ac,v <-- ac 23887 new revision: 1\.1\.2\.1; previous revision: 1\.1" 23888 23889 # ssh-wrapper forwards CVSUMASK. See modes-10 for notes. 23890 dotest modes-15 \ 23891 "ls -l ${CVSROOT_DIRNAME}/first-dir/Attic/ac,v" \ 23892 "-r--r-----.*" 23893 23894 dokeep 23895 cd ../.. 23896 # Restore umask. 23897 umask $save_umask 23898 rm -r 1 23899 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 23900 ;; 23901 23902 23903 23904 modes2) 23905 # More tests of file permissions in the working directory 23906 # and that sort of thing. 23907 23908 # The usual setup, file first-dir/aa with two revisions. 23909 mkdir 1; cd 1 23910 dotest modes2-1 "${testcvs} -q co -l ." '' 23911 mkdir first-dir 23912 dotest modes2-2 "${testcvs} add first-dir" \ 23913 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 23914 cd first-dir 23915 touch aa 23916 dotest modes2-3 "${testcvs} add aa" \ 23917 "${SPROG} add: scheduling file .aa. for addition 23918 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 23919 dotest modes2-4 "${testcvs} -q ci -m add" \ 23920 "$CVSROOT_DIRNAME/first-dir/aa,v <-- aa 23921 initial revision: 1\.1" 23922 echo "more money" >> aa 23923 dotest modes2-5 "${testcvs} -q ci -m add" \ 23924 "$CVSROOT_DIRNAME/first-dir/aa,v <-- aa 23925 new revision: 1\.2; previous revision: 1\.1" 23926 23927 # OK, here is the test. The idea is to see what 23928 # No_Difference does if it can't open the file. 23929 # If we don't change the st_mtime, CVS doesn't even try to read 23930 # the file. Note that some versions of "touch" require that we 23931 # do this while the file is still writable. 23932 touch aa 23933 chmod a= aa 23934 # Don't try this when permissions are broken, as with Cygwin. 23935 if ${LS} ${CVSROOT_DIRNAME}/first-dir >/dev/null 2>&1; then :; else 23936 dotest_fail modes2-6 "${testcvs} -q update -r 1.1 aa" \ 23937 "${CPROG} \[update aborted\]: cannot open file aa for comparing: Permission denied" \ 23938 "${CPROG} \[update aborted\]: reading aa: Permission denied" 23939 fi 23940 23941 dokeep 23942 chmod u+rwx aa 23943 cd ../.. 23944 rm -r 1 23945 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 23946 ;; 23947 23948 23949 23950 modes3) 23951 # Repository permissions. Particularly, what happens if we 23952 # can't read/write in the repository. 23953 # TODO: the case where we can access the repository, just not 23954 # the attic (may that one can remain a fatal error, seems less 23955 # useful for access control). 23956 mkdir 1; cd 1 23957 dotest modes3-1 "$testcvs -q co -l ." 23958 mkdir first-dir second-dir 23959 dotest modes3-2 "${testcvs} add first-dir second-dir" \ 23960 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository 23961 Directory ${CVSROOT_DIRNAME}/second-dir added to the repository" 23962 touch first-dir/aa second-dir/ab 23963 dotest modes3-3 "${testcvs} add first-dir/aa second-dir/ab" \ 23964 "${SPROG} add: scheduling file .first-dir/aa. for addition 23965 ${SPROG} add: scheduling file .second-dir/ab. for addition 23966 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 23967 dotest modes3-4 "${testcvs} -q ci -m add" \ 23968 "$CVSROOT_DIRNAME/first-dir/aa,v <-- first-dir/aa 23969 initial revision: 1\.1 23970 $CVSROOT_DIRNAME/second-dir/ab,v <-- second-dir/ab 23971 initial revision: 1\.1" 23972 # quiet down this one as it will be noisy in proxy mode 23973 modify_repo chmod a= $CVSROOT_DIRNAME/first-dir >/dev/null 2>&1 23974 if ${LS} ${CVSROOT_DIRNAME}/first-dir >/dev/null 2>&1; then 23975 # Avoid this test under Cygwin since permissions work differently 23976 # there. 23977 # 23978 # This test also gets avoided under Mac OS X since the system `ls' 23979 # is broken and exits with a 0 status despite the permission 23980 # denied error. 23981 if test -n "$remotehost"; then 23982 cygwin_hack=false 23983 else 23984 cygwin_hack=: 23985 fi 23986 else 23987 cygwin_hack=false 23988 fi 23989 23990 cd $TESTDIR/1 23991 if $cygwin_hack; then :; else 23992 dotest modes3-5 "${testcvs} update" \ 23993 "${SPROG} update: Updating \. 23994 ${SPROG} update: Updating first-dir 23995 ${SPROG} update: cannot open directory ${CVSROOT_DIRNAME}/first-dir: Permission denied 23996 ${SPROG} update: skipping directory first-dir 23997 ${SPROG} update: Updating second-dir" 23998 fi 23999 24000 # OK, I can see why one might say the above case could be a 24001 # fatal error, because normally users without access to first-dir 24002 # won't have it in their working directory. But the next 24003 # one is more of a problem if it is fatal. 24004 # 24005 # The second text string below is for Cygwin again, and again it 24006 # should really be XFAIL under Cygwin, but for now deal with the 24007 # passing opendir by accepting the alternate string. 24008 rm -r first-dir 24009 dotest modes3-6 "${testcvs} update -dP" \ 24010 "${SPROG} update: Updating . 24011 ${SPROG} update: Updating CVSROOT 24012 U ${DOTSTAR} 24013 ${SPROG} update: Updating first-dir 24014 ${SPROG} update: cannot open directory ${CVSROOT_DIRNAME}/first-dir: Permission denied 24015 ${SPROG} update: skipping directory first-dir 24016 ${SPROG} update: Updating second-dir" \ 24017 "${SPROG} update: Updating . 24018 ${SPROG} update: Updating CVSROOT 24019 U ${DOTSTAR} 24020 ${SPROG} update: Updating first-dir 24021 ${SPROG} update: Updating second-dir" 24022 24023 dokeep 24024 cd .. 24025 rm -r 1 24026 # quiet down this one as it will be noisy in proxy mode 24027 modify_repo chmod u+rwx $CVSROOT_DIRNAME/first-dir 2>/dev/null 24028 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir \ 24029 $CVSROOT_DIRNAME/second-dir 24030 ;; 24031 24032 24033 24034 stamps) 24035 # Test timestamps. 24036 mkdir 1; cd 1 24037 dotest stamps-1 "${testcvs} -q co -l ." '' 24038 mkdir first-dir 24039 dotest stamps-2 "${testcvs} add first-dir" \ 24040 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 24041 cd first-dir 24042 touch aa 24043 echo '$''Id$' >kw 24044 # Cygwin, *cough*, puts the year in the time column until the minute 24045 # is no longer the current minute. Sleep 60 seconds to avoid this 24046 # problem. 24047 sleep 60 24048 ls -l aa >${TESTDIR}/1/stamp.aa.touch 24049 ls -l kw >${TESTDIR}/1/stamp.kw.touch 24050 # "sleep 1" would suffice if we could assume ls --full-time, but 24051 # that is as far as I know unique to GNU ls. Is there some POSIX.2 24052 # way to get the timestamp of a file, including the seconds? 24053 sleep 60 24054 dotest stamps-3 "${testcvs} add aa kw" \ 24055 "${SPROG} add: scheduling file .aa. for addition 24056 ${SPROG} add: scheduling file .kw. for addition 24057 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 24058 ls -l aa >${TESTDIR}/1/stamp.aa.add 24059 ls -l kw >${TESTDIR}/1/stamp.kw.add 24060 # "cvs add" should not muck with the timestamp. 24061 dotest stamps-4aa \ 24062 "cmp ${TESTDIR}/1/stamp.aa.touch ${TESTDIR}/1/stamp.aa.add" '' 24063 dotest stamps-4kw \ 24064 "cmp ${TESTDIR}/1/stamp.kw.touch ${TESTDIR}/1/stamp.kw.add" '' 24065 sleep 60 24066 dotest stamps-5 "${testcvs} -q ci -m add" \ 24067 "$CVSROOT_DIRNAME/first-dir/aa,v <-- aa 24068 initial revision: 1\.1 24069 $CVSROOT_DIRNAME/first-dir/kw,v <-- kw 24070 initial revision: 1\.1" 24071 # Cygwin, *cough*, puts the year in the time column until the minute 24072 # is no longer the current minute. Sleep 60 seconds to avoid this 24073 # problem. 24074 sleep 60 24075 ls -l aa >${TESTDIR}/1/stamp.aa.ci 24076 ls -l kw >${TESTDIR}/1/stamp.kw.ci 24077 # If there are no keywords, "cvs ci" leaves the timestamp alone 24078 # If there are, it sets the timestamp to the date of the commit. 24079 # I'm not sure how logical this is, but it is intentional. 24080 # If we wanted to get fancy we would make sure the time as 24081 # reported in "cvs log kw" matched stamp.kw.ci. But that would 24082 # be a lot of work. 24083 dotest stamps-6aa \ 24084 "cmp ${TESTDIR}/1/stamp.aa.add ${TESTDIR}/1/stamp.aa.ci" '' 24085 if cmp ${TESTDIR}/1/stamp.kw.add ${TESTDIR}/1/stamp.kw.ci >/dev/null 24086 then 24087 fail stamps-6kw 24088 else 24089 pass stamps-6kw 24090 fi 24091 cd ../.. 24092 sleep 60 24093 mkdir 2 24094 cd 2 24095 dotest stamps-7 "${testcvs} -q get first-dir" "U first-dir/aa 24096 U first-dir/kw" 24097 cd first-dir 24098 ls -l aa >${TESTDIR}/1/stamp.aa.get 24099 ls -l kw >${TESTDIR}/1/stamp.kw.get 24100 # On checkout, CVS should set the timestamp to the date that the 24101 # file was committed. Could check that the time as reported in 24102 # "cvs log aa" matches stamp.aa.get, but that would be a lot of 24103 # work. 24104 dotest_fail stamps-8aa \ 24105 "cmp $TESTDIR/1/stamp.aa.ci $TESTDIR/1/stamp.aa.get >/dev/null" 24106 dotest stamps-8kw \ 24107 "cmp $TESTDIR/1/stamp.kw.ci $TESTDIR/1/stamp.kw.get" 24108 24109 # Now we want to see what "cvs update" does. 24110 sleep 60 24111 echo add a line >>aa 24112 echo add a line >>kw 24113 dotest stamps-9 "${testcvs} -q ci -m change-them" \ 24114 "$CVSROOT_DIRNAME/first-dir/aa,v <-- aa 24115 new revision: 1\.2; previous revision: 1\.1 24116 $CVSROOT_DIRNAME/first-dir/kw,v <-- kw 24117 new revision: 1\.2; previous revision: 1\.1" 24118 24119 # Cygwin, *cough*, puts the year in the time column until the minute 24120 # is no longer the current minute. Sleep 60 seconds to avoid this 24121 # problem. 24122 sleep 60 24123 ls -l aa >${TESTDIR}/1/stamp.aa.ci2 24124 ls -l kw >${TESTDIR}/1/stamp.kw.ci2 24125 cd ../.. 24126 cd 1/first-dir 24127 sleep 60 24128 dotest stamps-10 "${testcvs} -q update" '[UP] aa 24129 [UP] kw' 24130 # this doesn't serve any function other than being able to 24131 # look at it manually, as we have no machinery for dates being 24132 # newer or older than other dates. 24133 date >$TESTDIR/1/stamp.debug.update 24134 ls -l aa >$TESTDIR/1/stamp.aa.update 24135 ls -l kw >$TESTDIR/1/stamp.kw.update 24136 # stamp.aa.update and stamp.kw.update should both be approximately 24137 # the same as stamp.debug.update. Perhaps we could be testing 24138 # this in a more fancy fashion by "touch stamp.before" before 24139 # stamps-10, "touch stamp.after" after, and then using ls -t 24140 # to check them. But for now we just make sure that the *.update 24141 # stamps differ from the *.ci2 ones. 24142 # As for the rationale, this is so that if one updates and gets 24143 # a new revision, then "make" will be sure to regard those files 24144 # as newer than .o files which may be sitting around. 24145 dotest_fail stamps-11aa \ 24146 "cmp $TESTDIR/1/stamp.aa.update $TESTDIR/1/stamp.aa.ci2 >/dev/null" 24147 dotest_fail stamps-11kw \ 24148 "cmp $TESTDIR/1/stamp.kw.update $TESTDIR/1/stamp.kw.ci2 >/dev/null" 24149 24150 dokeep 24151 cd ../.. 24152 rm -r 1 2 24153 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 24154 ;; 24155 24156 24157 24158 perms) 24159 mkdir 1; cd 1 24160 dotest perms-init-1 "$testcvs -Q co CVSROOT" 24161 cd CVSROOT 24162 echo 'PreservePermissions=yes' >> ${CVSROOT_DIRNAME}/CVSROOT/config 24163 dotest perms-init-2 "$testcvs -Q ci -mperms" 24164 cd .. 24165 24166 dotest perms-1 "$testcvs -q co -l ." 24167 mkdir first-dir 24168 dotest perms-2 "${testcvs} add first-dir" \ 24169 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 24170 cd first-dir 24171 24172 touch foo 24173 chmod 431 foo 24174 dotest perms-3 "${testcvs} add foo" \ 24175 "${SPROG} add: scheduling file .foo. for addition 24176 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 24177 dotest perms-4 "${testcvs} -q ci -m ''" \ 24178 "$CVSROOT_DIRNAME/first-dir/foo,v <-- foo 24179 initial revision: 1\.1" 24180 24181 # Test checking out files with different permissions. 24182 cd ../.. 24183 mkdir 2; cd 2 24184 dotest perms-5 "${testcvs} -q co first-dir" "U first-dir/foo" 24185 cd first-dir 24186 if $remote; then :; else 24187 # PreservePermissions not yet implemented for remote. 24188 dotest perms-6 "ls -l foo" "-r---wx--x .* foo" 24189 fi 24190 24191 dokeep 24192 cd ../1/CVSROOT 24193 restore_adm 24194 cd ../.. 24195 rm -rf 1 2 24196 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 24197 ;; 24198 24199 24200 24201 symlinks) 24202 # short cut around checking out and committing CVSROOT 24203 rm -f $CVSROOT_DIRNAME/CVSROOT/config 24204 echo 'PreservePermissions=yes' >> $CVSROOT_DIRNAME/CVSROOT/config 24205 chmod 444 $CVSROOT_DIRNAME/CVSROOT/config 24206 24207 mkdir 1; cd 1 24208 dotest symlinks-1 "$testcvs -q co -l ." 24209 mkdir first-dir 24210 dotest symlinks-2 "$testcvs add first-dir" \ 24211 "Directory $CVSROOT_DIRNAME/first-dir added to the repository" 24212 cd first-dir 24213 24214 dotest symlinks-2.1 "ln -s $TESTDIR/fumble slink" 24215 dotest symlinks-3 "$testcvs add slink" \ 24216 "$SPROG add: scheduling file .slink. for addition 24217 $SPROG add: use .$SPROG commit. to add this file permanently" 24218 if $remote; then 24219 # Remote doesn't implement PreservePermissions, and in its 24220 # absence the correct behavior is to follow the symlink. 24221 dotest_fail symlinks-4r "$testcvs -q ci -m ''" \ 24222 "$SPROG \[commit aborted\]: reading slink: No such file or directory" 24223 else 24224 dotest symlinks-4 "$testcvs -q ci -m ''" \ 24225 "$CVSROOT_DIRNAME/first-dir/slink,v <-- slink 24226 initial revision: 1\.1" 24227 24228 # Test checking out symbolic links. 24229 cd ../.. 24230 mkdir 2; cd 2 24231 dotest symlinks-5 "$testcvs -q co first-dir" "U first-dir/slink" 24232 cd first-dir 24233 dotest symlinks-6 "ls -l slink" \ 24234 "l[rwx\-]* .* slink -> $TESTDIR/fumble" 24235 fi 24236 24237 dokeep 24238 cd ../.. 24239 rm -rf 1 2 24240 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 24241 restore_adm 24242 ;; 24243 24244 24245 24246 symlinks2) 24247 # Symlinks in working directory without PreservePermissions. 24248 # Also see: symlinks: with PreservePermissions 24249 # rcslib-symlink-*: symlinks in repository. 24250 mkdir 1; cd 1 24251 dotest symlinks2-1 "${testcvs} -q co -l ." '' 24252 mkdir first-dir 24253 dotest symlinks2-2 "${testcvs} add first-dir" \ 24254 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 24255 cd first-dir 24256 echo nonsymlink > slink 24257 dotest symlinks2-3 "${testcvs} add slink" \ 24258 "${SPROG} add: scheduling file .slink. for addition 24259 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 24260 dotest symlinks2-4 "${testcvs} -q ci -m ''" \ 24261 "$CVSROOT_DIRNAME/first-dir/slink,v <-- slink 24262 initial revision: 1\.1" 24263 rm slink 24264 # Choose name cvslog.* so it is in default ignore list. 24265 echo second file >cvslog.file2 24266 dotest symlinks2-5 "ln -s cvslog.file2 slink" "" 24267 dotest symlinks2-6 "${testcvs} -q ci -m linkify" \ 24268 "$CVSROOT_DIRNAME/first-dir/slink,v <-- slink 24269 new revision: 1\.2; previous revision: 1\.1" 24270 dotest symlinks2-7 "${testcvs} -q update -r 1.1 slink" "[UP] slink" 24271 dotest symlinks2-8 "cat slink" "nonsymlink" 24272 dotest symlinks2-9 "ls -l slink" "-[-rwx]* .* slink" 24273 24274 dokeep 24275 cd ../.. 24276 rm -rf 1 24277 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 24278 ;; 24279 24280 24281 24282 hardlinks) 24283 # short cut around checking out and committing CVSROOT 24284 rm -f ${CVSROOT_DIRNAME}/CVSROOT/config 24285 echo 'PreservePermissions=yes' > ${CVSROOT_DIRNAME}/CVSROOT/config 24286 chmod 444 ${CVSROOT_DIRNAME}/CVSROOT/config 24287 24288 mkdir 1; cd 1 24289 dotest hardlinks-1 "${testcvs} -q co -l ." '' 24290 mkdir first-dir 24291 dotest hardlinks-2 "${testcvs} add first-dir" \ 24292 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 24293 cd first-dir 24294 24295 # Make up some ugly filenames, to test that they get 24296 # encoded properly in the delta nodes. Note that `dotest' screws 24297 # up if some arguments have embedded spaces. 24298 if touch aaaa 24299 then 24300 pass hardlinks-2.1 24301 else 24302 fail hardlinks-2.1 24303 fi 24304 24305 if ln aaaa b.b.b.b 24306 then 24307 pass hardlinks-2.2 24308 else 24309 fail hardlinks-2.2 24310 fi 24311 24312 if ln aaaa 'dd dd dd' 24313 then 24314 pass hardlinks-2.3 24315 else 24316 fail hardlinks-2.3 24317 fi 24318 24319 dotest hardlinks-3 "${testcvs} add [abd]*" \ 24320 "${SPROG} add: scheduling file .aaaa. for addition 24321 ${SPROG} add: scheduling file .b\.b\.b\.b. for addition 24322 ${SPROG} add: scheduling file .dd dd dd. for addition 24323 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 24324 dotest hardlinks-4 "${testcvs} -q ci -m ''" \ 24325 "$CVSROOT_DIRNAME/first-dir/aaaa,v <-- aaaa 24326 initial revision: 1\.1 24327 $CVSROOT_DIRNAME/first-dir/b\.b\.b\.b,v <-- b\.b\.b\.b 24328 initial revision: 1\.1 24329 $CVSROOT_DIRNAME/first-dir/dd dd dd,v <-- dd dd dd 24330 initial revision: 1\.1" 24331 # Test checking out hardlinked files. 24332 cd ../.. 24333 mkdir 2; cd 2 24334 if $remote; then 24335 # Remote does not implement PreservePermissions. 24336 dotest hardlinks-5r "${testcvs} -q co first-dir" \ 24337 "U first-dir/aaaa 24338 U first-dir/b\.b\.b\.b 24339 U first-dir/dd dd dd" 24340 cd first-dir 24341 dotest hardlinks-6r "ls -l [abd]*" \ 24342 "-[rwx\-]* *1 .* aaaa 24343 -[rwx\-]* *1 .* b\.b\.b\.b 24344 -[rwx\-]* *1 .* dd dd dd" 24345 else 24346 dotest hardlinks-5 "${testcvs} -q co first-dir" \ 24347 "U first-dir/aaaa 24348 U first-dir/b\.b\.b\.b 24349 U first-dir/dd dd dd" 24350 cd first-dir 24351 # To make sure that the files are properly hardlinked, it 24352 # would be nice to do `ls -i' and make sure all the inodes 24353 # match. But I think that would require expr to support 24354 # tagged regexps, and I don't think we can rely on that. 24355 # So instead we just see that each file has the right 24356 # number of links. -twp 24357 dotest hardlinks-6 "ls -l [abd]*" \ 24358 "-[rwx\-]* *3 .* aaaa 24359 -[rwx\-]* *3 .* b\.b\.b\.b 24360 -[rwx\-]* *3 .* dd dd dd" 24361 fi 24362 24363 dokeep 24364 cd ../.. 24365 rm -rf 1 2 24366 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 24367 restore_adm 24368 ;; 24369 24370 24371 24372 sticky) 24373 # More tests of sticky tags, particularly non-branch sticky tags. 24374 # See many tests (e.g. multibranch) for ordinary sticky tag 24375 # operations such as adding files on branches. 24376 # See "head" test for interaction between stick tags and HEAD. 24377 mkdir 1; cd 1 24378 dotest sticky-1 "$testcvs -q co -l ." 24379 mkdir first-dir 24380 dotest sticky-2 "$testcvs add first-dir" \ 24381 "Directory $CVSROOT_DIRNAME/first-dir added to the repository" 24382 cd first-dir 24383 24384 touch file1 24385 dotest sticky-3 "$testcvs add file1" \ 24386 "$SPROG add: scheduling file .file1. for addition 24387 $SPROG add: use .$SPROG commit. to add this file permanently" 24388 dotest sticky-4 "$testcvs -q ci -m add" \ 24389 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 24390 initial revision: 1\.1" 24391 dotest sticky-5 "$testcvs -q tag tag1" "T file1" 24392 echo add a line >>file1 24393 dotest sticky-6 "$testcvs -q ci -m modify" \ 24394 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 24395 new revision: 1\.2; previous revision: 1\.1" 24396 dotest sticky-7 "$testcvs -q update -r tag1" "[UP] file1" 24397 dotest sticky-8 "cat file1" '' 24398 dotest sticky-9 "$testcvs -q update" '' 24399 dotest sticky-10 "cat file1" '' 24400 touch file2 24401 dotest_fail sticky-11 "$testcvs add file2" \ 24402 "$SPROG add: cannot add file on non-branch tag \`tag1'" 24403 dotest sticky-12 "$testcvs -q update -A" "[UP] file1 24404 $QUESTION file2" "$QUESTION file2 24405 [UP] file1" 24406 dotest sticky-13 "${testcvs} add file2" \ 24407 "$SPROG add: scheduling file .file2. for addition 24408 $SPROG add: use .$SPROG commit. to add this file permanently" 24409 dotest sticky-14 "${testcvs} -q ci -m add" \ 24410 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 24411 initial revision: 1\.1" 24412 24413 # Now back to tag1 24414 dotest sticky-15 "${testcvs} -q update -r tag1" "[UP] file1 24415 $SPROG update: \`file2' is no longer in the repository" 24416 24417 rm file1 24418 dotest sticky-16 "${testcvs} rm file1" \ 24419 "$SPROG remove: scheduling .file1. for removal 24420 $SPROG remove: use .$SPROG commit. to remove this file permanently" 24421 # Hmm, this command seems to silently remove the tag from 24422 # the file. This appears to be intentional. 24423 # The silently part especially strikes me as odd, though. 24424 dotest sticky-17 "$testcvs -q ci -m remove-it" "" 24425 dotest sticky-18 "$testcvs -q update -A" "U file1 24426 U file2" 24427 dotest sticky-19 "$testcvs -q update -r tag1" \ 24428 "${SPROG} update: \`file1' is no longer in the repository 24429 ${SPROG} update: \`file2' is no longer in the repository" 24430 dotest sticky-20 "$testcvs -q update -A" "U file1 24431 U file2" 24432 24433 # Now try with a numeric revision. 24434 dotest sticky-21 "$testcvs -q update -r 1.1 file1" "U file1" 24435 dotest sticky-22 "$testcvs rm -f file1" \ 24436 "$SPROG remove: cannot remove file .file1. which has a numeric sticky tag of .1\.1." 24437 # The old behavior was that remove allowed this and then commit 24438 # gave an error, which was somewhat hard to clear. I mean, you 24439 # could get into a long elaborate discussion of this being a 24440 # conflict and two ways to resolve it, but I don't really see 24441 # why CVS should have a concept of conflict that arises, not from 24442 # parallel development, but from CVS's own sticky tags. 24443 24444 # Ditto with a sticky date. 24445 # 24446 # I'm kind of surprised that the "file1 was lost" doesn't crop 24447 # up elsewhere in the testsuite. It is a long-standing 24448 # discrepency between local and remote CVS and should probably 24449 # be cleaned up at some point. 24450 dotest sticky-23 "$testcvs -q update -Dnow file1" \ 24451 "$SPROG update: warning: \`file1' was lost 24452 U file1" "U file1" 24453 dotest sticky-24 "$testcvs rm -f file1" \ 24454 "$SPROG remove: cannot remove file .file1. which has a sticky date of .[0-9.]*." 24455 24456 dotest sticky-25 "$testcvs -q update -A" \ 24457 "$SPROG update: warning: \`file1' was lost 24458 U file1" "U file1" 24459 24460 dokeep 24461 restore_adm 24462 cd ../.. 24463 rm -r 1 24464 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 24465 ;; 24466 24467 24468 24469 keyword) 24470 # Test keyword expansion. 24471 # Various other tests relate to our ability to correctly 24472 # set the keyword expansion mode. 24473 # "binfiles" tests "cvs admin -k". 24474 # "binfiles" and "binfiles2" test "cvs add -k". 24475 # "rdiff" tests "cvs co -k". 24476 # "binfiles" (and this test) test "cvs update -k". 24477 # "binwrap" tests setting the mode from wrappers. 24478 # "keyword2" tests "cvs update -kk -j" with text and binary files 24479 # I don't think any test is testing "cvs import -k". 24480 # Other keyword expansion tests: 24481 # keywordlog - $Log. 24482 mkdir 1; cd 1 24483 dotest keyword-1 "${testcvs} -q co -l ." '' 24484 mkdir first-dir 24485 dotest keyword-2 "${testcvs} add first-dir" \ 24486 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 24487 cd first-dir 24488 24489 echo '$''Author$' > file1 24490 echo '$''Date$' >> file1 24491 echo '$''Header$' >> file1 24492 echo '$''Id$' >> file1 24493 echo '$''Locker$' >> file1 24494 echo '$''Name$' >> file1 24495 echo '$''RCSfile$' >> file1 24496 echo '$''Revision$' >> file1 24497 echo '$''Source$' >> file1 24498 echo '$''State$' >> file1 24499 echo '$''Nonkey$' >> file1 24500 # Omit the trailing dollar sign 24501 echo '$''Date' >> file1 24502 # Put two keywords on one line 24503 echo '$''State$' '$''State$' >> file1 24504 # Use a header for Log 24505 echo 'xx $''Log$' >> file1 24506 24507 dotest keyword-3 "${testcvs} add file1" \ 24508 "${SPROG} add: scheduling file .file1. for addition 24509 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 24510 dotest keyword-4 "${testcvs} -q ci -m add" \ 24511 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 24512 initial revision: 1\.1" 24513 dotest keyword-5 "cat file1" \ 24514 '\$'"Author: ${username} "'\$'" 24515 "'\$'"Date: [0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9] "'\$'" 24516 "'\$'"Header: ${CVSROOT_DIRNAME}/first-dir/file1,v 1\.1 [0-9/]* [0-9:]* ${username} Exp "'\$'" 24517 "'\$'"Id: file1,v 1\.1 [0-9/]* [0-9:]* ${username} Exp "'\$'" 24518 "'\$'"Locker: "'\$'" 24519 "'\$'"Name: "'\$'" 24520 "'\$'"RCSfile: file1,v "'\$'" 24521 "'\$'"Revision: 1\.1 "'\$'" 24522 "'\$'"Source: ${CVSROOT_DIRNAME}/first-dir/file1,v "'\$'" 24523 "'\$'"State: Exp "'\$'" 24524 "'\$'"Nonkey"'\$'" 24525 "'\$'"Date 24526 "'\$'"State: Exp "'\$'" "'\$'"State: Exp "'\$'" 24527 xx "'\$'"Log: file1,v "'\$'" 24528 xx Revision 1\.1 [0-9/]* [0-9:]* ${username} 24529 xx add 24530 xx" 24531 24532 # Use cvs admin to lock the RCS file in order to check -kkvl 24533 # vs. -kkv. CVS does not normally lock RCS files, but some 24534 # people use cvs admin to enforce reserved checkouts. 24535 dotest keyword-6 "${testcvs} admin -l file1" \ 24536 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 24537 1\.1 locked 24538 done" 24539 24540 dotest keyword-7 "${testcvs} update -kkv file1" "U file1" 24541 dotest keyword-8 "cat file1" \ 24542 '\$'"Author: ${username} "'\$'" 24543 "'\$'"Date: [0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9] "'\$'" 24544 "'\$'"Header: ${CVSROOT_DIRNAME}/first-dir/file1,v 1\.1 [0-9/]* [0-9:]* ${username} Exp "'\$'" 24545 "'\$'"Id: file1,v 1\.1 [0-9/]* [0-9:]* ${username} Exp "'\$'" 24546 "'\$'"Locker: "'\$'" 24547 "'\$'"Name: "'\$'" 24548 "'\$'"RCSfile: file1,v "'\$'" 24549 "'\$'"Revision: 1\.1 "'\$'" 24550 "'\$'"Source: ${CVSROOT_DIRNAME}/first-dir/file1,v "'\$'" 24551 "'\$'"State: Exp "'\$'" 24552 "'\$'"Nonkey"'\$'" 24553 "'\$'"Date 24554 "'\$'"State: Exp "'\$'" "'\$'"State: Exp "'\$'" 24555 xx "'\$'"Log: file1,v "'\$'" 24556 xx Revision 1\.1 [0-9/]* [0-9:]* ${username} 24557 xx add 24558 xx" 24559 24560 dotest keyword-9 "${testcvs} update -kkvl file1" "U file1" 24561 dotest keyword-10 "cat file1" \ 24562 '\$'"Author: ${username} "'\$'" 24563 "'\$'"Date: ${RCSKEYDATE} "'\$'" 24564 "'\$'"Header: ${CVSROOT_DIRNAME}/first-dir/file1,v 1\.1 ${RCSKEYDATE} ${username} Exp ${username} "'\$'" 24565 "'\$'"Id: file1,v 1\.1 ${RCSKEYDATE} ${username} Exp ${username} "'\$'" 24566 "'\$'"Locker: ${username} "'\$'" 24567 "'\$'"Name: "'\$'" 24568 "'\$'"RCSfile: file1,v "'\$'" 24569 "'\$'"Revision: 1\.1 "'\$'" 24570 "'\$'"Source: ${CVSROOT_DIRNAME}/first-dir/file1,v "'\$'" 24571 "'\$'"State: Exp "'\$'" 24572 "'\$'"Nonkey"'\$'" 24573 "'\$'"Date 24574 "'\$'"State: Exp "'\$'" "'\$'"State: Exp "'\$'" 24575 xx "'\$'"Log: file1,v "'\$'" 24576 xx Revision 1\.1 ${RCSKEYDATE} ${username} 24577 xx add 24578 xx" 24579 24580 dotest keyword-11 "${testcvs} update -kk file1" "U file1" 24581 dotest keyword-12 "cat file1" \ 24582 '\$'"Author"'\$'" 24583 "'\$'"Date"'\$'" 24584 "'\$'"Header"'\$'" 24585 "'\$'"Id"'\$'" 24586 "'\$'"Locker"'\$'" 24587 "'\$'"Name"'\$'" 24588 "'\$'"RCSfile"'\$'" 24589 "'\$'"Revision"'\$'" 24590 "'\$'"Source"'\$'" 24591 "'\$'"State"'\$'" 24592 "'\$'"Nonkey"'\$'" 24593 "'\$'"Date 24594 "'\$'"State"'\$'" "'\$'"State"'\$'" 24595 xx "'\$'"Log"'\$'" 24596 xx Revision 1\.1 ${RCSKEYDATE} ${username} 24597 xx add 24598 xx" 24599 24600 dotest keyword-13 "${testcvs} update -kv file1" "U file1" 24601 dotest keyword-14 "cat file1" \ 24602 "${username} 24603 ${RCSKEYDATE} 24604 ${CVSROOT_DIRNAME}/first-dir/file1,v 1\.1 ${RCSKEYDATE} ${username} Exp 24605 file1,v 1\.1 ${RCSKEYDATE} ${username} Exp 24606 24607 24608 file1,v 24609 1\.1 24610 ${CVSROOT_DIRNAME}/first-dir/file1,v 24611 Exp 24612 "'\$'"Nonkey"'\$'" 24613 "'\$'"Date 24614 Exp Exp 24615 xx file1,v 24616 xx Revision 1\.1 ${RCSKEYDATE} ${username} 24617 xx add 24618 xx" 24619 24620 dotest keyword-15 "${testcvs} update -ko file1" "U file1" 24621 dotest keyword-16 "cat file1" \ 24622 '\$'"Author"'\$'" 24623 "'\$'"Date"'\$'" 24624 "'\$'"Header"'\$'" 24625 "'\$'"Id"'\$'" 24626 "'\$'"Locker"'\$'" 24627 "'\$'"Name"'\$'" 24628 "'\$'"RCSfile"'\$'" 24629 "'\$'"Revision"'\$'" 24630 "'\$'"Source"'\$'" 24631 "'\$'"State"'\$'" 24632 "'\$'"Nonkey"'\$'" 24633 "'\$'"Date 24634 "'\$'"State"'\$'" "'\$'"State"'\$'" 24635 xx "'\$'"Log"'\$' 24636 24637 # Test the Name keyword. First go back to normal expansion. 24638 24639 dotest keyword-17 "${testcvs} update -A file1" "U file1" 24640 24641 echo '$''Name$' > file1 24642 dotest keyword-18 "${testcvs} ci -m modify file1" \ 24643 "${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1 24644 new revision: 1\.2; previous revision: 1\.1" 24645 dotest keyword-19 "${testcvs} -q tag tag1" "T file1" 24646 echo "change" >> file1 24647 dotest keyword-20 "${testcvs} -q ci -m mod2 file1" \ 24648 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 24649 new revision: 1\.3; previous revision: 1\.2" 24650 # FIXCVS - These unpatchable files are happening because the tag 24651 # associated with the current base version of the file in the 24652 # sandbox is not available in these cases. See the note in the 24653 # patch_file function in update.c. 24654 dotest keyword-21 "${testcvs} -q update -r tag1" "U file1" \ 24655 "P file1 24656 ${CPROG} update: checksum failure after patch to \./file1; will refetch 24657 ${CPROG} client: refetching unpatchable files 24658 $SPROG update: warning: \`file1' was lost 24659 U file1" 24660 24661 dotest keyword-22 "cat file1" '\$'"Name: tag1 "'\$' 24662 24663 if $remote; then 24664 # Like serverpatch-8. Not sure there is anything much we 24665 # can or should do about this. 24666 dotest keyword-23r "${testcvs} update -A file1" "P file1 24667 ${CPROG} update: checksum failure after patch to \./file1; will refetch 24668 ${CPROG} client: refetching unpatchable files 24669 $SPROG update: warning: \`file1' was lost 24670 U file1" 24671 else 24672 dotest keyword-23 "${testcvs} update -A file1" "[UP] file1" 24673 fi 24674 dotest keyword-24 "cat file1" '\$'"Name: "'\$'" 24675 change" 24676 24677 dokeep 24678 cd ../.. 24679 rm -r 1 24680 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 24681 ;; 24682 24683 24684 24685 keywordlog) 24686 # Test the Log keyword. 24687 mkdir 1; cd 1 24688 dotest keywordlog-1 "${testcvs} -q co -l ." '' 24689 mkdir first-dir 24690 dotest keywordlog-2 "${testcvs} add first-dir" \ 24691 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 24692 cd first-dir 24693 echo initial >file1 24694 dotest keywordlog-3 "${testcvs} add file1" \ 24695 "${SPROG} add: scheduling file .file1. for addition 24696 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 24697 24698 # See "rmadd" for a list of other tests of cvs ci -r. 24699 dotest keywordlog-4 "${testcvs} -q ci -r 1.3 -m add file1" \ 24700 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 24701 initial revision: 1\.3" 24702 24703 cd ../.. 24704 mkdir 2; cd 2 24705 dotest keywordlog-4a "${testcvs} -q co first-dir" "U first-dir/file1" 24706 cd ../1/first-dir 24707 24708 echo 'xx $''Log$' >> file1 24709 cat >${TESTDIR}/comment.tmp <<EOF 24710 First log line 24711 Second log line 24712 EOF 24713 # As with rmadd-25, "cvs ci -r" sets a sticky tag. 24714 dotest_fail keywordlog-4b \ 24715 "${testcvs} ci -F ${TESTDIR}/comment.tmp file1" \ 24716 "${SPROG} commit: sticky tag .1\.3. for file .file1. is not a branch 24717 ${SPROG} \[commit aborted\]: correct above errors first!" 24718 dotest keywordlog-4c "${testcvs} -q update -A" "M file1" 24719 24720 dotest keywordlog-5 "${testcvs} ci -F ${TESTDIR}/comment.tmp file1" \ 24721 "${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1 24722 new revision: 1\.4; previous revision: 1\.3" 24723 rm -f ${TESTDIR}/comment.tmp 24724 dotest keywordlog-6 "${testcvs} -q tag -b br" "T file1" 24725 dotest keywordlog-7 "cat file1" \ 24726 "initial 24727 xx "'\$'"Log: file1,v "'\$'" 24728 xx Revision 1\.4 ${RCSKEYDATE} ${username} 24729 xx First log line 24730 xx Second log line 24731 xx" 24732 24733 cd ../../2/first-dir 24734 dotest keywordlog-8 "${testcvs} -q update" "[UP] file1" 24735 dotest keywordlog-9 "cat file1" \ 24736 "initial 24737 xx "'\$'"Log: file1,v "'\$'" 24738 xx Revision 1\.4 ${RCSKEYDATE} ${username} 24739 xx First log line 24740 xx Second log line 24741 xx" 24742 cd ../../1/first-dir 24743 24744 echo "change" >> file1 24745 dotest keywordlog-10 "${testcvs} ci -m modify file1" \ 24746 "${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1 24747 new revision: 1\.5; previous revision: 1\.4" 24748 dotest keywordlog-11 "cat file1" \ 24749 "initial 24750 xx "'\$'"Log: file1,v "'\$'" 24751 xx Revision 1\.5 ${RCSKEYDATE} ${username} 24752 xx modify 24753 xx 24754 xx Revision 1\.4 ${RCSKEYDATE} ${username} 24755 xx First log line 24756 xx Second log line 24757 xx 24758 change" 24759 24760 cd ../../2/first-dir 24761 dotest keywordlog-12 "${testcvs} -q update" "[UP] file1" 24762 dotest keywordlog-13 "cat file1" \ 24763 "initial 24764 xx "'\$'"Log: file1,v "'\$'" 24765 xx Revision 1\.5 ${RCSKEYDATE} ${username} 24766 xx modify 24767 xx 24768 xx Revision 1\.4 ${RCSKEYDATE} ${username} 24769 xx First log line 24770 xx Second log line 24771 xx 24772 change" 24773 24774 cd ../../1/first-dir 24775 dotest keywordlog-14 "${testcvs} -q update -r br" "[UP] file1" 24776 echo br-change >>file1 24777 dotest keywordlog-15 "${testcvs} -q ci -m br-modify" \ 24778 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 24779 new revision: 1\.4\.2\.1; previous revision: 1\.4" 24780 dotest keywordlog-16 "cat file1" \ 24781 "initial 24782 xx "'\$'"Log: file1,v "'\$'" 24783 xx Revision 1\.4\.2\.1 ${RCSKEYDATE} ${username} 24784 xx br-modify 24785 xx 24786 xx Revision 1\.4 ${RCSKEYDATE} ${username} 24787 xx First log line 24788 xx Second log line 24789 xx 24790 br-change" 24791 cd ../../2/first-dir 24792 dotest keywordlog-17 "${testcvs} -q update -r br" "[UP] file1" 24793 dotest keywordlog-18 "cat file1" \ 24794 "initial 24795 xx "'\$'"Log: file1,v "'\$'" 24796 xx Revision 1\.4\.2\.1 ${RCSKEYDATE} ${username} 24797 xx br-modify 24798 xx 24799 xx Revision 1\.4 ${RCSKEYDATE} ${username} 24800 xx First log line 24801 xx Second log line 24802 xx 24803 br-change" 24804 cd ../.. 24805 dotest keywordlog-19 "${testcvs} -q co -p -r br first-dir/file1" \ 24806 "initial 24807 xx "'\$'"Log: file1,v "'\$'" 24808 xx Revision 1\.4\.2\.1 ${RCSKEYDATE} ${username} 24809 xx br-modify 24810 xx 24811 xx Revision 1\.4 ${RCSKEYDATE} ${username} 24812 xx First log line 24813 xx Second log line 24814 xx 24815 br-change" 24816 dotest keywordlog-20 "${testcvs} -q co -p first-dir/file1" \ 24817 "initial 24818 xx "'\$'"Log: file1,v "'\$'" 24819 xx Revision 1\.5 ${RCSKEYDATE} ${username} 24820 xx modify 24821 xx 24822 xx Revision 1\.4 ${RCSKEYDATE} ${username} 24823 xx First log line 24824 xx Second log line 24825 xx 24826 change" 24827 dotest keywordlog-21 "${testcvs} -q co -p -r 1.4 first-dir/file1" \ 24828 "initial 24829 xx "'\$'"Log: file1,v "'\$'" 24830 xx Revision 1\.4 ${RCSKEYDATE} ${username} 24831 xx First log line 24832 xx Second log line 24833 xx" 24834 24835 cd 2/first-dir 24836 # OK, the basic rule for keyword expansion is that it 24837 # happens on checkout. And the rule for annotate is that 24838 # it annotates a checked-in revision, rather than a checked-out 24839 # file. So, although it is kind of confusing that the latest 24840 # revision does not appear in the annotated output, and the 24841 # annotated output does not quite match what you'd get with 24842 # update or checkout, the behavior is more or less logical. 24843 # The same issue occurs with annotate and other keywords, 24844 # I think, although it is particularly noticeable for $Log. 24845 dotest keywordlog-22 "${testcvs} ann -r br file1" \ 24846 " 24847 Annotations for file1 24848 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 24849 1\.3 ($username8 *[0-9a-zA-Z-]*): initial 24850 1\.4\.2\.1 ($username8 *[0-9a-zA-Z-]*): xx "'\$'"Log: file1,v "'\$'" 24851 1\.4\.2\.1 ($username8 *[0-9a-zA-Z-]*): xx Revision 1\.4 ${RCSKEYDATE} $username 24852 1\.4\.2\.1 ($username8 *[0-9a-zA-Z-]*): xx First log line 24853 1\.4\.2\.1 ($username8 *[0-9a-zA-Z-]*): xx Second log line 24854 1\.4\.2\.1 ($username8 *[0-9a-zA-Z-]*): xx 24855 1\.4\.2\.1 ($username8 *[0-9a-zA-Z-]*): br-change" 24856 dotest keywordlog-23 "${testcvs} ann -r HEAD file1" \ 24857 " 24858 Annotations for file1 24859 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 24860 1\.3 ($username8 *[0-9a-zA-Z-]*): initial 24861 1\.5 ($username8 *[0-9a-zA-Z-]*): xx "'\$'"Log: file1,v "'\$'" 24862 1\.5 ($username8 *[0-9a-zA-Z-]*): xx Revision 1\.4 ${RCSKEYDATE} $username 24863 1\.5 ($username8 *[0-9a-zA-Z-]*): xx First log line 24864 1\.5 ($username8 *[0-9a-zA-Z-]*): xx Second log line 24865 1\.5 ($username8 *[0-9a-zA-Z-]*): xx 24866 1\.5 ($username8 *[0-9a-zA-Z-]*): change" 24867 cd ../.. 24868 24869 # 24870 # test the operation of 'admin -o' in conjunction with keywords 24871 # (especially Log - this used to munge the RCS file for all time) 24872 # 24873 24874 dotest keywordlog-24 \ 24875 "${testcvs} admin -oHEAD 1/first-dir/file1" \ 24876 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 24877 deleting revision 1\.5 24878 done" 24879 24880 dotest keywordlog-25 \ 24881 "${testcvs} -q co -p first-dir/file1" \ 24882 "initial 24883 xx "'\$'"Log: file1,v "'\$'" 24884 xx Revision 1\.4 ${RCSKEYDATE} ${username} 24885 xx First log line 24886 xx Second log line 24887 xx" 24888 24889 # Now test the behavior when the comment leader exceeds the 24890 # configured maximum. 24891 mkdir 3; cd 3 24892 dotest keywordlog-26 "$testcvs -Q co first-dir" 24893 24894 cd first-dir 24895 sed 's/xx \$/1234567890123456789 $/' <file1 >tmp 24896 mv tmp file1 24897 dotest keywordlog-27 "$testcvs -Q ci -mrevision-5" 24898 dotest keywordlog-28 "cat file1" \ 24899 "initial 24900 1234567890123456789 "'\$'"Log: file1,v "'\$'" 24901 1234567890123456789 Revision 1\.5 $RCSKEYDATE $username 24902 1234567890123456789 revision-5 24903 1234567890123456789 24904 xx Revision 1\.4 $RCSKEYDATE $username 24905 xx First log line 24906 xx Second log line 24907 xx" 24908 24909 sed 's/1234567890123456789 \$/12345678901234567890 $/' <file1 >tmp 24910 mv tmp file1 24911 dotest keywordlog-29 "$testcvs -Q ci -mrevision-6" \ 24912 "$SPROG commit: Skipping "'`$''Log$'"' keyword due to excessive comment leader\." 24913 dotest keywordlog-30 "cat file1" \ 24914 "initial 24915 12345678901234567890 "'\$'"Log: file1,v "'\$'" 24916 1234567890123456789 Revision 1\.5 $RCSKEYDATE $username 24917 1234567890123456789 revision-5 24918 1234567890123456789 24919 xx Revision 1\.4 $RCSKEYDATE $username 24920 xx First log line 24921 xx Second log line 24922 xx" 24923 24924 # Check that the Log-related config options work. 24925 cd .. 24926 dotest keywordlog-31 "$testcvs -Q co CVSROOT" 24927 cd CVSROOT 24928 echo "UseArchiveCommentLeader=TrUe" >>config 24929 dotest keywordlog-32 "$testcvs -Q ci -mset-UseArchiveCommentLeader" 24930 24931 cd ../first-dir 24932 dotest keywordlog-33 "$testcvs -Q ci -fmrevision-7 file1" 24933 dotest keywordlog-34 "cat file1" \ 24934 "initial 24935 12345678901234567890 "'\$'"Log: file1,v "'\$'" 24936 # Revision 1\.7 $RCSKEYDATE $username 24937 # revision-7 24938 # 24939 1234567890123456789 Revision 1\.5 $RCSKEYDATE $username 24940 1234567890123456789 revision-5 24941 1234567890123456789 24942 xx Revision 1\.4 $RCSKEYDATE $username 24943 xx First log line 24944 xx Second log line 24945 xx" 24946 24947 cd ../CVSROOT 24948 echo "MaxCommentLeaderLength=1k" >>config 24949 dotest keywordlog-35 "$testcvs -Q ci -mset-MaxCommentLeaderLength" 24950 24951 cd ../first-dir 24952 dotest keywordlog-36 "$testcvs -Q ci -fmrevision-8 file1" 24953 dotest keywordlog-37 "cat file1" \ 24954 "initial 24955 12345678901234567890 "'\$'"Log: file1,v "'\$'" 24956 12345678901234567890 Revision 1\.8 $RCSKEYDATE $username 24957 12345678901234567890 revision-8 24958 12345678901234567890 24959 # Revision 1\.7 $RCSKEYDATE $username 24960 # revision-7 24961 # 24962 1234567890123456789 Revision 1\.5 $RCSKEYDATE $username 24963 1234567890123456789 revision-5 24964 1234567890123456789 24965 xx Revision 1\.4 $RCSKEYDATE $username 24966 xx First log line 24967 xx Second log line 24968 xx" 24969 24970 dokeep 24971 cd ../.. 24972 restore_adm 24973 rm -r 1 2 3 24974 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 24975 ;; 24976 24977 24978 24979 keywordname) 24980 # Test the Name keyword. 24981 # See the keyword test for a descriptions of some other tests that 24982 # test keyword expansion modes. 24983 mkdir keywordname; cd keywordname 24984 mkdir 1; cd 1 24985 dotest keywordname-init-1 "${testcvs} -q co -l ." '' 24986 mkdir first-dir 24987 dotest keywordname-init-2 "${testcvs} add first-dir" \ 24988 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 24989 cd first-dir 24990 24991 echo '$'"Name$" >file1 24992 echo '$'"Name$" >file2 24993 dotest keywordname-init-3 "${testcvs} add file1 file2" \ 24994 "${SPROG} add: scheduling file .file1. for addition 24995 ${SPROG} add: scheduling file .file2. for addition 24996 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 24997 24998 # See "rmadd" for a list of other tests of cvs ci -r. 24999 dotest keywordname-init-4 "${testcvs} -q ci -r 1.3 -m add" \ 25000 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25001 initial revision: 1\.3 25002 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 25003 initial revision: 1\.3" 25004 25005 dotest keywordname-init-6 "${testcvs} -q up -A" 25006 dotest keywordname-init-7 "${testcvs} -q tag -b br" \ 25007 "T file1 25008 T file2" 25009 25010 echo new data >>file1 25011 dotest keywordname-init-8 "${testcvs} -q ci -mchange" \ 25012 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25013 new revision: 1\.4; previous revision: 1\.3" 25014 25015 # First check out a branch. 25016 # 25017 # There used to be a bug where static tags would be substituted for 25018 # Name keywords but not branch tags. 25019 # 25020 # FIXCVS - BUG 25021 # Why shouldn't the non-update case not cause a substitution? 25022 # An update -kk or -A will unsub and sub keywords without updates 25023 # being required. 25024 # FIXCVS - see note above keyword-21 25025 dotest keywordname-update-1 "${testcvs} -q up -rbr" "U file1" \ 25026 "P file1 25027 ${CPROG} update: checksum failure after patch to \./file1; will refetch 25028 ${CPROG} client: refetching unpatchable files 25029 $SPROG update: warning: \`file1' was lost 25030 U file1" 25031 dotest keywordname-update-2 "cat file1" '\$'"Name: br "'\$' 25032 dotest keywordname-update-3 "cat file2" '\$'"Name: "'\$' 25033 25034 # Now verify that updating to the trunk leaves no substitution for 25035 # $Name 25036 dotest keywordname-update-4 "${testcvs} -q tag firsttag" \ 25037 "T file1 25038 T file2" 25039 # FIXCVS - see note above keyword-21 25040 dotest keywordname-update-5 "${testcvs} -q up -A" "U file1" \ 25041 "P file1 25042 ${CPROG} update: checksum failure after patch to \./file1; will refetch 25043 ${CPROG} client: refetching unpatchable files 25044 $SPROG update: warning: \`file1' was lost 25045 U file1" 25046 dotest keywordname-update-6 "cat file1" \ 25047 '\$'"Name: "'\$'" 25048 new data" 25049 dotest keywordname-update-7 "cat file2" '\$'"Name: "'\$' 25050 25051 # But updating to a static tag does cause a substitution 25052 # FIXCVS - see same note above 25053 dotest keywordname-update-8 "${testcvs} -q up -rfirsttag" "U file1" \ 25054 "P file1 25055 ${CPROG} update: checksum failure after patch to \./file1; will refetch 25056 ${CPROG} client: refetching unpatchable files 25057 $SPROG update: warning: \`file1' was lost 25058 U file1" 25059 dotest keywordname-update-9 "cat file1" '\$'"Name: firsttag "'\$' 25060 dotest keywordname-update-10 "cat file2" '\$'"Name: "'\$' 25061 25062 # And reverify the trunk update when the change is actually removed. 25063 dotest keywordname-update-11 "${testcvs} -q up -A" "[UP] file1" \ 25064 "P file1 25065 ${CPROG} update: checksum failure after patch to ./file1; will refetch 25066 ${CPROG} client: refetching unpatchable files 25067 $SPROG update: warning: \`file1' was lost 25068 U file1" 25069 dotest keywordname-update-12 "cat file1" \ 25070 '\$'"Name: "'\$'" 25071 new data" 25072 dotest keywordname-update-13 "cat file2" '\$'"Name: "'\$' 25073 25074 cd ../.. 25075 25076 # now verify that a fresh checkout substitutes all the $Name fields 25077 mkdir 2; cd 2 25078 dotest keywordname-checkout-1 \ 25079 "${testcvs} -q co -rfirsttag first-dir" \ 25080 "U first-dir/file1 25081 U first-dir/file2" 25082 cd first-dir 25083 dotest keywordname-checkout-2 "cat file1" '\$'"Name: firsttag "'\$' 25084 dotest keywordname-checkout-3 "cat file2" '\$'"Name: firsttag "'\$' 25085 25086 dokeep 25087 cd ../../.. 25088 rm -r keywordname 25089 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 25090 ;; 25091 25092 25093 25094 keyword2) 25095 # Test merging on files with keywords: 25096 # without -kk 25097 # with -kk 25098 # on text files 25099 # on binary files 25100 # Note: This test assumes that CVS has already passed the binfiles 25101 # test sequence 25102 # Note2: We are testing positive on binary corruption here 25103 # we probably really DON'T want to 'cvs update -kk' a binary file... 25104 mkdir 1; cd 1 25105 dotest keyword2-1 "${testcvs} -q co -l ." '' 25106 mkdir first-dir 25107 dotest keyword2-2 "${testcvs} add first-dir" \ 25108 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 25109 cd first-dir 25110 25111 echo '$''Revision$' >> file1 25112 echo "I" >>file1 25113 echo "like" >>file1 25114 echo "long" >>file1 25115 echo "files!" >>file1 25116 echo "" >>file1 25117 echo "a test line for our times" >>file1 25118 echo "" >>file1 25119 echo "They" >>file1 25120 echo "make" >>file1 25121 echo "diff" >>file1 25122 echo "look like it" >>file1 25123 echo "did a much better" >>file1 25124 echo "job." >>file1 25125 dotest keyword2-3 "${testcvs} add file1" \ 25126 "${SPROG} add: scheduling file .file1. for addition 25127 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 25128 25129 ${AWK} 'BEGIN { printf "%c%c%c%sRevision: 1.1 $@%c%c", \ 25130 2, 10, 137, "$", 13, 10 }' \ 25131 </dev/null | ${TR} '@' '\000' >../binfile.dat 25132 cp ../binfile.dat . 25133 dotest keyword2-5 "${testcvs} add -kb binfile.dat" \ 25134 "${SPROG} add: scheduling file .binfile\.dat. for addition 25135 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 25136 25137 dotest keyword2-6 "${testcvs} -q ci -m add" \ 25138 "$CVSROOT_DIRNAME/first-dir/binfile\.dat,v <-- binfile\.dat 25139 initial revision: 1\.1 25140 $CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25141 initial revision: 1\.1" 25142 25143 dotest keyword2-7 "${testcvs} -q tag -b branch" \ 25144 "T binfile\.dat 25145 T file1" 25146 25147 sed -e 's/our/the best of and the worst of/' file1 >f; mv f file1 25148 dotest keyword2-8 "${testcvs} -q ci -m change" \ 25149 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25150 new revision: 1\.2; previous revision: 1\.1" 25151 25152 dotest keyword2-9 "${testcvs} -q update -r branch" '[UP] file1' 25153 25154 echo "what else do we have?" >>file1 25155 dotest keyword2-10 "${testcvs} -q ci -m change" \ 25156 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25157 new revision: 1\.1\.2\.1; previous revision: 1\.1" 25158 25159 # Okay, first a conflict in file1 - should be okay with binfile.dat 25160 dotest keyword2-11 "${testcvs} -q update -A -j branch" \ 25161 "U file1 25162 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 25163 retrieving revision 1\.1 25164 retrieving revision 1\.1\.2\.1 25165 Merging differences between 1\.1 and 1\.1\.2\.1 into file1 25166 rcsmerge: warning: conflicts during merge" 25167 25168 dotest_fail keyword2-12 "${testcvs} diff file1" \ 25169 "Index: file1 25170 =================================================================== 25171 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 25172 retrieving revision 1\.2 25173 diff -r1\.2 file1 25174 0a1 25175 > <<<<<<< file1 25176 1a3,5 25177 > ======= 25178 > \\\$""Revision: 1\.1\.2\.1 \\\$ 25179 > >>>>>>> 1\.1\.2\.1 25180 14a19 25181 > what else do we have${QUESTION}" 25182 25183 # Here's the problem... shouldn't -kk a binary file... 25184 rm file1 25185 dotest keyword2-13 "${testcvs} -q update -A -kk -j branch" \ 25186 "${SPROG} update: warning: \`file1' was lost 25187 U file1 25188 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 25189 retrieving revision 1\.1 25190 retrieving revision 1\.1\.2\.1 25191 Merging differences between 1\.1 and 1\.1\.2\.1 into file1" 25192 25193 # binfile won't get checked in, but it is now corrupt and could 25194 # have been checked in if it had changed on the branch... 25195 dotest keyword2-14 "${testcvs} -q ci -m change" \ 25196 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25197 new revision: 1\.3; previous revision: 1\.2" 25198 25199 # "-kk" no longer corrupts binary files 25200 dotest keyword2-15 "cmp binfile.dat ../binfile.dat" '' 25201 25202 # Okay, restore everything and make CVS try and merge a binary file... 25203 # "-kk" no longer affects binary files 25204 dotest keyword2-16 "${testcvs} -q update -A" \ 25205 "[UP] file1" 25206 dotest keyword2-17 "${testcvs} -q tag -b branch2" \ 25207 "T binfile\.dat 25208 T file1" 25209 dotest keyword2-18 "${testcvs} -q update -r branch2" '' 25210 25211 ${AWK} 'BEGIN { printf "%c%c%c@%c%c", 2, 10, 137, 13, 10 }' \ 25212 </dev/null | ${TR} '@' '\000' >>binfile.dat 25213 dotest keyword2-19 "$testcvs -q ci -m badbadbad" \ 25214 "$CVSROOT_DIRNAME/first-dir/binfile\.dat,v <-- binfile\.dat 25215 new revision: 1\.1\.4\.1; previous revision: 1\.1" 25216 # "-kk" no longer affects binary files 25217 25218 # XXXX: do not ask, why we get the "U binfile.dat" line twice 25219 # looks like a bug! 25220 dotest keyword2-20 "${testcvs} -q update -A -kk -j branch2" \ 25221 "U binfile\.dat 25222 U binfile\.dat 25223 U file1" 25224 25225 dokeep 25226 cd ../.. 25227 rm -r 1 25228 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 25229 ;; 25230 25231 25232 25233 head) 25234 # Testing handling of the HEAD special tag. 25235 # There are many cases involving added and removed files 25236 # which we don't yet try to deal with. 25237 # TODO: We also could be paying much closer attention to 25238 # "head of the trunk" versus "head of the default branch". 25239 # That is what "cvs import" is doing here (but I didn't really 25240 # fully follow through on writing the tests for that case). 25241 mkdir imp-dir 25242 cd imp-dir 25243 echo 'imported contents' >file1 25244 # It may seem like we don't do much with file2, but do note that 25245 # the "cvs diff" invocations do also diff file2 (and come up empty). 25246 echo 'imported contents' >file2 25247 dotest_sort head-1 "${testcvs} import -m add first-dir tag1 tag2" \ 25248 " 25249 25250 N first-dir/file1 25251 N first-dir/file2 25252 No conflicts created by this import" 25253 cd .. 25254 rm -r imp-dir 25255 mkdir 1 25256 cd 1 25257 dotest head-2 "${testcvs} -q co first-dir" \ 25258 "U first-dir/file1 25259 U first-dir/file2" 25260 cd first-dir 25261 echo 'add a line on trunk' >> file1 25262 dotest head-3 "${testcvs} -q ci -m modify" \ 25263 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25264 new revision: 1\.2; previous revision: 1\.1" 25265 dotest head-4 "${testcvs} -q tag trunktag" "T file1 25266 T file2" 25267 echo 'add a line on trunk after trunktag' >> file1 25268 dotest head-5 "${testcvs} -q ci -m modify" \ 25269 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25270 new revision: 1\.3; previous revision: 1\.2" 25271 dotest head-6 "${testcvs} -q tag -b br1" "T file1 25272 T file2" 25273 dotest head-7 "${testcvs} -q update -r br1" "" 25274 echo 'modify on branch' >>file1 25275 dotest head-8 "${testcvs} -q ci -m modify" \ 25276 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25277 new revision: 1\.3\.2\.1; previous revision: 1\.3" 25278 dotest head-9 "${testcvs} -q tag brtag" "T file1 25279 T file2" 25280 echo 'modify on branch after brtag' >>file1 25281 dotest head-10 "${testcvs} -q ci -m modify" \ 25282 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25283 new revision: 1\.3\.2\.2; previous revision: 1\.3\.2\.1" 25284 # With no sticky tags, HEAD is the head of the trunk. 25285 dotest head-trunk-setup "${testcvs} -q update -A" "[UP] file1" 25286 dotest head-trunk-update "${testcvs} -q update -r HEAD -p file1" \ 25287 "imported contents 25288 add a line on trunk 25289 add a line on trunk after trunktag" 25290 # and diff thinks so too. Case (a) from the comment in 25291 # cvs.texinfo (Common options). 25292 dotest_fail head-trunk-diff "${testcvs} -q diff -c -r HEAD -r br1" \ 25293 "Index: file1 25294 =================================================================== 25295 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 25296 retrieving revision 1\.3 25297 retrieving revision 1\.3\.2\.2 25298 diff -c -r1\.3 -r1\.3\.2\.2 25299 \*\*\* file1 ${RFCDATE} 1\.3 25300 --- file1 ${RFCDATE} 1\.3\.2\.2 25301 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 25302 \*\*\* 1,3 \*\*\*\* 25303 --- 1,5 ---- 25304 imported contents 25305 add a line on trunk 25306 add a line on trunk after trunktag 25307 ${PLUS} modify on branch 25308 ${PLUS} modify on branch after brtag" 25309 25310 # With a branch sticky tag, HEAD is the head of the trunk. 25311 dotest head-br1-setup "${testcvs} -q update -r br1" "[UP] file1" 25312 dotest head-br1-update "${testcvs} -q update -r HEAD -p file1" \ 25313 "imported contents 25314 add a line on trunk 25315 add a line on trunk after trunktag" 25316 # But diff thinks that HEAD is "br1". Case (b) from cvs.texinfo. 25317 # Probably people are relying on it. 25318 dotest head-br1-diff "${testcvs} -q diff -c -r HEAD -r br1" "" 25319 25320 # With a nonbranch sticky tag on a branch, 25321 # HEAD is the head of the trunk 25322 dotest head-brtag-setup "${testcvs} -q update -r brtag" "[UP] file1" 25323 dotest head-brtag-update "${testcvs} -q update -r HEAD -p file1" \ 25324 "imported contents 25325 add a line on trunk 25326 add a line on trunk after trunktag" 25327 25328 # CVS 1.9 and older thought that HEAD is "brtag" (this was 25329 # noted as "strange, maybe accidental"). But "br1" makes a 25330 # whole lot more sense. 25331 dotest head-brtag-diff "${testcvs} -q diff -c -r HEAD -r br1" "" 25332 25333 # With a nonbranch sticky tag on the trunk, HEAD is the head 25334 # of the trunk, I think. 25335 dotest head-trunktag-setup "${testcvs} -q update -r trunktag" \ 25336 "[UP] file1" 25337 dotest head-trunktag-check "cat file1" "imported contents 25338 add a line on trunk" 25339 dotest head-trunktag-update "${testcvs} -q update -r HEAD -p file1" \ 25340 "imported contents 25341 add a line on trunk 25342 add a line on trunk after trunktag" 25343 # Like head-brtag-diff, there is a non-branch sticky tag. 25344 dotest_fail head-trunktag-diff \ 25345 "${testcvs} -q diff -c -r HEAD -r br1" \ 25346 "Index: file1 25347 =================================================================== 25348 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 25349 retrieving revision 1\.3 25350 retrieving revision 1\.3\.2\.2 25351 diff -c -r1\.3 -r1\.3\.2\.2 25352 \*\*\* file1 ${RFCDATE} 1\.3 25353 --- file1 ${RFCDATE} 1\.3\.2\.2 25354 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 25355 \*\*\* 1,3 \*\*\*\* 25356 --- 1,5 ---- 25357 imported contents 25358 add a line on trunk 25359 add a line on trunk after trunktag 25360 ${PLUS} modify on branch 25361 ${PLUS} modify on branch after brtag" 25362 25363 # Also might test what happens if we setup with update -r 25364 # HEAD. In general, if sticky tags matter, does the 25365 # behavior of "update -r <foo>" (without -p) depend on the 25366 # sticky tags before or after the update? 25367 25368 # Note that we are testing both the case where this deletes 25369 # a revision (file1) and the case where it does not (file2) 25370 dotest_fail head-o0a "${testcvs} admin -o ::br1" \ 25371 "${SPROG} admin: Administrating \. 25372 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 25373 ${SPROG} admin: cannot remove revision 1\.3\.2\.1 because it has tags 25374 ${SPROG} admin: RCS file for .file1. not modified\. 25375 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 25376 done" 25377 dotest head-o0b "${testcvs} tag -d brtag" \ 25378 "${SPROG} tag: Untagging \. 25379 D file1 25380 D file2" 25381 dotest head-o1 "${testcvs} admin -o ::br1" \ 25382 "${SPROG} admin: Administrating \. 25383 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 25384 deleting revision 1\.3\.2\.1 25385 done 25386 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 25387 done" 25388 25389 dokeep 25390 cd ../.. 25391 rm -r 1 25392 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 25393 ;; 25394 25395 25396 25397 tagdate) 25398 # Test combining -r and -D. 25399 # 25400 # Note that this is not a complete test. It relies on the fact 25401 # that update, checkout and export have a LOT of shared code. 25402 # Notice: 25403 # 1) checkout is never tested at all with -r -D 25404 # 2) update never uses an argument to '-D' besides 'now' 25405 # (this test does not provide enough data to prove 25406 # that 'cvs update' with both a '-r' and a '-D' 25407 # specified does not ignore '-D': a 'cvs up 25408 # -r<branch> -Dnow' and a 'cvs up -r<branch>' 25409 # should specify the same file revision). 25410 # 3) export uses '-r<branch> -D<when there was a different 25411 # revision>', hopefully completing this behavior test 25412 # for checkout and update as well. 25413 # 25414 mkdir 1; cd 1 25415 save_TZ=$TZ 25416 TZ=UTC0; export TZ 25417 dotest tagdate-1 "${testcvs} -q co -l ." '' 25418 mkdir first-dir 25419 dotest tagdate-2 "${testcvs} add first-dir" \ 25420 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 25421 cd first-dir 25422 25423 echo trunk-1 >file1 25424 dotest tagdate-3 "${testcvs} add file1" \ 25425 "${SPROG} add: scheduling file .file1. for addition 25426 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 25427 dotest tagdate-4 "${testcvs} -q ci -m add" \ 25428 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25429 initial revision: 1\.1" 25430 date_T1=`getrlogdate -r1.1 first-dir/file1` 25431 25432 dotest tagdate-5 "${testcvs} -q tag -b br1" "T file1" 25433 dotest tagdate-6 "${testcvs} -q tag -b br2" "T file1" 25434 echo trunk-2 >file1 25435 dotest tagdate-7 "${testcvs} -q ci -m modify-on-trunk" \ 25436 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25437 new revision: 1\.2; previous revision: 1\.1" 25438 date_T2=`getrlogdate -r1.2 first-dir/file1` 25439 25440 # We are testing -r -D where br1 is a (magic) branch without 25441 # any revisions. First the case where br2 doesn't have any 25442 # revisions either: 25443 dotest tagdate-8 "${testcvs} -q update -p -r br1 -D now" "trunk-1" 25444 dotest tagdate-9 "${testcvs} -q update -r br2" "[UP] file1" 25445 echo br2-1 >file1 25446 dotest tagdate-10 "${testcvs} -q ci -m modify-on-br2" \ 25447 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25448 new revision: 1\.1\.4\.1; previous revision: 1\.1" 25449 date_T3=`getrlogdate -r1.1.4.1 first-dir/file1` 25450 25451 # Then the case where br2 does have revisions: 25452 dotest tagdate-11 "${testcvs} -q update -p -r br1 -D now" "trunk-1" 25453 25454 # Joins from dates on the head used to be prohibited. 25455 dotest tagdate-12 "$testcvs -q update -j:yesterday -j:now" 25456 dotest tagdate-12b "$testcvs -Q update -C" 25457 # And check export 25458 25459 echo br2-2 >file1 25460 dotest tagdate-13 "${testcvs} -q ci -m modify-2-on-br2" \ 25461 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25462 new revision: 1\.1\.4\.2; previous revision: 1\.1\.4\.1" 25463 date_T4=`getrlogdate -r1.1.4.2 first-dir/file1` 25464 25465 # Test diff -r<tag>:<date> with two revisions specified. 25466 dotest_fail tagdate-13b \ 25467 "$testcvs -q diff -u -rbr2:'$date_T3' -rbr2:now file1" \ 25468 "Index: file1 25469 =================================================================== 25470 RCS file: $CVSROOT_DIRNAME/first-dir/file1,v 25471 retrieving revision 1\.1\.4\.1 25472 retrieving revision 1\.1\.4\.2 25473 diff -u -r1\.1\.4\.1 -r1\.1\.4\.2 25474 --- file1 $RFCDATE 1\.1\.4\.1 25475 +++ file1 $RFCDATE 1\.1\.4\.2 25476 @@ -1 ${PLUS}1 @@ 25477 -br2-1 25478 ${PLUS}br2-2" 25479 25480 # Tag a date on a branch. 25481 dotest tagdate-13c "$testcvs -q tag -rbr2:'$date_T3' tagdate" \ 25482 "T file1" 25483 dotest tagdate-13d "$testcvs -q update -rtagdate" "[UP] file1" 25484 dotest tagdate-13e "cat file1" "br2-1" 25485 25486 # This one should fail, though currently without an error message, 25487 # since a date on a static tag is meaningless. 25488 dotest tagdate-13f "$testcvs -q tag -rtagdate:'$date_T3' tagdate" 25489 25490 # and restore to using the trunk for future tests. 25491 dotest tagdate-13g "$testcvs -q up -rbr2" "[UP] file1" 25492 25493 cd ../.. 25494 mkdir 2; cd 2 25495 dotest tagdate-14 \ 25496 "$testcvs -q export -r br2 -D'$date_T3' first-dir" \ 25497 "[UP] first-dir/file1" 25498 dotest tagdate-14b "cat first-dir/file1" "br2-1" 25499 dotest tagdate-15 \ 25500 "$testcvs -q export -rbr2:'$date_T3' -dsecond-dir first-dir" \ 25501 "[UP] second-dir/file1" 25502 dotest tagdate-15b "cat second-dir/file1" "br2-1" 25503 25504 # Now for annotate 25505 cd ../1/first-dir 25506 dotest tagdate-16 "${testcvs} annotate -rbr2 -D'$date_T3'" \ 25507 " 25508 Annotations for file1 25509 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 25510 1\.1\.4\.1 ($username8 *[0-9a-zA-Z-]*): br2-1" 25511 25512 dotest tagdate-17 "${testcvs} annotate -rbr2 -Dnow" \ 25513 " 25514 Annotations for file1 25515 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 25516 1\.1\.4\.2 ($username8 *[0-9a-zA-Z-]*): br2-2" 25517 25518 # Now check to see what happens when we add files to br2 and trunk 25519 echo br2-1 > file3 25520 dotest tagdate-18 "${testcvs} add file3" \ 25521 "${SPROG} add: scheduling file \`file3' for addition on branch \`br2' 25522 ${SPROG} add: use \`${SPROG} commit' to add this file permanently" 25523 dotest tagdate-19 "${testcvs} -q ci -m add file3" \ 25524 "$CVSROOT_DIRNAME/first-dir/Attic/file3,v <-- file3 25525 new revision: 1\.1\.2\.1; previous revision: 1\.1" 25526 date_T5=`getrlogdate -r1.1 first-dir/file3` 25527 date_T6=`getrlogdate -r1.1.2.1 first-dir/file3` 25528 25529 cd ../.. 25530 mkdir 3; cd 3 25531 dotest tagdate-20 "${testcvs} -Q co first-dir" '' 25532 cd first-dir 25533 echo trunk-1 > file2 25534 dotest tagdate-21 "${testcvs} add file2" \ 25535 "${SPROG} add: scheduling file .file2. for addition 25536 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 25537 dotest tagdate-22 "${testcvs} -q ci -m add file2" \ 25538 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 25539 initial revision: 1\.1" 25540 date_T7=`getrlogdate -r1.1 first-dir/file2` 25541 echo "trunk-2" >file2 25542 dotest tagdate-23 "${testcvs} -q ci -m update file2" \ 25543 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 25544 new revision: 1\.2; previous revision: 1\.1" 25545 date_T8=`getrlogdate -r1.2 first-dir/file2` 25546 25547 cd ../../1/first-dir 25548 echo br2-1 > file2 25549 dotest tagdate-24 "${testcvs} add file2" \ 25550 "${SPROG} add: scheduling file \`file2' for addition on branch \`br2' 25551 ${SPROG} add: use \`${SPROG} commit' to add this file permanently" 25552 dotest tagdate-25 "${testcvs} -q ci -m add file2" \ 25553 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 25554 new revision: 1\.2\.2\.2; previous revision: 1\.2\.2\.1" 25555 date_T9=`getrlogdate -r1.2.2.2 first-dir/file2` 25556 cd ../.. 25557 25558 # Time Rev Branch Comments 25559 # T0 trunk first-dir created 25560 # T1 1.1 trunk first-dir/file1 committed "trunk-1" 25561 # br1 branch created 25562 # br2 branch created 25563 # T2 1.2 trunk first-dir/file1 committed "trunk-2" 25564 # T3 1.1.4.1 br2 first-dir/file1 committed "br2-1" 25565 # +60s 25566 # T4 1.1.4.2 br2 first-dir/file1 committed "br2-2" 25567 # T5 1.1 trunk first-dir/file3 dead 25568 # T6 1.1.2.1 br2 first-dir/file3 committed "br2-1" 25569 # T7 1.1 trunk first-dir/file2 committed "trunk-1" 25570 # T8 1.2 trunk first-dir/file2 committed "trunk-2" 25571 # T8 1.2.2.1 br2 first-dir/file2 dead 25572 # T9 1.2.2.2 br2 first-dir/file2 committed "br2-1" 25573 # 25574 25575 mkdir 4; cd 4 25576 (echo Dates for tagdate-26-* are:;\ 25577 echo " date_T1='$date_T1'";\ 25578 echo " date_T2='$date_T2'";\ 25579 echo " date_T3='$date_T3'";\ 25580 echo " date_T4='$date_T4'";\ 25581 echo " date_T5='$date_T5'";\ 25582 echo " date_T6='$date_T6'";\ 25583 echo " date_T7='$date_T7'";\ 25584 echo " date_T8='$date_T8'";\ 25585 echo " date_T9='$date_T9'") >>$LOGFILE 25586 dotest tagdate-26-trunk-t1 \ 25587 "${testcvs} co -D'$date_T1' -d first-dir-trunk-t1 first-dir" \ 25588 "${SPROG} checkout: Updating first-dir-trunk-t1 25589 U first-dir-trunk-t1/file1" 25590 dotest tagdate-26-br2-t1 \ 25591 "${testcvs} co -r br2 -D'$date_T1' -d first-dir-br2-t1 first-dir" \ 25592 "${SPROG} checkout: Updating first-dir-br2-t1 25593 U first-dir-br2-t1/file1" 25594 dotest tagdate-26-trunk-t2 \ 25595 "${testcvs} co -D'$date_T2' -d first-dir-trunk-t2 first-dir" \ 25596 "${SPROG} checkout: Updating first-dir-trunk-t2 25597 U first-dir-trunk-t2/file1" 25598 dotest tagdate-26-br2-t2 \ 25599 "${testcvs} co -r br2 -D'$date_T2' -d first-dir-br2-t2 first-dir" \ 25600 "${SPROG} checkout: Updating first-dir-br2-t2 25601 U first-dir-br2-t2/file1" 25602 dotest tagdate-26-br2-t3 \ 25603 "${testcvs} co -r br2 -D'$date_T3' -d first-dir-br2-t3 first-dir" \ 25604 "${SPROG} checkout: Updating first-dir-br2-t3 25605 U first-dir-br2-t3/file1" 25606 dotest tagdate-26-br2-t4 \ 25607 "${testcvs} co -r br2 -D'$date_T4' -d first-dir-br2-t4 first-dir" \ 25608 "${SPROG} checkout: Updating first-dir-br2-t4 25609 U first-dir-br2-t4/file1" 25610 dotest tagdate-26-br2-t6 \ 25611 "${testcvs} co -r br2 -D'$date_T6' -d first-dir-br2-t6 first-dir" \ 25612 "${SPROG} checkout: Updating first-dir-br2-t6 25613 U first-dir-br2-t6/file1 25614 U first-dir-br2-t6/file3" 25615 dotest tagdate-26-trunk-t7 \ 25616 "${testcvs} co -D'$date_T7' -d first-dir-trunk-t7 first-dir" \ 25617 "${SPROG} checkout: Updating first-dir-trunk-t7 25618 U first-dir-trunk-t7/file1 25619 U first-dir-trunk-t7/file2" 25620 dotest tagdate-26-br2-t7 \ 25621 "${testcvs} co -r br2 -D'$date_T7' -d first-dir-br2-t7 first-dir" \ 25622 "${SPROG} checkout: Updating first-dir-br2-t7 25623 U first-dir-br2-t7/file1 25624 U first-dir-br2-t7/file3" 25625 dotest tagdate-26-trunk-t8 \ 25626 "${testcvs} co -D'$date_T8' -d first-dir-trunk-t8 first-dir" \ 25627 "${SPROG} checkout: Updating first-dir-trunk-t8 25628 U first-dir-trunk-t8/file1 25629 U first-dir-trunk-t8/file2" 25630 dotest tagdate-26-br2-t8 \ 25631 "${testcvs} co -r br2 -D'$date_T8' -d first-dir-br2-t8 first-dir" \ 25632 "${SPROG} checkout: Updating first-dir-br2-t8 25633 U first-dir-br2-t8/file1 25634 U first-dir-br2-t8/file3" 25635 dotest tagdate-26-br2-t9 \ 25636 "${testcvs} co -r br2 -D'$date_T9' -d first-dir-br2-t9 first-dir" \ 25637 "${SPROG} checkout: Updating first-dir-br2-t9 25638 U first-dir-br2-t9/file1 25639 U first-dir-br2-t9/file2 25640 U first-dir-br2-t9/file3" 25641 dotest tagdate-27-trunk-t1 \ 25642 "${testcvs} status first-dir-trunk-t1" \ 25643 "${SPROG} status: Examining first-dir-trunk-t1 25644 =================================================================== 25645 File: file1 Status: Up-to-date 25646 25647 Working revision: 1\.1[^.]* 25648 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file1,v 25649 Commit Identifier: ${commitid} 25650 Sticky Tag: (none) 25651 Sticky Date: ${RCSDELTADATE} 25652 Sticky Options: (none)" 25653 dotest tagdate-27-br2-t1 \ 25654 "${testcvs} status first-dir-br2-t1" \ 25655 "${SPROG} status: Examining first-dir-br2-t1 25656 =================================================================== 25657 File: file1 Status: Needs Patch 25658 25659 Working revision: 1\.1[^.]* 25660 Repository revision: 1\.1\.4\.2 ${CVSROOT_DIRNAME}/first-dir/file1,v 25661 Commit Identifier: ${commitid} 25662 Sticky Tag: br2 (branch: 1\.1\.4) 25663 Sticky Date: (none) 25664 Sticky Options: (none)" 25665 dotest tagdate-27-trunk-t2 \ 25666 "${testcvs} status first-dir-trunk-t2" \ 25667 "${SPROG} status: Examining first-dir-trunk-t2 25668 =================================================================== 25669 File: file1 Status: Up-to-date 25670 25671 Working revision: 1\.2[^.]* 25672 Repository revision: 1\.2 ${CVSROOT_DIRNAME}/first-dir/file1,v 25673 Commit Identifier: ${commitid} 25674 Sticky Tag: (none) 25675 Sticky Date: ${RCSDELTADATE} 25676 Sticky Options: (none)" 25677 dotest tagdate-27-br2-t2 \ 25678 "${testcvs} status first-dir-br2-t2" \ 25679 "${SPROG} status: Examining first-dir-br2-t2 25680 =================================================================== 25681 File: file1 Status: Needs Patch 25682 25683 Working revision: 1\.1[^.]* 25684 Repository revision: 1\.1\.4\.2 ${CVSROOT_DIRNAME}/first-dir/file1,v 25685 Commit Identifier: ${commitid} 25686 Sticky Tag: br2 (branch: 1\.1\.4) 25687 Sticky Date: (none) 25688 Sticky Options: (none)" 25689 dotest tagdate-27-br2-t3 \ 25690 "${testcvs} status first-dir-br2-t3" \ 25691 "${SPROG} status: Examining first-dir-br2-t3 25692 =================================================================== 25693 File: file1 Status: Needs Patch 25694 25695 Working revision: 1\.1\.4\.1[^.]* 25696 Repository revision: 1\.1\.4\.2 ${CVSROOT_DIRNAME}/first-dir/file1,v 25697 Commit Identifier: ${commitid} 25698 Sticky Tag: br2 (branch: 1\.1\.4) 25699 Sticky Date: (none) 25700 Sticky Options: (none)" 25701 dotest tagdate-27-br2-t4 \ 25702 "${testcvs} status first-dir-br2-t4" \ 25703 "${SPROG} status: Examining first-dir-br2-t4 25704 =================================================================== 25705 File: file1 Status: Up-to-date 25706 25707 Working revision: 1\.1\.4\.2[^.]* 25708 Repository revision: 1\.1\.4\.2 ${CVSROOT_DIRNAME}/first-dir/file1,v 25709 Commit Identifier: ${commitid} 25710 Sticky Tag: br2 (branch: 1\.1\.4) 25711 Sticky Date: (none) 25712 Sticky Options: (none)" 25713 dotest tagdate-27-br2-t6 \ 25714 "${testcvs} status first-dir-br2-t6" \ 25715 "${SPROG} status: Examining first-dir-br2-t6 25716 =================================================================== 25717 File: file1 Status: Up-to-date 25718 25719 Working revision: 1\.1\.4\.2[^.]* 25720 Repository revision: 1\.1\.4\.2 ${CVSROOT_DIRNAME}/first-dir/file1,v 25721 Commit Identifier: ${commitid} 25722 Sticky Tag: br2 (branch: 1\.1\.4) 25723 Sticky Date: (none) 25724 Sticky Options: (none) 25725 25726 =================================================================== 25727 File: file3 Status: Up-to-date 25728 25729 Working revision: 1\.1\.2\.1[^.]* 25730 Repository revision: 1\.1\.2\.1 ${CVSROOT_DIRNAME}/first-dir/Attic/file3,v 25731 Commit Identifier: ${commitid} 25732 Sticky Tag: br2 (branch: 1\.1\.2) 25733 Sticky Date: (none) 25734 Sticky Options: (none)" 25735 dotest tagdate-27-trunk-t7 \ 25736 "${testcvs} status first-dir-trunk-t7" \ 25737 "${SPROG} status: Examining first-dir-trunk-t7 25738 =================================================================== 25739 File: file1 Status: Up-to-date 25740 25741 Working revision: 1\.2[^.]* 25742 Repository revision: 1\.2 ${CVSROOT_DIRNAME}/first-dir/file1,v 25743 Commit Identifier: ${commitid} 25744 Sticky Tag: (none) 25745 Sticky Date: ${RCSDELTADATE} 25746 Sticky Options: (none) 25747 25748 =================================================================== 25749 File: file2 Status: Up-to-date 25750 25751 Working revision: 1\.1[^.]* 25752 Repository revision: 1\.1 ${CVSROOT_DIRNAME}/first-dir/file2,v 25753 Commit Identifier: ${commitid} 25754 Sticky Tag: (none) 25755 Sticky Date: ${RCSDELTADATE} 25756 Sticky Options: (none)" 25757 dotest tagdate-27-br2-t7 \ 25758 "${testcvs} status first-dir-br2-t7" \ 25759 "${SPROG} status: Examining first-dir-br2-t7 25760 =================================================================== 25761 File: file1 Status: Up-to-date 25762 25763 Working revision: 1\.1\.4\.2[^.]* 25764 Repository revision: 1\.1\.4\.2 ${CVSROOT_DIRNAME}/first-dir/file1,v 25765 Commit Identifier: ${commitid} 25766 Sticky Tag: br2 (branch: 1\.1\.4) 25767 Sticky Date: (none) 25768 Sticky Options: (none) 25769 25770 =================================================================== 25771 File: file3 Status: Up-to-date 25772 25773 Working revision: 1\.1\.2\.1[^.]* 25774 Repository revision: 1\.1\.2\.1 ${CVSROOT_DIRNAME}/first-dir/Attic/file3,v 25775 Commit Identifier: ${commitid} 25776 Sticky Tag: br2 (branch: 1\.1\.2) 25777 Sticky Date: (none) 25778 Sticky Options: (none)" 25779 dotest tagdate-27-trunk-t8 \ 25780 "${testcvs} status first-dir-trunk-t8" \ 25781 "${SPROG} status: Examining first-dir-trunk-t8 25782 =================================================================== 25783 File: file1 Status: Up-to-date 25784 25785 Working revision: 1\.2[^.]* 25786 Repository revision: 1\.2 ${CVSROOT_DIRNAME}/first-dir/file1,v 25787 Commit Identifier: ${commitid} 25788 Sticky Tag: (none) 25789 Sticky Date: ${RCSDELTADATE} 25790 Sticky Options: (none) 25791 25792 =================================================================== 25793 File: file2 Status: Up-to-date 25794 25795 Working revision: 1\.2[^.]* 25796 Repository revision: 1\.2 ${CVSROOT_DIRNAME}/first-dir/file2,v 25797 Commit Identifier: ${commitid} 25798 Sticky Tag: (none) 25799 Sticky Date: ${RCSDELTADATE} 25800 Sticky Options: (none)" 25801 dotest tagdate-27-br2-t8 \ 25802 "${testcvs} status first-dir-br2-t8" \ 25803 "${SPROG} status: Examining first-dir-br2-t8 25804 =================================================================== 25805 File: file1 Status: Up-to-date 25806 25807 Working revision: 1\.1\.4\.2[^.]* 25808 Repository revision: 1\.1\.4\.2 ${CVSROOT_DIRNAME}/first-dir/file1,v 25809 Commit Identifier: ${commitid} 25810 Sticky Tag: br2 (branch: 1\.1\.4) 25811 Sticky Date: (none) 25812 Sticky Options: (none) 25813 25814 =================================================================== 25815 File: file3 Status: Up-to-date 25816 25817 Working revision: 1\.1\.2\.1[^.]* 25818 Repository revision: 1\.1\.2\.1 ${CVSROOT_DIRNAME}/first-dir/Attic/file3,v 25819 Commit Identifier: ${commitid} 25820 Sticky Tag: br2 (branch: 1\.1\.2) 25821 Sticky Date: (none) 25822 Sticky Options: (none)" 25823 dotest tagdate-27-br2-t9 \ 25824 "${testcvs} status first-dir-br2-t9" \ 25825 "${SPROG} status: Examining first-dir-br2-t9 25826 =================================================================== 25827 File: file1 Status: Up-to-date 25828 25829 Working revision: 1\.1\.4\.2[^.]* 25830 Repository revision: 1\.1\.4\.2 ${CVSROOT_DIRNAME}/first-dir/file1,v 25831 Commit Identifier: ${commitid} 25832 Sticky Tag: br2 (branch: 1\.1\.4) 25833 Sticky Date: (none) 25834 Sticky Options: (none) 25835 25836 =================================================================== 25837 File: file2 Status: Up-to-date 25838 25839 Working revision: 1\.2\.2\.2[^.]* 25840 Repository revision: 1\.2\.2\.2 ${CVSROOT_DIRNAME}/first-dir/file2,v 25841 Commit Identifier: ${commitid} 25842 Sticky Tag: br2 (branch: 1\.2\.2) 25843 Sticky Date: (none) 25844 Sticky Options: (none) 25845 25846 =================================================================== 25847 File: file3 Status: Up-to-date 25848 25849 Working revision: 1\.1\.2\.1[^.]* 25850 Repository revision: 1\.1\.2\.1 ${CVSROOT_DIRNAME}/first-dir/Attic/file3,v 25851 Commit Identifier: ${commitid} 25852 Sticky Tag: br2 (branch: 1\.1\.2) 25853 Sticky Date: (none) 25854 Sticky Options: (none)" 25855 25856 # Now check the contents of the files 25857 dotest tagdate-28-trunk-t1 'cat first-dir-trunk-t1/file1' 'trunk-1' 25858 dotest tagdate-28-br2-t1 'cat first-dir-br2-t1/file1' 'trunk-1' 25859 dotest tagdate-28-trunk-t2 'cat first-dir-trunk-t2/file1' 'trunk-2' 25860 dotest tagdate-28-br2-t2 'cat first-dir-br2-t2/file1' 'trunk-1' 25861 dotest tagdate-28-br2-t3 'cat first-dir-br2-t3/file1' 'br2-1' 25862 dotest tagdate-28-br2-t4 'cat first-dir-br2-t4/file1' 'br2-2' 25863 dotest tagdate-28-br2-t6a 'cat first-dir-br2-t6/file1' "br2-2" 25864 dotest tagdate-28-br2-t6b 'cat first-dir-br2-t6/file3' "br2-1" 25865 dotest tagdate-28-trunk-t7a 'cat first-dir-trunk-t7/file1' "trunk-2" 25866 dotest tagdate-28-trunk-t7b 'cat first-dir-trunk-t7/file2' "trunk-1" 25867 dotest tagdate-28-br2-t7a 'cat first-dir-br2-t7/file1' "br2-2" 25868 dotest tagdate-28-br2-t7b 'cat first-dir-br2-t7/file3' "br2-1" 25869 dotest tagdate-28-trunk-t8a 'cat first-dir-trunk-t8/file1' "trunk-2" 25870 dotest tagdate-28-trunk-t8b 'cat first-dir-trunk-t8/file2' "trunk-2" 25871 dotest tagdate-28-br2-t8a 'cat first-dir-br2-t8/file1' "br2-2" 25872 dotest tagdate-28-br2-t8c 'cat first-dir-br2-t8/file3' "br2-1" 25873 dotest tagdate-28-br2-t9a 'cat first-dir-br2-t9/file1' "br2-2" 25874 dotest tagdate-28-br2-t9b 'cat first-dir-br2-t9/file2' "br2-1" 25875 dotest tagdate-28-br2-t9c 'cat first-dir-br2-t9/file3' "br2-1" 25876 cd .. 25877 25878 unset date_T1 date_T2 date_T3 date_T4 date_T5 25879 unset date_T6 date_T7 date_T8 date_T9 25880 TZ=$save_TZ 25881 25882 dokeep 25883 rm -r 1 2 3 4 25884 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 25885 ;; 25886 25887 25888 25889 multibranch2) 25890 # Commit the first delta on branch A when there is an older 25891 # branch, B, that already has a delta. A and B come from the 25892 # same branch point. Then verify that branches A and B are 25893 # in the right order. 25894 mkdir 1; cd 1 25895 dotest multibranch2-1 "${testcvs} -q co -l ." '' 25896 mkdir first-dir 25897 dotest multibranch2-2 "${testcvs} add first-dir" \ 25898 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 25899 cd first-dir 25900 25901 echo trunk-1 >file1 25902 echo trunk-1 >file2 25903 dotest multibranch2-3 "${testcvs} add file1 file2" \ 25904 "${SPROG} add: scheduling file .file1. for addition 25905 ${SPROG} add: scheduling file .file2. for addition 25906 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 25907 dotest multibranch2-4 "${testcvs} -q ci -m add" \ 25908 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25909 initial revision: 1\.1 25910 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 25911 initial revision: 1\.1" 25912 dotest multibranch2-5 "${testcvs} -q tag -b A" "T file1 25913 T file2" 25914 dotest multibranch2-6 "${testcvs} -q tag -b B" "T file1 25915 T file2" 25916 25917 dotest multibranch2-7 "${testcvs} -q update -r B" '' 25918 echo branch-B >file1 25919 echo branch-B >file2 25920 dotest multibranch2-8 "${testcvs} -q ci -m modify-on-B" \ 25921 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25922 new revision: 1\.1\.4\.1; previous revision: 1\.1 25923 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 25924 new revision: 1\.1\.4\.1; previous revision: 1\.1" 25925 25926 dotest multibranch2-9 "${testcvs} -q update -r A" '[UP] file1 25927 [UP] file2' 25928 echo branch-A >file1 25929 # When using cvs-1.9.20, this commit gets a failed assertion in rcs.c. 25930 dotest multibranch2-10 "${testcvs} -q ci -m modify-on-A" \ 25931 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 25932 new revision: 1\.1\.2\.1; previous revision: 1\.1" 25933 25934 dotest multibranch2-11 "${testcvs} -q log file1" \ 25935 " 25936 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 25937 Working file: file1 25938 head: 1\.1 25939 branch: 25940 locks: strict 25941 access list: 25942 symbolic names: 25943 B: 1\.1\.0\.4 25944 A: 1\.1\.0\.2 25945 keyword substitution: kv 25946 total revisions: 3; selected revisions: 3 25947 description: 25948 ---------------------------- 25949 revision 1\.1 25950 date: ${ISO8601DATE}; author: $username; state: Exp; commitid: ${commitid}; 25951 branches: 1\.1\.2; 1\.1\.4; 25952 add 25953 ---------------------------- 25954 revision 1\.1\.4\.1 25955 date: ${ISO8601DATE}; author: $username; state: Exp; lines: ${PLUS}1 -1; commitid: ${commitid}; 25956 modify-on-B 25957 ---------------------------- 25958 revision 1\.1\.2\.1 25959 date: ${ISO8601DATE}; author: $username; state: Exp; lines: ${PLUS}1 -1; commitid: ${commitid}; 25960 modify-on-A 25961 =============================================================================" 25962 25963 # This one is more concise. 25964 dotest multibranch2-12 "${testcvs} -q log -r1.1 file1" \ 25965 " 25966 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 25967 Working file: file1 25968 head: 1\.1 25969 branch: 25970 locks: strict 25971 access list: 25972 symbolic names: 25973 B: 1\.1\.0\.4 25974 A: 1\.1\.0\.2 25975 keyword substitution: kv 25976 total revisions: 3; selected revisions: 1 25977 description: 25978 ---------------------------- 25979 revision 1\.1 25980 date: ${ISO8601DATE}; author: $username; state: Exp; commitid: ${commitid}; 25981 branches: 1\.1\.2; 1\.1\.4; 25982 add 25983 =============================================================================" 25984 25985 # OK, try very much the same thing except we run update -j to 25986 # bring the changes from B to A. Probably tests many of the 25987 # same code paths but might as well keep it separate, I guess. 25988 25989 dotest multibranch2-13 "${testcvs} -q update -r B" "[UP] file1 25990 [UP] file2" 25991 dotest multibranch2-14 "${testcvs} -q update -r A -j B file2" \ 25992 "[UP] file2 25993 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 25994 retrieving revision 1.1 25995 retrieving revision 1.1.4.1 25996 Merging differences between 1.1 and 1.1.4.1 into file2" 25997 dotest multibranch2-15 "${testcvs} -q ci -m commit-on-A file2" \ 25998 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 25999 new revision: 1\.1\.2\.1; previous revision: 1\.1" 26000 26001 dokeep 26002 cd ../.. 26003 rm -r 1 26004 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 26005 ;; 26006 26007 26008 26009 tag8k) 26010 # In cvs-1.9.27, there is a bug that can cause an abort. 26011 # It happens when you commit a change to a ,v file that has 26012 # just the right amount of tag/branch info to align one of the 26013 # semicolons in the branch info to be on a 8k-byte boundary. 26014 # The result: rcsbuf_getkey got an abort. This failure doesn't 26015 # corrupt the ,v file -- that would be really serious. But it 26016 # does leave stale write locks that have to be removed manually. 26017 26018 mkdir 1 26019 cd 1 26020 26021 module=x 26022 26023 : > junk 26024 dotest tag8k-1 "$testcvs -Q import -m . $module X Y" '' 26025 dotest tag8k-2 "$testcvs -Q co $module" '' 26026 cd $module 26027 26028 file=m 26029 : > $file 26030 dotest tag8k-3 "$testcvs add $file" \ 26031 "$SPROG add: scheduling file .$file. for addition 26032 $SPROG add: use .$SPROG commit. to add this file permanently" 26033 dotest tag8k-4 "$testcvs -Q ci -m . $file" 26034 26035 # It seems there have to be at least two versions. 26036 echo a > $file 26037 dotest tag8k-5 "$testcvs -Q ci -m . $file" 26038 26039 # Add just under 8K worth of tags. 26040 t=TAG--------------------------------------------------------------------- 26041 t=$t$t 26042 t=$t$t$t$t$t 26043 # Now $t is 720 bytes long. 26044 26045 # Apply some tags with that long prefix. 26046 dotest tag8k-6 "$testcvs -Q tag $t-0 $file" '' 26047 dotest tag8k-7 "$testcvs -Q tag $t-1 $file" '' 26048 dotest tag8k-8 "$testcvs -Q tag $t-2 $file" '' 26049 dotest tag8k-9 "$testcvs -Q tag $t-3 $file" '' 26050 dotest tag8k-10 "$testcvs -Q tag $t-4 $file" '' 26051 dotest tag8k-11 "$testcvs -Q tag $t-5 $file" '' 26052 dotest tag8k-12 "$testcvs -Q tag $t-6 $file" '' 26053 dotest tag8k-13 "$testcvs -Q tag $t-7 $file" '' 26054 dotest tag8k-14 "$testcvs -Q tag $t-8 $file" '' 26055 dotest tag8k-15 "$testcvs -Q tag $t-9 $file" '' 26056 dotest tag8k-16 "$testcvs -Q tag $t-a $file" '' 26057 26058 # Extract the author value. 26059 name=`sed -n 's/.*; author \([^;]*\);.*/\1/p' ${CVSROOT_DIRNAME}/$module/$file,v|sed 1q` 26060 26061 # Form a suffix string of length (16 - length($name)). 26062 # CAREFUL: this will lose if $name is longer than 16. 26063 sed_pattern=`echo $name|sed s/././g` 26064 suffix=`echo 1234567890123456|sed s/$sed_pattern//` 26065 26066 # Add a final tag with length chosen so that it will push the 26067 # offset of the `;' in the 2nd occurrence of `;\tauthor' in the 26068 # ,v file to exactly 8192. 26069 dotest tag8k-17 "$testcvs -Q tag "x8bytes-$suffix" $file" '' 26070 26071 # This commit would fail with 1.9.27. 26072 echo a >> $file 26073 dotest tag8k-18 "$testcvs -Q ci -m . $file" 26074 26075 dokeep 26076 cd ../.. 26077 rm -r 1 26078 modify_repo rm -rf $CVSROOT_DIRNAME/$module 26079 ;; 26080 26081 26082 26083 admin) 26084 # More "cvs admin" tests. 26085 # The basicb-21 test tests rejecting an invalid option. 26086 # For -l and -u, see "reserved" and "keyword" tests. 26087 # "binfiles" test has a test of "cvs admin -k". 26088 # "log2" test has tests of -t and -q options to cvs admin. 26089 # "rcs" tests -b option also. 26090 # For -o, see: 26091 # admin-22-o1 through admin-23 (various cases not involving ::) 26092 # binfiles2-o* (:rev, rev on trunk; rev:, deleting entire branch) 26093 # basicb-o* (attempt to delete all revisions) 26094 # basica-o1 through basica-o3 (basic :: usage) 26095 # head-o1 (::branch, where this deletes a revision or is noop) 26096 # branches-o1 (::branch, similar, with different branch topology) 26097 # log-o1 (1.3.2.1::) 26098 # binfiles-o1 (1.3:: and ::1.3; binary files) 26099 # binfiles3-9 (binary files) 26100 # Also could be testing: 26101 # 1.3.2.6::1.3.2.8 26102 # 1.3.2.6::1.3.2 26103 # 1.3.2.1::1.3.2.6 26104 # 1.3::1.3.2.6 (error? or synonym for ::1.3.2.6?) 26105 # -n: admin, tagf tests. 26106 26107 # Test the postadmin hook as a side effect of the rest of the tests. 26108 # See the `info' test for notes on where other script hooks are 26109 # tested. 26110 mkdir 2; cd 2 26111 dotest admin-init-1 "$testcvs -Q co CVSROOT" 26112 cd CVSROOT 26113 echo "ALL $TESTDIR/2/loggit %r %p %c" >>postadmin 26114 dotest admin-init-2 "$testcvs -Q ci -mlog-admin" 26115 cd .. # 2 26116 26117 cat >loggit <<EOF 26118 #!$TESTSHELL 26119 echo \${1+"\$@"} >>$TESTDIR/2/admin-log 26120 EOF 26121 # #^@&!^@ Cygwin. 26122 if test -n "$remotehost"; then 26123 $CVS_RSH $remotehost "chmod +x $TESTDIR/2/loggit" 26124 else 26125 chmod +x loggit 26126 fi 26127 cd .. # $TESTDIR 26128 26129 26130 mkdir 1; cd 1 26131 dotest admin-1 "${testcvs} -q co -l ." '' 26132 mkdir first-dir 26133 dotest admin-2 "${testcvs} add first-dir" \ 26134 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 26135 cd first-dir 26136 26137 dotest_fail admin-3 "${testcvs} -q admin -i file1" \ 26138 "${CPROG} admin: the -i option to admin is not supported 26139 ${CPROG} admin: run add or import to create an RCS file 26140 ${CPROG} \[admin aborted\]: specify ${CPROG} -H admin for usage information" 26141 dotest_fail admin-4 "${testcvs} -q log file1" \ 26142 "${SPROG} log: nothing known about file1" 26143 dotest_fail admin-4a "${testcvs} -q admin file1" \ 26144 "${SPROG} admin: nothing known about file1" 26145 26146 # Set up some files, file2 a plain one and file1 with a revision 26147 # on a branch. 26148 touch file1 file2 26149 dotest admin-5 "${testcvs} add file1 file2" \ 26150 "${SPROG} add: scheduling file .file1. for addition 26151 ${SPROG} add: scheduling file .file2. for addition 26152 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 26153 dotest admin-6 "${testcvs} -q ci -m add" \ 26154 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 26155 initial revision: 1\.1 26156 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 26157 initial revision: 1\.1" 26158 dotest admin-7 "${testcvs} -q tag -b br" "T file1 26159 T file2" 26160 dotest admin-8 "${testcvs} -q update -r br" "" 26161 echo 'add a line on the branch' >> file1 26162 echo 'add a file on the branch' >> file3 26163 dotest admin-9a "${testcvs} -q add file3" \ 26164 "${SPROG} add: use .${SPROG} commit. to add this file permanently" 26165 dotest admin-9b "${testcvs} -q ci -m modify-on-branch" \ 26166 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 26167 new revision: 1\.1\.2\.1; previous revision: 1\.1 26168 $CVSROOT_DIRNAME/first-dir/Attic/file3,v <-- file3 26169 new revision: 1\.1\.2\.1; previous revision: 1\.1" 26170 dotest admin-10 "${testcvs} -q update -A" \ 26171 "U file1 26172 ${SPROG} update: \`file3' is no longer in the repository" 26173 26174 # Check that we can administer files in the repository that 26175 # aren't in the working directory. 26176 dotest admin-10-1 "${testcvs} admin ." \ 26177 "${SPROG} admin: Administrating . 26178 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26179 done 26180 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26181 done" 26182 dotest admin-10-2 "${testcvs} -q admin file3" \ 26183 "RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file3,v 26184 done" 26185 26186 # Try to recurse with a numeric revision arg. 26187 # If we wanted to comprehensive about this, we would also test 26188 # this for -l, -u, and all the different -o syntaxes. 26189 dotest_fail admin-10a "${testcvs} -q admin -b1.1.2" \ 26190 "${CPROG} admin: while processing more than one file: 26191 ${CPROG} \[admin aborted\]: attempt to specify a numeric revision" 26192 dotest_fail admin-10b "${testcvs} -q admin -m1.1:bogus file1 file2" \ 26193 "${CPROG} admin: while processing more than one file: 26194 ${CPROG} \[admin aborted\]: attempt to specify a numeric revision" 26195 26196 # try a bad symbolic revision 26197 dotest_fail admin-10c "${testcvs} -q admin -bBOGUS" \ 26198 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26199 ${SPROG} admin: ${CVSROOT_DIRNAME}/first-dir/file1,v: Symbolic name BOGUS is undefined. 26200 ${SPROG} admin: RCS file for .file1. not modified\. 26201 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26202 ${SPROG} admin: ${CVSROOT_DIRNAME}/first-dir/file2,v: Symbolic name BOGUS is undefined. 26203 ${SPROG} admin: RCS file for .file2. not modified\." 26204 26205 # Note that -s option applies to the new default branch, not 26206 # the old one. 26207 # Also note that the implementation of -a via "rcs" requires 26208 # no space between -a and the argument. However, we expect 26209 # to change that once CVS parses options. 26210 dotest admin-11 "${testcvs} -q admin -afoo,bar -abaz \ 26211 -b1.1.2 -cxx -U -sfoo file1" \ 26212 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26213 done" 26214 dotest admin-11a "${testcvs} log -N file1" " 26215 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26216 Working file: file1 26217 head: 1\.1 26218 branch: 1\.1\.2 26219 locks: 26220 access list: 26221 foo 26222 bar 26223 baz 26224 keyword substitution: kv 26225 total revisions: 2; selected revisions: 2 26226 description: 26227 ---------------------------- 26228 revision 1\.1 26229 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 26230 branches: 1\.1\.2; 26231 add 26232 ---------------------------- 26233 revision 1\.1\.2\.1 26234 date: ${ISO8601DATE}; author: ${username}; state: foo; lines: ${PLUS}1 -0; commitid: ${commitid}; 26235 modify-on-branch 26236 =============================================================================" 26237 dotest admin-12 "${testcvs} -q admin -bbr file1" \ 26238 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26239 done" 26240 dotest admin-12a "${testcvs} log -N file1" " 26241 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26242 Working file: file1 26243 head: 1\.1 26244 branch: 1\.1\.2 26245 locks: 26246 access list: 26247 foo 26248 bar 26249 baz 26250 keyword substitution: kv 26251 total revisions: 2; selected revisions: 2 26252 description: 26253 ---------------------------- 26254 revision 1\.1 26255 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 26256 branches: 1\.1\.2; 26257 add 26258 ---------------------------- 26259 revision 1\.1\.2\.1 26260 date: ${ISO8601DATE}; author: ${username}; state: foo; lines: ${PLUS}1 -0; commitid: ${commitid}; 26261 modify-on-branch 26262 =============================================================================" 26263 26264 # "cvs log" doesn't print the comment leader. RCS 5.7 will print 26265 # the comment leader only if one specifies "-V4" to rlog. So it 26266 # seems like the only way to test it is by looking at the RCS file 26267 # directly. This also serves as a test of exporting RCS files 26268 # (analogous to the import tests in "rcs"). 26269 # Rather than try to write a rigorous check for whether the 26270 # file CVS exports is valid, we just write a simpler 26271 # test for what CVS actually exports, and figure we can revise 26272 # the check as needed (within the confines of the RCS5 format as 26273 # documented in RCSFILES). 26274 # Note that we must accept either 2 or 4 digit year. 26275 dotest admin-13 "cat ${CVSROOT_DIRNAME}/first-dir/file1,v" \ 26276 "head 1\.1; 26277 branch 1\.1\.2; 26278 access 26279 foo 26280 bar 26281 baz; 26282 symbols 26283 br:1\.1\.0\.2; 26284 locks; 26285 comment @xx@; 26286 26287 26288 1\.1 26289 date ${RCSDELTADATE}; author ${username}; state Exp; 26290 branches 26291 1\.1\.2\.1; 26292 next ; 26293 commitid ${commitid}; 26294 26295 1\.1\.2\.1 26296 date ${RCSDELTADATE}; author ${username}; state foo; 26297 branches; 26298 next ; 26299 commitid ${commitid}; 26300 26301 26302 desc 26303 @@ 26304 26305 26306 1\.1 26307 log 26308 @add 26309 @ 26310 text 26311 @@ 26312 26313 26314 1\.1\.2\.1 26315 log 26316 @modify-on-branch 26317 @ 26318 text 26319 @a0 1 26320 add a line on the branch 26321 @" 26322 dotest_fail admin-14-1 "${testcvs} -q admin \ 26323 -m1.1.1.1:changed-bogus-log-message file2" \ 26324 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26325 $SPROG admin: $CVSROOT_DIRNAME/first-dir/file2,v: no such revision 1\.1\.1\.1 26326 $SPROG admin: RCS file for .file2. not modified." 26327 dotest admin-14-2 "${testcvs} -q log file2" " 26328 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26329 Working file: file2 26330 head: 1\.1 26331 branch: 26332 locks: strict 26333 access list: 26334 symbolic names: 26335 br: 1\.1\.0\.2 26336 keyword substitution: kv 26337 total revisions: 1; selected revisions: 1 26338 description: 26339 ---------------------------- 26340 revision 1\.1 26341 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 26342 add 26343 =============================================================================" 26344 26345 dotest admin-14-3 "${testcvs} -q admin -aauth3 -aauth2,foo \ 26346 -soneone:1.1 -m1.1:changed-log-message -ntagone: file2" \ 26347 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26348 done" 26349 dotest admin-15 "${testcvs} -q log file2" " 26350 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26351 Working file: file2 26352 head: 1\.1 26353 branch: 26354 locks: strict 26355 access list: 26356 auth3 26357 auth2 26358 foo 26359 symbolic names: 26360 tagone: 1\.1 26361 br: 1\.1\.0\.2 26362 keyword substitution: kv 26363 total revisions: 1; selected revisions: 1 26364 description: 26365 ---------------------------- 26366 revision 1\.1 26367 date: ${ISO8601DATE}; author: ${username}; state: oneone; commitid: ${commitid}; 26368 changed-log-message 26369 =============================================================================" 26370 26371 dotest admin-16 "${testcvs} -q admin \ 26372 -A${CVSROOT_DIRNAME}/first-dir/file2,v -b -L -Nbr:1.1 file1" \ 26373 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26374 done" 26375 dotest admin-17 "${testcvs} -q log file1" " 26376 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26377 Working file: file1 26378 head: 1\.1 26379 branch: 26380 locks: strict 26381 access list: 26382 foo 26383 bar 26384 baz 26385 auth3 26386 auth2 26387 symbolic names: 26388 br: 1\.1 26389 keyword substitution: kv 26390 total revisions: 2; selected revisions: 2 26391 description: 26392 ---------------------------- 26393 revision 1\.1 26394 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 26395 branches: 1\.1\.2; 26396 add 26397 ---------------------------- 26398 revision 1\.1\.2\.1 26399 date: ${ISO8601DATE}; author: ${username}; state: foo; lines: ${PLUS}1 -0; commitid: ${commitid}; 26400 modify-on-branch 26401 =============================================================================" 26402 26403 dotest_fail admin-18 "${testcvs} -q admin -nbr:1.1.2 file1" \ 26404 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26405 ${SPROG} admin: ${CVSROOT_DIRNAME}/first-dir/file1,v: symbolic name br already bound to 1\.1 26406 ${SPROG} admin: RCS file for .file1. not modified\." 26407 dotest admin-19 "${testcvs} -q admin -ebaz -ebar,auth3 -nbr file1" \ 26408 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26409 done" 26410 dotest admin-20 "${testcvs} -q log file1" " 26411 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26412 Working file: file1 26413 head: 1\.1 26414 branch: 26415 locks: strict 26416 access list: 26417 foo 26418 auth2 26419 symbolic names: 26420 keyword substitution: kv 26421 total revisions: 2; selected revisions: 2 26422 description: 26423 ---------------------------- 26424 revision 1\.1 26425 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 26426 branches: 1\.1\.2; 26427 add 26428 ---------------------------- 26429 revision 1.1.2.1 26430 date: ${ISO8601DATE}; author: ${username}; state: foo; lines: ${PLUS}1 -0; commitid: ${commitid}; 26431 modify-on-branch 26432 =============================================================================" 26433 26434 # OK, this is starting to get ridiculous, in terms of 26435 # testing a feature (access lists) which doesn't do anything 26436 # useful, but what about nonexistent files and 26437 # relative pathnames in admin -A? 26438 dotest_fail admin-19a-nonexist \ 26439 "${testcvs} -q admin -A${TESTDIR}/foo/bar file1" \ 26440 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26441 ${SPROG} admin: Couldn't open rcs file .${TESTDIR}/foo/bar.: No such file or directory 26442 ${SPROG} \[admin aborted\]: cannot continue" 26443 26444 # In the remote case, we are cd'd off into the temp directory 26445 # and so these tests give "No such file or directory" errors. 26446 if $remote; then :; else 26447 dotest admin-19a-admin "${testcvs} -q admin -A../../cvsroot/first-dir/file2,v file1" \ 26448 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26449 done" 26450 dotest admin-19a-log "${testcvs} -q log -h -N file1" " 26451 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26452 Working file: file1 26453 head: 1\.1 26454 branch: 26455 locks: strict 26456 access list: 26457 foo 26458 auth2 26459 auth3 26460 keyword substitution: kv 26461 total revisions: 2 26462 =============================================================================" 26463 fi # end of tests skipped for remote 26464 26465 # Now test that plain -e works right. 26466 dotest admin-19a-2 "${testcvs} -q admin -e file1" \ 26467 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26468 done" 26469 dotest admin-19a-3 "${testcvs} -q log -h -N file1" " 26470 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26471 Working file: file1 26472 head: 1\.1 26473 branch: 26474 locks: strict 26475 access list: 26476 keyword substitution: kv 26477 total revisions: 2 26478 =============================================================================" 26479 26480 # Put the access list back, to avoid special cases later. 26481 dotest admin-19a-4 "${testcvs} -q admin -afoo,auth2 file1" \ 26482 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26483 done" 26484 26485 # Add another revision to file2, so we can delete one. 26486 echo 'add a line' >> file2 26487 dotest admin-21 "${testcvs} -q ci -m modify file2" \ 26488 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 26489 new revision: 1\.2; previous revision: 1\.1" 26490 dotest admin-22 "${testcvs} -q admin -o1.1 file2" \ 26491 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26492 deleting revision 1\.1 26493 done" 26494 # Test admin -o. More variants that we could be testing: 26495 # * REV: [on branch] 26496 # * REV1:REV2 [deleting whole branch] 26497 # * high branch numbers (e.g. 1.2.2.3.2.3) 26498 # ... and probably others. See RCS_delete_revs for ideas. 26499 26500 echo first rev > aaa 26501 dotest admin-22-o1 "${testcvs} add aaa" \ 26502 "${SPROG} add: scheduling file .aaa. for addition 26503 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 26504 dotest admin-22-o2 "${testcvs} -q ci -m first aaa" \ 26505 "$CVSROOT_DIRNAME/first-dir/aaa,v <-- aaa 26506 initial revision: 1\.1" 26507 echo second rev >> aaa 26508 dotest admin-22-o3 "${testcvs} -q ci -m second aaa" \ 26509 "$CVSROOT_DIRNAME/first-dir/aaa,v <-- aaa 26510 new revision: 1\.2; previous revision: 1\.1" 26511 echo third rev >> aaa 26512 dotest admin-22-o4 "${testcvs} -q ci -m third aaa" \ 26513 "$CVSROOT_DIRNAME/first-dir/aaa,v <-- aaa 26514 new revision: 1\.3; previous revision: 1\.2" 26515 echo fourth rev >> aaa 26516 dotest admin-22-o5 "${testcvs} -q ci -m fourth aaa" \ 26517 "$CVSROOT_DIRNAME/first-dir/aaa,v <-- aaa 26518 new revision: 1\.4; previous revision: 1\.3" 26519 echo fifth rev >>aaa 26520 dotest admin-22-o6 "${testcvs} -q ci -m fifth aaa" \ 26521 "$CVSROOT_DIRNAME/first-dir/aaa,v <-- aaa 26522 new revision: 1\.5; previous revision: 1\.4" 26523 echo sixth rev >> aaa 26524 dotest admin-22-o7 "${testcvs} -q ci -m sixth aaa" \ 26525 "$CVSROOT_DIRNAME/first-dir/aaa,v <-- aaa 26526 new revision: 1\.6; previous revision: 1\.5" 26527 dotest admin-22-o8 "${testcvs} admin -l1.6 aaa" \ 26528 "RCS file: ${CVSROOT_DIRNAME}/first-dir/aaa,v 26529 1\.6 locked 26530 done" 26531 dotest admin-22-o9 "${testcvs} log -r1.6 aaa" " 26532 RCS file: ${CVSROOT_DIRNAME}/first-dir/aaa,v 26533 Working file: aaa 26534 head: 1\.6 26535 branch: 26536 locks: strict 26537 ${username}: 1\.6 26538 access list: 26539 symbolic names: 26540 keyword substitution: kv 26541 total revisions: 6; selected revisions: 1 26542 description: 26543 ---------------------------- 26544 revision 1\.6 locked by: ${username}; 26545 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 26546 sixth 26547 =============================================================================" 26548 dotest_fail admin-22-o10 "${testcvs} admin -o1.5: aaa" \ 26549 "RCS file: ${CVSROOT_DIRNAME}/first-dir/aaa,v 26550 ${SPROG} admin: ${CVSROOT_DIRNAME}/first-dir/aaa,v: can't remove locked revision 1\.6 26551 ${SPROG} admin: RCS file for .aaa. not modified\." 26552 dotest admin-22-o11 "${testcvs} admin -u aaa" \ 26553 "RCS file: ${CVSROOT_DIRNAME}/first-dir/aaa,v 26554 1\.6 unlocked 26555 done" 26556 dotest admin-22-o12 "${testcvs} admin -o1.5: aaa" \ 26557 "RCS file: ${CVSROOT_DIRNAME}/first-dir/aaa,v 26558 deleting revision 1\.6 26559 deleting revision 1\.5 26560 done" 26561 dotest admin-22-o13 "${testcvs} log aaa" " 26562 RCS file: ${CVSROOT_DIRNAME}/first-dir/aaa,v 26563 Working file: aaa 26564 head: 1\.4 26565 branch: 26566 locks: strict 26567 access list: 26568 symbolic names: 26569 keyword substitution: kv 26570 total revisions: 4; selected revisions: 4 26571 description: 26572 ---------------------------- 26573 revision 1\.4 26574 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 26575 fourth 26576 ---------------------------- 26577 revision 1\.3 26578 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 26579 third 26580 ---------------------------- 26581 revision 1\.2 26582 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 26583 second 26584 ---------------------------- 26585 revision 1\.1 26586 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 26587 first 26588 =============================================================================" 26589 26590 dotest admin-22-o14 "${testcvs} tag -b -r1.3 br1 aaa" "T aaa" 26591 dotest admin-22-o15 "${testcvs} update -rbr1 aaa" "U aaa" 26592 echo new branch rev >> aaa 26593 dotest admin-22-o16 "${testcvs} ci -m new-branch aaa" \ 26594 "$CVSROOT_DIRNAME/first-dir/aaa,v <-- aaa 26595 new revision: 1\.3\.2\.1; previous revision: 1\.3" 26596 dotest_fail admin-22-o17 "${testcvs} admin -o1.2:1.4 aaa" \ 26597 "RCS file: ${CVSROOT_DIRNAME}/first-dir/aaa,v 26598 deleting revision 1\.4 26599 ${SPROG} admin: ${CVSROOT_DIRNAME}/first-dir/aaa,v: can't remove branch point 1\.3 26600 ${SPROG} admin: RCS file for .aaa. not modified\." 26601 dotest admin-22-o18 "${testcvs} update -p -r1.4 aaa" \ 26602 "=================================================================== 26603 Checking out aaa 26604 RCS: ${CVSROOT_DIRNAME}/first-dir/aaa,v 26605 VERS: 1\.4 26606 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 26607 first rev 26608 second rev 26609 third rev 26610 fourth rev" 26611 echo second branch rev >> aaa 26612 dotest admin-22-o19 "${testcvs} ci -m branch-two aaa" \ 26613 "$CVSROOT_DIRNAME/first-dir/aaa,v <-- aaa 26614 new revision: 1\.3\.2\.2; previous revision: 1\.3\.2\.1" 26615 echo third branch rev >> aaa 26616 dotest admin-22-o20 "${testcvs} ci -m branch-three aaa" \ 26617 "$CVSROOT_DIRNAME/first-dir/aaa,v <-- aaa 26618 new revision: 1\.3\.2\.3; previous revision: 1\.3\.2\.2" 26619 echo fourth branch rev >> aaa 26620 dotest admin-22-o21 "${testcvs} ci -m branch-four aaa" \ 26621 "$CVSROOT_DIRNAME/first-dir/aaa,v <-- aaa 26622 new revision: 1\.3\.2\.4; previous revision: 1\.3\.2\.3" 26623 dotest admin-22-o22 "${testcvs} admin -o:1.3.2.3 aaa" \ 26624 "RCS file: ${CVSROOT_DIRNAME}/first-dir/aaa,v 26625 deleting revision 1\.3\.2\.1 26626 deleting revision 1\.3\.2\.2 26627 deleting revision 1\.3\.2\.3 26628 done" 26629 dotest admin-22-o23 "${testcvs} log aaa" " 26630 RCS file: ${CVSROOT_DIRNAME}/first-dir/aaa,v 26631 Working file: aaa 26632 head: 1\.4 26633 branch: 26634 locks: strict 26635 access list: 26636 symbolic names: 26637 br1: 1\.3\.0\.2 26638 keyword substitution: kv 26639 total revisions: 5; selected revisions: 5 26640 description: 26641 ---------------------------- 26642 revision 1\.4 26643 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 26644 fourth 26645 ---------------------------- 26646 revision 1\.3 26647 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 26648 branches: 1\.3\.2; 26649 third 26650 ---------------------------- 26651 revision 1\.2 26652 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 26653 second 26654 ---------------------------- 26655 revision 1\.1 26656 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 26657 first 26658 ---------------------------- 26659 revision 1\.3\.2\.4 26660 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}4 -0; commitid: ${commitid}; 26661 branch-four 26662 =============================================================================" 26663 26664 dotest admin-22-o24 "${testcvs} -q update -p -r 1.3.2.4 aaa" \ 26665 "first rev 26666 second rev 26667 third rev 26668 new branch rev 26669 second branch rev 26670 third branch rev 26671 fourth branch rev" 26672 26673 # The bit here about how there is a "tagone" tag pointing to 26674 # a nonexistent revision is documented by rcs. I dunno, I 26675 # wonder whether the "cvs admin -o" should give a warning in 26676 # this case. 26677 dotest admin-23 "${testcvs} -q log file2" " 26678 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26679 Working file: file2 26680 head: 1\.2 26681 branch: 26682 locks: strict 26683 access list: 26684 auth3 26685 auth2 26686 foo 26687 symbolic names: 26688 tagone: 1\.1 26689 br: 1\.1\.0\.2 26690 keyword substitution: kv 26691 total revisions: 1; selected revisions: 1 26692 description: 26693 ---------------------------- 26694 revision 1\.2 26695 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 26696 modify 26697 =============================================================================" 26698 26699 dotest admin-25 "cat ${CVSROOT_DIRNAME}/first-dir/file1,v" \ 26700 "head 1\.1; 26701 access 26702 foo 26703 auth2; 26704 symbols; 26705 locks; strict; 26706 comment @xx@; 26707 26708 26709 1\.1 26710 date ${RCSDELTADATE}; author ${username}; state Exp; 26711 branches 26712 1\.1\.2\.1; 26713 next ; 26714 commitid ${commitid}; 26715 26716 1\.1\.2\.1 26717 date ${RCSDELTADATE}; author ${username}; state foo; 26718 branches; 26719 next ; 26720 commitid ${commitid}; 26721 26722 26723 desc 26724 @@ 26725 26726 26727 1\.1 26728 log 26729 @add 26730 @ 26731 text 26732 @@ 26733 26734 26735 1\.1\.2\.1 26736 log 26737 @modify-on-branch 26738 @ 26739 text 26740 @a0 1 26741 add a line on the branch 26742 @" 26743 26744 # Tests of cvs admin -n. Make use of the results of 26745 # admin-1 through admin-25. 26746 # FIXME: We probably shouldn't make use of those results; 26747 # this test is way too long as it is. 26748 26749 # tagtwo should be a revision 26750 # 26751 dotest admin-26-1 "${testcvs} admin -ntagtwo:tagone file2" \ 26752 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26753 done" 26754 26755 # br1 should be a branch 26756 # 26757 dotest admin-26-2 "${testcvs} admin -nbr1:br file2" \ 26758 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26759 done" 26760 26761 # Attach some tags using RCS versions 26762 # 26763 dotest admin-26-3 "${testcvs} admin -ntagthree:1.1 file2" \ 26764 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26765 done" 26766 26767 dotest admin-26-4 "${testcvs} admin -nbr2:1.1.2 file2" \ 26768 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26769 done" 26770 26771 dotest admin-26-5 "${testcvs} admin -nbr4:1.1.0.2 file2" \ 26772 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26773 done" 26774 26775 # Check results so far 26776 # 26777 dotest admin-26-6 "${testcvs} status -v file2" \ 26778 "=================================================================== 26779 File: file2 Status: Up-to-date 26780 26781 Working revision: 1\.2.* 26782 Repository revision: 1\.2 ${CVSROOT_DIRNAME}/first-dir/file2,v 26783 Commit Identifier: ${commitid} 26784 Sticky Tag: (none) 26785 Sticky Date: (none) 26786 Sticky Options: (none) 26787 26788 Existing Tags: 26789 br4 (branch: 1\.1\.2) 26790 br2 (branch: 1\.1\.2) 26791 tagthree (revision: 1\.1) 26792 br1 (branch: 1\.1\.2) 26793 tagtwo (revision: 1\.1) 26794 tagone (revision: 1\.1) 26795 br (branch: 1\.1\.2)" 26796 26797 26798 # Add a couple more revisions 26799 # 26800 echo "nuthr_line" >> file2 26801 dotest admin-27-1 "${testcvs} commit -m nuthr_line file2" \ 26802 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 26803 new revision: 1\.3; previous revision: 1\.2" 26804 26805 echo "yet_another" >> file2 26806 dotest admin-27-2 "${testcvs} commit -m yet_another file2" \ 26807 "$CVSROOT_DIRNAME/first-dir/file2,v <-- file2 26808 new revision: 1\.4; previous revision: 1\.3" 26809 26810 # Fail trying to reattach existing tag with -n 26811 # 26812 dotest admin-27-3 "${testcvs} admin -ntagfour:1.1 file2" \ 26813 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26814 done" 26815 26816 dotest_fail admin-27-4 "${testcvs} admin -ntagfour:1.3 file2" \ 26817 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26818 ${SPROG} admin: ${CVSROOT_DIRNAME}/first-dir/file2,v: symbolic name tagfour already bound to 1\.1 26819 ${SPROG} admin: RCS file for .file2. not modified\." 26820 26821 # Succeed at reattaching existing tag, using -N 26822 # 26823 dotest admin-27-5 "${testcvs} admin -Ntagfour:1.3 file2" \ 26824 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26825 done" 26826 26827 # Fail on some bogus operations 26828 # Try to attach to nonexistant tag 26829 # 26830 dotest_fail admin-28-1 "${testcvs} admin -ntagsix:tagfive file2" \ 26831 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26832 ${SPROG} admin: ${CVSROOT_DIRNAME}/first-dir/file2,v: Symbolic name or revision tagfive is undefined\. 26833 ${SPROG} admin: RCS file for .file2. not modified\." 26834 26835 # Try a some nonexisting numeric target tags 26836 # 26837 dotest_fail admin-28-2 "${testcvs} admin -ntagseven:2.1 file2" \ 26838 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26839 ${SPROG} \[admin aborted\]: revision .2\.1. does not exist" 26840 26841 dotest_fail admin-28-3 "${testcvs} admin -ntageight:2.1.2 file2" \ 26842 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26843 ${SPROG} \[admin aborted\]: revision .2\.1\.2. does not exist" 26844 26845 # Try some invalid targets 26846 # 26847 dotest_fail admin-28-4 "${testcvs} admin -ntagnine:1.a.2 file2" \ 26848 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26849 ${SPROG} \[admin aborted\]: tag .1\.a\.2. must start with a letter" 26850 26851 # Confirm that a missing tag is not a fatal error. 26852 dotest admin-28-5.1 "${testcvs} -Q tag BO+GUS file1" '' 26853 dotest_fail admin-28-5.2 "${testcvs} admin -ntagten:BO+GUS file2 file1" \ 26854 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26855 ${SPROG} admin: ${CVSROOT_DIRNAME}/first-dir/file2,v: Symbolic name or revision BO${PLUS}GUS is undefined\. 26856 ${SPROG} admin: RCS file for .file2. not modified\. 26857 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26858 done" 26859 26860 dotest_fail admin-28-6 "${testcvs} admin -nq.werty:tagfour file2" \ 26861 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26862 ${SPROG} \[admin aborted\]: tag .q\.werty. must not contain the characters ..*" 26863 26864 # Verify the archive 26865 # 26866 dotest admin-29 "cat ${CVSROOT_DIRNAME}/first-dir/file2,v" \ 26867 "head 1\.4; 26868 access 26869 auth3 26870 auth2 26871 foo; 26872 symbols 26873 tagfour:1\.3 26874 br4:1\.1\.0\.2 26875 br2:1\.1\.0\.2 26876 tagthree:1\.1 26877 br1:1\.1\.0\.2 26878 tagtwo:1\.1 26879 tagone:1\.1 26880 br:1\.1\.0\.2; 26881 locks; strict; 26882 comment @# @; 26883 26884 26885 1\.4 26886 date ${RCSDELTADATE}; author ${username}; state Exp; 26887 branches; 26888 next 1\.3; 26889 commitid ${commitid}; 26890 26891 1\.3 26892 date ${RCSDELTADATE}; author ${username}; state Exp; 26893 branches; 26894 next 1\.2; 26895 commitid ${commitid}; 26896 26897 1\.2 26898 date ${RCSDELTADATE}; author ${username}; state Exp; 26899 branches; 26900 next ; 26901 commitid ${commitid}; 26902 26903 26904 desc 26905 @@ 26906 26907 26908 1\.4 26909 log 26910 @yet_another 26911 @ 26912 text 26913 @add a line 26914 nuthr_line 26915 yet_another 26916 @ 26917 26918 26919 1\.3 26920 log 26921 @nuthr_line 26922 @ 26923 text 26924 @d3 1 26925 @ 26926 26927 26928 1\.2 26929 log 26930 @modify 26931 @ 26932 text 26933 @d2 1 26934 @" 26935 26936 dotest_fail admin-30 "${testcvs} admin -mbr:another-log-message \ 26937 file2 aaa file3" \ 26938 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 26939 ${SPROG} admin: ${CVSROOT_DIRNAME}/first-dir/file2,v: no such revision br: 1\.1 26940 ${SPROG} admin: RCS file for .file2. not modified. 26941 RCS file: ${CVSROOT_DIRNAME}/first-dir/aaa,v 26942 ${SPROG} admin: ${CVSROOT_DIRNAME}/first-dir/aaa,v: no such revision br 26943 ${SPROG} admin: RCS file for .aaa. not modified. 26944 RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file3,v 26945 done" 26946 dotest admin-31 "${testcvs} log" \ 26947 "${SPROG} log: Logging \. 26948 26949 RCS file: ${CVSROOT_DIRNAME}/first-dir/aaa,v 26950 Working file: aaa 26951 head: 1\.4 26952 branch: 26953 locks: strict 26954 access list: 26955 symbolic names: 26956 br1: 1\.3\.0\.2 26957 keyword substitution: kv 26958 total revisions: 5; selected revisions: 5 26959 description: 26960 ---------------------------- 26961 revision 1\.4 26962 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 26963 fourth 26964 ---------------------------- 26965 revision 1\.3 26966 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 26967 branches: 1\.3\.2; 26968 third 26969 ---------------------------- 26970 revision 1\.2 26971 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 26972 second 26973 ---------------------------- 26974 revision 1\.1 26975 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 26976 first 26977 ---------------------------- 26978 revision 1\.3\.2\.4 26979 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}4 -0; commitid: ${commitid}; 26980 branch-four 26981 ============================================================================= 26982 26983 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 26984 Working file: file1 26985 head: 1\.1 26986 branch: 26987 locks: strict 26988 access list: 26989 foo 26990 auth2 26991 symbolic names: 26992 tagten: 1\.1 26993 BO${PLUS}GUS: 1\.1 26994 keyword substitution: kv 26995 total revisions: 2; selected revisions: 2 26996 description: 26997 ---------------------------- 26998 revision 1\.1 26999 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 27000 branches: 1\.1\.2; 27001 add 27002 ---------------------------- 27003 revision 1\.1\.2\.1 27004 date: ${ISO8601DATE}; author: ${username}; state: foo; lines: ${PLUS}1 -0; commitid: ${commitid}; 27005 modify-on-branch 27006 ============================================================================= 27007 27008 RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v 27009 Working file: file2 27010 head: 1\.4 27011 branch: 27012 locks: strict 27013 access list: 27014 auth3 27015 auth2 27016 foo 27017 symbolic names: 27018 tagfour: 1\.3 27019 br4: 1\.1\.0\.2 27020 br2: 1\.1\.0\.2 27021 tagthree: 1\.1 27022 br1: 1\.1\.0\.2 27023 tagtwo: 1\.1 27024 tagone: 1\.1 27025 br: 1\.1\.0\.2 27026 keyword substitution: kv 27027 total revisions: 3; selected revisions: 3 27028 description: 27029 ---------------------------- 27030 revision 1\.4 27031 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 27032 yet_another 27033 ---------------------------- 27034 revision 1\.3 27035 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 27036 nuthr_line 27037 ---------------------------- 27038 revision 1\.2 27039 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 27040 modify 27041 ============================================================================= 27042 27043 RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file3,v 27044 Working file: file3 27045 head: 1\.1 27046 branch: 27047 locks: strict 27048 access list: 27049 symbolic names: 27050 br: 1\.1\.0\.2 27051 keyword substitution: kv 27052 total revisions: 2; selected revisions: 2 27053 description: 27054 ---------------------------- 27055 revision 1\.1 27056 date: ${ISO8601DATE}; author: ${username}; state: dead; commitid: ${commitid}; 27057 branches: 1\.1\.2; 27058 file file3 was initially added on branch br\. 27059 ---------------------------- 27060 revision 1\.1\.2\.1 27061 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 27062 another-log-message 27063 =============================================================================" 27064 27065 # Currently, this test outputs 36 identical lines, so I am just 27066 # checking $DOTSTAR for brevity. 27067 dotest admin-postadmin-examine-1 "cat $TESTDIR/2/admin-log" \ 27068 "$CVSROOT_DIRNAME first-dir admin$DOTSTAR" 27069 27070 dokeep 27071 27072 # clean up our after ourselves 27073 restore_adm 27074 cd ../.. 27075 rm -r 1 2 27076 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 27077 ;; 27078 27079 27080 27081 reserved) 27082 # Tests of reserved checkouts. Eventually this will test 27083 # rcslock.pl (or equivalent) and all kinds of stuff. Right 27084 # now it just does some very basic checks on cvs admin -u 27085 # and cvs admin -l. 27086 # Also should test locking on a branch (and making sure that 27087 # locks from one branch don't get mixed up with those from 27088 # another. Both the case where one of the branches is the 27089 # main branch, and in which neither one is). 27090 # See also test keyword, which tests that keywords and -kkvl 27091 # do the right thing in the presence of locks. 27092 27093 # The usual setup, directory first-dir containing file file1. 27094 mkdir 1; cd 1 27095 dotest reserved-1 "${testcvs} -q co -l ." '' 27096 mkdir first-dir 27097 dotest reserved-2 "${testcvs} add first-dir" \ 27098 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 27099 cd first-dir 27100 touch file1 27101 dotest reserved-3 "${testcvs} add file1" \ 27102 "${SPROG} add: scheduling file .file1. for addition 27103 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 27104 dotest reserved-4 "${testcvs} -q ci -m add" \ 27105 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 27106 initial revision: 1\.1" 27107 27108 dotest reserved-5 "${testcvs} -q admin -l file1" \ 27109 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 27110 1\.1 locked 27111 done" 27112 dotest reserved-6 "${testcvs} log -N file1" " 27113 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 27114 Working file: file1 27115 head: 1\.1 27116 branch: 27117 locks: strict 27118 ${username}: 1\.1 27119 access list: 27120 keyword substitution: kv 27121 total revisions: 1; selected revisions: 1 27122 description: 27123 ---------------------------- 27124 revision 1\.1 locked by: ${username}; 27125 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 27126 add 27127 =============================================================================" 27128 27129 # Note that this just tests the owner of the lock giving 27130 # it up. It doesn't test breaking a lock. 27131 dotest reserved-7 "${testcvs} -q admin -u file1" \ 27132 "RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 27133 1\.1 unlocked 27134 done" 27135 27136 dotest reserved-8 "${testcvs} log -N file1" " 27137 RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v 27138 Working file: file1 27139 head: 1\.1 27140 branch: 27141 locks: strict 27142 access list: 27143 keyword substitution: kv 27144 total revisions: 1; selected revisions: 1 27145 description: 27146 ---------------------------- 27147 revision 1\.1 27148 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 27149 add 27150 =============================================================================" 27151 27152 # rcslock.pl tests. Of course, the point isn't to test 27153 # rcslock.pl from the distribution but equivalent 27154 # functionality (for example, many sites may have an old 27155 # rcslock.pl). The functionality of this hook falls 27156 # short of the real rcslock.pl though. 27157 # Note that we can use rlog or look at the RCS file directly, 27158 # but we can't use "cvs log" because "cvs commit" has a lock. 27159 27160 cat >${TESTDIR}/lockme <<EOF 27161 #!${TESTSHELL} 27162 line=\`grep <\$1/\$2,v 'locks $anyusername:1\.[0-9];'\` 27163 if test -z "\$line"; then 27164 # It isn't locked 27165 exit 0 27166 else 27167 user=\`echo \$line | sed -e 's/locks \\($anyusername\\):[0-9.]*;.*/\\1/'\` 27168 version=\`echo \$line | sed -e 's/locks $anyusername:\\([0-9.]*\\);.*/\\1/'\` 27169 echo "\$user has file a-lock locked for version \$version" >&2 27170 exit 1 27171 fi 27172 EOF 27173 # Cygwin. Blaaarg. 27174 if test -n "$remotehost"; then 27175 $CVS_RSH $remotehost "chmod +x ${TESTDIR}/lockme" 27176 else 27177 chmod +x ${TESTDIR}/lockme 27178 fi 27179 27180 echo stuff > a-lock 27181 dotest reserved-9 "${testcvs} add a-lock" \ 27182 "${SPROG} add: scheduling file .a-lock. for addition 27183 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 27184 dotest reserved-10 "${testcvs} -q ci -m new a-lock" \ 27185 "$CVSROOT_DIRNAME/first-dir/a-lock,v <-- a-lock 27186 initial revision: 1\.1" 27187 # FIXME: the contents of CVSROOT fluctuate a lot 27188 # here. Maybe the expect pattern should just 27189 # confirm that commitinfo is one of the files checked out, 27190 # but for now we just check that CVS exited with success. 27191 cd .. 27192 if ${testcvs} -q co CVSROOT >>${LOGFILE} ; then 27193 pass reserved-11 27194 else 27195 fail reserved-11 27196 fi 27197 cd CVSROOT 27198 echo "DEFAULT ${TESTDIR}/lockme" >>commitinfo 27199 dotest reserved-12 "${testcvs} -q ci -m rcslock commitinfo" \ 27200 "$CVSROOT_DIRNAME/CVSROOT/commitinfo,v <-- commitinfo 27201 new revision: 1\.2; previous revision: 1\.1 27202 $SPROG commit: Rebuilding administrative file database" 27203 cd ..; cd first-dir 27204 27205 # Simulate (approximately) what a-lock would look like 27206 # if someone else had locked revision 1.1. 27207 sed -e 's/locks; strict;/locks fred:1.1; strict;/' ${CVSROOT_DIRNAME}/first-dir/a-lock,v > a-lock,v 27208 # Cygwin. 27209 if test -n "$remotehost"; then 27210 $CVS_RSH $remotehost "chmod 644 ${CVSROOT_DIRNAME}/first-dir/a-lock,v" 27211 else 27212 chmod 644 ${CVSROOT_DIRNAME}/first-dir/a-lock,v 27213 fi 27214 dotest reserved-13 "mv a-lock,v ${CVSROOT_DIRNAME}/first-dir/a-lock,v" 27215 # Cygwin. Blah. 27216 if test -n "$remotehost"; then 27217 $CVS_RSH $remotehost "chmod 444 ${CVSROOT_DIRNAME}/first-dir/a-lock,v" 27218 else 27219 chmod 444 ${CVSROOT_DIRNAME}/first-dir/a-lock,v 27220 fi 27221 echo more stuff >> a-lock 27222 dotest_fail_sort reserved-13b "$testcvs ci -m '' a-lock" \ 27223 " \"$TESTDIR/lockme\" 27224 Appending defaults (\" %r/%p %s\"), but please be aware that this usage is 27225 $SPROG \[commit aborted\]: correct above errors first! 27226 $SPROG commit: Pre-commit check failed 27227 $SPROG commit: warning: commitinfo line contains no format strings: 27228 deprecated\. 27229 fred has file a-lock locked for version 1\.1" 27230 # OK, now test "cvs admin -l" in the case where someone 27231 # else has the file locked. 27232 dotest_fail reserved-13c "${testcvs} admin -l a-lock" \ 27233 "RCS file: ${CVSROOT_DIRNAME}/first-dir/a-lock,v 27234 ${SPROG} \[admin aborted\]: Revision 1\.1 is already locked by fred" 27235 27236 dotest reserved-14 "${testcvs} admin -u1.1 a-lock" \ 27237 "RCS file: ${CVSROOT_DIRNAME}/first-dir/a-lock,v 27238 ${SPROG} admin: ${CVSROOT_DIRNAME}/first-dir/a-lock,v: revision 1\.1 locked by fred; breaking lock 27239 1\.1 unlocked 27240 done" 27241 dotest reserved-15 "$testcvs -q ci -m success a-lock" \ 27242 "$SPROG commit: warning: commitinfo line contains no format strings: 27243 \"$TESTDIR/lockme\" 27244 Appending defaults (\" %r/%p %s\"), but please be aware that this usage is 27245 deprecated\. 27246 $CVSROOT_DIRNAME/first-dir/a-lock,v <-- a-lock 27247 new revision: 1\.2; previous revision: 1\.1" 27248 27249 # Now test for a bug involving branches and locks 27250 sed -e 's/locks; strict;/locks fred:1.2; strict;/' ${CVSROOT_DIRNAME}/first-dir/a-lock,v > a-lock,v 27251 chmod 644 ${CVSROOT_DIRNAME}/first-dir/a-lock,v 27252 dotest reserved-16 \ 27253 "mv a-lock,v ${CVSROOT_DIRNAME}/first-dir/a-lock,v" "" 27254 chmod 444 ${CVSROOT_DIRNAME}/first-dir/a-lock,v 27255 dotest reserved-17 "${testcvs} -q tag -b br a-lock" "T a-lock" 27256 dotest reserved-18 "${testcvs} -q update -r br a-lock" "" 27257 echo edit it >>a-lock 27258 dotest reserved-19 "${testcvs} -q ci -m modify a-lock" \ 27259 "$SPROG commit: warning: commitinfo line contains no format strings: 27260 \"$TESTDIR/lockme\" 27261 Appending defaults (\" %r/%p %s\"), but please be aware that this usage is 27262 deprecated\. 27263 $CVSROOT_DIRNAME/first-dir/a-lock,v <-- a-lock 27264 new revision: 1\.2\.2\.1; previous revision: 1\.2" 27265 27266 # undo commitinfo changes 27267 cd ../CVSROOT 27268 echo '# vanilla commitinfo' >commitinfo 27269 dotest reserved-cleanup-1 "${testcvs} -q ci -m back commitinfo" \ 27270 "$SPROG commit: warning: commitinfo line contains no format strings: 27271 \"$TESTDIR/lockme\" 27272 Appending defaults (\" %r/%p %s\"), but please be aware that this usage is 27273 deprecated\. 27274 $CVSROOT_DIRNAME/CVSROOT/commitinfo,v <-- commitinfo 27275 new revision: 1\.3; previous revision: 1\.2 27276 $SPROG commit: Rebuilding administrative file database" 27277 27278 dokeep 27279 cd ..; rm -r CVSROOT 27280 cd .. 27281 rm -r 1 27282 rm $TESTDIR/lockme 27283 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 27284 ;; 27285 27286 27287 27288 diffmerge1) 27289 # Make sure CVS can merge correctly in circumstances where it 27290 # used to mess up (due to a bug which existed in diffutils 2.7 27291 # and 2.6, but not 2.5, and which has been fixed in CVS's diff 27292 # lib by Paul Eggert, bless his bitty heart). 27293 27294 # This first test involves two working copies, "mine" and 27295 # "yours", checked out from the same repository at the same 27296 # time. In yours, you remove some text from the end of the 27297 # file and check it in; meanwhile, "me" has commented out some 27298 # lines earlier in the file, and I go to check it in right 27299 # after you checked yours in. CVS naturally tells me the file 27300 # is not up-to-date, so I run cvs update, but it updates 27301 # incorrectly, leaving in the lines of text you just deleted. 27302 # Bad! I'm in too much of a hurry to actually look at the 27303 # file, so I check it in and go home, and so your changes have 27304 # been lost. Later you discover this, and you suspect me of 27305 # deliberately sabotaging your work, so you let all the air 27306 # out of my tires. Only after a series of expensive lawsuits 27307 # and countersuits do we discover that this was all CVS's 27308 # fault. 27309 # 27310 # Luckily, this problem has been fixed now, as our test will 27311 # handily confirm, no doubt: 27312 27313 # First make a repository containing the original text: 27314 27315 # We should be here anyway, but cd to it just in case: 27316 cd ${TESTDIR} 27317 27318 mkdir diffmerge1 27319 cd diffmerge1 27320 27321 # These are the files we both start out with: 27322 mkdir import 27323 cd import 27324 diffmerge_create_older_files 27325 27326 dotest diffmerge1_import \ 27327 "${testcvs} import -m import diffmerge1 tag1 tag2" \ 27328 "${DOTSTAR}No conflicts created by this import" 27329 cd .. 27330 27331 # Check out two working copies, one for "you" and one for 27332 # "me". If no branch is used and cvs detects that only one 27333 # of the two people made changes, then cvs does not run the 27334 # merge algorithm. But if a branch is used, then cvs does run 27335 # the merge algorithm (even in this case of only one of the two 27336 # people having made changes). CVS used to have a bug in this 27337 # case. Therefore, it is important to test this case by 27338 # using a branch: 27339 ${testcvs} rtag -b tag diffmerge1 >/dev/null 2>&1 27340 ${testcvs} checkout -r tag diffmerge1 >/dev/null 2>&1 27341 mv diffmerge1 yours 27342 ${testcvs} checkout diffmerge1 >/dev/null 2>&1 27343 mv diffmerge1 mine 27344 27345 # In your working copy, you'll make changes, and 27346 # then check in your changes before I check in mine: 27347 cd yours 27348 diffmerge_create_your_files 27349 dotest diffmerge1_yours "${testcvs} -q ci -m yours" \ 27350 "$CVSROOT_DIRNAME/diffmerge1/testcase01,v <-- testcase01 27351 new revision: 1\.1\.1\.1\.2\.1; previous revision: 1\.1\.1\.1 27352 $CVSROOT_DIRNAME/diffmerge1/testcase02,v <-- testcase02 27353 new revision: 1\.1\.1\.1\.2\.1; previous revision: 1\.1\.1\.1 27354 $CVSROOT_DIRNAME/diffmerge1/testcase03,v <-- testcase03 27355 new revision: 1\.1\.1\.1\.2\.1; previous revision: 1\.1\.1\.1 27356 $CVSROOT_DIRNAME/diffmerge1/testcase04,v <-- testcase04 27357 new revision: 1\.1\.1\.1\.2\.1; previous revision: 1\.1\.1\.1 27358 $CVSROOT_DIRNAME/diffmerge1/testcase05,v <-- testcase05 27359 new revision: 1\.1\.1\.1\.2\.1; previous revision: 1\.1\.1\.1 27360 $CVSROOT_DIRNAME/diffmerge1/testcase06,v <-- testcase06 27361 new revision: 1\.1\.1\.1\.2\.1; previous revision: 1\.1\.1\.1 27362 $CVSROOT_DIRNAME/diffmerge1/testcase07,v <-- testcase07 27363 new revision: 1\.1\.1\.1\.2\.1; previous revision: 1\.1\.1\.1 27364 $CVSROOT_DIRNAME/diffmerge1/testcase08,v <-- testcase08 27365 new revision: 1\.1\.1\.1\.2\.1; previous revision: 1\.1\.1\.1 27366 $CVSROOT_DIRNAME/diffmerge1/testcase09,v <-- testcase09 27367 new revision: 1\.1\.1\.1\.2\.1; previous revision: 1\.1\.1\.1 27368 $CVSROOT_DIRNAME/diffmerge1/testcase10,v <-- testcase10 27369 new revision: 1\.1\.1\.1\.2\.1; previous revision: 1\.1\.1\.1" 27370 27371 # Change my copy. Then I 27372 # update, after both my modifications and your checkin: 27373 cd ../mine 27374 diffmerge_create_my_files 27375 dotest diffmerge1_mine "${testcvs} -q update -j tag" \ 27376 "M testcase01 27377 RCS file: ${CVSROOT_DIRNAME}/diffmerge1/testcase01,v 27378 retrieving revision 1\.1\.1\.1 27379 retrieving revision 1\.1\.1\.1\.2\.1 27380 Merging differences between 1\.1\.1\.1 and 1\.1\.1\.1\.2\.1 into testcase01 27381 M testcase02 27382 RCS file: ${CVSROOT_DIRNAME}/diffmerge1/testcase02,v 27383 retrieving revision 1\.1\.1\.1 27384 retrieving revision 1\.1\.1\.1\.2\.1 27385 Merging differences between 1\.1\.1\.1 and 1\.1\.1\.1\.2\.1 into testcase02 27386 M testcase03 27387 RCS file: ${CVSROOT_DIRNAME}/diffmerge1/testcase03,v 27388 retrieving revision 1\.1\.1\.1 27389 retrieving revision 1\.1\.1\.1\.2\.1 27390 Merging differences between 1\.1\.1\.1 and 1\.1\.1\.1\.2\.1 into testcase03 27391 M testcase04 27392 RCS file: ${CVSROOT_DIRNAME}/diffmerge1/testcase04,v 27393 retrieving revision 1\.1\.1\.1 27394 retrieving revision 1\.1\.1\.1\.2\.1 27395 Merging differences between 1\.1\.1\.1 and 1\.1\.1\.1\.2\.1 into testcase04 27396 RCS file: ${CVSROOT_DIRNAME}/diffmerge1/testcase05,v 27397 retrieving revision 1\.1\.1\.1 27398 retrieving revision 1\.1\.1\.1\.2\.1 27399 Merging differences between 1\.1\.1\.1 and 1\.1\.1\.1\.2\.1 into testcase05 27400 RCS file: ${CVSROOT_DIRNAME}/diffmerge1/testcase06,v 27401 retrieving revision 1\.1\.1\.1 27402 retrieving revision 1\.1\.1\.1\.2\.1 27403 Merging differences between 1\.1\.1\.1 and 1\.1\.1\.1\.2\.1 into testcase06 27404 M testcase07 27405 RCS file: ${CVSROOT_DIRNAME}/diffmerge1/testcase07,v 27406 retrieving revision 1\.1\.1\.1 27407 retrieving revision 1\.1\.1\.1\.2\.1 27408 Merging differences between 1\.1\.1\.1 and 1\.1\.1\.1\.2\.1 into testcase07 27409 testcase07 already contains the differences between 1\.1\.1\.1 and 1\.1\.1\.1\.2\.1 27410 M testcase08 27411 RCS file: ${CVSROOT_DIRNAME}/diffmerge1/testcase08,v 27412 retrieving revision 1\.1\.1\.1 27413 retrieving revision 1\.1\.1\.1\.2\.1 27414 Merging differences between 1\.1\.1\.1 and 1\.1\.1\.1\.2\.1 into testcase08 27415 M testcase09 27416 RCS file: ${CVSROOT_DIRNAME}/diffmerge1/testcase09,v 27417 retrieving revision 1\.1\.1\.1 27418 retrieving revision 1\.1\.1\.1\.2\.1 27419 Merging differences between 1\.1\.1\.1 and 1\.1\.1\.1\.2\.1 into testcase09 27420 M testcase10 27421 RCS file: ${CVSROOT_DIRNAME}/diffmerge1/testcase10,v 27422 retrieving revision 1\.1\.1\.1 27423 retrieving revision 1\.1\.1\.1\.2\.1 27424 Merging differences between 1\.1\.1\.1 and 1\.1\.1\.1\.2\.1 into testcase10" 27425 27426 # So if your changes didn't make it into my working copy, or 27427 # in any case if the files do not look like the final text 27428 # in the files in directory comp_me, then the test flunks: 27429 cd .. 27430 mkdir comp_me 27431 cd comp_me 27432 diffmerge_create_expected_files 27433 cd .. 27434 rm mine/.#* 27435 27436 # If you have GNU's version of diff, you may try 27437 # uncommenting the following line which will give more 27438 # fine-grained information about how cvs differed from the 27439 # correct result: 27440 #dotest diffmerge1_cmp "diff -u --recursive --exclude=CVS comp_me mine" '' 27441 dotest diffmerge1_cmp "directory_cmp comp_me mine" 27442 27443 # Clean up after ourselves: 27444 dokeep 27445 cd .. 27446 rm -r diffmerge1 27447 modify_repo rm -rf $CVSROOT_DIRNAME/diffmerge1 27448 ;; 27449 27450 27451 27452 diffmerge2) 27453 27454 # FIXME: This test should be rewritten to be much more concise. 27455 # It currently weighs in at something like 600 lines, but the 27456 # same thing could probably be tested in more like 50-100 lines. 27457 mkdir diffmerge2 27458 27459 # This tests for another diffmerge bug reported by Martin 27460 # Tomes; actually, his bug was probably caused by an initial 27461 # fix for the bug in test diffmerge1, and likely wasn't ever 27462 # a problem in CVS as long as one was using a normal 27463 # distribution of diff or a version of CVS that has the diff 27464 # lib in it. 27465 # 27466 # Nevertheless, once burned twice cautious, so we test for his 27467 # bug here. 27468 # 27469 # Here is his report, more or less verbatim: 27470 # ------------------------------------------ 27471 # 27472 # Put the attached file (sgrid.h,v) into your repository 27473 # somewhere, check out the module and do this: 27474 # 27475 # cvs update -j Review_Phase_2_Enhancements sgrid.h 27476 # cvs diff -r Review_V1p3 sgrid.h 27477 # 27478 # As there have been no changes made on the trunk there 27479 # should be no differences, however this is output: 27480 # 27481 # % cvs diff -r Review_V1p3 sgrid.h 27482 # Index: sgrid.h 27483 # =================================================================== 27484 # RCS file: /usr/local/repository/play/fred/sgrid.h,v 27485 # retrieving revision 1.1.2.1 27486 # diff -r1.1.2.1 sgrid.h 27487 # 178a179,184 27488 # > /*-------------------------------------------------------------- 27489 # > INLINE FUNCTION : HORIZONTALLINES 27490 # > NOTES : Description at the end of the file 27491 # > ----------------------------------------------------------------*/ 27492 # > uint16 horizontalLines( void ); 27493 # > 27494 # 27495 # I did a cvs diff -c -r 1.1 -r 1.1.2.1 sgrid.h and patched those 27496 # differences to sgrid.h version 1.1 and got the correct result 27497 # so it looks like the built in patch is faulty. 27498 # ------------------------------------------------------------------- 27499 # 27500 # This is the RCS file, sgrid.h,v, that he sent: 27501 27502 echo "head 1.1; 27503 access; 27504 symbols 27505 Review_V1p3:1.1.2.1 27506 Review_V1p3C:1.1.2.1 27507 Review_1p3A:1.1.2.1 27508 Review_V1p3A:1.1.2.1 27509 Review_Phase_2_Enhancements:1.1.0.2 27510 Review_V1p2:1.1 27511 Review_V1p2B:1.1 27512 Review_V1p2A:1.1 27513 Review_V1p1:1.1 27514 Review_1p1:1.1; 27515 locks; strict; 27516 comment @ * @; 27517 27518 27519 1.1 27520 date 97.04.02.11.20.05; author colinl; state Exp; 27521 branches 27522 1.1.2.1; 27523 next ; 27524 27525 1.1.2.1 27526 date 97.06.09.10.00.07; author colinl; state Exp; 27527 branches; 27528 next ; 27529 27530 27531 desc 27532 @@ 27533 27534 27535 1.1 27536 log 27537 @Project: DEV1175 27538 DCN: 27539 Tested By: Colin Law 27540 Reviewed By: 27541 Reason for Change: Initial Revision of all files 27542 27543 Design Change Details: 27544 27545 Implications: 27546 @ 27547 text 27548 @/* \$""Header: L:/gpanels/dis/sgrid.h_v 1.1.1.0 24 Jan 1996 14:59:20 PAULT \$ */ 27549 /* 27550 * \$""Log: L:/gpanels/dis/sgrid.h_v \$ 27551 * 27552 * Rev 1.1.1.0 24 Jan 1996 14:59:20 PAULT 27553 * Branched 27554 * 27555 * Rev 1.1 24 Jan 1996 12:09:52 PAULT 27556 * Consolidated 4100 code merged to trunk 27557 * 27558 * Rev 1.0.2.0 01 Jun 1995 14:18:58 DAVEH 27559 * Branched 27560 * 27561 * Rev 1.0 19 Apr 1995 16:32:48 COLINL 27562 * Initial revision. 27563 */ 27564 /***************************************************************************** 27565 FILE : SGRID.H 27566 VERSION : 2.1 27567 AUTHOR : Dave Hartley 27568 SYSTEM : Borland C++ 27569 DESCRIPTION : The declaration of the scrolling grid class 27570 27571 *****************************************************************************/ 27572 #if !defined(__SGRID_H) 27573 #define __SGRID_H 27574 27575 #if !defined(__SCROLL_H) 27576 #include <scroll.h> 27577 #endif 27578 27579 #if !defined(__GKI_H) 27580 #include \"gki.h\" 27581 #endif 27582 27583 #if defined PRINTING_SUPPORT 27584 class Printer; 27585 #endif 27586 27587 /***************************************************************************** 27588 CLASS : ScrollingGrid 27589 DESCRIPTION: This class inherits from a grid and a scrollable, and 27590 can therefore use all the PUBLIC services provided by these 27591 classes. A description of these can be found in 27592 GRID.H and SCROLL.H. 27593 A scrolling grid is a set of horizontal and vertical lines 27594 that scroll and continually update to provide a complete grid 27595 27596 *****************************************************************************/ 27597 27598 class ScrollingGrid : public Scrollable 27599 { 27600 public: 27601 #if defined _WINDOWS 27602 /*--------------------------------------------------------------------------- 27603 FUNCTION : CONSTRUCTOR 27604 DESCRIPTION : sets up the details of the grid, ready for painting 27605 ARGUMENTS : name : sgColour 27606 - the colour of the grid 27607 sgLineType 27608 - the syle of line 27609 sgHorizontalTotal 27610 - the total number of horizontal grid lines 27611 verticalSpacingMin 27612 - the min distance between the vertical grid lines 27613 on the scrolling axis 27614 currentTimestamp 27615 - timestamp value now 27616 ticksPerSecond 27617 - number of timestamp ticks per second 27618 ticksPerPixel 27619 - number of timestamp ticks per pixel required 27620 27621 RETURN : None 27622 NOTES : 27623 ---------------------------------------------------------------------------*/ 27624 ScrollingGrid( GkiColour sgColour, GkiLineType sgLineType, 27625 uint16 sgHorizontalTotal, 27626 uint16 verticalSpacingMin, uint32 currentTimestamp, 27627 uint16 ticksPerSecond, uint32 ticksPerPixel ); 27628 #else 27629 /*--------------------------------------------------------------------------- 27630 FUNCTION : CONSTRUCTOR 27631 DESCRIPTION : sets up the details of the grid, ready for painting 27632 ARGUMENTS : name : sgColour 27633 - the colour of the grid 27634 sgLineType 27635 - the syle of line 27636 sgHorizontalTotal ( THE MAX NUMBER OF LINES IS 100 ) 27637 - the total number of horizontal grid lines 27638 sgVerticalSpacing 27639 - the distance between the vertical grid lines 27640 on the scrolling axis 27641 27642 RETURN : None 27643 NOTES : If the caller does not get the total grid lines value, synced 27644 with the overall size of the viewport, the spacing between 27645 grid lines will not be consistent. 27646 27647 ---------------------------------------------------------------------------*/ 27648 ScrollingGrid( GkiColour sgColour, GkiLineType sgLineType 27649 , uint16 sgHorizontalTotal, uint16 sgVerticalSpacing ); 27650 #endif 27651 /*--------------------------------------------------------------------------- 27652 FUNCTION : DESTRUCTOR 27653 DESCRIPTION : tidies it all up 27654 ARGUMENTS : name : 27655 27656 RETURN : None 27657 NOTES : 27658 ---------------------------------------------------------------------------*/ 27659 ~ScrollingGrid( void ); 27660 27661 /*--------------------------------------------------------------------------- 27662 FUNCTION : ATTACH 27663 DESCRIPTION : This service overloads the base class service, as it does 27664 additional work at the time of attachment. 27665 27666 ARGUMENTS : name : tDrawingArea 27667 - the scrolled viewport to attach this trend to 27668 27669 RETURN : None 27670 NOTES : 27671 ---------------------------------------------------------------------------*/ 27672 void attach( SViewport *tDrawingArea ); 27673 27674 #if defined _WINDOWS 27675 /*--------------------------------------------------------------------------- 27676 FUNCTION : calculateVerticalSpacing 27677 DESCRIPTION : determines optimum spacing along time axis 27678 ARGUMENTS : 27679 RETURN : None 27680 NOTES : 27681 ---------------------------------------------------------------------------*/ 27682 void calculateVerticalSpacing(); 27683 27684 /*--------------------------------------------------------------------------- 27685 FUNCTION : gridSpacingTicks 27686 DESCRIPTION : Provides the grid spacing in the time axis in ticks 27687 ARGUMENTS : 27688 RETURN : Number of ticks 27689 NOTES : 27690 ---------------------------------------------------------------------------*/ 27691 uint32 gridSpacingTicks(); 27692 27693 #endif 27694 27695 /*--------------------------------------------------------------------------- 27696 INLINE FUNCTION : HORIZONTALLINES 27697 NOTES : Description at the end of the file 27698 ---------------------------------------------------------------------------*/ 27699 uint16 horizontalLines( void ); 27700 27701 #if defined _WINDOWS 27702 // In Windows the OnDraw() function replaces paint() 27703 /*--------------------------------------------------------------------------- 27704 FUNCTION : ScrollingGrid OnDraw 27705 DESCRIPTION : Paints the given area of the grid. 27706 Pure virtual 27707 ARGUMENTS : pDC pointer to the device context to use for display 27708 Note that the device context operates in the coords 27709 of the window owning the viewport 27710 RETURN : None 27711 NOTES : 27712 ---------------------------------------------------------------------------*/ 27713 virtual void OnDraw( CDC *pDC ); 27714 27715 #else // not Windows 27716 27717 /*--------------------------------------------------------------------------- 27718 FUNCTION : PAINT 27719 DESCRIPTION : This extends the standard grid paint method to paint the 27720 viewport relative to its current position. 27721 27722 ARGUMENTS : name : 27723 27724 RETURN : None 27725 NOTES : 27726 ---------------------------------------------------------------------------*/ 27727 void paint( void ); 27728 #endif 27729 27730 /*--------------------------------------------------------------------------- 27731 FUNCTION : P A I N T T E X T M A R K E R S 27732 DESCRIPTION : this service allow the text markers to be painted seperatley 27733 from the grid lines 27734 27735 ARGUMENTS : name : 27736 27737 RETURN : None 27738 NOTES : 27739 ---------------------------------------------------------------------------*/ 27740 void paintTextMarkers(); 27741 27742 #if defined PRINTING_SUPPORT 27743 /*--------------------------------------------------------------------------- 27744 FUNCTION : P R I N T 27745 DESCRIPTION : This print service prints a grid marker ( being either a 27746 timestamp or a date, IF there is one at the plot position 27747 given 27748 27749 ARGUMENTS : name : 27750 displayPosition 27751 - Where in the log to look to see if there is an 27752 entry to print 27753 27754 - printerPtr 27755 the printer to print to 27756 27757 RETURN : None 27758 NOTES : 27759 ---------------------------------------------------------------------------*/ 27760 void print( uint16 currentPrintPos, Printer *printerPtr ); 27761 #endif 27762 27763 /*--------------------------------------------------------------------------- 27764 FUNCTION : S E T D R I V E D I R E C T I O N 27765 DESCRIPTION : Sets direction for update and scrolling forwards or backwards 27766 ARGUMENTS : direction - required direction 27767 RETURN : None 27768 NOTES : 27769 ---------------------------------------------------------------------------*/ 27770 void setDriveDirection( ScrollDirection direction ); 27771 27772 /*--------------------------------------------------------------------------- 27773 FUNCTION : S E T U P 27774 DESCRIPTION : service that will setup the grid prior to a paint 27775 27776 ARGUMENTS : name : 27777 - newTimestamp 27778 27779 27780 - newTimeBase 27781 the number of ticks that represent a plot point on 27782 the trendgraph. 27783 27784 RETURN : None 27785 NOTES : 27786 ---------------------------------------------------------------------------*/ 27787 void setup( uint32 newTimestamp, uint32 newTimeBase ); 27788 27789 #if defined PRINTING_SUPPORT 27790 /*--------------------------------------------------------------------------- 27791 FUNCTION : S E T U P F O R P R I N T 27792 DESCRIPTION : This service iis to be called prior to printing. It allows 27793 the grid to prepare its markers ready for the print 27794 commands 27795 27796 ARGUMENTS : name : 27797 27798 RETURN : None 27799 NOTES : 27800 ---------------------------------------------------------------------------*/ 27801 void setupForPrint(); 27802 #endif 27803 27804 /*--------------------------------------------------------------------------- 27805 FUNCTION : UPDATE 27806 DESCRIPTION : When this service is called it will calculate what needs to 27807 be painted and fill in the display again. 27808 27809 ARGUMENTS : name : timeStamp 27810 - the reference time of this update. 27811 27812 RETURN : None 27813 NOTES : 27814 ---------------------------------------------------------------------------*/ 27815 void update( uint32 timeStamp ); 27816 27817 /*--------------------------------------------------------------------------- 27818 FUNCTION : U P D A T E B U F F E R 27819 DESCRIPTION : When a display update is not required, use this method. It 27820 updates the internal data ready for a call to paint that 27821 will then show the grid in the right position 27822 27823 ARGUMENTS : name : 27824 27825 RETURN : None 27826 NOTES : 27827 ---------------------------------------------------------------------------*/ 27828 void updateBuffer( void ); 27829 27830 private: 27831 27832 /*--------------------------------------------------------------------------- 27833 FUNCTION : M A K E G R I D M A R K E R 27834 DESCRIPTION : service that perpares a string for display. The string will 27835 either be a short date, or short time. this is determined 27836 by the current setting of the dateMarker flag 27837 27838 ARGUMENTS : name : timestampVal 27839 - the value to convert 27840 27841 storePtr 27842 - the place to put the string 27843 27844 RETURN : None 27845 NOTES : 27846 ---------------------------------------------------------------------------*/ 27847 void makeGridMarker( uint32 timestampVal, char *storePtr ); 27848 27849 /*--------------------------------------------------------------------------- 27850 FUNCTION : P A I N T G R I D M A R K E R 27851 DESCRIPTION : given a position will put the string on the display 27852 27853 ARGUMENTS : name : 27854 yPos 27855 - were it goes on the Y-axis 27856 27857 gridMarkerPtr 27858 - what it is 27859 27860 RETURN : None 27861 NOTES : 27862 ---------------------------------------------------------------------------*/ 27863 void paintGridMarker( uint16 yPos, char *gridMarkerPtr ); 27864 27865 #if defined _WINDOWS 27866 /*--------------------------------------------------------------------------- 27867 FUNCTION : PAINTHORIZONTALLINES 27868 DESCRIPTION : responsible for painting the grids horizontal lines 27869 ARGUMENTS : pRectToDraw pointer to rectangle that needs refreshing. 27870 in viewport coords 27871 pDC pointer to device context to use 27872 27873 RETURN : None 27874 NOTES : 27875 ---------------------------------------------------------------------------*/ 27876 void paintHorizontalLines(RectCoords* pRectToDraw, CDC* pDC ); 27877 #else 27878 /*--------------------------------------------------------------------------- 27879 FUNCTION : PAINTHORIZONTALLINES 27880 DESCRIPTION : responsible for painting the grids horizontal lines 27881 ARGUMENTS : name: xStart 27882 - the starting X co-ordinate for the horizontal line 27883 xEnd 27884 - the ending X co-ordinate for the horizontal line 27885 27886 RETURN : None 27887 NOTES : Remember lines are drawn from origin. The origin in a 27888 horizontal viewport will be the top. 27889 ---------------------------------------------------------------------------*/ 27890 void paintHorizontalLines( uint16 xStart, uint16 xEnd ); 27891 #endif 27892 27893 #if defined _WINDOWS 27894 /*--------------------------------------------------------------------------- 27895 FUNCTION : PAINTVERTICALLINES 27896 DESCRIPTION : responsible for painting the grids vertical lines 27897 ARGUMENTS : pRectToDraw pointer to rectangle that needs refreshing. 27898 in viewport coords 27899 offset offset from rhs that rightmost line would be 27900 drawn if rectangle included whole viewport 27901 pDC pointer to device context to use 27902 RETURN : None 27903 NOTES : 27904 ---------------------------------------------------------------------------*/ 27905 void paintVerticalLines( RectCoords* pRectToDraw, uint16 offset, 27906 CDC* pDC ); 27907 #else 27908 /*--------------------------------------------------------------------------- 27909 FUNCTION : PAINTVERTICALLINES 27910 DESCRIPTION : responsible for painting the grids vertical lines 27911 ARGUMENTS : name : yStart 27912 - the starting Y co-ordinate for the vertical line 27913 yEnd 27914 - the ending Y co-ordinate for the vertical line 27915 offset 27916 - a starting point offset that determines at what X 27917 position the first line will be drawn 27918 27919 27920 RETURN : None 27921 NOTES : 27922 ---------------------------------------------------------------------------*/ 27923 void paintVerticalLines( uint16 yStart, uint16 yEnd, uint16 offset ); 27924 #endif 27925 27926 #if defined _WINDOWS 27927 /*--------------------------------------------------------------------------- 27928 FUNCTION : PAINTVERTICALLINE 27929 DESCRIPTION : paints one line at the position specified, and length 27930 ARGUMENTS : name : yStart 27931 - the starting point on the y axis for the line 27932 yEnd 27933 - the end point on the y axis for the line 27934 xPosition 27935 - The horizontal offset from the start of the viewport 27936 pDC pointer to device context to use 27937 27938 RETURN : None 27939 NOTES : There is not an equivalent horizontal method as yet. This 27940 is a seperate method because the service is useful to a 27941 derivation of this class 27942 ---------------------------------------------------------------------------*/ 27943 void paintVerticalLine( uint16 yStart, uint16 yEnd 27944 , uint16 xPosition, CDC *pDC ); 27945 #else 27946 /*--------------------------------------------------------------------------- 27947 FUNCTION : PAINTVERTICALLINE 27948 DESCRIPTION : paints one line at the position specified, and length 27949 ARGUMENTS : name : yStart 27950 - the starting point on the y axis for the line 27951 yEnd 27952 - the end point on the y axis for the line 27953 xPosition 27954 - The horizontal offset from the start of the viewport 27955 27956 RETURN : None 27957 NOTES : There is not an equivalent horizontal method as yet. This 27958 is a seperate method because the service is useful to a 27959 derivation of this class 27960 ---------------------------------------------------------------------------*/ 27961 void paintVerticalLine( uint16 yStart, uint16 yEnd 27962 , uint16 xPosition ); 27963 #endif 27964 27965 /*--------------------------------------------------------------------------- 27966 INLINE FUNCTION : VERTICALSPACING 27967 NOTES : Description at the end of the file 27968 ---------------------------------------------------------------------------*/ 27969 uint16 verticalSpacing( void ); 27970 27971 27972 // Position in viewport that we are now writing to if going forwards 27973 // Note that if this is greater than viewport length then we have 27974 // just scrolled and value must be adjusted before use. 27975 sint16 forwardsOutputPosition; 27976 27977 // Position in viewport that we are now writing to if going backwards 27978 // Note that if this is less than zero then we have 27979 // just scrolled and value must be adjusted before use. 27980 sint16 backwardsOutputPosition; 27981 27982 // position in grid cycle of forwards output position. 27983 // if zero then it is time to output a grid line 27984 sint16 forwardsIntervalCount; 27985 27986 // position in grid cycle of forwards output position. 27987 // if zero then it is time to output a grid line 27988 sint16 backwardsIntervalCount; 27989 27990 uint32 lastUpdateTimestamp; 27991 uint32 timeBase; // ticks per pixel 27992 uint16 currentOutputPosition; 27993 uint16 gridTimestampSpacing; 27994 uint16 intervalCount; 27995 uint16 horizontalTotal; 27996 uint16 vSpacing; 27997 #if defined PRINTING_SUPPORT 27998 uint16 numberOfGridMarkersPrinted; 27999 #endif 28000 bool firstTime; // indicates first time through 28001 bool dateMarker; 28002 28003 GkiLineType lineType; 28004 GkiColour gridColour; 28005 28006 #if defined _WINDOWS 28007 uint16 ticksPerSec; // number of time ticks per second 28008 uint16 vSpacingMin; // minimum pixels per division along time axis 28009 CPen *pPen; // the pen to use for drawing in windows 28010 #endif 28011 28012 }; 28013 28014 28015 /***************************************************************************** 28016 I N L I N E F U N C T I O N S 28017 *****************************************************************************/ 28018 28019 /*--------------------------------------------------------------------------- 28020 FUNCTION : HORIZONTALLINES 28021 DESCRIPTION : supplies the number of horizontal lines in the grid 28022 ARGUMENTS : name : 28023 28024 RETURN : 28025 NOTES : 28026 ---------------------------------------------------------------------------*/ 28027 inline uint16 ScrollingGrid::horizontalLines( void ) 28028 { 28029 return( horizontalTotal ); 28030 } 28031 /*--------------------------------------------------------------------------- 28032 FUNCTION : VERTICALSPACING 28033 DESCRIPTION : returns the distance between adjacent vertical lines 28034 ARGUMENTS : name : 28035 28036 RETURN : None 28037 NOTES : 28038 ---------------------------------------------------------------------------*/ 28039 inline uint16 ScrollingGrid::verticalSpacing( void ) 28040 { 28041 return( vSpacing ); 28042 } 28043 28044 #endif 28045 @ 28046 28047 28048 1.1.2.1 28049 log 28050 @DEV1194:DS4 Provision of major and minor grid lines 28051 @ 28052 text 28053 @d1 1 28054 a1 1 28055 /* \$""Header: /usr/local/repository/cmnsrc/review/src/sgrid.h,v 1.1 1997/04/02 11:20:05 colinl Exp \$ */ 28056 d3 1 28057 a3 12 28058 * \$""Log: sgrid.h,v \$ 28059 * Revision 1.1 1997/04/02 11:20:05 colinl 28060 * Project: DEV1175 28061 * DCN: 28062 * Tested By: Colin Law 28063 * Reviewed By: 28064 * Reason for Change: Initial Revision of all files 28065 * 28066 * Design Change Details: 28067 * 28068 * Implications: 28069 * 28070 d58 6 28071 a63 5 28072 ARGUMENTS : name : majorColour colour for major grid lines 28073 minorColour colour for minor grid lines 28074 sgLineType line type for minor grid lines 28075 yMajorGridLines number of major y lines on grid 28076 yMinorGridLines number of major y lines on grid 28077 d77 2 28078 a78 3 28079 ScrollingGrid( GkiColour majorColour, GkiColour minorColour, 28080 GkiLineType sgLineType, 28081 uint16 yMajorGridLines, uint16 yMinorGridLines, 28082 a137 17 28083 FUNCTION : DrawHorizontalGridLines 28084 28085 DESCRIPTION : Draws major or minor grid lines 28086 ARGUMENTS : pDC device context 28087 pPen pen to use 28088 numLines total lines required 28089 yLow, yHigh, xLow, xHigh rectangle to draw in 28090 yMax max y value 28091 RETURN : None 28092 NOTES : 28093 ---------------------------------------------------------------------------*/ 28094 void DrawHorizontalGridLines( CDC* pDC, CPen* pPen, 28095 uint16 numLines, 28096 uint16 yLow, uint16 yHigh, uint16 xLow, uint16 xHigh, 28097 uint16 yMax ); 28098 28099 /*--------------------------------------------------------------------------- 28100 d148 6 28101 d448 1 28102 a448 2 28103 uint16 m_yMajorGridLines; 28104 uint16 m_yMinorGridLines; 28105 d456 2 28106 a457 3 28107 GkiLineType lineType; // line type for minor grid lines 28108 GkiColour m_majorColour; 28109 GkiColour m_minorColour; 28110 d462 1 28111 a462 2 28112 CPen *pMajorPen; // pen to use for drawing major grid lines 28113 CPen *pMinorPen; // pen to use for drawing minor grid lines 28114 d472 12 28115 @" > diffmerge2/sgrid.h,v 28116 28117 # We have to put the RCS file in the repository by hand for 28118 # this test: 28119 modify_repo mkdir $CVSROOT_DIRNAME/diffmerge2 28120 modify_repo cp diffmerge2/sgrid.h,v \ 28121 $CVSROOT_DIRNAME/diffmerge2/sgrid.h,v 28122 rm -rf diffmerge2 28123 dotest diffmerge2_co \ 28124 "$testcvs co diffmerge2" "${DOTSTAR}U $DOTSTAR" 28125 cd diffmerge2 28126 dotest diffmerge2_update \ 28127 "${testcvs} update -j Review_Phase_2_Enhancements sgrid.h" \ 28128 "${DOTSTAR}erging ${DOTSTAR}" 28129 # This is the one that counts -- there should be no output: 28130 dotest diffmerge2_diff \ 28131 "${testcvs} diff -r Review_V1p3 sgrid.h" '' 28132 28133 dokeep 28134 cd .. 28135 rm -rf diffmerge2 28136 modify_repo rm -rf $CVSROOT_DIRNAME/diffmerge2 28137 ;; 28138 28139 28140 28141 release) 28142 # Tests of "cvs release", particularly multiple arguments. 28143 # Other CVS release tests: 28144 # info-cleanup-0 for "cvs -n release". 28145 # ignore-193 for the text of the question that cvs release asks. 28146 # Also for interactions with cvsignore. 28147 # basicc: "-d .", global -Q, no arguments (is a noop), 28148 # "cvs release" without -d, multiple arguments. 28149 # dirs-4: repository directory has been deleted. 28150 # modules2-6: multiple arguments. 28151 28152 # First the usual setup; create a directory first-dir. 28153 mkdir 1; cd 1 28154 dotest release-1 "${testcvs} -q co -l ." '' 28155 mkdir first-dir 28156 dotest release-2 "${testcvs} add first-dir" \ 28157 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 28158 cd first-dir 28159 mkdir dir1 28160 dotest release-3 "${testcvs} add dir1" \ 28161 "Directory ${CVSROOT_DIRNAME}/first-dir/dir1 added to the repository" 28162 mkdir dir2 28163 dotest release-4 "${testcvs} add dir2" \ 28164 "Directory ${CVSROOT_DIRNAME}/first-dir/dir2 added to the repository" 28165 cd dir2 28166 mkdir dir3 28167 dotest release-5 "${testcvs} add dir3" \ 28168 "Directory ${CVSROOT_DIRNAME}/first-dir/dir2/dir3 added to the repository" 28169 28170 cd ../.. 28171 dotest release-6 "${testcvs} release -d first-dir/dir2/dir3 first-dir/dir1" \ 28172 "You have .0. altered files in this repository. 28173 Are you sure you want to release (and delete) directory .first-dir/dir2/dir3.: \ 28174 You have .0. altered files in this repository. 28175 Are you sure you want to release (and delete) directory .first-dir/dir1.: " <<EOF 28176 yes 28177 yes 28178 EOF 28179 dotest_fail release-7 "test -d first-dir/dir1" '' 28180 dotest_fail release-8 "test -d first-dir/dir2/dir3" '' 28181 dotest release-9 "${testcvs} update" \ 28182 "${SPROG} update: Updating \. 28183 ${SPROG} update: Updating first-dir 28184 ${SPROG} update: Updating first-dir/dir2" 28185 28186 cd first-dir 28187 mkdir dir1 28188 dotest release-10 "${testcvs} add dir1" \ 28189 "Directory ${CVSROOT_DIRNAME}/first-dir/dir1 added to the repository" 28190 cd dir2 28191 mkdir dir3 28192 dotest release-11 "${testcvs} add dir3" \ 28193 "Directory ${CVSROOT_DIRNAME}/first-dir/dir2/dir3 added to the repository" 28194 28195 cd ../.. 28196 dotest release-12 "${testcvs} release first-dir/dir2/dir3 first-dir/dir1" \ 28197 "You have .0. altered files in this repository. 28198 Are you sure you want to release directory .first-dir/dir2/dir3.: .. .release. aborted by user choice. 28199 You have .0. altered files in this repository. 28200 Are you sure you want to release directory .first-dir/dir1.: " <<EOF 28201 no 28202 yes 28203 EOF 28204 dotest release-13 "${testcvs} release first-dir/dir2/dir3 first-dir/dir2" \ 28205 "You have .0. altered files in this repository. 28206 Are you sure you want to release directory .first-dir/dir2/dir3.: \ 28207 You have .0. altered files in this repository. 28208 Are you sure you want to release directory .first-dir/dir2.: " <<EOF 28209 yes 28210 yes 28211 EOF 28212 dotest release-14 "test -d first-dir/dir1" '' 28213 dotest release-15 "test -d first-dir/dir2/dir3" '' 28214 28215 mkdir first-dir/dir1/dir4 28216 # FIXCVS: There should be a path showing in front of dir below, 28217 # I believe. 28218 dotest release-unrecognized-dir-1 \ 28219 "${testcvs} release -d first-dir/dir1" \ 28220 "${QUESTION} dir4 28221 You have .0. altered files in this repository. 28222 Are you sure you want to release (and delete) directory \`first-dir/dir1': " <<EOF 28223 yes 28224 EOF 28225 28226 rm -rf first-dir/dir2 28227 28228 dotest release-16 "${testcvs} update" \ 28229 "$SPROG update: Updating \. 28230 $SPROG update: Updating first-dir" 28231 28232 # Check to make sure release isn't overwriting a 28233 # CVS/Entries file in the current directory (using data 28234 # from the released directory). 28235 28236 # cvs 1.11 (remote) fails on release-21 (a message about 28237 # chdir into the removed directory), although it seemingly 28238 # unedits and removes the directory correctly. If 28239 # you manually continue, it then fails on release-22 do 28240 # to the messed up CVS/Entries file from release-21. 28241 cd first-dir 28242 mkdir second-dir 28243 dotest release-18 "$testcvs add second-dir" \ 28244 "Directory $CVSROOT_DIRNAME/first-dir/second-dir added to the repository" 28245 28246 cd second-dir 28247 touch file1 28248 dotest release-19 "$testcvs -Q add file1" 28249 dotest release-20 '$testcvs -q ci -m add' \ 28250 "$CVSROOT_DIRNAME/first-dir/second-dir/file1,v <-- file1 28251 initial revision: 1\.1" 28252 dotest release-21 "$testcvs edit file1" 28253 cd .. 28254 dotest release-22 "echo yes | $testcvs release -d second-dir" \ 28255 "You have \[0\] altered files in this repository. 28256 Are you sure you want to release (and delete) directory \`second-dir': " 28257 dotest release-23 "$testcvs -q update -d" "U second-dir/file1" 28258 dotest release-24 "$testcvs edit" 28259 28260 dokeep 28261 cd ../.. 28262 rm -r 1 28263 modify_repo rm -rf 1 $CVSROOT_DIRNAME/first-dir 28264 ;; 28265 28266 28267 28268 recase) 28269 # 28270 # Some tests of behavior which broke at one time or another when run 28271 # from case insensitive clients against case sensitive servers. 28272 # 28273 # These tests are namned according to the following convention: 28274 # 28275 # ci Client (sandbox filesystem) case Insensitive 28276 # cs Client (sandbox filesystem) case Sensitive 28277 # si Server (repository filesystem) case Insensitive 28278 # ss Server (repository filesystem) case Sensitive 28279 # 28280 28281 mkdir 1; cd 1 28282 28283 # First, we will expect different results for a few of these tests 28284 # based on whether the repository is on a case sensitive filesystem 28285 # or not and whether the sandbox is on a case sensitive filesystem or 28286 # not, so determine which cases we are dealing with: 28287 echo file >file 28288 echo FiLe >FiLe 28289 if cmp file FiLe >/dev/null; then 28290 client_sensitive=false 28291 else 28292 client_sensitive=: 28293 fi 28294 if test -n "$remotehost"; then 28295 $CVS_RSH $remotehost 'echo file >file' 28296 $CVS_RSH $remotehost 'echo FiLe >FiLe' 28297 if $CVS_RSH $remotehost 'cmp file FiLe >/dev/null'; then 28298 server_sensitive=false 28299 else 28300 server_sensitive=: 28301 fi 28302 else 28303 server_sensitive=$client_sensitive 28304 fi 28305 28306 # The first test (recase-1 & recase-2) is for a remove of a file then 28307 # a readd in a different case. 28308 modify_repo mkdir $CVSROOT_DIRNAME/first-dir 28309 dotest recase-init-1 "$testcvs -Q co first-dir" 28310 cd first-dir 28311 28312 echo this file has no content >file 28313 dotest recase-init-2 "$testcvs -Q add file" 28314 dotest recase-init-3 "$testcvs -Q ci -madd" 28315 dotest recase-init-4 "$testcvs -Q tag first" 28316 28317 # Now remove the file. 28318 dotest recase-init-5 "$testcvs -Q rm -f file" 28319 dotest recase-init-6 "$testcvs -Q ci -mrm" 28320 28321 # Now the test - readd in a different case. 28322 echo this file needs some content >FiLe 28323 if $server_sensitive; then 28324 dotest recase-1ss "$testcvs add FiLe" \ 28325 "$SPROG add: scheduling file \`FiLe' for addition 28326 $SPROG add: use \`$SPROG commit' to add this file permanently" 28327 dotest recase-2ss "$testcvs -q ci -mrecase" \ 28328 "$CVSROOT_DIRNAME/first-dir/FiLe,v <-- FiLe 28329 initial revision: 1\.1" 28330 else # server insensitive 28331 dotest recase-1si "$testcvs add FiLe" \ 28332 "$SPROG add: Re-adding file \`FiLe' after dead revision 1\.2\. 28333 $SPROG add: use \`$SPROG commit' to add this file permanently" 28334 dotest recase-2si "$testcvs -q ci -mrecase" \ 28335 "$CVSROOT_DIRNAME/first-dir/FiLe,v <-- FiLe 28336 new revision: 1\.3; previous revision: 1\.2" 28337 fi 28338 28339 # Now verify that a checkout will still work 28340 cd ../.. 28341 mkdir 2; cd 2 28342 dotest recase-3 "$testcvs -q co first-dir" \ 28343 "U first-dir/FiLe" 28344 28345 cd first-dir 28346 # Prove that we can still get status and log information on 28347 # conflicting case files (1 in Attic, one in parent). 28348 if $remote; then 28349 if $client_sensitive; then 28350 file=file 28351 fIlE=fIlE 28352 else # client insensitive 28353 # Because FiLe is present on a case insensitive client, it is the 28354 # only one ever found and queried or altered. 28355 file=FiLe 28356 fIlE=FiLe 28357 fi 28358 else # ! $remote 28359 file=file 28360 fIlE=fIlE 28361 fi 28362 if $server_sensitive; then 28363 if $client_sensitive; then 28364 # Client finds Entry only for FiLe. Others returned by server. 28365 dotest recase-4sscs "$testcvs status file" \ 28366 "=================================================================== 28367 File: no file file Status: Up-to-date 28368 28369 Working revision: No entry for file 28370 Repository revision: 1\.2 $CVSROOT_DIRNAME/first-dir/Attic/file,v 28371 Commit Identifier: ${commitid}" 28372 dotest recase-5sscs "$testcvs log file" \ 28373 " 28374 RCS file: $CVSROOT_DIRNAME/first-dir/Attic/file,v 28375 Working file: file 28376 head: 1\.2 28377 branch: 28378 locks: strict 28379 access list: 28380 symbolic names: 28381 first: 1\.1 28382 keyword substitution: kv 28383 total revisions: 2; selected revisions: 2 28384 description: 28385 ---------------------------- 28386 revision 1\.2 28387 date: ${ISO8601DATE}; author: $username; state: dead; lines: +0 -0; commitid: ${commitid}; 28388 rm 28389 ---------------------------- 28390 revision 1\.1 28391 date: ${ISO8601DATE}; author: $username; state: Exp; commitid: ${commitid}; 28392 add 28393 =============================================================================" 28394 dotest recase-6sscs "$testcvs status FiLe" \ 28395 "=================================================================== 28396 File: FiLe Status: Up-to-date 28397 28398 Working revision: 1\.1.* 28399 Repository revision: 1\.1 $CVSROOT_DIRNAME/first-dir/FiLe,v 28400 Commit Identifier: ${commitid} 28401 Sticky Tag: (none) 28402 Sticky Date: (none) 28403 Sticky Options: (none)" 28404 dotest recase-7sscs "$testcvs log FiLe" \ 28405 " 28406 RCS file: $CVSROOT_DIRNAME/first-dir/FiLe,v 28407 Working file: FiLe 28408 head: 1\.1 28409 branch: 28410 locks: strict 28411 access list: 28412 symbolic names: 28413 keyword substitution: kv 28414 total revisions: 1; selected revisions: 1 28415 description: 28416 ---------------------------- 28417 revision 1\.1 28418 date: ${ISO8601DATE}; author: $username; state: Exp; commitid: ${commitid}; 28419 recase 28420 =============================================================================" 28421 else # server sensitive && client insensitive 28422 # Client finds same Entry for file & FiLe. 28423 dotest recase-4ssci "$testcvs status file" \ 28424 "=================================================================== 28425 File: FiLe Status: Up-to-date 28426 28427 Working revision: 1\.1.* 28428 Repository revision: 1\.1 $CVSROOT_DIRNAME/first-dir/FiLe,v 28429 Commit Identifier: ${commitid} 28430 Sticky Tag: (none) 28431 Sticky Date: (none) 28432 Sticky Options: (none)" 28433 dotest recase-5ssci "$testcvs log file" \ 28434 " 28435 RCS file: $CVSROOT_DIRNAME/first-dir/FiLe,v 28436 Working file: FiLe 28437 head: 1\.1 28438 branch: 28439 locks: strict 28440 access list: 28441 symbolic names: 28442 keyword substitution: kv 28443 total revisions: 1; selected revisions: 1 28444 description: 28445 ---------------------------- 28446 revision 1\.1 28447 date: ${ISO8601DATE}; author: $username; state: Exp; commitid: ${commitid}; 28448 recase 28449 =============================================================================" 28450 dotest recase-6ss "$testcvs status FiLe" \ 28451 "=================================================================== 28452 File: FiLe Status: Up-to-date 28453 28454 Working revision: 1\.1.* 28455 Repository revision: 1\.1 $CVSROOT_DIRNAME/first-dir/FiLe,v 28456 Commit Identifier: ${commitid} 28457 Sticky Tag: (none) 28458 Sticky Date: (none) 28459 Sticky Options: (none)" 28460 dotest recase-7ss "$testcvs log FiLe" \ 28461 " 28462 RCS file: $CVSROOT_DIRNAME/first-dir/FiLe,v 28463 Working file: FiLe 28464 head: 1\.1 28465 branch: 28466 locks: strict 28467 access list: 28468 symbolic names: 28469 keyword substitution: kv 28470 total revisions: 1; selected revisions: 1 28471 description: 28472 ---------------------------- 28473 revision 1\.1 28474 date: ${ISO8601DATE}; author: $username; state: Exp; commitid: ${commitid}; 28475 recase 28476 =============================================================================" 28477 fi 28478 else # server insensitive 28479 # There is only one archive when the server is insensitive, but the 28480 # printed file/archive name can vary. 28481 dotest recase-4si "$testcvs status file" \ 28482 "=================================================================== 28483 File: $file Status: Up-to-date 28484 28485 Working revision: 1\.3.* 28486 Repository revision: 1\.3 $CVSROOT_DIRNAME/first-dir/$file,v 28487 Commit Identifier: ${commitid} 28488 Sticky Tag: (none) 28489 Sticky Date: (none) 28490 Sticky Options: (none)" 28491 dotest recase-5si "$testcvs log file" \ 28492 " 28493 RCS file: $CVSROOT_DIRNAME/first-dir/$file,v 28494 Working file: $file 28495 head: 1\.3 28496 branch: 28497 locks: strict 28498 access list: 28499 symbolic names: 28500 first: 1\.1 28501 keyword substitution: kv 28502 total revisions: 3; selected revisions: 3 28503 description: 28504 ---------------------------- 28505 revision 1\.3 28506 date: ${ISO8601DATE}; author: $username; state: Exp; lines: +1 -1; commitid: ${commitid}; 28507 recase 28508 ---------------------------- 28509 revision 1\.2 28510 date: ${ISO8601DATE}; author: $username; state: dead; lines: +0 -0; commitid: ${commitid}; 28511 rm 28512 ---------------------------- 28513 revision 1\.1 28514 date: ${ISO8601DATE}; author: $username; state: Exp; commitid: ${commitid}; 28515 add 28516 =============================================================================" 28517 dotest recase-6si "$testcvs status FiLe" \ 28518 "=================================================================== 28519 File: FiLe Status: Up-to-date 28520 28521 Working revision: 1\.3.* 28522 Repository revision: 1\.3 $CVSROOT_DIRNAME/first-dir/FiLe,v 28523 Commit Identifier: ${commitid} 28524 Sticky Tag: (none) 28525 Sticky Date: (none) 28526 Sticky Options: (none)" 28527 dotest recase-7si "$testcvs log FiLe" \ 28528 " 28529 RCS file: $CVSROOT_DIRNAME/first-dir/FiLe,v 28530 Working file: FiLe 28531 head: 1\.3 28532 branch: 28533 locks: strict 28534 access list: 28535 symbolic names: 28536 first: 1\.1 28537 keyword substitution: kv 28538 total revisions: 3; selected revisions: 3 28539 description: 28540 ---------------------------- 28541 revision 1\.3 28542 date: ${ISO8601DATE}; author: $username; state: Exp; lines: +1 -1; commitid: ${commitid}; 28543 recase 28544 ---------------------------- 28545 revision 1\.2 28546 date: ${ISO8601DATE}; author: $username; state: dead; lines: +0 -0; commitid: ${commitid}; 28547 rm 28548 ---------------------------- 28549 revision 1\.1 28550 date: ${ISO8601DATE}; author: $username; state: Exp; commitid: ${commitid}; 28551 add 28552 =============================================================================" 28553 fi 28554 28555 # And when the file does not exist on the client, we go with the 28556 # client Entries match. 28557 if $client_sensitive && $server_sensitive; then 28558 dotest recase-8sscs "$testcvs status fIlE" \ 28559 "$SPROG status: nothing known about \`fIlE' 28560 =================================================================== 28561 File: no file fIlE Status: Unknown 28562 28563 Working revision: No entry for fIlE 28564 Repository revision: No revision control file" 28565 else # !$client_sensitive || !$server_sensitive 28566 dotest recase-8anyi "$testcvs status fIlE" \ 28567 "=================================================================== 28568 File: $fIlE Status: Up-to-date 28569 28570 Working revision: 1\.[0-9]*.* 28571 Repository revision: 1\.[0-9]* $CVSROOT_DIRNAME/first-dir/$fIlE,v 28572 Commit Identifier: ${commitid} 28573 Sticky Tag: (none) 28574 Sticky Date: (none) 28575 Sticky Options: (none)" 28576 fi 28577 28578 # and an update 28579 if $server_sensitive; then 28580 dotest recase-9ss "$testcvs -q up -rfirst" \ 28581 "$SPROG update: \`FiLe' is no longer in the repository 28582 U file" 28583 28584 if $client_sensitive; then 28585 dotest recase-10sscs "$testcvs -q up -A" \ 28586 "U FiLe 28587 $SPROG update: \`file' is no longer in the repository" 28588 else # client insensitive 28589 # FIXCVS: This should remove the offending file first. 28590 dotest_fail recase-10ssci "$testcvs -q up -A" \ 28591 "$SPROG update: move away \`\./FiLe'; it is in the way 28592 C FiLe 28593 $SPROG update: \`file' is no longer in the repository" 28594 28595 cd .. 28596 rm -r first-dir 28597 dotest recase-11ssci "$testcvs -q co first-dir" \ 28598 "U first-dir/FiLe" 28599 cd first-dir 28600 fi 28601 28602 # 28603 # See what happens when cased names clash. 28604 # 28605 28606 # Copy the archive 28607 if test -n "$remotehost"; then 28608 modify_repo $CVS_RSH $remotehost \ 28609 "cp $CVSROOT_DIRNAME/first-dir/FiLe,v \ 28610 $CVSROOT_DIRNAME/first-dir/FILE,v" 28611 else 28612 modify_repo cp $CVSROOT_DIRNAME/first-dir/FiLe,v \ 28613 $CVSROOT_DIRNAME/first-dir/FILE,v 28614 fi 28615 28616 if $client_sensitive; then 28617 dotest recase-12sscs "$testcvs -q up" "U FILE" 28618 else # client insensitive 28619 dotest_fail recase-12ssci "$testcvs -q up" \ 28620 "$SPROG update: move away \`\./FILE'; it is in the way 28621 C FILE" 28622 fi 28623 else # server insensitive 28624 dotest recase-9si "$testcvs -q up -rfirst" "U FiLe" 28625 dotest recase-10si "$testcvs -q up -A" "U FiLe" 28626 fi 28627 28628 # Prove that we can still get status and log information on 28629 # conflicting case files (1 in Attic, two in parent). 28630 if $server_sensitive; then 28631 if $client_sensitive; then 28632 # Client finds Entry only for FiLe. Others returned by server. 28633 dotest recase-13sscs "$testcvs status file" \ 28634 "=================================================================== 28635 File: no file file Status: Up-to-date 28636 28637 Working revision: No entry for file 28638 Repository revision: 1\.2 $CVSROOT_DIRNAME/first-dir/Attic/file,v 28639 Commit Identifier: ${commitid}" 28640 dotest recase-14sscs "$testcvs log file" \ 28641 " 28642 RCS file: $CVSROOT_DIRNAME/first-dir/Attic/file,v 28643 Working file: file 28644 head: 1\.2 28645 branch: 28646 locks: strict 28647 access list: 28648 symbolic names: 28649 first: 1\.1 28650 keyword substitution: kv 28651 total revisions: 2; selected revisions: 2 28652 description: 28653 ---------------------------- 28654 revision 1\.2 28655 date: ${ISO8601DATE}; author: $username; state: dead; lines: +0 -0; commitid: ${commitid}; 28656 rm 28657 ---------------------------- 28658 revision 1\.1 28659 date: ${ISO8601DATE}; author: $username; state: Exp; commitid: ${commitid}; 28660 add 28661 =============================================================================" 28662 dotest recase-15sscs "$testcvs status FiLe" \ 28663 "=================================================================== 28664 File: FiLe Status: Up-to-date 28665 28666 Working revision: 1\.1.* 28667 Repository revision: 1\.1 $CVSROOT_DIRNAME/first-dir/FiLe,v 28668 Commit Identifier: ${commitid} 28669 Sticky Tag: (none) 28670 Sticky Date: (none) 28671 Sticky Options: (none)" 28672 dotest recase-16sscs "$testcvs log FiLe" \ 28673 " 28674 RCS file: $CVSROOT_DIRNAME/first-dir/FiLe,v 28675 Working file: FiLe 28676 head: 1\.1 28677 branch: 28678 locks: strict 28679 access list: 28680 symbolic names: 28681 keyword substitution: kv 28682 total revisions: 1; selected revisions: 1 28683 description: 28684 ---------------------------- 28685 revision 1\.1 28686 date: ${ISO8601DATE}; author: $username; state: Exp; commitid: ${commitid}; 28687 recase 28688 =============================================================================" 28689 dotest recase-17sscs "$testcvs status FILE" \ 28690 "=================================================================== 28691 File: FILE Status: Up-to-date 28692 28693 Working revision: 1.1.* 28694 Repository revision: 1.1 ${CVSROOT_DIRNAME}/first-dir/FILE,v 28695 Commit Identifier: ${commitid} 28696 Sticky Tag: (none) 28697 Sticky Date: (none) 28698 Sticky Options: (none)" 28699 dotest recase-18sscs "$testcvs log FILE" \ 28700 " 28701 RCS file: $CVSROOT_DIRNAME/first-dir/FILE,v 28702 Working file: FILE 28703 head: 1\.1 28704 branch: 28705 locks: strict 28706 access list: 28707 symbolic names: 28708 keyword substitution: kv 28709 total revisions: 1; selected revisions: 1 28710 description: 28711 ---------------------------- 28712 revision 1\.1 28713 date: ${ISO8601DATE}; author: $username; state: Exp; commitid: ${commitid}; 28714 recase 28715 =============================================================================" 28716 else # $server_sensitive && !$client_sensitive 28717 # Client finds same Entry for file & FiLe. 28718 dotest recase-13ssci "$testcvs status file" \ 28719 "=================================================================== 28720 File: FiLe Status: Up-to-date 28721 28722 Working revision: 1\.1.* 28723 Repository revision: 1\.1 $CVSROOT_DIRNAME/first-dir/FiLe,v 28724 Commit Identifier: ${commitid} 28725 Sticky Tag: (none) 28726 Sticky Date: (none) 28727 Sticky Options: (none)" 28728 dotest recase-16ssci "$testcvs log FiLe" \ 28729 " 28730 RCS file: $CVSROOT_DIRNAME/first-dir/FiLe,v 28731 Working file: FiLe 28732 head: 1\.1 28733 branch: 28734 locks: strict 28735 access list: 28736 symbolic names: 28737 keyword substitution: kv 28738 total revisions: 1; selected revisions: 1 28739 description: 28740 ---------------------------- 28741 revision 1\.1 28742 date: ${ISO8601DATE}; author: $username; state: Exp; commitid: ${commitid}; 28743 recase 28744 =============================================================================" 28745 dotest recase-17ssci "$testcvs status FILE" \ 28746 "=================================================================== 28747 File: FiLe Status: Up-to-date 28748 28749 Working revision: 1\.1.* 28750 Repository revision: 1\.1 $CVSROOT_DIRNAME/first-dir/FiLe,v 28751 Commit Identifier: ${commitid} 28752 Sticky Tag: (none) 28753 Sticky Date: (none) 28754 Sticky Options: (none)" 28755 dotest recase-18ssci "$testcvs log FILE" \ 28756 " 28757 RCS file: $CVSROOT_DIRNAME/first-dir/FiLe,v 28758 Working file: FiLe 28759 head: 1\.1 28760 branch: 28761 locks: strict 28762 access list: 28763 symbolic names: 28764 keyword substitution: kv 28765 total revisions: 1; selected revisions: 1 28766 description: 28767 ---------------------------- 28768 revision 1\.1 28769 date: ${ISO8601DATE}; author: $username; state: Exp; commitid: ${commitid}; 28770 recase 28771 =============================================================================" 28772 fi 28773 else # !$server_sensitive 28774 # Skip these when the server is case insensitive - nothing 28775 # has changed since recase-[4-7]si 28776 : 28777 fi 28778 28779 if $client_sensitive && $server_sensitive; then 28780 dotest recase-19sscs "$testcvs status fIlE" \ 28781 "$SPROG status: nothing known about \`fIlE' 28782 =================================================================== 28783 File: no file fIlE Status: Unknown 28784 28785 Working revision: No entry for fIlE 28786 Repository revision: No revision control file" 28787 else # !$client_sensitive || !$server_sensitive 28788 dotest recase-19anyi "$testcvs status fIlE" \ 28789 "=================================================================== 28790 File: $fIlE Status: Up-to-date 28791 28792 Working revision: 1\.[0-9]*.* 28793 Repository revision: 1\.[0-9]* $CVSROOT_DIRNAME/first-dir/$fIlE,v 28794 Commit Identifier: ${commitid} 28795 Sticky Tag: (none) 28796 Sticky Date: (none) 28797 Sticky Options: (none)" 28798 fi 28799 28800 # And last but not least, prove that a checkout is still possible. 28801 cd ../.. 28802 mkdir 3; cd 3 28803 if $server_sensitive; then 28804 if $client_sensitive; then 28805 dotest recase-20sscs "$testcvs -q co first-dir" \ 28806 "U first-dir/FILE 28807 U first-dir/FiLe" 28808 else # $server_senstive && !$client_sensitive 28809 dotest_fail recase-20ssci "$testcvs -q co first-dir" \ 28810 "U first-dir/FILE 28811 $SPROG checkout: move away \`first-dir/FiLe'; it is in the way 28812 C first-dir/FiLe" 28813 fi 28814 else # !$server_sensitive 28815 # Skip these since nothing has changed. 28816 : 28817 fi 28818 28819 dokeep 28820 cd .. 28821 rm -r 1 2 3 28822 if $server_sensitive && test -n "$remotehost"; then 28823 # It is necessary to remove one of the case-conflicted files before 28824 # recursively removing the rest under Cygwin on a Samba share or 28825 # Samba returns a permission denied error due to its case 28826 # confusion. 28827 $CVS_RSH $remotehost "rm -f $CVSROOT_DIRNAME/first-dir/FILE,v" 28828 fi 28829 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 28830 ;; 28831 28832 28833 28834 multiroot) 28835 # 28836 # set up two repositories 28837 # 28838 28839 if $proxy; then 28840 # don't even try 28841 continue 28842 fi 28843 28844 CVSROOT1_DIRNAME=${TESTDIR}/root.1 28845 CVSROOT2_DIRNAME=${TESTDIR}/root.2 28846 CVSROOT1=`newroot $CVSROOT1_DIRNAME` 28847 CVSROOT2=`newroot $CVSROOT2_DIRNAME` 28848 testcvs1="$testcvs -d '$CVSROOT1'" 28849 testcvs2="$testcvs -d '$CVSROOT2'" 28850 28851 dotest multiroot-setup-1 "mkdir $CVSROOT1_DIRNAME $CVSROOT2_DIRNAME" 28852 dotest multiroot-setup-2 "$testcvs1 init" 28853 dotest multiroot-setup-3 "$testcvs2 init" 28854 28855 # 28856 # create some directories in ${CVSROOT1_DIRNAME} 28857 # 28858 mkdir 1; cd 1 28859 dotest multiroot-setup-4 "${testcvs1} co -l ." "${SPROG} checkout: Updating ." 28860 mkdir mod1-1 mod1-2 28861 dotest multiroot-setup-5 "${testcvs1} add mod1-1 mod1-2" \ 28862 "Directory ${CVSROOT1_DIRNAME}/mod1-1 added to the repository 28863 Directory ${CVSROOT1_DIRNAME}/mod1-2 added to the repository" 28864 echo file1-1 > mod1-1/file1-1 28865 echo file1-2 > mod1-2/file1-2 28866 dotest multiroot-setup-6 "${testcvs1} add mod1-1/file1-1 mod1-2/file1-2" \ 28867 "${SPROG} add: scheduling file .mod1-1/file1-1. for addition 28868 ${SPROG} add: scheduling file .mod1-2/file1-2. for addition 28869 ${SPROG} add: use \`${SPROG} commit' to add these files permanently" 28870 dotest multiroot-setup-7 "${testcvs1} commit -m is" \ 28871 "${CPROG} commit: Examining \. 28872 ${CPROG} commit: Examining mod1-1 28873 ${CPROG} commit: Examining mod1-2 28874 ${CVSROOT1_DIRNAME}/mod1-1/file1-1,v <-- mod1-1/file1-1 28875 initial revision: 1.1 28876 ${CVSROOT1_DIRNAME}/mod1-2/file1-2,v <-- mod1-2/file1-2 28877 initial revision: 1.1" 28878 cd .. 28879 rm -rf 1 28880 28881 # 28882 # create some directories in ${CVSROOT2_DIRNAME} 28883 # 28884 mkdir 1; cd 1 28885 dotest multiroot-setup-8 "${testcvs2} co -l ." "${SPROG} checkout: Updating ." 28886 mkdir mod2-1 mod2-2 28887 dotest multiroot-setup-9 "${testcvs2} add mod2-1 mod2-2" \ 28888 "Directory ${CVSROOT2_DIRNAME}/mod2-1 added to the repository 28889 Directory ${CVSROOT2_DIRNAME}/mod2-2 added to the repository" 28890 echo file2-1 > mod2-1/file2-1 28891 echo file2-2 > mod2-2/file2-2 28892 dotest multiroot-setup-6 "${testcvs2} add mod2-1/file2-1 mod2-2/file2-2" \ 28893 "${SPROG} add: scheduling file .mod2-1/file2-1. for addition 28894 ${SPROG} add: scheduling file .mod2-2/file2-2. for addition 28895 ${SPROG} add: use \`${SPROG} commit' to add these files permanently" 28896 dotest multiroot-setup-10 "${testcvs2} commit -m anyone" \ 28897 "${CPROG} commit: Examining \. 28898 ${CPROG} commit: Examining mod2-1 28899 ${CPROG} commit: Examining mod2-2 28900 ${CVSROOT2_DIRNAME}/mod2-1/file2-1,v <-- mod2-1/file2-1 28901 initial revision: 1.1 28902 ${CVSROOT2_DIRNAME}/mod2-2/file2-2,v <-- mod2-2/file2-2 28903 initial revision: 1.1" 28904 cd .. 28905 rm -rf 1 28906 28907 # check out a few directories, from simple/shallow to 28908 # complex/deep 28909 mkdir 1; cd 1 28910 28911 # OK, this case is kind of weird. If we just run things from 28912 # here, without CVS/Root, then CVS will contact the server 28913 # mentioned in CVSROOT (which is irrelevant) which will print 28914 # some messages. Our workaround is to make sure we have a 28915 # CVS/Root file at top level. In the future, it is possible 28916 # the best behavior will be to extend the existing behavior 28917 # ("being called from a directory without CVS administration 28918 # has always meant to process each of the sub-dirs") to also 28919 # do that if there is no CVSROOT, CVS/Root, or -d at top level. 28920 # 28921 # The local case could stumble through the tests without creating 28922 # the top-level CVS/Root, but we create it for local and for 28923 # remote to reduce special cases later in the test. 28924 dotest multiroot-workaround "${testcvs1} -q co -l ." "" 28925 28926 dotest multiroot-setup-11 "${testcvs1} co mod1-1 mod1-2" \ 28927 "${SPROG} checkout: Updating mod1-1 28928 U mod1-1/file1-1 28929 ${SPROG} checkout: Updating mod1-2 28930 U mod1-2/file1-2" 28931 dotest multiroot-setup-12 "${testcvs2} co mod2-1 mod2-2" \ 28932 "${SPROG} checkout: Updating mod2-1 28933 U mod2-1/file2-1 28934 ${SPROG} checkout: Updating mod2-2 28935 U mod2-2/file2-2" 28936 cd mod1-2 28937 dotest multiroot-setup-13 "${testcvs2} co mod2-2" \ 28938 "${SPROG} checkout: Updating mod2-2 28939 U mod2-2/file2-2" 28940 cd .. 28941 cd mod2-2 28942 dotest multiroot-setup-14 "${testcvs1} co mod1-2" \ 28943 "${SPROG} checkout: Updating mod1-2 28944 U mod1-2/file1-2" 28945 cd .. 28946 28947 # 28948 # Make sure that the Root and Repository files contain the 28949 # correct information. 28950 # 28951 dotest multiroot-cvsadm-1a "cat mod1-1/CVS/Root" "${CVSROOT1}" 28952 dotest multiroot-cvsadm-1b "cat mod1-1/CVS/Repository" "mod1-1" 28953 dotest multiroot-cvsadm-2a "cat mod2-1/CVS/Root" "${CVSROOT2}" 28954 dotest multiroot-cvsadm-2b "cat mod2-1/CVS/Repository" "mod2-1" 28955 dotest multiroot-cvsadm-3a "cat mod1-2/CVS/Root" "${CVSROOT1}" 28956 dotest multiroot-cvsadm-3b "cat mod1-2/CVS/Repository" "mod1-2" 28957 dotest multiroot-cvsadm-3c "cat mod1-2/mod2-2/CVS/Root" "${CVSROOT2}" 28958 dotest multiroot-cvsadm-3d "cat mod1-2/mod2-2/CVS/Repository" "mod2-2" 28959 dotest multiroot-cvsadm-4a "cat mod2-2/CVS/Root" "${CVSROOT2}" 28960 dotest multiroot-cvsadm-4b "cat mod2-2/CVS/Repository" "mod2-2" 28961 dotest multiroot-cvsadm-4c "cat mod2-2/mod1-2/CVS/Root" "${CVSROOT1}" 28962 dotest multiroot-cvsadm-4d "cat mod2-2/mod1-2/CVS/Repository" "mod1-2" 28963 28964 # 28965 # Start testing various cvs commands. Begin with commands 28966 # without extra arguments (e.g. "cvs update", "cvs diff", 28967 # etc. 28968 # 28969 28970 # Do at least one command with both CVSROOTs to make sure 28971 # that there's not some kind of unexpected dependency on the 28972 # choice of which CVSROOT is specified on the command line. 28973 28974 dotest multiroot-update-1a "${testcvs1} update" \ 28975 "${SPROG} update: Updating \. 28976 ${SPROG} update: Updating mod1-1 28977 ${SPROG} update: Updating mod1-2 28978 ${SPROG} update: Updating mod1-2/mod2-2 28979 ${SPROG} update: cannot open directory ${CVSROOT1_DIRNAME}/mod2-2: No such file or directory 28980 ${SPROG} update: skipping directory mod1-2/mod2-2 28981 ${SPROG} update: Updating mod2-1 28982 ${SPROG} update: cannot open directory ${CVSROOT1_DIRNAME}/mod2-1: No such file or directory 28983 ${SPROG} update: skipping directory mod2-1 28984 ${SPROG} update: Updating mod2-2 28985 ${SPROG} update: cannot open directory ${CVSROOT1_DIRNAME}/mod2-2: No such file or directory 28986 ${SPROG} update: skipping directory mod2-2" 28987 28988 # Same deal but with -d ${CVSROOT2}. 28989 dotest multiroot-update-1b "${testcvs2} update" \ 28990 "${SPROG} update: Updating \. 28991 ${SPROG} update: Updating mod1-1 28992 ${SPROG} update: cannot open directory ${CVSROOT2_DIRNAME}/mod1-1: No such file or directory 28993 ${SPROG} update: skipping directory mod1-1 28994 ${SPROG} update: Updating mod1-2 28995 ${SPROG} update: cannot open directory ${CVSROOT2_DIRNAME}/mod1-2: No such file or directory 28996 ${SPROG} update: skipping directory mod1-2 28997 ${SPROG} update: Updating mod2-1 28998 ${SPROG} update: Updating mod2-2 28999 ${SPROG} update: Updating mod2-2/mod1-2 29000 ${SPROG} update: cannot open directory ${CVSROOT2_DIRNAME}/mod1-2: No such file or directory 29001 ${SPROG} update: skipping directory mod2-2/mod1-2" 29002 29003 # modify all files and do a diff 29004 29005 echo bobby >> mod1-1/file1-1 29006 echo brown >> mod1-2/file1-2 29007 echo goes >> mod2-1/file2-1 29008 echo down >> mod2-2/file2-2 29009 29010 dotest_fail multiroot-diff-1 "${testcvs} diff" \ 29011 "${SPROG} diff: Diffing \. 29012 ${SPROG} diff: Diffing mod1-1 29013 Index: mod1-1/file1-1 29014 =================================================================== 29015 RCS file: ${CVSROOT1_DIRNAME}/mod1-1/file1-1,v 29016 retrieving revision 1\.1 29017 diff -r1\.1 file1-1 29018 1a2 29019 > bobby 29020 ${SPROG} diff: Diffing mod1-2 29021 Index: mod1-2/file1-2 29022 =================================================================== 29023 RCS file: ${CVSROOT1_DIRNAME}/mod1-2/file1-2,v 29024 retrieving revision 1\.1 29025 diff -r1\.1 file1-2 29026 1a2 29027 > brown 29028 ${SPROG} diff: Diffing mod2-2/mod1-2 29029 ${SPROG} diff: Diffing mod1-2/mod2-2 29030 ${SPROG} diff: Diffing mod2-1 29031 Index: mod2-1/file2-1 29032 =================================================================== 29033 RCS file: ${CVSROOT2_DIRNAME}/mod2-1/file2-1,v 29034 retrieving revision 1\.1 29035 diff -r1\.1 file2-1 29036 1a2 29037 > goes 29038 ${SPROG} diff: Diffing mod2-2 29039 Index: mod2-2/file2-2 29040 =================================================================== 29041 RCS file: ${CVSROOT2_DIRNAME}/mod2-2/file2-2,v 29042 retrieving revision 1\.1 29043 diff -r1\.1 file2-2 29044 1a2 29045 > down" \ 29046 "${SPROG} diff: Diffing \. 29047 ${SPROG} diff: Diffing mod1-1 29048 Index: mod1-1/file1-1 29049 =================================================================== 29050 RCS file: ${CVSROOT1_DIRNAME}/mod1-1/file1-1,v 29051 retrieving revision 1\.1 29052 diff -r1\.1 file1-1 29053 1a2 29054 > bobby 29055 ${SPROG} diff: Diffing mod1-2 29056 Index: mod1-2/file1-2 29057 =================================================================== 29058 RCS file: ${CVSROOT1_DIRNAME}/mod1-2/file1-2,v 29059 retrieving revision 1\.1 29060 diff -r1\.1 file1-2 29061 1a2 29062 > brown 29063 ${SPROG} diff: Diffing mod2-2 29064 ${SPROG} diff: Diffing mod2-2/mod1-2 29065 ${SPROG} diff: Diffing mod1-2 29066 ${SPROG} diff: Diffing mod1-2/mod2-2 29067 ${SPROG} diff: Diffing mod2-1 29068 Index: mod2-1/file2-1 29069 =================================================================== 29070 RCS file: ${CVSROOT2_DIRNAME}/mod2-1/file2-1,v 29071 retrieving revision 1\.1 29072 diff -r1\.1 file2-1 29073 1a2 29074 > goes 29075 ${SPROG} diff: Diffing mod2-2 29076 Index: mod2-2/file2-2 29077 =================================================================== 29078 RCS file: ${CVSROOT2_DIRNAME}/mod2-2/file2-2,v 29079 retrieving revision 1\.1 29080 diff -r1\.1 file2-2 29081 1a2 29082 > down" 29083 29084 dotest multiroot-commit-1 "${testcvs} commit -m actually" \ 29085 "${CPROG} commit: Examining \. 29086 ${CPROG} commit: Examining mod1-1 29087 ${CPROG} commit: Examining mod1-2 29088 ${CPROG} commit: Examining mod2-2/mod1-2 29089 ${CVSROOT1_DIRNAME}/mod1-1/file1-1,v <-- mod1-1/file1-1 29090 new revision: 1.2; previous revision: 1.1 29091 ${CVSROOT1_DIRNAME}/mod1-2/file1-2,v <-- mod1-2/file1-2 29092 new revision: 1.2; previous revision: 1.1 29093 ${CPROG} commit: Examining mod1-2/mod2-2 29094 ${CPROG} commit: Examining mod2-1 29095 ${CPROG} commit: Examining mod2-2 29096 ${CVSROOT2_DIRNAME}/mod2-1/file2-1,v <-- mod2-1/file2-1 29097 new revision: 1.2; previous revision: 1.1 29098 ${CVSROOT2_DIRNAME}/mod2-2/file2-2,v <-- mod2-2/file2-2 29099 new revision: 1.2; previous revision: 1.1" 29100 29101 dotest multiroot-update-2 "${testcvs} update" \ 29102 "${CPROG} update: Updating \. 29103 ${CPROG} update: Updating mod1-1 29104 ${CPROG} update: Updating mod1-2 29105 ${CPROG} update: Updating mod2-2/mod1-2 29106 U mod2-2/mod1-2/file1-2 29107 ${CPROG} update: Updating mod1-2/mod2-2 29108 U mod1-2/mod2-2/file2-2 29109 ${CPROG} update: Updating mod2-1 29110 ${CPROG} update: Updating mod2-2" \ 29111 "${SPROG} update: Updating \. 29112 ${SPROG} update: Updating mod1-1 29113 ${SPROG} update: Updating mod1-2 29114 ${SPROG} update: Updating mod2-2 29115 ${SPROG} update: Updating mod2-2/mod1-2 29116 P mod2-2/mod1-2/file1-2 29117 ${SPROG} update: Updating mod1-2 29118 ${SPROG} update: Updating mod1-2/mod2-2 29119 P mod1-2/mod2-2/file2-2 29120 ${SPROG} update: Updating mod2-1 29121 ${SPROG} update: Updating mod2-2" 29122 29123 dotest multiroot-tag-1 "${testcvs} tag cattle" \ 29124 "${SPROG} tag: Tagging \. 29125 ${SPROG} tag: Tagging mod1-1 29126 T mod1-1/file1-1 29127 ${SPROG} tag: Tagging mod1-2 29128 T mod1-2/file1-2 29129 ${SPROG} tag: Tagging mod2-2/mod1-2 29130 ${SPROG} tag: Tagging mod1-2/mod2-2 29131 T mod1-2/mod2-2/file2-2 29132 ${SPROG} tag: Tagging mod2-1 29133 T mod2-1/file2-1 29134 ${SPROG} tag: Tagging mod2-2" \ 29135 "${SPROG} tag: Tagging \. 29136 ${SPROG} tag: Tagging mod1-1 29137 T mod1-1/file1-1 29138 ${SPROG} tag: Tagging mod1-2 29139 T mod1-2/file1-2 29140 ${SPROG} tag: Tagging mod2-2 29141 ${SPROG} tag: Tagging mod2-2/mod1-2 29142 ${SPROG} tag: Tagging mod1-2 29143 ${SPROG} tag: Tagging mod1-2/mod2-2 29144 T mod1-2/mod2-2/file2-2 29145 ${SPROG} tag: Tagging mod2-1 29146 T mod2-1/file2-1 29147 ${SPROG} tag: Tagging mod2-2" 29148 29149 echo anotherfile1-1 > mod1-1/anotherfile1-1 29150 echo anotherfile2-1 > mod2-1/anotherfile2-1 29151 echo anotherfile1-2 > mod2-2/mod1-2/anotherfile1-2 29152 echo anotherfile2-2 > mod1-2/mod2-2/anotherfile2-2 29153 29154 if $remote; then 29155 cd mod1-1 29156 dotest multiroot-add-1ar "${testcvs} add anotherfile1-1" \ 29157 "${SPROG} add: scheduling file .anotherfile1-1. for addition 29158 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 29159 cd ../mod2-1 29160 dotest multiroot-add-1br "${testcvs} add anotherfile2-1" \ 29161 "${SPROG} add: scheduling file .anotherfile2-1. for addition 29162 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 29163 cd ../mod2-2/mod1-2 29164 dotest multiroot-add-1cr "${testcvs} add anotherfile1-2" \ 29165 "${SPROG} add: scheduling file .anotherfile1-2. for addition 29166 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 29167 cd ../../mod1-2/mod2-2 29168 dotest multiroot-add-1dr "${testcvs} add anotherfile2-2" \ 29169 "${SPROG} add: scheduling file .anotherfile2-2. for addition 29170 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 29171 cd ../.. 29172 else 29173 dotest multiroot-add-1 "${testcvs} add mod1-1/anotherfile1-1 mod2-1/anotherfile2-1 mod2-2/mod1-2/anotherfile1-2 mod1-2/mod2-2/anotherfile2-2" \ 29174 "${SPROG} add: scheduling file .mod1-1/anotherfile1-1. for addition 29175 ${SPROG} add: scheduling file .mod2-1/anotherfile2-1. for addition 29176 ${SPROG} add: scheduling file .mod2-2/mod1-2/anotherfile1-2. for addition 29177 ${SPROG} add: scheduling file .mod1-2/mod2-2/anotherfile2-2. for addition 29178 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 29179 fi 29180 29181 dotest multiroot-status-1 "${testcvs} status -v" \ 29182 "${SPROG} status: Examining \. 29183 ${SPROG} status: Examining mod1-1 29184 =================================================================== 29185 File: anotherfile1-1 Status: Locally Added 29186 29187 Working revision: New file! 29188 Repository revision: No revision control file 29189 Sticky Tag: (none) 29190 Sticky Date: (none) 29191 Sticky Options: (none) 29192 29193 =================================================================== 29194 File: file1-1 Status: Up-to-date 29195 29196 Working revision: 1\.2.* 29197 Repository revision: 1\.2 ${CVSROOT1_DIRNAME}/mod1-1/file1-1,v 29198 Commit Identifier: ${commitid} 29199 Sticky Tag: (none) 29200 Sticky Date: (none) 29201 Sticky Options: (none) 29202 29203 Existing Tags: 29204 cattle (revision: 1\.2) 29205 29206 ${SPROG} status: Examining mod1-2 29207 =================================================================== 29208 File: file1-2 Status: Up-to-date 29209 29210 Working revision: 1\.2.* 29211 Repository revision: 1\.2 ${CVSROOT1_DIRNAME}/mod1-2/file1-2,v 29212 Commit Identifier: ${commitid} 29213 Sticky Tag: (none) 29214 Sticky Date: (none) 29215 Sticky Options: (none) 29216 29217 Existing Tags: 29218 cattle (revision: 1\.2) 29219 29220 ${SPROG} status: Examining mod2-2/mod1-2 29221 =================================================================== 29222 File: anotherfile1-2 Status: Locally Added 29223 29224 Working revision: New file! 29225 Repository revision: No revision control file 29226 Sticky Tag: (none) 29227 Sticky Date: (none) 29228 Sticky Options: (none) 29229 29230 =================================================================== 29231 File: file1-2 Status: Up-to-date 29232 29233 Working revision: 1\.2.* 29234 Repository revision: 1\.2 ${CVSROOT1_DIRNAME}/mod1-2/file1-2,v 29235 Commit Identifier: ${commitid} 29236 Sticky Tag: (none) 29237 Sticky Date: (none) 29238 Sticky Options: (none) 29239 29240 Existing Tags: 29241 cattle (revision: 1\.2) 29242 29243 ${SPROG} status: Examining mod1-2/mod2-2 29244 =================================================================== 29245 File: anotherfile2-2 Status: Locally Added 29246 29247 Working revision: New file! 29248 Repository revision: No revision control file 29249 Sticky Tag: (none) 29250 Sticky Date: (none) 29251 Sticky Options: (none) 29252 29253 =================================================================== 29254 File: file2-2 Status: Up-to-date 29255 29256 Working revision: 1\.2.* 29257 Repository revision: 1\.2 ${CVSROOT2_DIRNAME}/mod2-2/file2-2,v 29258 Commit Identifier: ${commitid} 29259 Sticky Tag: (none) 29260 Sticky Date: (none) 29261 Sticky Options: (none) 29262 29263 Existing Tags: 29264 cattle (revision: 1\.2) 29265 29266 ${SPROG} status: Examining mod2-1 29267 =================================================================== 29268 File: anotherfile2-1 Status: Locally Added 29269 29270 Working revision: New file! 29271 Repository revision: No revision control file 29272 Sticky Tag: (none) 29273 Sticky Date: (none) 29274 Sticky Options: (none) 29275 29276 =================================================================== 29277 File: file2-1 Status: Up-to-date 29278 29279 Working revision: 1\.2.* 29280 Repository revision: 1\.2 ${CVSROOT2_DIRNAME}/mod2-1/file2-1,v 29281 Commit Identifier: ${commitid} 29282 Sticky Tag: (none) 29283 Sticky Date: (none) 29284 Sticky Options: (none) 29285 29286 Existing Tags: 29287 cattle (revision: 1\.2) 29288 29289 ${SPROG} status: Examining mod2-2 29290 =================================================================== 29291 File: file2-2 Status: Up-to-date 29292 29293 Working revision: 1\.2.* 29294 Repository revision: 1\.2 ${CVSROOT2_DIRNAME}/mod2-2/file2-2,v 29295 Commit Identifier: ${commitid} 29296 Sticky Tag: (none) 29297 Sticky Date: (none) 29298 Sticky Options: (none) 29299 29300 Existing Tags: 29301 cattle (revision: 1\.2)" \ 29302 "${SPROG} status: Examining \. 29303 ${SPROG} status: Examining mod1-1 29304 =================================================================== 29305 File: anotherfile1-1 Status: Locally Added 29306 29307 Working revision: New file! 29308 Repository revision: No revision control file 29309 Sticky Tag: (none) 29310 Sticky Date: (none) 29311 Sticky Options: (none) 29312 29313 =================================================================== 29314 File: file1-1 Status: Up-to-date 29315 29316 Working revision: 1\.2.* 29317 Repository revision: 1\.2 ${CVSROOT1_DIRNAME}/mod1-1/file1-1,v 29318 Commit Identifier: ${commitid} 29319 Sticky Tag: (none) 29320 Sticky Date: (none) 29321 Sticky Options: (none) 29322 29323 Existing Tags: 29324 cattle (revision: 1\.2) 29325 29326 ${SPROG} status: Examining mod1-2 29327 =================================================================== 29328 File: file1-2 Status: Up-to-date 29329 29330 Working revision: 1\.2.* 29331 Repository revision: 1\.2 ${CVSROOT1_DIRNAME}/mod1-2/file1-2,v 29332 Commit Identifier: ${commitid} 29333 Sticky Tag: (none) 29334 Sticky Date: (none) 29335 Sticky Options: (none) 29336 29337 Existing Tags: 29338 cattle (revision: 1\.2) 29339 29340 ${SPROG} status: Examining mod2-2 29341 ${SPROG} status: Examining mod2-2/mod1-2 29342 =================================================================== 29343 File: anotherfile1-2 Status: Locally Added 29344 29345 Working revision: New file! 29346 Repository revision: No revision control file 29347 Sticky Tag: (none) 29348 Sticky Date: (none) 29349 Sticky Options: (none) 29350 29351 =================================================================== 29352 File: file1-2 Status: Up-to-date 29353 29354 Working revision: 1\.2.* 29355 Repository revision: 1\.2 ${CVSROOT1_DIRNAME}/mod1-2/file1-2,v 29356 Commit Identifier: ${commitid} 29357 Sticky Tag: (none) 29358 Sticky Date: (none) 29359 Sticky Options: (none) 29360 29361 Existing Tags: 29362 cattle (revision: 1\.2) 29363 29364 ${SPROG} status: Examining mod1-2 29365 ${SPROG} status: Examining mod1-2/mod2-2 29366 =================================================================== 29367 File: anotherfile2-2 Status: Locally Added 29368 29369 Working revision: New file! 29370 Repository revision: No revision control file 29371 Sticky Tag: (none) 29372 Sticky Date: (none) 29373 Sticky Options: (none) 29374 29375 =================================================================== 29376 File: file2-2 Status: Up-to-date 29377 29378 Working revision: 1\.2.* 29379 Repository revision: 1\.2 ${CVSROOT2_DIRNAME}/mod2-2/file2-2,v 29380 Commit Identifier: ${commitid} 29381 Sticky Tag: (none) 29382 Sticky Date: (none) 29383 Sticky Options: (none) 29384 29385 Existing Tags: 29386 cattle (revision: 1\.2) 29387 29388 ${SPROG} status: Examining mod2-1 29389 =================================================================== 29390 File: anotherfile2-1 Status: Locally Added 29391 29392 Working revision: New file! 29393 Repository revision: No revision control file 29394 Sticky Tag: (none) 29395 Sticky Date: (none) 29396 Sticky Options: (none) 29397 29398 =================================================================== 29399 File: file2-1 Status: Up-to-date 29400 29401 Working revision: 1\.2.* 29402 Repository revision: 1\.2 ${CVSROOT2_DIRNAME}/mod2-1/file2-1,v 29403 Commit Identifier: ${commitid} 29404 Sticky Tag: (none) 29405 Sticky Date: (none) 29406 Sticky Options: (none) 29407 29408 Existing Tags: 29409 cattle (revision: 1\.2) 29410 29411 ${SPROG} status: Examining mod2-2 29412 =================================================================== 29413 File: file2-2 Status: Up-to-date 29414 29415 Working revision: 1\.2.* 29416 Repository revision: 1\.2 ${CVSROOT2_DIRNAME}/mod2-2/file2-2,v 29417 Commit Identifier: ${commitid} 29418 Sticky Tag: (none) 29419 Sticky Date: (none) 29420 Sticky Options: (none) 29421 29422 Existing Tags: 29423 cattle (revision: 1\.2)" 29424 29425 dotest multiroot-commit-2 "${testcvs} commit -m reading" \ 29426 "${CPROG} commit: Examining \. 29427 ${CPROG} commit: Examining mod1-1 29428 ${CPROG} commit: Examining mod1-2 29429 ${CPROG} commit: Examining mod2-2/mod1-2 29430 ${CVSROOT1_DIRNAME}/mod1-1/anotherfile1-1,v <-- mod1-1/anotherfile1-1 29431 initial revision: 1\.1 29432 ${CVSROOT1_DIRNAME}/mod1-2/anotherfile1-2,v <-- mod2-2/mod1-2/anotherfile1-2 29433 initial revision: 1\.1 29434 ${CPROG} commit: Examining mod1-2/mod2-2 29435 ${CPROG} commit: Examining mod2-1 29436 ${CPROG} commit: Examining mod2-2 29437 ${CVSROOT2_DIRNAME}/mod2-2/anotherfile2-2,v <-- mod1-2/mod2-2/anotherfile2-2 29438 initial revision: 1\.1 29439 ${CVSROOT2_DIRNAME}/mod2-1/anotherfile2-1,v <-- mod2-1/anotherfile2-1 29440 initial revision: 1\.1" 29441 29442 dotest multiroot-update-3 "${testcvs} update" \ 29443 "${CPROG} update: Updating \. 29444 ${CPROG} update: Updating mod1-1 29445 ${CPROG} update: Updating mod1-2 29446 U mod1-2/anotherfile1-2 29447 ${CPROG} update: Updating mod2-2/mod1-2 29448 ${CPROG} update: Updating mod1-2/mod2-2 29449 ${CPROG} update: Updating mod2-1 29450 ${CPROG} update: Updating mod2-2 29451 U mod2-2/anotherfile2-2" \ 29452 "${SPROG} update: Updating \. 29453 ${SPROG} update: Updating mod1-1 29454 ${SPROG} update: Updating mod1-2 29455 U mod1-2/anotherfile1-2 29456 ${SPROG} update: Updating mod2-2 29457 ${SPROG} update: Updating mod2-2/mod1-2 29458 ${SPROG} update: Updating mod1-2 29459 ${SPROG} update: Updating mod1-2/mod2-2 29460 ${SPROG} update: Updating mod2-1 29461 ${SPROG} update: Updating mod2-2 29462 U mod2-2/anotherfile2-2" 29463 29464 dotest multiroot-log-1 "${testcvs} log" \ 29465 "${SPROG} log: Logging \. 29466 ${SPROG} log: Logging mod1-1 29467 29468 RCS file: ${CVSROOT1_DIRNAME}/mod1-1/anotherfile1-1,v 29469 Working file: mod1-1/anotherfile1-1 29470 head: 1\.1 29471 branch: 29472 locks: strict 29473 access list: 29474 symbolic names: 29475 keyword substitution: kv 29476 total revisions: 1; selected revisions: 1 29477 description: 29478 ---------------------------- 29479 revision 1\.1 29480 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29481 reading 29482 ============================================================================= 29483 29484 RCS file: ${CVSROOT1_DIRNAME}/mod1-1/file1-1,v 29485 Working file: mod1-1/file1-1 29486 head: 1\.2 29487 branch: 29488 locks: strict 29489 access list: 29490 symbolic names: 29491 cattle: 1\.2 29492 keyword substitution: kv 29493 total revisions: 2; selected revisions: 2 29494 description: 29495 ---------------------------- 29496 revision 1\.2 29497 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 29498 actually 29499 ---------------------------- 29500 revision 1\.1 29501 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29502 is 29503 ============================================================================= 29504 ${SPROG} log: Logging mod1-2 29505 29506 RCS file: ${CVSROOT1_DIRNAME}/mod1-2/anotherfile1-2,v 29507 Working file: mod1-2/anotherfile1-2 29508 head: 1\.1 29509 branch: 29510 locks: strict 29511 access list: 29512 symbolic names: 29513 keyword substitution: kv 29514 total revisions: 1; selected revisions: 1 29515 description: 29516 ---------------------------- 29517 revision 1\.1 29518 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29519 reading 29520 ============================================================================= 29521 29522 RCS file: ${CVSROOT1_DIRNAME}/mod1-2/file1-2,v 29523 Working file: mod1-2/file1-2 29524 head: 1\.2 29525 branch: 29526 locks: strict 29527 access list: 29528 symbolic names: 29529 cattle: 1\.2 29530 keyword substitution: kv 29531 total revisions: 2; selected revisions: 2 29532 description: 29533 ---------------------------- 29534 revision 1\.2 29535 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 29536 actually 29537 ---------------------------- 29538 revision 1\.1 29539 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29540 is 29541 ============================================================================= 29542 ${SPROG} log: Logging mod2-2/mod1-2 29543 29544 RCS file: ${CVSROOT1_DIRNAME}/mod1-2/anotherfile1-2,v 29545 Working file: mod2-2/mod1-2/anotherfile1-2 29546 head: 1\.1 29547 branch: 29548 locks: strict 29549 access list: 29550 symbolic names: 29551 keyword substitution: kv 29552 total revisions: 1; selected revisions: 1 29553 description: 29554 ---------------------------- 29555 revision 1\.1 29556 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29557 reading 29558 ============================================================================= 29559 29560 RCS file: ${CVSROOT1_DIRNAME}/mod1-2/file1-2,v 29561 Working file: mod2-2/mod1-2/file1-2 29562 head: 1\.2 29563 branch: 29564 locks: strict 29565 access list: 29566 symbolic names: 29567 cattle: 1\.2 29568 keyword substitution: kv 29569 total revisions: 2; selected revisions: 2 29570 description: 29571 ---------------------------- 29572 revision 1\.2 29573 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 29574 actually 29575 ---------------------------- 29576 revision 1\.1 29577 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29578 is 29579 ============================================================================= 29580 ${SPROG} log: Logging mod1-2/mod2-2 29581 29582 RCS file: ${CVSROOT2_DIRNAME}/mod2-2/anotherfile2-2,v 29583 Working file: mod1-2/mod2-2/anotherfile2-2 29584 head: 1\.1 29585 branch: 29586 locks: strict 29587 access list: 29588 symbolic names: 29589 keyword substitution: kv 29590 total revisions: 1; selected revisions: 1 29591 description: 29592 ---------------------------- 29593 revision 1\.1 29594 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29595 reading 29596 ============================================================================= 29597 29598 RCS file: ${CVSROOT2_DIRNAME}/mod2-2/file2-2,v 29599 Working file: mod1-2/mod2-2/file2-2 29600 head: 1\.2 29601 branch: 29602 locks: strict 29603 access list: 29604 symbolic names: 29605 cattle: 1\.2 29606 keyword substitution: kv 29607 total revisions: 2; selected revisions: 2 29608 description: 29609 ---------------------------- 29610 revision 1\.2 29611 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 29612 actually 29613 ---------------------------- 29614 revision 1\.1 29615 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29616 anyone 29617 ============================================================================= 29618 ${SPROG} log: Logging mod2-1 29619 29620 RCS file: ${CVSROOT2_DIRNAME}/mod2-1/anotherfile2-1,v 29621 Working file: mod2-1/anotherfile2-1 29622 head: 1\.1 29623 branch: 29624 locks: strict 29625 access list: 29626 symbolic names: 29627 keyword substitution: kv 29628 total revisions: 1; selected revisions: 1 29629 description: 29630 ---------------------------- 29631 revision 1\.1 29632 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29633 reading 29634 ============================================================================= 29635 29636 RCS file: ${CVSROOT2_DIRNAME}/mod2-1/file2-1,v 29637 Working file: mod2-1/file2-1 29638 head: 1\.2 29639 branch: 29640 locks: strict 29641 access list: 29642 symbolic names: 29643 cattle: 1\.2 29644 keyword substitution: kv 29645 total revisions: 2; selected revisions: 2 29646 description: 29647 ---------------------------- 29648 revision 1\.2 29649 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 29650 actually 29651 ---------------------------- 29652 revision 1\.1 29653 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29654 anyone 29655 ============================================================================= 29656 ${SPROG} log: Logging mod2-2 29657 29658 RCS file: ${CVSROOT2_DIRNAME}/mod2-2/anotherfile2-2,v 29659 Working file: mod2-2/anotherfile2-2 29660 head: 1\.1 29661 branch: 29662 locks: strict 29663 access list: 29664 symbolic names: 29665 keyword substitution: kv 29666 total revisions: 1; selected revisions: 1 29667 description: 29668 ---------------------------- 29669 revision 1\.1 29670 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29671 reading 29672 ============================================================================= 29673 29674 RCS file: ${CVSROOT2_DIRNAME}/mod2-2/file2-2,v 29675 Working file: mod2-2/file2-2 29676 head: 1\.2 29677 branch: 29678 locks: strict 29679 access list: 29680 symbolic names: 29681 cattle: 1\.2 29682 keyword substitution: kv 29683 total revisions: 2; selected revisions: 2 29684 description: 29685 ---------------------------- 29686 revision 1\.2 29687 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 29688 actually 29689 ---------------------------- 29690 revision 1\.1 29691 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29692 anyone 29693 =============================================================================" \ 29694 "${SPROG} log: Logging \. 29695 ${SPROG} log: Logging mod1-1 29696 29697 RCS file: ${CVSROOT1_DIRNAME}/mod1-1/anotherfile1-1,v 29698 Working file: mod1-1/anotherfile1-1 29699 head: 1\.1 29700 branch: 29701 locks: strict 29702 access list: 29703 symbolic names: 29704 keyword substitution: kv 29705 total revisions: 1; selected revisions: 1 29706 description: 29707 ---------------------------- 29708 revision 1\.1 29709 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29710 reading 29711 ============================================================================= 29712 29713 RCS file: ${CVSROOT1_DIRNAME}/mod1-1/file1-1,v 29714 Working file: mod1-1/file1-1 29715 head: 1\.2 29716 branch: 29717 locks: strict 29718 access list: 29719 symbolic names: 29720 cattle: 1\.2 29721 keyword substitution: kv 29722 total revisions: 2; selected revisions: 2 29723 description: 29724 ---------------------------- 29725 revision 1\.2 29726 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 29727 actually 29728 ---------------------------- 29729 revision 1\.1 29730 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29731 is 29732 ============================================================================= 29733 ${SPROG} log: Logging mod1-2 29734 29735 RCS file: ${CVSROOT1_DIRNAME}/mod1-2/anotherfile1-2,v 29736 Working file: mod1-2/anotherfile1-2 29737 head: 1\.1 29738 branch: 29739 locks: strict 29740 access list: 29741 symbolic names: 29742 keyword substitution: kv 29743 total revisions: 1; selected revisions: 1 29744 description: 29745 ---------------------------- 29746 revision 1\.1 29747 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29748 reading 29749 ============================================================================= 29750 29751 RCS file: ${CVSROOT1_DIRNAME}/mod1-2/file1-2,v 29752 Working file: mod1-2/file1-2 29753 head: 1\.2 29754 branch: 29755 locks: strict 29756 access list: 29757 symbolic names: 29758 cattle: 1\.2 29759 keyword substitution: kv 29760 total revisions: 2; selected revisions: 2 29761 description: 29762 ---------------------------- 29763 revision 1\.2 29764 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 29765 actually 29766 ---------------------------- 29767 revision 1\.1 29768 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29769 is 29770 ============================================================================= 29771 ${SPROG} log: Logging mod2-2 29772 ${SPROG} log: Logging mod2-2/mod1-2 29773 29774 RCS file: ${CVSROOT1_DIRNAME}/mod1-2/anotherfile1-2,v 29775 Working file: mod2-2/mod1-2/anotherfile1-2 29776 head: 1\.1 29777 branch: 29778 locks: strict 29779 access list: 29780 symbolic names: 29781 keyword substitution: kv 29782 total revisions: 1; selected revisions: 1 29783 description: 29784 ---------------------------- 29785 revision 1\.1 29786 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29787 reading 29788 ============================================================================= 29789 29790 RCS file: ${CVSROOT1_DIRNAME}/mod1-2/file1-2,v 29791 Working file: mod2-2/mod1-2/file1-2 29792 head: 1\.2 29793 branch: 29794 locks: strict 29795 access list: 29796 symbolic names: 29797 cattle: 1\.2 29798 keyword substitution: kv 29799 total revisions: 2; selected revisions: 2 29800 description: 29801 ---------------------------- 29802 revision 1\.2 29803 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 29804 actually 29805 ---------------------------- 29806 revision 1\.1 29807 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29808 is 29809 ============================================================================= 29810 ${SPROG} log: Logging mod1-2 29811 ${SPROG} log: Logging mod1-2/mod2-2 29812 29813 RCS file: ${CVSROOT2_DIRNAME}/mod2-2/anotherfile2-2,v 29814 Working file: mod1-2/mod2-2/anotherfile2-2 29815 head: 1\.1 29816 branch: 29817 locks: strict 29818 access list: 29819 symbolic names: 29820 keyword substitution: kv 29821 total revisions: 1; selected revisions: 1 29822 description: 29823 ---------------------------- 29824 revision 1\.1 29825 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29826 reading 29827 ============================================================================= 29828 29829 RCS file: ${CVSROOT2_DIRNAME}/mod2-2/file2-2,v 29830 Working file: mod1-2/mod2-2/file2-2 29831 head: 1\.2 29832 branch: 29833 locks: strict 29834 access list: 29835 symbolic names: 29836 cattle: 1\.2 29837 keyword substitution: kv 29838 total revisions: 2; selected revisions: 2 29839 description: 29840 ---------------------------- 29841 revision 1\.2 29842 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 29843 actually 29844 ---------------------------- 29845 revision 1\.1 29846 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29847 anyone 29848 ============================================================================= 29849 ${SPROG} log: Logging mod2-1 29850 29851 RCS file: ${CVSROOT2_DIRNAME}/mod2-1/anotherfile2-1,v 29852 Working file: mod2-1/anotherfile2-1 29853 head: 1\.1 29854 branch: 29855 locks: strict 29856 access list: 29857 symbolic names: 29858 keyword substitution: kv 29859 total revisions: 1; selected revisions: 1 29860 description: 29861 ---------------------------- 29862 revision 1\.1 29863 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29864 reading 29865 ============================================================================= 29866 29867 RCS file: ${CVSROOT2_DIRNAME}/mod2-1/file2-1,v 29868 Working file: mod2-1/file2-1 29869 head: 1\.2 29870 branch: 29871 locks: strict 29872 access list: 29873 symbolic names: 29874 cattle: 1\.2 29875 keyword substitution: kv 29876 total revisions: 2; selected revisions: 2 29877 description: 29878 ---------------------------- 29879 revision 1\.2 29880 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 29881 actually 29882 ---------------------------- 29883 revision 1\.1 29884 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29885 anyone 29886 ============================================================================= 29887 ${SPROG} log: Logging mod2-2 29888 29889 RCS file: ${CVSROOT2_DIRNAME}/mod2-2/anotherfile2-2,v 29890 Working file: mod2-2/anotherfile2-2 29891 head: 1\.1 29892 branch: 29893 locks: strict 29894 access list: 29895 symbolic names: 29896 keyword substitution: kv 29897 total revisions: 1; selected revisions: 1 29898 description: 29899 ---------------------------- 29900 revision 1\.1 29901 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29902 reading 29903 ============================================================================= 29904 29905 RCS file: ${CVSROOT2_DIRNAME}/mod2-2/file2-2,v 29906 Working file: mod2-2/file2-2 29907 head: 1\.2 29908 branch: 29909 locks: strict 29910 access list: 29911 symbolic names: 29912 cattle: 1\.2 29913 keyword substitution: kv 29914 total revisions: 2; selected revisions: 2 29915 description: 29916 ---------------------------- 29917 revision 1\.2 29918 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid}; 29919 actually 29920 ---------------------------- 29921 revision 1\.1 29922 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 29923 anyone 29924 =============================================================================" 29925 29926 29927 # After the simple cases, let's execute some commands which 29928 # refer to parts of our checked-out tree (e.g. "cvs update 29929 # mod1-1 mod2-2") 29930 29931 dokeep 29932 29933 # clean up after ourselves 29934 cd .. 29935 rm -r 1 29936 29937 # clean up our repositories 29938 rm -rf ${CVSROOT1_DIRNAME} ${CVSROOT2_DIRNAME} 29939 ;; 29940 29941 29942 29943 multiroot2) 29944 # More multiroot tests. In particular, nested directories. 29945 29946 if $proxy; then 29947 # don't even try 29948 continue 29949 fi 29950 29951 CVSROOT1_DIRNAME=${TESTDIR}/root1 29952 CVSROOT2_DIRNAME=${TESTDIR}/root2 29953 CVSROOT1=`newroot $CVSROOT1_DIRNAME` 29954 CVSROOT2=`newroot $CVSROOT2_DIRNAME` 29955 29956 dotest multiroot2-1 "${testcvs} -d ${CVSROOT1} init" "" 29957 dotest multiroot2-2 "${testcvs} -d ${CVSROOT2} init" "" 29958 29959 mkdir imp-dir; cd imp-dir 29960 echo file1 >file1 29961 mkdir sdir 29962 echo sfile >sdir/sfile 29963 mkdir sdir/ssdir 29964 echo ssfile >sdir/ssdir/ssfile 29965 dotest_sort multiroot2-3 \ 29966 "${testcvs} -d ${CVSROOT1} import -m import-to-root1 dir1 vend rel" " 29967 29968 N dir1/file1 29969 N dir1/sdir/sfile 29970 N dir1/sdir/ssdir/ssfile 29971 No conflicts created by this import 29972 ${SPROG} import: Importing ${TESTDIR}/root1/dir1/sdir 29973 ${SPROG} import: Importing ${TESTDIR}/root1/dir1/sdir/ssdir" 29974 cd sdir 29975 dotest_sort multiroot2-4 \ 29976 "${testcvs} -d ${CVSROOT2} import -m import-to-root2 sdir vend2 rel2" " 29977 29978 N sdir/sfile 29979 N sdir/ssdir/ssfile 29980 No conflicts created by this import 29981 ${SPROG} import: Importing ${TESTDIR}/root2/sdir/ssdir" 29982 cd ../.. 29983 29984 mkdir 1; cd 1 29985 # Get TopLevelAdmin-like behavior. 29986 dotest multiroot2-5 "${testcvs} -d ${CVSROOT1} -q co -l ." 29987 dotest multiroot2-5 "${testcvs} -d ${CVSROOT1} -q co dir1" \ 29988 "U dir1/file1 29989 U dir1/sdir/sfile 29990 U dir1/sdir/ssdir/ssfile" 29991 cd dir1 29992 dotest multiroot2-6 "${testcvs} -Q release -d sdir" "" 29993 dotest multiroot2-7 "${testcvs} -d ${CVSROOT2} -q co sdir" \ 29994 "U sdir/sfile 29995 U sdir/ssdir/ssfile" 29996 cd .. 29997 # This has one subtle effect - it deals with Entries.Log 29998 # so that the next test doesn't get trace messages for 29999 # Entries.Log 30000 dotest multiroot2-8 "${testcvs} update" \ 30001 "${CPROG} update: Updating \. 30002 ${CPROG} update: Updating dir1 30003 ${CPROG} update: Updating dir1/sdir 30004 ${CPROG} update: Updating dir1/sdir/ssdir" \ 30005 "${SPROG} update: Updating \. 30006 ${SPROG} update: Updating dir1 30007 ${SPROG} update: Updating dir1 30008 ${SPROG} update: Updating dir1/sdir 30009 ${SPROG} update: Updating dir1/sdir/ssdir" 30010 # Two reasons we don't run this on the server: (1) the server 30011 # also prints some trace messages, and (2) the server trace 30012 # messages are subject to out-of-order bugs (this one is hard 30013 # to work around). 30014 if $remote; then :; else 30015 dotest multiroot2-9a "${testcvs} -t update" \ 30016 " *-> main: Session ID is ${commitid} 30017 *-> main loop with CVSROOT=${TESTDIR}/root1 30018 *-> parse_config ($TESTDIR/root1) 30019 *-> do_update ((null), (null), (null), 1, 0, 0, 0, 0, 0, 3, (null), (null), (null), (null), (null), 1, (null)) 30020 *-> Write_Template (\., ${TESTDIR}/root1) 30021 ${CPROG} update: Updating \. 30022 *-> Reader_Lock(${TESTDIR}/root1) 30023 *-> Simple_Lock_Cleanup() 30024 *-> Write_Template (dir1, ${TESTDIR}/root1/dir1) 30025 ${CPROG} update: Updating dir1 30026 *-> Reader_Lock(${TESTDIR}/root1/dir1) 30027 *-> Simple_Lock_Cleanup() 30028 *-> main loop with CVSROOT=${TESTDIR}/root2 30029 *-> parse_config ($TESTDIR/root2) 30030 *-> do_update ((null), (null), (null), 1, 0, 0, 0, 0, 0, 3, (null), (null), (null), (null), (null), 1, (null)) 30031 *-> Write_Template (dir1/sdir, ${TESTDIR}/root2/dir1/sdir) 30032 ${CPROG} update: Updating dir1/sdir 30033 *-> Reader_Lock(${TESTDIR}/root2/sdir) 30034 *-> Simple_Lock_Cleanup() 30035 *-> Write_Template (dir1/sdir/ssdir, ${TESTDIR}/root2/sdir/ssdir) 30036 ${CPROG} update: Updating dir1/sdir/ssdir 30037 *-> Reader_Lock(${TESTDIR}/root2/sdir/ssdir) 30038 *-> Simple_Lock_Cleanup() 30039 *-> Lock_Cleanup() 30040 *-> Simple_Lock_Cleanup()" 30041 fi 30042 30043 dotest multiroot2-9 "${testcvs} -q tag tag1" \ 30044 "T dir1/file1 30045 T dir1/sdir/sfile 30046 T dir1/sdir/ssdir/ssfile" 30047 echo "change it" >>dir1/file1 30048 echo "change him too" >>dir1/sdir/sfile 30049 dotest multiroot2-10 "${testcvs} -q ci -m modify" \ 30050 "$TESTDIR/root1/dir1/file1,v <-- dir1/file1 30051 new revision: 1\.2; previous revision: 1\.1 30052 $TESTDIR/root2/sdir/sfile,v <-- dir1/sdir/sfile 30053 new revision: 1\.2; previous revision: 1\.1" 30054 dotest multiroot2-11 "${testcvs} -q tag tag2" \ 30055 "T dir1/file1 30056 T dir1/sdir/sfile 30057 T dir1/sdir/ssdir/ssfile" 30058 dotest_fail multiroot2-12 \ 30059 "${testcvs} -q diff -u -r tag1 -r tag2" \ 30060 "Index: dir1/file1 30061 =================================================================== 30062 RCS file: ${TESTDIR}/root1/dir1/file1,v 30063 retrieving revision 1\.1\.1\.1 30064 retrieving revision 1\.2 30065 diff -u -r1\.1\.1\.1 -r1\.2 30066 --- dir1/file1 ${RFCDATE} 1\.1\.1\.1 30067 ${PLUS}${PLUS}${PLUS} dir1/file1 ${RFCDATE} 1\.2 30068 @@ -1 ${PLUS}1,2 @@ 30069 file1 30070 ${PLUS}change it 30071 Index: dir1/sdir/sfile 30072 =================================================================== 30073 RCS file: ${TESTDIR}/root2/sdir/sfile,v 30074 retrieving revision 1\.1\.1\.1 30075 retrieving revision 1\.2 30076 diff -u -r1\.1\.1\.1 -r1\.2 30077 --- dir1/sdir/sfile ${RFCDATE} 1\.1\.1\.1 30078 ${PLUS}${PLUS}${PLUS} dir1/sdir/sfile ${RFCDATE} 1\.2 30079 @@ -1 ${PLUS}1,2 @@ 30080 sfile 30081 ${PLUS}change him too" 30082 30083 if $keep; then 30084 echo Keeping ${TESTDIR} and exiting due to --keep 30085 exit 0 30086 fi 30087 30088 # clean up after ourselves 30089 cd .. 30090 rm -r imp-dir 1 30091 30092 # clean up our repositories 30093 rm -rf root1 root2 30094 ;; 30095 30096 30097 30098 multiroot3) 30099 # More multiroot tests. Directories are side-by-side, not nested. 30100 # Not drastically different from multiroot but it covers somewhat 30101 # different stuff. 30102 30103 if $proxy; then 30104 # don't even try 30105 continue 30106 fi 30107 30108 CVSROOT1=`newroot ${TESTDIR}/root1` 30109 CVSROOT2=`newroot ${TESTDIR}/root2` 30110 30111 mkdir 1; cd 1 30112 dotest multiroot3-1 "${testcvs} -d ${CVSROOT1} init" "" 30113 dotest multiroot3-2 "${testcvs} -d ${CVSROOT1} -q co -l ." "" 30114 mkdir dir1 30115 dotest multiroot3-3 "${testcvs} add dir1" \ 30116 "Directory ${TESTDIR}/root1/dir1 added to the repository" 30117 dotest multiroot3-4 "${testcvs} -d ${CVSROOT2} init" "" 30118 rm -r CVS 30119 dotest multiroot3-5 "${testcvs} -d ${CVSROOT2} -q co -l ." "" 30120 mkdir dir2 30121 30122 # OK, the problem is that CVS/Entries doesn't look quite right, 30123 # I suppose because of the "rm -r". Then again, why *should* it 30124 # look right? CVS/Root can only point to a single location, but 30125 # we expect CVS/Entries to hold entries for two repositories? It 30126 # just plain isn't part of the filespec yet. 30127 # 30128 # Use the quick and dirty fix. 30129 echo "D/dir1////" >CVS/Entries 30130 echo "D/dir2////" >>CVS/Entries 30131 30132 dotest multiroot3-7 "${testcvs} add dir2" \ 30133 "Directory ${TESTDIR}/root2/dir2 added to the repository" 30134 30135 touch dir1/file1 dir2/file2 30136 if $remote; then 30137 # Trying to add them both in one command doesn't work, 30138 # because add.c doesn't do multiroot (it doesn't use recurse.c). 30139 # Furthermore, it can't deal with the parent directory 30140 # having a different root from the child, hence the cd. 30141 cd dir1 30142 dotest multiroot3-8 "${testcvs} add file1" \ 30143 "${SPROG} add: scheduling file .file1. for addition 30144 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 30145 cd .. 30146 dotest multiroot3-8a "${testcvs} add dir2/file2" \ 30147 "${SPROG} add: scheduling file .dir2/file2. for addition 30148 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 30149 else 30150 dotest multiroot3-8 "${testcvs} add dir1/file1 dir2/file2" \ 30151 "${SPROG} add: scheduling file .dir1/file1. for addition 30152 ${SPROG} add: scheduling file .dir2/file2. for addition 30153 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 30154 fi 30155 30156 dotest multiroot3-9 "${testcvs} -q ci -m add-them" \ 30157 "$TESTDIR/root2/dir2/file2,v <-- dir2/file2 30158 initial revision: 1\.1 30159 $TESTDIR/root1/dir1/file1,v <-- dir1/file1 30160 initial revision: 1\.1" 30161 30162 # That this is an error is good - we are asking CVS to do 30163 # something which doesn't make sense. 30164 dotest_fail multiroot3-10 \ 30165 "${testcvs} -q -d ${CVSROOT1} diff dir1/file1 dir2/file2" \ 30166 "${SPROG} diff: failed to create lock directory for .${TESTDIR}/root1/dir2' (${TESTDIR}/root1/dir2/#cvs.lock): No such file or directory 30167 ${SPROG} diff: failed to obtain dir lock in repository .${TESTDIR}/root1/dir2' 30168 ${SPROG} \[diff aborted\]: read lock failed - giving up" 30169 30170 # This one is supposed to work. 30171 dotest multiroot3-11 "${testcvs} -q diff dir1/file1 dir2/file2" "" 30172 30173 # make sure we can't access across repositories 30174 # FIXCVS: we probably shouldn't even create the local directories 30175 # in this case, but we do, so deal with it. 30176 mkdir 1a 30177 cd 1a 30178 dotest_fail multiroot3-12 \ 30179 "$testcvs -d $CVSROOT1 -q co ../root2/dir2" \ 30180 "$CPROG \[checkout aborted\]: up-level in module reference (\`..') invalid: \`\.\./root2/dir2'\." \ 30181 "$SPROG \[server aborted\]: up-level in module reference (\`..') invalid: \`\.\./root2/dir2'\. 30182 $CPROG \[checkout aborted\]: end of file from server (consult above messages if any)" 30183 dotest_fail multiroot3-13 \ 30184 "$testcvs -d $CVSROOT2 -q co ../root1/dir1" \ 30185 "$CPROG \[checkout aborted\]: up-level in module reference (\`..') invalid: \`\.\./root1/dir1'\." \ 30186 "$SPROG \[server aborted\]: up-level in module reference (\`..') invalid: \`\.\./root1/dir1'\. 30187 $CPROG \[checkout aborted\]: end of file from server (consult above messages if any)" 30188 dotest_fail multiroot3-14 \ 30189 "$testcvs -d $CVSROOT1 -q co ./../root2/dir2" \ 30190 "$CPROG \[checkout aborted\]: up-level in module reference (\`..') invalid: \`\./\.\./root2/dir2'\." \ 30191 "$SPROG \[server aborted\]: up-level in module reference (\`..') invalid: \`\./\.\./root2/dir2'\. 30192 $CPROG \[checkout aborted\]: end of file from server (consult above messages if any)" 30193 dotest_fail multiroot3-15 \ 30194 "$testcvs -d $CVSROOT2 -q co ./../root1/dir1" \ 30195 "$CPROG \[checkout aborted\]: up-level in module reference (\`..') invalid: \`\./\.\./root1/dir1'\." \ 30196 "$SPROG \[server aborted\]: up-level in module reference (\`..') invalid: \`\./\.\./root1/dir1'\. 30197 $CPROG \[checkout aborted\]: end of file from server (consult above messages if any)" 30198 dotest_fail multiroot3-16 \ 30199 "$testcvs -d $CVSROOT1 -q co -p ../root2/dir2" \ 30200 "$CPROG \[checkout aborted\]: up-level in module reference (\`..') invalid: \`\.\./root2/dir2'\." \ 30201 "$SPROG \[server aborted\]: up-level in module reference (\`..') invalid: \`\.\./root2/dir2'\. 30202 $CPROG \[checkout aborted\]: end of file from server (consult above messages if any)" 30203 dotest_fail multiroot3-17 \ 30204 "$testcvs -d $CVSROOT1 -q co -p ./../root1/dir1" \ 30205 "$CPROG \[checkout aborted\]: up-level in module reference (\`..') invalid: \`\./\.\./root1/dir1'\." \ 30206 "$SPROG \[server aborted\]: up-level in module reference (\`..') invalid: \`\./\.\./root1/dir1'\. 30207 $CPROG \[checkout aborted\]: end of file from server (consult above messages if any)" 30208 30209 cd ../.. 30210 30211 if $keep; then 30212 echo Keeping ${TESTDIR} and exiting due to --keep 30213 exit 0 30214 fi 30215 30216 rm -r 1 30217 rm -rf ${TESTDIR}/root1 ${TESTDIR}/root2 30218 unset CVSROOT1 30219 unset CVSROOT2 30220 ;; 30221 30222 30223 30224 multiroot4) 30225 # More multiroot tests, in particular we have two roots with 30226 # similarly-named directories and we try to see that CVS can 30227 # keep them separate. 30228 30229 if $proxy; then 30230 # don't even try 30231 continue 30232 fi 30233 30234 CVSROOT1=`newroot ${TESTDIR}/root1` 30235 CVSROOT2=`newroot ${TESTDIR}/root2` 30236 30237 mkdir 1; cd 1 30238 dotest multiroot4-1 "${testcvs} -d ${CVSROOT1} init" "" 30239 dotest multiroot4-2 "${testcvs} -d ${CVSROOT1} -q co -l ." "" 30240 mkdir dircom 30241 dotest multiroot4-3 "${testcvs} add dircom" \ 30242 "Directory ${TESTDIR}/root1/dircom added to the repository" 30243 cd dircom 30244 touch file1 30245 dotest multiroot4-4 "${testcvs} add file1" \ 30246 "${SPROG} add: scheduling file .file1. for addition 30247 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 30248 dotest multiroot4-5 "${testcvs} -q ci -m add" \ 30249 "$TESTDIR/root1/dircom/file1,v <-- file1 30250 initial revision: 1\.1" 30251 cd ../.. 30252 mkdir 2; cd 2 30253 dotest multiroot4-6 "${testcvs} -d ${CVSROOT2} init" "" 30254 dotest multiroot4-7 "${testcvs} -d ${CVSROOT2} -q co -l ." "" 30255 mkdir dircom 30256 dotest multiroot4-8 "${testcvs} add dircom" \ 30257 "Directory ${TESTDIR}/root2/dircom added to the repository" 30258 cd dircom 30259 touch file2 30260 dotest multiroot4-9 "${testcvs} add file2" \ 30261 "${SPROG} add: scheduling file .file2. for addition 30262 ${SPROG} add: use .${SPROG} commit. to add this file permanently" 30263 dotest multiroot4-10 "${testcvs} -q ci -m add" \ 30264 "$TESTDIR/root2/dircom/file2,v <-- file2 30265 initial revision: 1\.1" 30266 30267 cd ../.. 30268 cd 1/dircom 30269 # This may look contrived; the real world example which inspired 30270 # it was that a user was changing from local to remote. Cases 30271 # like switching servers (among those mounting the same 30272 # repository) and so on would also look the same. 30273 mkdir sdir2 30274 dotest multiroot4-11 "${testcvs} -d ${CVSROOT2} add sdir2" \ 30275 "Directory ${TESTDIR}/root2/dircom/sdir2 added to the repository" 30276 30277 dotest multiroot4-12 "${testcvs} -q update" "" 30278 cd .. 30279 dotest multiroot4-13 "${testcvs} -q update dircom" "" 30280 cd .. 30281 30282 rm -r 1 2 30283 rm -rf ${TESTDIR}/root1 ${TESTDIR}/root2 30284 unset CVSROOT1 30285 unset CVSROOT2 30286 ;; 30287 30288 30289 30290 rmroot) 30291 # When the Entries/Root file is removed from an existing 30292 # workspace, CVS should assume $CVSROOT instead 30293 # 30294 # Right now only checking that CVS exits normally on an 30295 # update once CVS/Root is deleted 30296 # 30297 # There was a time when this would core dump when run in 30298 # client/server mode 30299 30300 mkdir 1; cd 1 30301 dotest rmroot-setup-1 "${testcvs} -q co -l ." '' 30302 mkdir first-dir 30303 dotest rmroot-setup-2 "${testcvs} add first-dir" \ 30304 "Directory ${CVSROOT_DIRNAME}/first-dir added to the repository" 30305 cd first-dir 30306 touch file1 file2 30307 dotest rmroot-setup-3 "${testcvs} add file1 file2" \ 30308 "${SPROG} add: scheduling file .file1. for addition 30309 ${SPROG} add: scheduling file .file2. for addition 30310 ${SPROG} add: use .${SPROG} commit. to add these files permanently" 30311 dotest rmroot-setup-4 "${testcvs} -q commit -minit" \ 30312 "$CVSROOT_DIRNAME/first-dir/file1,v <-- file1 30313 initial revision: 1\.1 30314 $CVSROOT_DIRNAME/first-dir/file2,v <-- file2 30315 initial revision: 1\.1" 30316 rm CVS/Root 30317 dotest rmroot-1 "${testcvs} -q update" '' 30318 30319 dokeep 30320 cd ../.. 30321 rm -rf 1 30322 modify_repo rm -rf $CVSROOT_DIRNAME/first-dir 30323 ;; 30324 30325 30326 30327 reposmv) 30328 # More tests of repositories and specifying them. 30329 # Similar to crerepos but that test is probably getting big 30330 # enough. 30331 30332 if $proxy; then 30333 # don't even try 30334 continue 30335 fi 30336 30337 CVSROOT1=`newroot ${TESTDIR}/root1` 30338 CVSROOT_MOVED=`newroot ${TESTDIR}/root-moved` 30339 30340 dotest reposmv-setup-1 "${testcvs} -d ${CVSROOT1} init" "" 30341 mkdir imp-dir; cd imp-dir 30342 echo file1 >file1 30343 dotest reposmv-setup-2 \ 30344 "${testcvs} -d ${CVSROOT1} import -m add dir1 vendor release" \ 30345 "N dir1/file1 30346 30347 No conflicts created by this import" 30348 cd .. 30349 30350 mkdir 1; cd 1 30351 dotest reposmv-1 "${testcvs} -d ${CVSROOT1} -Q co dir1" "" 30352 mv ${TESTDIR}/root1 ${TESTDIR}/root-moved 30353 cd dir1 30354 30355 # If we didn't have a relative repository, get one now. 30356 dotest reposmv-1a "cat CVS/Repository" \ 30357 "${TESTDIR}/root1/dir1" "dir1" 30358 echo dir1 >CVS/Repository 30359 30360 # There were some duplicated warnings and such; only test 30361 # for the part of the error message which makes sense. 30362 # 30363 # FIXCVS then FIXME 30364 # Now the duplicated error messages only occur on some platforms, 30365 # including, apparently, NetBSD 1.6.1, RedHat Linux 7.3, whatever 30366 # kernel that is using, and Solaris 9. These platforms somehow 30367 # decide to call Name_Root() up to four times, via do_recursion, but 30368 # I'm not sure of the rest of the details. Other platforms, 30369 # including Fedora Core 1 (Linux 2.4.22-1.2199.nptl), RH Linux 9 30370 # (Linux 2.4.20-37.9.legacy), and probably AIX 3.4, Solaris 8, 30371 # BSD/OS 4.2, & IRIX 6.5 only call Name_Root() once as a result of 30372 # this test. 30373 # 30374 # Bug: "skipping directory " without filename. 30375 if $remote; then 30376 dotest_fail reposmv-2r "${testcvs} update" \ 30377 "Cannot access ${TESTDIR}/root1/CVSROOT 30378 No such file or directory" 30379 else 30380 dotest reposmv-2 "$testcvs update" \ 30381 "$DOTSTAR$CPROG update: in directory \.: 30382 $CPROG update: ignoring CVS/Root because it specifies a non-existent repository $TESTDIR/root1 30383 $CPROG update: Updating \. 30384 $DOTSTAR$CPROG update: cannot open directory $CVSROOT_DIRNAME/dir1: No such file or directory 30385 $CPROG update: skipping directory " 30386 fi 30387 30388 # CVS/Root overrides $CVSROOT 30389 if $remote; then 30390 CVSROOT_save=${CVSROOT} 30391 CVSROOT=:fork:${TESTDIR}/root-moved; export CVSROOT 30392 dotest_fail reposmv-3r "${testcvs} update" \ 30393 "Cannot access ${TESTDIR}/root1/CVSROOT 30394 No such file or directory" 30395 CVSROOT=${CVSROOT_save}; export CVSROOT 30396 else 30397 CVSROOT_save=$CVSROOT 30398 CVSROOT=$TESTDIR/root-moved; export CVSROOT 30399 dotest reposmv-3 "$testcvs update" \ 30400 "$DOTSTAR$CPROG update: in directory \.: 30401 $CPROG update: ignoring CVS/Root because it specifies a non-existent repository $TESTDIR/root1 30402 $CPROG update: Updating \.$DOTSTAR" 30403 CVSROOT=$CVSROOT_save; export CVSROOT 30404 fi 30405 30406 if $remote; then 30407 CVSROOT_save=${CVSROOT} 30408 CVSROOT=:fork:${TESTDIR}/root-none; export CVSROOT 30409 dotest_fail reposmv-4r "${testcvs} update" \ 30410 "Cannot access ${TESTDIR}/root1/CVSROOT 30411 No such file or directory" 30412 CVSROOT=${CVSROOT_save}; export CVSROOT 30413 else 30414 # CVS/Root doesn't seem to quite completely override $CVSROOT 30415 # Bug? Not necessarily a big deal if it only affects error 30416 # messages. 30417 CVSROOT_save=${CVSROOT} 30418 CVSROOT=${TESTDIR}/root-none; export CVSROOT 30419 dotest_fail reposmv-4 "${testcvs} update" \ 30420 "${CPROG} update: in directory \.: 30421 ${CPROG} update: ignoring CVS/Root because it specifies a non-existent repository ${TESTDIR}/root1 30422 ${CPROG} \[update aborted\]: ${TESTDIR}/root-none/CVSROOT: No such file or directory" 30423 CVSROOT=${CVSROOT_save}; export CVSROOT 30424 fi 30425 30426 # -d overrides CVS/Root 30427 # 30428 # Oddly enough, with CVS 1.10 I think this didn't work for 30429 # local (that is, it would appear that CVS/Root would not 30430 # get used, but would produce an error if it didn't exist). 30431 dotest reposmv-5 "${testcvs} -d ${CVSROOT_MOVED} update" \ 30432 "${SPROG} update: Updating \." 30433 30434 # TODO: could also test various other things, like what if the 30435 # user removes CVS/Root (which is legit). Or another set of 30436 # tests would be if both repositories exist but we want to make 30437 # sure that CVS is using the correct one. 30438 30439 cd ../.. 30440 rm -r imp-dir 1 30441 rm -rf root1 root2 30442 unset CVSROOT1 30443 ;; 30444 30445 30446 30447 pserver) 30448 # Test basic pserver functionality. 30449 if $remote; then 30450 if test -n "$remotehost"; then 30451 # Don't even try. (The issue is getting servercvs & testcvs 30452 # set correctly for the following tests. Some expect one access 30453 # method and some another, which in $remotehost mode, means that 30454 # sometimes the executables must run on one platform and 30455 # sometimes another.) 30456 continue 30457 fi 30458 save_servercvs=$servercvs 30459 servercvs=$testcvs 30460 # First set SystemAuth=no. Not really necessary, I don't 30461 # think, but somehow it seems like the clean thing for 30462 # the testsuite. 30463 mkdir 1; cd 1 30464 dotest pserver-1 "$testcvs -Q co CVSROOT" "" 30465 cd CVSROOT 30466 echo "SystemAuth=no" >>config 30467 dotest pserver-2 "$testcvs -q ci -m config-it" \ 30468 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 30469 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 30470 $SPROG commit: Rebuilding administrative file database" 30471 cat >$CVSROOT_DIRNAME/CVSROOT/passwd <<EOF 30472 testme:q6WV9d2t848B2:$username 30473 dontroot:q6WV9d2t848B2:root 30474 anonymous::$username 30475 $username: 30476 willfail: :whocares 30477 EOF 30478 dotest_fail pserver-3 "$servercvs pserver" \ 30479 "error 0 Server configuration missing --allow-root in inetd.conf" <<EOF 30480 BEGIN AUTH REQUEST 30481 $CVSROOT_DIRNAME 30482 testme 30483 Ay::'d 30484 END AUTH REQUEST 30485 EOF 30486 30487 # Confirm that not sending a newline during auth cannot constitute 30488 # a denial-of-service attack. This assumes that PATH_MAX is less 30489 # than 65536 bytes. If PATH_MAX is larger than 65535 bytes, this 30490 # test could hang indefinitely. 30491 ${AWK} 'BEGIN { printf "0123456789abcdef" }' </dev/null >garbageseg 30492 echo "BEGIN AUTH REQUEST" >garbageinput 30493 i=0 30494 while test $i -lt 64; do 30495 cat <garbageseg >>garbageseg2 30496 i=`expr $i + 1` 30497 done 30498 i=0 30499 while test $i -lt 64; do 30500 cat <garbageseg2 >>garbageinput 30501 i=`expr $i + 1` 30502 done 30503 dotest_fail pserver-auth-no-dos \ 30504 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30505 "$CPROG \\[pserver aborted\\]: error reading from net while validating pserver: Not enough space" \ 30506 "$CPROG \\[pserver aborted\\]: error reading from net while validating pserver: Cannot allocate memory" <garbageinput 30507 unset i 30508 rm garbageseg garbageseg2 garbageinput 30509 30510 # Sending the Root and noop before waiting for the 30511 # "I LOVE YOU" is bogus, but hopefully we can get 30512 # away with it. 30513 dotest pserver-4 "$servercvs --allow-root=$CVSROOT_DIRNAME pserver" \ 30514 "$DOTSTAR LOVE YOU 30515 ok" <<EOF 30516 BEGIN AUTH REQUEST 30517 $CVSROOT_DIRNAME 30518 testme 30519 Ay::'d 30520 END AUTH REQUEST 30521 Root $CVSROOT_DIRNAME 30522 noop 30523 EOF 30524 30525 dotest_fail pserver-4.2 \ 30526 "$servercvs --allow-root=$CVSROOT_DIRNAME pserver" \ 30527 "error 0: root not allowed" <<EOF 30528 BEGIN AUTH REQUEST 30529 $CVSROOT_DIRNAME 30530 dontroot 30531 Ay::'d 30532 END AUTH REQUEST 30533 EOF 30534 30535 dotest pserver-5 "$servercvs --allow-root=$CVSROOT_DIRNAME pserver" \ 30536 "$DOTSTAR LOVE YOU 30537 E Protocol error: Root says \"$TESTDIR/1\" but pserver says \"$CVSROOT_DIRNAME\" 30538 error " <<EOF 30539 BEGIN AUTH REQUEST 30540 $CVSROOT_DIRNAME 30541 testme 30542 Ay::'d 30543 END AUTH REQUEST 30544 Root $TESTDIR/1 30545 noop 30546 EOF 30547 30548 dotest pserver-5a "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30549 "${DOTSTAR} LOVE YOU 30550 E Protocol error: init says \"${TESTDIR}/2\" but pserver says \"${CVSROOT_DIRNAME}\" 30551 error " <<EOF 30552 BEGIN AUTH REQUEST 30553 ${CVSROOT_DIRNAME} 30554 testme 30555 Ay::'d 30556 END AUTH REQUEST 30557 init ${TESTDIR}/2 30558 EOF 30559 dotest_fail pserver-5b "test -d ${TESTDIR}/2" '' 30560 30561 dotest pserver-5c "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30562 "${DOTSTAR} LOVE YOU 30563 E init xxx must be an absolute pathname 30564 error " <<EOF 30565 BEGIN AUTH REQUEST 30566 ${CVSROOT_DIRNAME} 30567 testme 30568 Ay::'d 30569 END AUTH REQUEST 30570 init xxx 30571 EOF 30572 dotest_fail pserver-5d "test -d xxx" '' 30573 30574 dotest_fail pserver-6 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30575 "I HATE YOU" <<EOF 30576 BEGIN AUTH REQUEST 30577 ${CVSROOT_DIRNAME} 30578 testme 30579 Ay::'d^b?hd 30580 END AUTH REQUEST 30581 EOF 30582 30583 dotest_fail pserver-7 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30584 "I HATE YOU" <<EOF 30585 BEGIN VERIFICATION REQUEST 30586 ${CVSROOT_DIRNAME} 30587 testme 30588 Ay::'d^b?hd 30589 END VERIFICATION REQUEST 30590 EOF 30591 30592 dotest pserver-8 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30593 "${DOTSTAR} LOVE YOU" <<EOF 30594 BEGIN VERIFICATION REQUEST 30595 ${CVSROOT_DIRNAME} 30596 testme 30597 Ay::'d 30598 END VERIFICATION REQUEST 30599 EOF 30600 30601 # Tests pserver-9 through pserver-13 are about empty passwords 30602 30603 # Test empty password (both sides) for aliased user 30604 dotest pserver-9 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30605 "${DOTSTAR} LOVE YOU" <<EOF 30606 BEGIN AUTH REQUEST 30607 ${CVSROOT_DIRNAME} 30608 anonymous 30609 A 30610 END AUTH REQUEST 30611 EOF 30612 30613 # Test empty password (server side only) for aliased user 30614 dotest pserver-10 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30615 "${DOTSTAR} LOVE YOU" <<EOF 30616 BEGIN AUTH REQUEST 30617 ${CVSROOT_DIRNAME} 30618 anonymous 30619 Aanythingwouldworkhereittrulydoesnotmatter 30620 END AUTH REQUEST 30621 EOF 30622 30623 # Test empty (both sides) password for non-aliased user 30624 dotest pserver-11 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30625 "${DOTSTAR} LOVE YOU" <<EOF 30626 BEGIN AUTH REQUEST 30627 ${CVSROOT_DIRNAME} 30628 ${username} 30629 A 30630 END AUTH REQUEST 30631 EOF 30632 30633 # Test empty (server side only) password for non-aliased user 30634 dotest pserver-12 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30635 "${DOTSTAR} LOVE YOU" <<EOF 30636 BEGIN AUTH REQUEST 30637 ${CVSROOT_DIRNAME} 30638 ${username} 30639 Anypasswordwouldworkwhynotthisonethen 30640 END AUTH REQUEST 30641 EOF 30642 30643 # Test failure of whitespace password 30644 dotest_fail pserver-13 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30645 "${DOTSTAR} HATE YOU" <<EOF 30646 BEGIN AUTH REQUEST 30647 ${CVSROOT_DIRNAME} 30648 willfail 30649 Amquiteunabletocomeupwithinterestingpasswordsanymore 30650 END AUTH REQUEST 30651 EOF 30652 30653 # The following tests are for read-only access 30654 30655 # Check that readers can only read, everyone else can write 30656 30657 echo anonymous >$CVSROOT_DIRNAME/CVSROOT/readers 30658 30659 dotest pserver-14 "$servercvs --allow-root=$CVSROOT_DIRNAME pserver" \ 30660 "$DOTSTAR LOVE YOU 30661 M Concurrent Versions System (CVS) .* 30662 ok" <<EOF 30663 BEGIN AUTH REQUEST 30664 $CVSROOT_DIRNAME 30665 anonymous 30666 Ay::'d 30667 END AUTH REQUEST 30668 Root $CVSROOT_DIRNAME 30669 version 30670 EOF 30671 30672 dotest pserver-15 "$servercvs --allow-root=$CVSROOT_DIRNAME pserver" \ 30673 "$DOTSTAR LOVE YOU 30674 E $CPROG \\[server aborted\\]: .init. requires write access to the repository 30675 error " <<EOF 30676 BEGIN AUTH REQUEST 30677 $CVSROOT_DIRNAME 30678 anonymous 30679 Ay::'d 30680 END AUTH REQUEST 30681 init $CVSROOT_DIRNAME 30682 EOF 30683 30684 dotest pserver-16 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30685 "${DOTSTAR} LOVE YOU 30686 M Concurrent Versions System (CVS) .* 30687 ok" <<EOF 30688 BEGIN AUTH REQUEST 30689 ${CVSROOT_DIRNAME} 30690 testme 30691 Ay::'d 30692 END AUTH REQUEST 30693 Root ${CVSROOT_DIRNAME} 30694 version 30695 EOF 30696 30697 dotest pserver-17 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30698 "${DOTSTAR} LOVE YOU 30699 ok" <<EOF 30700 BEGIN AUTH REQUEST 30701 ${CVSROOT_DIRNAME} 30702 testme 30703 Ay::'d 30704 END AUTH REQUEST 30705 init ${CVSROOT_DIRNAME} 30706 EOF 30707 30708 dotest pserver-18 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30709 "${DOTSTAR} LOVE YOU 30710 M Concurrent Versions System (CVS) .* 30711 ok" <<EOF 30712 BEGIN AUTH REQUEST 30713 ${CVSROOT_DIRNAME} 30714 ${username} 30715 Ay::'d 30716 END AUTH REQUEST 30717 Root ${CVSROOT_DIRNAME} 30718 version 30719 EOF 30720 30721 dotest pserver-19 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30722 "${DOTSTAR} LOVE YOU 30723 ok" <<EOF 30724 BEGIN AUTH REQUEST 30725 ${CVSROOT_DIRNAME} 30726 ${username} 30727 Anything 30728 END AUTH REQUEST 30729 init ${CVSROOT_DIRNAME} 30730 EOF 30731 30732 # Check that writers can write, everyone else can only read 30733 # even if not listed in readers 30734 30735 cat >${CVSROOT_DIRNAME}/CVSROOT/writers <<EOF 30736 testme 30737 EOF 30738 30739 dotest pserver-20 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30740 "${DOTSTAR} LOVE YOU 30741 M Concurrent Versions System (CVS) .* 30742 ok" <<EOF 30743 BEGIN AUTH REQUEST 30744 ${CVSROOT_DIRNAME} 30745 anonymous 30746 Ay::'d 30747 END AUTH REQUEST 30748 Root ${CVSROOT_DIRNAME} 30749 version 30750 EOF 30751 30752 dotest pserver-21 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30753 "${DOTSTAR} LOVE YOU 30754 E $CPROG \\[server aborted\\]: .init. requires write access to the repository 30755 error " <<EOF 30756 BEGIN AUTH REQUEST 30757 ${CVSROOT_DIRNAME} 30758 anonymous 30759 Ay::'d 30760 END AUTH REQUEST 30761 init ${CVSROOT_DIRNAME} 30762 EOF 30763 30764 dotest pserver-22 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30765 "${DOTSTAR} LOVE YOU 30766 M Concurrent Versions System (CVS) .* 30767 ok" <<EOF 30768 BEGIN AUTH REQUEST 30769 ${CVSROOT_DIRNAME} 30770 testme 30771 Ay::'d 30772 END AUTH REQUEST 30773 Root ${CVSROOT_DIRNAME} 30774 version 30775 EOF 30776 30777 dotest pserver-23 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30778 "${DOTSTAR} LOVE YOU 30779 ok" <<EOF 30780 BEGIN AUTH REQUEST 30781 ${CVSROOT_DIRNAME} 30782 testme 30783 Ay::'d 30784 END AUTH REQUEST 30785 init ${CVSROOT_DIRNAME} 30786 EOF 30787 30788 dotest pserver-24 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30789 "${DOTSTAR} LOVE YOU 30790 M Concurrent Versions System (CVS) .* 30791 ok" <<EOF 30792 BEGIN AUTH REQUEST 30793 ${CVSROOT_DIRNAME} 30794 ${username} 30795 Ay::'d 30796 END AUTH REQUEST 30797 Root ${CVSROOT_DIRNAME} 30798 version 30799 EOF 30800 30801 dotest pserver-25 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30802 "${DOTSTAR} LOVE YOU 30803 E $CPROG \\[server aborted\\]: .init. requires write access to the repository 30804 error " <<EOF 30805 BEGIN AUTH REQUEST 30806 ${CVSROOT_DIRNAME} 30807 ${username} 30808 Anything 30809 END AUTH REQUEST 30810 init ${CVSROOT_DIRNAME} 30811 EOF 30812 30813 # Should work the same without readers 30814 30815 rm ${CVSROOT_DIRNAME}/CVSROOT/readers 30816 30817 dotest pserver-26 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30818 "${DOTSTAR} LOVE YOU 30819 M Concurrent Versions System (CVS) .* 30820 ok" <<EOF 30821 BEGIN AUTH REQUEST 30822 ${CVSROOT_DIRNAME} 30823 anonymous 30824 Ay::'d 30825 END AUTH REQUEST 30826 Root ${CVSROOT_DIRNAME} 30827 version 30828 EOF 30829 30830 dotest pserver-27 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30831 "${DOTSTAR} LOVE YOU 30832 E $CPROG \\[server aborted\\]: .init. requires write access to the repository 30833 error " <<EOF 30834 BEGIN AUTH REQUEST 30835 ${CVSROOT_DIRNAME} 30836 anonymous 30837 Ay::'d 30838 END AUTH REQUEST 30839 init ${CVSROOT_DIRNAME} 30840 EOF 30841 30842 dotest pserver-28 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30843 "${DOTSTAR} LOVE YOU 30844 M Concurrent Versions System (CVS) .* 30845 ok" <<EOF 30846 BEGIN AUTH REQUEST 30847 ${CVSROOT_DIRNAME} 30848 testme 30849 Ay::'d 30850 END AUTH REQUEST 30851 Root ${CVSROOT_DIRNAME} 30852 version 30853 EOF 30854 30855 dotest pserver-29 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30856 "${DOTSTAR} LOVE YOU 30857 ok" <<EOF 30858 BEGIN AUTH REQUEST 30859 ${CVSROOT_DIRNAME} 30860 testme 30861 Ay::'d 30862 END AUTH REQUEST 30863 init ${CVSROOT_DIRNAME} 30864 EOF 30865 30866 dotest pserver-30 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30867 "${DOTSTAR} LOVE YOU 30868 M Concurrent Versions System (CVS) .* 30869 ok" <<EOF 30870 BEGIN AUTH REQUEST 30871 ${CVSROOT_DIRNAME} 30872 ${username} 30873 Ay::'d 30874 END AUTH REQUEST 30875 Root ${CVSROOT_DIRNAME} 30876 version 30877 EOF 30878 30879 dotest pserver-31 "${servercvs} --allow-root=${CVSROOT_DIRNAME} pserver" \ 30880 "${DOTSTAR} LOVE YOU 30881 E $CPROG \\[server aborted\\]: .init. requires write access to the repository 30882 error " <<EOF 30883 BEGIN AUTH REQUEST 30884 ${CVSROOT_DIRNAME} 30885 ${username} 30886 Anything 30887 END AUTH REQUEST 30888 init ${CVSROOT_DIRNAME} 30889 EOF 30890 30891 # pserver used to try and print from the NULL pointer 30892 # in this error message in this case 30893 dotest_fail pserver-bufinit "${servercvs} pserver" \ 30894 "$CPROG \[pserver aborted\]: unexpected EOF encountered during authentication" </dev/null 30895 30896 # Clean up. 30897 dotest pserver-cleanup-1 "${testcvs} -q up -pr1.1 config >config" "" 30898 dotest pserver-cleanup-2 "${testcvs} -q ci -m config-it" \ 30899 "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config 30900 new revision: 1\.[0-9]*; previous revision: 1\.[0-9]* 30901 $SPROG commit: Rebuilding administrative file database" 30902 30903 dokeep 30904 cd ../.. 30905 rm -r 1 30906 restore_adm 30907 servercvs=$save_servercvs 30908 fi # skip the whole thing for local 30909 ;; 30910 30911 30912 30913 server) 30914 # Some tests of the server (independent of the client). 30915 if $remote; then 30916 save_servercvs=$servercvs 30917 servercvs=$testcvs 30918 dotest server-1 "${servercvs} server" \ 30919 "E Protocol error: Root request missing 30920 error " <<EOF 30921 Directory bogus 30922 mumble/bar 30923 update 30924 EOF 30925 30926 # Could also test for relative pathnames here (so that crerepos-6a 30927 # and crerepos-6b can use :fork:). 30928 dotest server-2 "${servercvs} server" "ok" <<EOF 30929 Set OTHER=variable 30930 Set MYENV=env-value 30931 init ${TESTDIR}/crerepos 30932 EOF 30933 dotest server-3 "test -d ${TESTDIR}/crerepos/CVSROOT" "" 30934 30935 # Now some tests of gzip-file-contents (used by jCVS). 30936 ${AWK} 'BEGIN { \ 30937 printf "%c%c%c%c%c%c.6%c%c+I-.%c%c%c%c5%c;%c%c%c%c", \ 30938 31, 139, 8, 64, 5, 7, 64, 3, 225, 2, 64, 198, 185, 5, 64, 64, 64}' \ 30939 </dev/null | ${TR} '\100' '\000' >gzipped.dat 30940 # Note that the CVS client sends "-b 1.1.1", and this 30941 # test doesn't. But the server also defaults to that. 30942 cat <<EOF >session.dat 30943 Root ${TESTDIR}/crerepos 30944 UseUnchanged 30945 gzip-file-contents 3 30946 Argument -m 30947 Argument msg 30948 Argumentx 30949 Argument dir1 30950 Argument tag1 30951 Argument tag2 30952 Directory . 30953 ${TESTDIR}/crerepos 30954 Modified file1 30955 u=rw,g=r,o=r 30956 z25 30957 EOF 30958 cat gzipped.dat >>session.dat 30959 echo import >>session.dat 30960 dotest server-4 "${servercvs} server" \ 30961 "M N dir1/file1 30962 M 30963 M No conflicts created by this import 30964 M 30965 ok" <session.dat 30966 dotest server-5 \ 30967 "${testcvs} -q -d ${TESTDIR}/crerepos co -p dir1/file1" "test" 30968 30969 # OK, here are some notify tests. 30970 dotest server-6 "${servercvs} server" \ 30971 "Notified \./ 30972 ${TESTDIR}/crerepos/dir1/file1 30973 ok" <<EOF 30974 Root ${TESTDIR}/crerepos 30975 Directory . 30976 ${TESTDIR}/crerepos/dir1 30977 Notify file1 30978 E Fri May 7 13:21:09 1999 -0000 myhost some-work-dir EUC 30979 noop 30980 EOF 30981 # Sending the second "noop" before waiting for the output 30982 # from the first is bogus but hopefully we can get away 30983 # with it. 30984 dotest server-7 "${servercvs} server" \ 30985 "M file1 $username Fri May 7 13:21:09 1999 -0000 myhost some-work-dir 30986 Notified \./ 30987 ${TESTDIR}/crerepos/dir1/file1 30988 ok 30989 M file1 $username Fri May 7 13:21:09 1999 -0000 myhost some-work-dir 30990 Notified \./ 30991 ${TESTDIR}/crerepos/dir1/file1 30992 ok" <<EOF 30993 Root ${TESTDIR}/crerepos 30994 Directory . 30995 ${TESTDIR}/crerepos/dir1 30996 Notify file1 30997 E Fri May 7 13:21:09 1999 -0000 myhost some-work-dir EUC 30998 noop 30999 Notify file1 31000 E The 57th day of Discord in the YOLD 3165 myhost some-work-dir EUC 31001 noop 31002 EOF 31003 31004 # OK, now test a few error conditions. 31005 # FIXCVS: should give "error" and no "Notified", like server-9 31006 dotest server-8 "${servercvs} server" \ 31007 "M file1 $username The 57th day of Discord in the YOLD 3165 myhost some-work-dir 31008 E $CPROG server: invalid character in editor value 31009 Notified \./ 31010 ${TESTDIR}/crerepos/dir1/file1 31011 ok" <<EOF 31012 Root ${TESTDIR}/crerepos 31013 Directory . 31014 ${TESTDIR}/crerepos/dir1 31015 Notify file1 31016 E Setting Orange, the 52th day of Discord in the YOLD 3165 myhost some-work-dir EUC 31017 noop 31018 EOF 31019 31020 dotest server-9 "${servercvs} server" \ 31021 "E Protocol error; misformed Notify request 31022 error " <<EOF 31023 Root ${TESTDIR}/crerepos 31024 Directory . 31025 ${TESTDIR}/crerepos/dir1 31026 Notify file1 31027 E Setting Orange+57th day of Discord myhost some-work-dir EUC 31028 noop 31029 EOF 31030 31031 # First demonstrate an interesting quirk in the protocol. 31032 # The "watchers" request selects the files to operate based 31033 # on files which exist in the working directory. So if we 31034 # don't send "Entry" or the like, it won't do anything. 31035 # Wants to be documented in cvsclient.texi... 31036 dotest server-10 "${servercvs} server" "ok" <<EOF 31037 Root ${TESTDIR}/crerepos 31038 Directory . 31039 ${TESTDIR}/crerepos/dir1 31040 watchers 31041 EOF 31042 # See if "watchers" and "editors" display the right thing. 31043 dotest server-11 "${servercvs} server" \ 31044 "M file1 ${username} tedit tunedit tcommit 31045 ok" <<EOF 31046 Root ${TESTDIR}/crerepos 31047 Directory . 31048 ${TESTDIR}/crerepos/dir1 31049 Entry /file1/1.1//// 31050 watchers 31051 EOF 31052 dotest server-12 "${servercvs} server" \ 31053 "M file1 ${username} The 57th day of Discord in the YOLD 3165 myhost some-work-dir 31054 ok" <<EOF 31055 Root ${TESTDIR}/crerepos 31056 Directory . 31057 ${TESTDIR}/crerepos/dir1 31058 Entry /file1/1.1//// 31059 editors 31060 EOF 31061 31062 # Now do an unedit. 31063 dotest server-13 "${servercvs} server" \ 31064 "Notified \./ 31065 ${TESTDIR}/crerepos/dir1/file1 31066 ok" <<EOF 31067 Root ${TESTDIR}/crerepos 31068 Directory . 31069 ${TESTDIR}/crerepos/dir1 31070 Notify file1 31071 U 7 May 1999 15:00 -0000 myhost some-work-dir EUC 31072 noop 31073 EOF 31074 31075 # Now try "watchers" and "editors" again. 31076 dotest server-14 "${servercvs} server" "ok" <<EOF 31077 Root ${TESTDIR}/crerepos 31078 Directory . 31079 ${TESTDIR}/crerepos/dir1 31080 watchers 31081 EOF 31082 dotest server-15 "${servercvs} server" "ok" <<EOF 31083 Root ${TESTDIR}/crerepos 31084 Directory . 31085 ${TESTDIR}/crerepos/dir1 31086 editors 31087 EOF 31088 31089 # Test that the global `-l' option is ignored nonfatally. 31090 dotest server-16 "${testcvs} server" \ 31091 "E $CPROG server: WARNING: global \`-l' option ignored\. 31092 ok" <<EOF 31093 Global_option -l 31094 noop 31095 EOF 31096 31097 # There used to be some exploits based on malformed Entry requests 31098 dotest server-17 "$testcvs server" \ 31099 "E protocol error: Malformed Entry 31100 error " <<EOF 31101 Root $TESTDIR/crerepos 31102 Directory . 31103 $TESTDIR/crerepos/dir1 31104 Entry X/file1/1.1//// 31105 noop 31106 EOF 31107 31108 dotest server-18 "$testcvs server" \ 31109 "E protocol error: Malformed Entry 31110 error " <<EOF 31111 Root $TESTDIR/crerepos 31112 Directory . 31113 $TESTDIR/crerepos/dir1 31114 Entry /CC/CC/CC 31115 noop 31116 EOF 31117 31118 # Check that the config file may be set from the command line. 31119 # But first verify the default config produces no error messages. 31120 dotest server-19 "$testcvs server" \ 31121 "ok" <<EOF 31122 Root $TESTDIR/crerepos 31123 Directory . 31124 $TESTDIR/crerepos 31125 noop 31126 EOF 31127 echo THIS-CONFIG-OPTION-IS-BAD=XXX >$TESTDIR/newconfig 31128 dotest_fail server-20 "$testcvs server -c $TESTDIR/newconfig" \ 31129 "E $SPROG \[server aborted\]: Invalid path to config file specified: \`$TESTDIR/newconfig'" <<EOF 31130 Root $TESTDIR/crerepos 31131 Directory . 31132 $TESTDIR/crerepos 31133 noop 31134 EOF 31135 dotest_fail server-21 \ 31136 "$testcvs server -c /etc/cvs/this-shouldnt-exist" \ 31137 "E $SPROG \[server aborted\]: Failed to resolve path: \`/etc/cvs/this-shouldnt-exist': No such file or directory" <<EOF 31138 Root $TESTDIR/crerepos 31139 Directory . 31140 $TESTDIR/crerepos 31141 noop 31142 EOF 31143 31144 # Now make sure that the config file can't be set via the user's 31145 # .cvsrc. 31146 echo server -c $TESTDIR/newconfig >$HOME/.cvsrc 31147 dotest server-22 "$testcvs server" \ 31148 "ok" <<EOF 31149 Root $TESTDIR/crerepos 31150 Directory . 31151 $TESTDIR/crerepos 31152 noop 31153 EOF 31154 31155 dokeep 31156 rm -rf $TESTDIR/crerepos 31157 rm gzipped.dat session.dat 31158 rm $TESTDIR/newconfig $HOME/.cvsrc 31159 servercvs=$save_servercvs 31160 fi # skip the whole thing for local 31161 ;; 31162 31163 31164 31165 server2) 31166 # More server tests, in particular testing that various 31167 # possible security holes are plugged. 31168 if $remote; then 31169 if test -n "$remotehost"; then 31170 # Don't even try. (The issue is getting servercvs & testcvs 31171 # set correctly for the following tests. Some expect one access 31172 # method and some another, which in $remotehost mode, means that 31173 # sometimes the executables must run on one platform and 31174 # sometimes another.) 31175 continue 31176 fi 31177 save_servercvs=$servercvs 31178 servercvs=$testcvs 31179 dotest server2-1 "${servercvs} server" \ 31180 "E protocol error: directory '${CVSROOT_DIRNAME}/\.\./dir1' not within root '${CVSROOT_DIRNAME}' 31181 error " <<EOF 31182 Root ${CVSROOT_DIRNAME} 31183 Directory . 31184 ${CVSROOT_DIRNAME}/../dir1 31185 noop 31186 EOF 31187 31188 dotest server2-2 "${servercvs} server" \ 31189 "E protocol error: directory '${CVSROOT_DIRNAME}dir1' not within root '${CVSROOT_DIRNAME}' 31190 error " <<EOF 31191 Root ${CVSROOT_DIRNAME} 31192 Directory . 31193 ${CVSROOT_DIRNAME}dir1 31194 noop 31195 EOF 31196 31197 dotest 2-3 "${servercvs} server" \ 31198 "E protocol error: directory '${TESTDIR}' not within root '${CVSROOT_DIRNAME}' 31199 error " <<EOF 31200 Root ${CVSROOT_DIRNAME} 31201 Directory . 31202 ${TESTDIR} 31203 noop 31204 EOF 31205 31206 # OK, now a few tests for the rule that one cannot pass a 31207 # filename containing a slash to Modified, Is-modified, 31208 # Notify, Questionable, or Unchanged. For completeness 31209 # we'd try them all. For lazyness/conciseness we don't. 31210 dotest server2-4 "${servercvs} server" \ 31211 "E protocol error: directory 'foo/bar' not within current directory 31212 error " <<EOF 31213 Root ${CVSROOT_DIRNAME} 31214 Directory . 31215 ${CVSROOT_DIRNAME} 31216 Unchanged foo/bar 31217 noop 31218 EOF 31219 servercvs=$save_servercvs 31220 fi 31221 ;; 31222 31223 31224 31225 client) 31226 # Some tests of the client (independent of the server). 31227 if $remote; then :; else 31228 remoteonly client 31229 continue 31230 fi 31231 31232 if $proxy; then 31233 # Skip these tests in proxy mode since they assume we are not 31234 # writing through a proxy server. There is no writeproxy-client 31235 # test currently. The writeproxy & writeproxy-noredirect tests 31236 # test the writeproxy server. 31237 notproxy client 31238 continue 31239 fi 31240 31241 cat >$TESTDIR/serveme <<EOF 31242 #!$TESTSHELL 31243 # This is admittedly a bit cheezy, in the sense that we make lots 31244 # of assumptions about what the client is going to send us. 31245 # We don't mention Repository, because current clients don't require it. 31246 # Sending these at our own pace, rather than waiting for the client to 31247 # make the requests, is bogus, but hopefully we can get away with it. 31248 echo "Valid-requests Root Valid-responses valid-requests Directory Entry Modified Unchanged Argument Argumentx ci co update" 31249 echo "ok" 31250 echo "M special message" 31251 echo "Created first-dir/" 31252 echo "$CVSROOT_DIRNAME/first-dir/file1" 31253 echo "/file1/1.1///" 31254 echo "u=rw,g=rw,o=rw" 31255 echo "4" 31256 echo "xyz" 31257 echo "ok" 31258 cat >/dev/null 31259 EOF 31260 # Cygwin. Pthffffffffft! 31261 if test -n "$remotehost"; then 31262 $CVS_RSH $remotehost "chmod +x $TESTDIR/serveme" 31263 else 31264 chmod +x $TESTDIR/serveme 31265 fi 31266 save_CVS_SERVER=$CVS_SERVER 31267 CVS_SERVER=$TESTDIR/serveme; export CVS_SERVER 31268 mkdir 1; cd 1 31269 dotest_fail client-1 "$testcvs -q co first-dir" \ 31270 "$CPROG \[checkout aborted\]: This server does not support the global -q option$DOTSTAR" 31271 dotest client-2 "$testcvs co first-dir" "special message" 31272 31273 cat >$TESTDIR/serveme <<EOF 31274 #!$TESTSHELL 31275 echo "Valid-requests Root Valid-responses valid-requests Directory Entry Modified Unchanged Argument Argumentx ci co update" 31276 echo "ok" 31277 echo "M merge-it" 31278 echo "Copy-file ./" 31279 echo "$CVSROOT_DIRNAME/first-dir/file1" 31280 echo "$TESTDIR/bogus/.#file1.1.1" 31281 echo "Merged ./" 31282 echo "$CVSROOT_DIRNAME/first-dir/file1" 31283 echo "/file1/1.2///" 31284 echo "u=rw,g=rw,o=rw" 31285 echo "4" 31286 echo "abd" 31287 echo "ok" 31288 cat >/dev/null 31289 EOF 31290 cd first-dir 31291 mkdir $TESTDIR/bogus 31292 # The ${DOTSTAR} is to match a potential "broken pipe" if the 31293 # client exits before the server script sends everything 31294 dotest_fail client-3 "$testcvs update" \ 31295 "merge-it 31296 $CPROG \[update aborted\]: protocol error: Copy-file tried to specify director$DOTSTAR" 31297 cat >$TESTDIR/serveme <<EOF 31298 #!$TESTSHELL 31299 echo "Valid-requests Root Valid-responses valid-requests Directory Entry Modified Unchanged Argument Argumentx ci co update" 31300 echo "ok" 31301 echo "M merge-it" 31302 echo "Copy-file ./" 31303 echo "$CVSROOT_DIRNAME/first-dir/file1" 31304 echo ".#file1.1.1" 31305 echo "Merged ./" 31306 echo "$CVSROOT_DIRNAME/first-dir/file1" 31307 echo "/file1/1.2///" 31308 echo "u=rw,g=rw,o=rw" 31309 echo "4" 31310 echo "abc" 31311 echo "ok" 31312 cat >/dev/null 31313 EOF 31314 dotest client-4 "$testcvs update" "merge-it" 31315 dotest client-5 "cat .#file1.1.1" "xyz" 31316 dotest client-6 "cat CVS/Entries" "/file1/1.2/[A-Za-z0-9 :]*// 31317 D" 31318 dotest client-7 "cat file1" "abc" 31319 31320 cat >$TESTDIR/serveme <<EOF 31321 #!$TESTSHELL 31322 echo "Valid-requests Root Valid-responses valid-requests Directory Entry Modified Unchanged Argument Argumentx ci co update" 31323 echo "ok" 31324 echo "M OK, whatever" 31325 echo "ok" 31326 cat >$TESTDIR/client.tmp 31327 EOF 31328 chmod u=rw,go= file1 31329 # By specifying the time zone in local time, we don't 31330 # know exactly how that will translate to GMT. 31331 dotest client-8 "$testcvs update -D 99-10-04" "OK, whatever" 31332 # String 2 below is Cygwin again - ptoooey. 31333 dotest client-9 "cat $TESTDIR/client.tmp" \ 31334 "Root $CVSROOT_DIRNAME 31335 Valid-responses [-a-zA-Z ]* 31336 valid-requests 31337 Argument -D 31338 Argument [34] Oct 1999 [0-9][0-9]:00:00 -0000 31339 Argument -- 31340 Directory \. 31341 $CVSROOT_DIRNAME/first-dir 31342 Entry /file1/1\.2/// 31343 Modified file1 31344 u=rw,g=,o= 31345 4 31346 abc 31347 update" \ 31348 "Root $CVSROOT_DIRNAME 31349 Valid-responses [-a-zA-Z ]* 31350 valid-requests 31351 Argument -D 31352 Argument [34] Oct 1999 [0-9][0-9]:00:00 -0000 31353 Argument -- 31354 Directory \. 31355 $CVSROOT_DIRNAME/first-dir 31356 Entry /file1/1\.2/// 31357 Modified file1 31358 u=rw,g=r,o=r 31359 4 31360 abc 31361 update" 31362 31363 # The following test tests what was a potential client exploit in 31364 # CVS versions 1.11.14 and CVS versions 1.12.6 and earlier. This 31365 # exploit would allow a trojan server to create arbitrary files, 31366 # anywhere the user had write permissions, even outside of the 31367 # user's sandbox. 31368 cat >$HOME/.bashrc <<EOF 31369 #!$TESTSHELL 31370 # This is where login scripts would usually be 31371 # stored. 31372 EOF 31373 cat >$TESTDIR/serveme <<EOF 31374 #!$TESTSHELL 31375 echo "Valid-requests Root Valid-responses valid-requests Directory Entry Modified Unchanged Argument Argumentx ci co update" 31376 echo "ok" 31377 echo "Rcs-diff $HOME/" 31378 echo "$HOME/.bashrc" 31379 echo "/.bashrc/73.50///" 31380 echo "u=rw,g=rw,o=rw" 31381 echo "20" 31382 echo "a1 1" 31383 echo "echo 'gotcha!'" 31384 echo "ok" 31385 cat >/dev/null 31386 EOF 31387 31388 # If I don't run the following sleep between the above cat and 31389 # the following calls to dotest, sometimes the serveme file isn't 31390 # completely written yet by the time CVS tries to execute it, 31391 # causing the shell to intermittantly report syntax errors (usually 31392 # early EOF). There's probably a new race condition here, but this 31393 # works. 31394 # 31395 # Incidentally, I can reproduce this behavior with Linux 2.4.20 and 31396 # Bash 2.05 or Bash 2.05b. 31397 sleep 1 31398 dotest_fail client-10 "$testcvs update" \ 31399 "$CPROG update: Server attempted to update a file via an invalid pathname: 31400 $CPROG \[update aborted\]: \`$HOME/.bashrc'\." 31401 31402 # A second try at a client exploit. This one never actually 31403 # failed in the past, but I thought it wouldn't hurt to add a test. 31404 cat >$TESTDIR/serveme <<EOF 31405 #!$TESTSHELL 31406 echo "Valid-requests Root Valid-responses valid-requests Directory Entry Modified Unchanged Argument Argumentx ci co update" 31407 echo "ok" 31408 echo "Rcs-diff ./" 31409 echo "$HOME/.bashrc" 31410 echo "/.bashrc/73.50///" 31411 echo "u=rw,g=rw,o=rw" 31412 echo "20" 31413 echo "a1 1" 31414 echo "echo 'gotcha!'" 31415 echo "ok" 31416 cat >/dev/null 31417 EOF 31418 sleep 1 31419 dotest_fail client-11 "$testcvs update" \ 31420 "$CPROG \[update aborted\]: patch original file \./\.bashrc does not exist" 31421 31422 # A third try at a client exploit. This one did used to fail like 31423 # client-10. 31424 cat >$TESTDIR/serveme <<EOF 31425 #!$TESTSHELL 31426 echo "Valid-requests Root Valid-responses valid-requests Directory Entry Modified Unchanged Argument Argumentx ci co update" 31427 echo "ok" 31428 echo "Rcs-diff ../../home/" 31429 echo "../../.bashrc" 31430 echo "/.bashrc/73.50///" 31431 echo "u=rw,g=rw,o=rw" 31432 echo "20" 31433 echo "a1 1" 31434 echo "echo 'gotcha!'" 31435 echo "ok" 31436 cat >/dev/null 31437 EOF 31438 sleep 1 31439 dotest_fail client-12 "$testcvs update" \ 31440 "$CPROG update: Server attempted to update a file via an invalid pathname: 31441 $CPROG \[update aborted\]: \`\.\./\.\./home/.bashrc'\." 31442 31443 # Try the same exploit using the Created response. 31444 cat >$TESTDIR/serveme <<EOF 31445 #!$TESTSHELL 31446 echo "Valid-requests Root Valid-responses valid-requests Directory Entry Modified Unchanged Argument Argumentx ci co update" 31447 echo "ok" 31448 echo "Created $HOME/" 31449 echo "$HOME/.bashrc" 31450 echo "/.bashrc/73.50///" 31451 echo "u=rw,g=rw,o=rw" 31452 echo "26" 31453 echo "#! $TESTSHELL" 31454 echo "echo 'gotcha!'" 31455 echo "ok" 31456 cat >/dev/null 31457 EOF 31458 sleep 1 31459 dotest_fail client-13 "$testcvs update" \ 31460 "$CPROG update: Server attempted to update a file via an invalid pathname: 31461 $CPROG \[update aborted\]: \`$HOME/.bashrc'\." 31462 31463 # Now try using the Update-existing response 31464 cat >$TESTDIR/serveme <<EOF 31465 #!$TESTSHELL 31466 echo "Valid-requests Root Valid-responses valid-requests Directory Entry Modified Unchanged Argument Argumentx ci co update" 31467 echo "ok" 31468 echo "Update-existing ../../home/" 31469 echo "../../home/.bashrc" 31470 echo "/.bashrc/73.50///" 31471 echo "u=rw,g=rw,o=rw" 31472 echo "26" 31473 echo "#! $TESTSHELL" 31474 echo "echo 'gotcha!'" 31475 echo "ok" 31476 cat >/dev/null 31477 EOF 31478 sleep 1 31479 dotest_fail client-14 "$testcvs update" \ 31480 "$CPROG update: Server attempted to update a file via an invalid pathname: 31481 $CPROG \[update aborted\]: \`\.\./\.\./home/.bashrc'\." 31482 31483 # Try the same exploit using the Merged response. 31484 cat >$TESTDIR/serveme <<EOF 31485 #!$TESTSHELL 31486 echo "Valid-requests Root Valid-responses valid-requests Directory Entry Modified Unchanged Argument Argumentx ci co update" 31487 echo "ok" 31488 echo "Merged $HOME/" 31489 echo "$HOME/.bashrc" 31490 echo "/.bashrc/73.50///" 31491 echo "u=rw,g=rw,o=rw" 31492 echo "26" 31493 echo "#! $TESTSHELL" 31494 echo "echo 'gotcha!'" 31495 echo "ok" 31496 cat >/dev/null 31497 EOF 31498 sleep 1 31499 dotest_fail client-15 "$testcvs update" \ 31500 "$CPROG update: Server attempted to update a file via an invalid pathname: 31501 $CPROG \[update aborted\]: \`$HOME/.bashrc'\." 31502 31503 # Now try using the Updated response 31504 cat >$TESTDIR/serveme <<EOF 31505 #!$TESTSHELL 31506 echo "Valid-requests Root Valid-responses valid-requests Directory Entry Modified Unchanged Argument Argumentx ci co update" 31507 echo "ok" 31508 echo "Updated ../../home/" 31509 echo "../../home/.bashrc" 31510 echo "/.bashrc/73.50///" 31511 echo "u=rw,g=rw,o=rw" 31512 echo "26" 31513 echo "#! $TESTSHELL" 31514 echo "echo 'gotcha!'" 31515 echo "ok" 31516 cat >/dev/null 31517 EOF 31518 sleep 1 31519 dotest_fail client-16 "$testcvs update" \ 31520 "$CPROG update: Server attempted to update a file via an invalid pathname: 31521 $CPROG \[update aborted\]: \`\.\./\.\./home/.bashrc'\." 31522 31523 # Try the same exploit using the Copy-file response. 31524 # As far as I know, Copy-file was never exploitable either. 31525 cat >$TESTDIR/serveme <<EOF 31526 #!$TESTSHELL 31527 echo "Valid-requests Root Valid-responses valid-requests Directory Entry Modified Unchanged Argument Argumentx ci co update" 31528 echo "ok" 31529 echo "Created ." 31530 echo "./innocuous" 31531 echo "/innocuous/73.50///" 31532 echo "u=rw,g=rw,o=rw" 31533 echo "26" 31534 echo "#! $TESTSHELL" 31535 echo "echo 'gotcha!'" 31536 echo "Copy-file ." 31537 echo "./innocuous" 31538 echo "$HOME/innocuous" 31539 echo "ok" 31540 cat >/dev/null 31541 EOF 31542 sleep 1 31543 dotest_fail client-18 "$testcvs update" \ 31544 "$CPROG \[update aborted\]: protocol error: Copy-file tried to specify directory" 31545 31546 # And verify that none of the exploits was successful. 31547 dotest client-19 "cat $HOME/.bashrc" \ 31548 "#!$TESTSHELL 31549 # This is where login scripts would usually be 31550 # stored\." 31551 31552 # Check that the client detects redirect loops. 31553 cat >$TESTDIR/serveme <<EOF 31554 #!$TESTSHELL 31555 echo "Valid-requests Root Valid-responses valid-requests Command-prep Referrer Repository Directory Relative-directory Max-dotdot Static-directory Sticky Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Hostname LocalDir Questionable Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set Gssapi-authenticate expand-modules ci co update diff log rlog acl racl list rlist global-list-quiet ls add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors edit init annotate rannotate noop version" 31556 echo "ok" 31557 echo "Redirect $CVSROOT" 31558 31559 # Eat up data from the client to avoid broken pipe errors. 31560 cat >/dev/null 31561 EOF 31562 echo newstuff >file1 31563 dotest_fail client-20 "$testcvs ci" \ 31564 "$CPROG commit: Examining \. 31565 $CPROG \[commit aborted\]: \`Redirect' loop detected\. Server misconfiguration$QUESTION" 31566 31567 dokeep 31568 cd ../.. 31569 rm -r 1 31570 rmdir $TESTDIR/bogus 31571 rm $TESTDIR/serveme $HOME/.bashrc 31572 CVS_SERVER=$save_CVS_SERVER; export CVS_SERVER 31573 ;; 31574 31575 31576 31577 dottedroot) 31578 # Check that a CVSROOT with a "." in the name will work. 31579 31580 if $proxy; then 31581 # don't even try 31582 continue 31583 fi 31584 31585 CVSROOT_save=${CVSROOT} 31586 CVSROOT_DIRNAME_save=${CVSROOT_DIRNAME} 31587 CVSROOT_DIRNAME=${TESTDIR}/cvs.root 31588 CVSROOT=`newroot ${CVSROOT_DIRNAME}` 31589 31590 dotest dottedroot-init-1 "${testcvs} init" "" 31591 mkdir dir1 31592 mkdir dir1/dir2 31593 echo version1 >dir1/dir2/file1 31594 cd dir1 31595 dotest dottedroot-1 "${testcvs} import -m '' module1 AUTHOR INITIAL" \ 31596 "${SPROG} import: Importing ${CVSROOT_DIRNAME}/module1/dir2 31597 N module1/dir2/file1 31598 31599 No conflicts created by this import" 31600 cd .. 31601 31602 # This is the test that used to cause an assertion failure 31603 # in recurse.c:do_recursion(). 31604 dotest dottedroot-2 "${testcvs} co -rINITIAL module1" \ 31605 "${SPROG} checkout: Updating module1 31606 ${SPROG} checkout: Updating module1/dir2 31607 U module1/dir2/file1" 31608 31609 dokeep 31610 31611 rm -rf ${CVSROOT_DIRNAME} 31612 rm -r dir1 module1 31613 CVSROOT_DIRNAME=${CVSROOT_DIRNAME_save} 31614 CVSROOT=${CVSROOT_save} 31615 ;; 31616 31617 31618 31619 fork) 31620 # Test that the server defaults to the correct executable in :fork: 31621 # mode. See the note in the TODO at the end of this file about this. 31622 # 31623 # This test and client should be left after all other references to 31624 # CVS_SERVER are removed from this script. 31625 # 31626 # The client series of tests already tests that CVS_SERVER is 31627 # working, but that test might be better here. 31628 if $remote; then 31629 if test -n "$remotehost"; then 31630 # Don't even try. If our caller specified a remotehost, our 31631 # access method has been determined anyhow. 31632 continue 31633 fi 31634 mkdir fork; cd fork 31635 save_CVS_SERVER=$CVS_SERVER 31636 unset CVS_SERVER 31637 # So looking through $PATH for cvs won't work... 31638 echo "echo junk" >cvs 31639 chmod a+x cvs 31640 save_PATH=$PATH; PATH=.:$PATH 31641 # The second error message below is for testing clients without 31642 # server support. 31643 if ${testcvs_server_support}; then 31644 dotest fork-1 "$testcvs -d:fork:$CVSROOT_DIRNAME version" \ 31645 'Client: \(.*\) 31646 Server: \1' 31647 else 31648 dotest_fail fork-1-noss \ 31649 "$testcvs -d:fork:$CVSROOT_DIRNAME version" \ 31650 "Client: .* 31651 Server: ${CPROG} version: You must set the CVS_SERVER environment variable when 31652 ${CPROG} version: using the :fork: access method\. 31653 ${CPROG} \[version aborted\]: This CVS was not compiled with server support\." 31654 fi 31655 31656 CVS_SERVER=${save_CVS_SERVER}; export CVS_SERVER 31657 unset save_CVS_SERVER 31658 PATH=$save_PATH; unset save_PATH 31659 31660 dokeep 31661 cd .. 31662 rm -r fork 31663 fi 31664 ;; 31665 31666 31667 31668 commit-add-missing) 31669 # Make sure that a commit fails when a `cvs add'ed file has 31670 # been removed from the working directory. 31671 31672 mkdir 1; cd 1 31673 module=c-a-m 31674 echo > unused-file 31675 dotest commit-add-missing-1 \ 31676 "$testcvs -Q import -m. $module X Y" '' 31677 31678 file=F 31679 # Check it out and tag it. 31680 dotest commit-add-missing-2 "$testcvs -Q co $module" '' 31681 cd $module 31682 dotest commit-add-missing-3 "$testcvs -Q tag -b B" '' 31683 echo v1 > $file 31684 dotest commit-add-missing-4 "$testcvs -Q add $file" '' 31685 rm -f $file 31686 dotest_fail commit-add-missing-5 "$testcvs -Q ci -m. $file" \ 31687 "${SPROG} commit: Up-to-date check failed for .$file' 31688 ${SPROG} \[commit aborted\]: correct above errors first!" 31689 31690 dotest 31691 cd ../.. 31692 rm -rf 1 31693 modify_repo rm -rf $CVSROOT_DIRNAME/$module 31694 ;; 31695 31696 31697 31698 commit-d) 31699 # Check that top-level commits work when CVS/Root 31700 # is overridden by cvs -d. 31701 31702 mkdir -p 1/subdir; cd 1 31703 touch file1 subdir/file2 31704 dotest commit-d-1 "$testcvs -Q import -m. c-d-c X Y" "" 31705 dotest commit-d-2 "$testcvs -Q co c-d-c" "" 31706 cd c-d-c 31707 echo change >>file1; echo another change >>subdir/file2 31708 # Changing working root, then override with -d 31709 echo nosuchhost:/cvs > CVS/Root 31710 dotest commit-d-3 "$testcvs -q -d '$CVSROOT' commit -m." \ 31711 "$CVSROOT_DIRNAME/c-d-c/file1,v <-- file1 31712 new revision: 1.2; previous revision: 1.1 31713 $CVSROOT_DIRNAME/c-d-c/subdir/file2,v <-- subdir/file2 31714 new revision: 1.2; previous revision: 1.1" 31715 31716 dokeep 31717 cd ../.. 31718 rm -rf 1 cvsroot/c-d-c 31719 ;; 31720 31721 31722 31723 template) 31724 # Check that the CVS/Template directory is being 31725 # properly created. 31726 modify_repo mkdir -p $CVSROOT_DIRNAME/first/subdir 31727 modify_repo mkdir $CVSROOT_DIRNAME/second 31728 mkdir template; cd template 31729 31730 # check that no CVS/Template is created for an empty rcsinfo 31731 # Note: For cvs clients with no Clear-template response, the 31732 # CVS/Template file will exist and be zero bytes in length. 31733 dotest template-empty-1 "${testcvs} -Q co first" '' 31734 dotest template-empty-2 \ 31735 "test ! -s first/CVS/Template" '' 31736 dotest template-empty-3 \ 31737 "test ! -s first/subdir/CVS/Template" '' 31738 rm -fr first 31739 31740 # create some template files 31741 echo 'CVS: the default template' > ${TESTDIR}/template/temp.def 31742 echo 'CVS: the first template' > ${TESTDIR}/template/temp.first 31743 echo 'CVS: the subdir template' > ${TESTDIR}/template/temp.subdir 31744 31745 dotest template-rcsinfo-1 "${testcvs} -Q co CVSROOT" '' 31746 cd CVSROOT 31747 echo DEFAULT ${TESTDIR}/template/temp.def >>rcsinfo 31748 dotest template-rcsinfo-2 "$testcvs -Q ci -m." 31749 # Make sure we get the update without a commit. 31750 dotest template-rcsinfo-3 "${testcvs} -Q ci -m." '' 31751 # Did the CVSROOT/CVS/Template file get the updated version? 31752 if $remote; then 31753 dotest template-rcsinfo-4r \ 31754 "cmp CVS/Template ${TESTDIR}/template/temp.def" '' 31755 else 31756 dotest template-rcsinfo-4 \ 31757 "test ! -f CVS/Template" '' 31758 fi 31759 echo "^first/subdir ${TESTDIR}/template/temp.subdir" >>rcsinfo 31760 echo "^first ${TESTDIR}/template/temp.first" >>rcsinfo 31761 dotest template-rcsinfo-4.1 "${testcvs} -Q ci -m. rcsinfo" 31762 # Did the CVSROOT/CVS/Template file get the updated version? 31763 if $remote; then 31764 dotest template-rcsinfo-5r \ 31765 "cmp CVS/Template ${TESTDIR}/template/temp.def" '' 31766 else 31767 dotest template-rcsinfo-5 \ 31768 "test ! -f CVS/Template" '' 31769 fi 31770 cd .. 31771 31772 # Now checkout the first and second modules and see 31773 # if the proper template has been provided for each 31774 dotest template-first "${testcvs} co first second" \ 31775 "${SPROG} checkout: Updating first 31776 ${SPROG} checkout: Updating first/subdir 31777 ${SPROG} checkout: Updating second" 31778 31779 if $remote; then 31780 # When in client/server CVS/Template must exist 31781 dotest template-first-r-1 "test -f first/CVS/Template" '' 31782 dotest template-first-r-2 "test -f first/subdir/CVS/Template" '' 31783 dotest template-first-r-3 "test -f second/CVS/Template" '' 31784 # The value of the CVS/Template should be equal to the 31785 # file called out in the rcsinfo file. 31786 dotest template-first-r-4 \ 31787 "cmp first/CVS/Template ${TESTDIR}/template/temp.first" '' 31788 dotest template-first-r-5 \ 31789 "cmp first/subdir/CVS/Template ${TESTDIR}/template/temp.subdir" '' 31790 dotest template-first-r-6 \ 31791 "cmp second/CVS/Template ${TESTDIR}/template/temp.def" '' 31792 else 31793 # When in local mode CVS/Template must NOT exist 31794 dotest_fail template-first-1 "test -f first/CVS/Template" '' 31795 dotest_fail template-first-2 "test -f first/subdir/CVS/Template" '' 31796 dotest_fail template-first-3 "test -f second/CVS/Template" '' 31797 fi 31798 31799 # Next, create a new subdirectory and see if it gets the 31800 # correct template or not 31801 cd second 31802 mkdir otherdir 31803 dotest template-add-1 "${testcvs} add otherdir" \ 31804 "Directory ${CVSROOT_DIRNAME}/second/otherdir added to the repository" 31805 if $remote; then 31806 dotest template-add-2r \ 31807 "cmp otherdir/CVS/Template ${TESTDIR}/template/temp.def" '' 31808 else 31809 dotest_fail template-add-2 "test -f otherdir/CVS/Template" '' 31810 fi 31811 cd .. 31812 31813 # Update the remote template. Then see if doing an 31814 # update of a checked out tree will properly update 31815 # the CVS/Template files. 31816 echo 'CVS: Line two' >> ${TESTDIR}/template/temp.def 31817 echo 'CVS: Line two' >> ${TESTDIR}/template/temp.first 31818 echo 'CVS: Line two' >> ${TESTDIR}/template/temp.subdir 31819 dotest template-second "${testcvs} update first second" \ 31820 "${SPROG} update: Updating first 31821 ${SPROG} update: Updating first/subdir 31822 ${SPROG} update: Updating second 31823 ${SPROG} update: Updating second/otherdir" 31824 31825 if $remote; then 31826 dotest template-second-r-1 \ 31827 "cmp first/CVS/Template ${TESTDIR}/template/temp.first" '' 31828 dotest template-second-r-2 \ 31829 "cmp first/subdir/CVS/Template ${TESTDIR}/template/temp.subdir" '' 31830 dotest template-second-r-3 \ 31831 "cmp second/CVS/Template ${TESTDIR}/template/temp.def" '' 31832 dotest template-second-r-4 \ 31833 "cmp second/otherdir/CVS/Template ${TESTDIR}/template/temp.def" '' 31834 else 31835 # When in local mode CVS/Template must NOT exist 31836 dotest_fail template-second-1 "test -f CVS/Template" '' 31837 dotest_fail template-second-2 "test -f subdir/CVS/Template" '' 31838 dotest_fail template-second-3 "test -f second/CVS/Template" '' 31839 dotest_fail template-second-4 \ 31840 "test -f second/otherdir/CVS/Template" '' 31841 fi 31842 # Update the remote template with a zero-length template 31843 : > ${TESTDIR}/template/temp.def 31844 dotest template-third-1 "${testcvs} update second" \ 31845 "${SPROG} update: Updating second 31846 ${SPROG} update: Updating second/otherdir" 31847 31848 if $remote; then 31849 dotest_fail template-third-r-2 "test -s second/CVS/Template" '' 31850 dotest_fail template-third-r-3 "test -s second/otherdir/CVS/Template" '' 31851 else 31852 dotest_fail template-third-2 "test -f second/CVS/Template" '' 31853 dotest_fail template-third-3 \ 31854 "test -f second/otherdir/CVS/Template" '' 31855 fi 31856 31857 # fun with remote protocols and tags 31858 if $remote; then 31859 cd second 31860 echo hello > file1 31861 dotest template-tag-r-1 "${testcvs} -Q add file1" '' 31862 dotest template-tag-r-2 "${testcvs} -Q commit -madd file1" 31863 dotest template-tag-r-3 "${testcvs} -q tag tag" 'T file1' 31864 rm ${CVSROOT_DIRNAME}/CVSROOT/val-tags 31865 cd .. 31866 rm -fr second 31867 dotest template-tag-r-4 "${testcvs} -Q co -rtag second" '' 31868 fi 31869 31870 cd CVSROOT 31871 dotest template-norcsinfo-1 "${testcvs} up" \ 31872 "${SPROG} update: Updating \." 31873 # Did the CVSROOT/CVS/Template file get the updated version? 31874 if $remote; then 31875 dotest template-norcsinfo-r-2 \ 31876 "cmp CVS/Template ${TESTDIR}/template/temp.def" '' 31877 else 31878 dotest_fail template-norcsinfo-2 "test -f CVS/Template" '' 31879 fi 31880 31881 : > rcsinfo 31882 dotest template-norcsinfo-3 "${testcvs} -Q ci -m. rcsinfo" 31883 # Did the CVSROOT/CVS/Template file get the updated version? 31884 # The file should be gone or of zero length. 31885 dotest template-norcsinfo-4 \ 31886 "test ! -s CVS/Template" '' 31887 cd .. 31888 31889 dotest template-norcsinfo-5 "${testcvs} update first" \ 31890 "${SPROG} update: Updating first 31891 ${SPROG} update: Updating first/subdir" 31892 31893 # Note: For cvs clients with no Clear-template response, the 31894 # CVS/Template file will exist and be zero bytes in length. 31895 dotest template-norcsinfo-6 \ 31896 "test ! -s first/CVS/Template" '' 31897 dotest template-norcsinfo-7 \ 31898 "test ! -s first/subdir/CVS/Template" '' 31899 31900 dokeep 31901 31902 # cleanup 31903 modify_repo rm -rf $CVSROOT_DIRNAME/first $CVSROOT_DIRNAME/second 31904 restore_adm 31905 cd .. 31906 rm -rf template 31907 ;; 31908 31909 31910 31911 writeproxy) 31912 # Various tests for a read-only CVS mirror set up as a write-proxy 31913 # for a central server. 31914 # 31915 # These tests are only meaningful in client/server mode. 31916 if $remote; then :; else 31917 remoteonly writeproxy 31918 continue 31919 fi 31920 31921 if $noredirect; then 31922 notnoredirect writeproxy 31923 continue 31924 fi 31925 31926 require_rsync 31927 if test $? -eq 77; then 31928 skip writeproxy "$skipreason" 31929 continue 31930 fi 31931 31932 PRIMARY_CVSROOT_DIRNAME_save=$PRIMARY_CVSROOT_DIRNAME 31933 PRIMARY_CVSROOT_save=$PRIMARY_CVSROOT 31934 PRIMARY_CVSROOT_DIRNAME=$TESTDIR/primary_cvsroot 31935 PRIMARY_CVSROOT=`newroot $PRIMARY_CVSROOT_DIRNAME` 31936 SECONDARY_CVSROOT_DIRNAME_save=$SECONDARY_CVSROOT_DIRNAME 31937 SECONDARY_CVSROOT_save=$SECONDARY_CVSROOT 31938 SECONDARY_CVSROOT_DIRNAME=$TESTDIR/writeproxy_cvsroot 31939 SECONDARY_CVSROOT=`newroot $SECONDARY_CVSROOT_DIRNAME` 31940 31941 # Initialize the primary repository 31942 dotest writeproxy-init-1 "$testcvs -d$PRIMARY_CVSROOT init" 31943 mkdir writeproxy; cd writeproxy 31944 mkdir primary; cd primary 31945 dotest writeproxy-init-2 "$testcvs -Qd$PRIMARY_CVSROOT co CVSROOT" 31946 cd CVSROOT 31947 cat >>loginfo <<EOF 31948 ALL (cat >/dev/null; echo %R) >$TESTDIR/referrer 31949 ALL $RSYNC -gopr --delete $PRIMARY_CVSROOT_DIRNAME/ $SECONDARY_CVSROOT_DIRNAME 31950 EOF 31951 cat >>config <<EOF 31952 PrimaryServer=$PRIMARY_CVSROOT 31953 EOF 31954 dotest writeproxy-init-3 \ 31955 "$testcvs -Q ci -mconfigure-writeproxy" 31956 31957 # Quickly verify that the server can resolve symlinks when 31958 # determining whether it is the primary. 31959 # This shouldn't actually change the repository. 31960 save_CVS_SERVER=$CVS_SERVER 31961 ln -s $PRIMARY_CVSROOT_DIRNAME $TESTDIR/primary_link 31962 dotest writeproxy-0 "$CVS_SERVER server" \ 31963 "Valid-requests Root Valid-responses valid-requests Command-prep Referrer Repository Directory Relative-directory Max-dotdot Static-directory Sticky Checkin-prog Update-prog Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Hostname LocalDir Questionable Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set ${DOTSTAR}expand-modules ci co update diff log rlog acl racl list rlist global-list-quiet ls add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors edit init annotate rannotate noop version 31964 ok 31965 ok 31966 ok" \ 31967 << EOF 31968 Root $TESTDIR/primary_link 31969 Valid-responses ok error Valid-requests Redirect Checked-in New-entry Checksum Copy-file Updated Created Update-existing Merged Patched Rcs-diff Mode Mod-time Removed Remove-entry Set-static-directory Clear-static-directory Set-sticky Clear-sticky Edit-file Template Clear-template Notified Module-expansion Wrapper-rcsOption M Mbinary E F MT 31970 valid-requests 31971 UseUnchanged 31972 Command-prep commit 31973 Global_option -q 31974 Global_option -Q 31975 Argument -m 31976 Argument configure-writeproxy 31977 Argument -- 31978 Directory . 31979 CVSROOT 31980 Entry /checkoutlist/1.1/// 31981 Modified checkoutlist 31982 u=rw,g=rw,o=r 31983 495 31984 # The "checkoutlist" file is used to support additional version controlled 31985 # administrative files in \$CVSROOT/CVSROOT, such as template files. 31986 # 31987 # The first entry on a line is a filename which will be checked out from 31988 # the corresponding RCS file in the \$CVSROOT/CVSROOT directory. 31989 # The remainder of the line is an error message to use if the file cannot 31990 # be checked out. 31991 # 31992 # File format: 31993 # 31994 # [<whitespace>]<filename>[<whitespace><error message>]<end-of-line> 31995 # 31996 # comment lines begin with '#' 31997 ci 31998 EOF 31999 rm $TESTDIR/primary_link 32000 32001 # And now the secondary. 32002 $RSYNC -gopr $PRIMARY_CVSROOT_DIRNAME/ $SECONDARY_CVSROOT_DIRNAME 32003 32004 # Checkout from secondary 32005 # 32006 # For now, move the primary root out of the way to satisfy 32007 # ourselves that the data is coming from the secondary. 32008 mv $PRIMARY_CVSROOT_DIRNAME $TESTDIR/save-root 32009 cd ../.. 32010 mkdir secondary; cd secondary 32011 dotest writeproxy-1 "$testcvs -qd$SECONDARY_CVSROOT co CVSROOT" \ 32012 "U CVSROOT/access 32013 U CVSROOT/aclconfig 32014 U CVSROOT/checkoutlist 32015 U CVSROOT/commitinfo 32016 U CVSROOT/config 32017 U CVSROOT/cvswrappers 32018 U CVSROOT/group 32019 U CVSROOT/loginfo 32020 U CVSROOT/modules 32021 U CVSROOT/notify 32022 U CVSROOT/postadmin 32023 U CVSROOT/postproxy 32024 U CVSROOT/posttag 32025 U CVSROOT/postwatch 32026 U CVSROOT/preproxy 32027 U CVSROOT/rcsinfo 32028 U CVSROOT/taginfo 32029 U CVSROOT/verifymsg" 32030 32031 # Confirm data present 32032 cd CVSROOT 32033 dotest writeproxy-2 "grep rsync loginfo" \ 32034 "ALL $RSYNC -gopr --delete $PRIMARY_CVSROOT_DIRNAME/ $SECONDARY_CVSROOT_DIRNAME" 32035 dotest writeproxy-3 "grep PrimaryServer config" \ 32036 "${DOTSTAR} 32037 PrimaryServer=$PRIMARY_CVSROOT" 32038 32039 # Checkin to secondary 32040 cd .. 32041 dotest writeproxy-4 "$testcvs -Qd$SECONDARY_CVSROOT co -ldtop ." 32042 cd top 32043 mkdir firstdir 32044 32045 # Have to move the primary root back before we can perform write 32046 # operations. 32047 mv $TESTDIR/save-root $PRIMARY_CVSROOT_DIRNAME 32048 32049 dotest writeproxy-5 "$testcvs -Q add firstdir" 32050 cd firstdir 32051 echo now you see me >file1 32052 dotest writeproxy-6 "$testcvs -Q add file1" 32053 dotest writeproxy-6a "grep file1 CVS/Entries >/dev/null" 32054 dotest writeproxy-7 "$testcvs -Q ci -mfirst-file file1" 32055 32056 # Verify that the server got the correct referrer. 32057 # 32058 # This happens even when using a :fork:ed server because CVS is 32059 # hardcoded to support only :ext: servers. 32060 # 32061 # This test meaningfully detects that a referrer was passed in fork 32062 # mode because the only time the referrer string can be altered from 32063 # its original state is when the server sends a Referrer response. 32064 # If the client were not parsing and resending the referrer, this 32065 # string would still match $SECONDARY_CVSROOT_DIRNAME. 32066 dotest writeproxy-7a "cat $TESTDIR/referrer" \ 32067 ":ext:$username@$hostname$SECONDARY_CVSROOT_DIRNAME" 32068 32069 # Make sure the sync took place 32070 dotest writeproxy-7b "$testcvs -Q up" 32071 32072 # Checkout from primary 32073 cd ../../../primary 32074 dotest writeproxy-8 "$testcvs -qd$PRIMARY_CVSROOT co firstdir" \ 32075 "U firstdir/file1" 32076 32077 # Confirm data present 32078 # - This test indirectly confirms that the commit did not take 32079 # place on the secondary. 32080 cd firstdir 32081 dotest writeproxy-9 "cat file1" "now you see me" 32082 32083 # Commit to primary 32084 echo now you see me again >file1 32085 dotest writeproxy-10 "$testcvs -Q ci -medit file1" 32086 32087 # Update from secondary 32088 cd ../../secondary/top/firstdir 32089 dotest writeproxy-11 "$testcvs -q up" \ 32090 "U file1" 32091 32092 # Confirm data present 32093 dotest writeproxy-12 "cat file1" "now you see me again" 32094 32095 # Test a failing rsync 32096 cd ../../CVSROOT 32097 sed \$d <loginfo >tmp 32098 mv tmp loginfo 32099 echo >>loginfo \ 32100 "ALL echo >&2 'Im rsync and I encountered an error!'; cat >/dev/null; exit 1" 32101 dotest writeproxy-init-13 "$testcvs -Q ci -mbreak-rsync" \ 32102 "Im rsync and I encountered an error!" 32103 echo "# a comment" >>loginfo 32104 dotest writeproxy-13 "$testcvs -Q ci -mtest-broken-rsync" \ 32105 "Im rsync and I encountered an error!" 32106 touch loginfo 32107 dotest_fail writeproxy-14 "$testcvs up" \ 32108 "$SPROG update: Updating \. 32109 $SPROG \[update aborted\]: could not find desired version 1\.4 in $PRIMARY_CVSROOT_DIRNAME/CVSROOT/loginfo,v" 32110 32111 dokeep 32112 cd ../../.. 32113 rm -r writeproxy $TESTDIR/referrer 32114 rm -rf $PRIMARY_CVSROOT_DIRNAME $SECONDARY_CVSROOT_DIRNAME 32115 PRIMARY_CVSROOT_DIRNAME=$PRIMARY_CVSROOT_DIRNAME_save 32116 PRIMARY_CVSROOT=$PRIMARY_CVSROOT_save 32117 SECONDARY_CVSROOT_DIRNAME=$SECONDARY_CVSROOT_DIRNAME_save 32118 SECONDARY_CVSROOT=$SECONDARY_CVSROOT_save 32119 ;; 32120 32121 32122 32123 writeproxy-noredirect) 32124 # Various tests for a read-only CVS mirror set up as a write-proxy 32125 # for a central server. 32126 # 32127 # These tests are only meaningful in client/server mode. 32128 # 32129 # These tests are a few simple tests for a writeproxy setup with a 32130 # client that can't handle the `Redirect' response. Mostly they 32131 # parallel the "writeproxy" tests but, in the style of the "server", 32132 # "server2", "pserver", and related tests, they bypass the CVS client 32133 # for write commands by piping data into a server on STDIN to mimic 32134 # a client that cannot handle the `Redirect' response. 32135 if $remote; then :; else 32136 remoteonly writeproxy-noredirect 32137 continue 32138 fi 32139 32140 require_rsync 32141 if test $? -eq 77; then 32142 skip writeproxy-noredirect "$skipreason" 32143 continue 32144 fi 32145 32146 PRIMARY_CVSROOT_DIRNAME_save=$PRIMARY_CVSROOT_DIRNAME 32147 PRIMARY_CVSROOT_save=$PRIMARY_CVSROOT 32148 PRIMARY_CVSROOT_DIRNAME=$TESTDIR/primary_cvsroot 32149 PRIMARY_CVSROOT=`newroot $PRIMARY_CVSROOT_DIRNAME` 32150 SECONDARY_CVSROOT_DIRNAME_save=$SECONDARY_CVSROOT_DIRNAME 32151 SECONDARY_CVSROOT_DIRNAME=$TESTDIR/writeproxy_cvsroot 32152 32153 # Initialize the primary repository 32154 dotest writeproxy-noredirect-init-1 \ 32155 "$testcvs -d'$PRIMARY_CVSROOT' init" 32156 mkdir writeproxy-noredirect; cd writeproxy-noredirect 32157 mkdir primary; cd primary 32158 dotest writeproxy-noredirect-init-2 \ 32159 "$testcvs -Qd'$PRIMARY_CVSROOT' co CVSROOT" 32160 cd CVSROOT 32161 cat >>loginfo <<EOF 32162 ALL $RSYNC -gopr --delete $PRIMARY_CVSROOT_DIRNAME/ $SECONDARY_CVSROOT_DIRNAME 32163 EOF 32164 cat >>config <<EOF 32165 PrimaryServer=$PRIMARY_CVSROOT 32166 EOF 32167 dotest writeproxy-noredirect-init-3 \ 32168 "$testcvs -Q ci -mconfigure-writeproxy" 32169 32170 # And now the secondary. 32171 $RSYNC -gopr $PRIMARY_CVSROOT_DIRNAME/ $SECONDARY_CVSROOT_DIRNAME 32172 32173 CVS_SERVER_save=$CVS_SERVER 32174 CVS_SERVER_secondary=$TESTDIR/writeproxy-secondary-wrapper 32175 CVS_SERVER=$CVS_SERVER_secondary 32176 32177 # Wrap the CVS server to allow --primary-root to be set by the 32178 # secondary. 32179 cat <<EOF >$TESTDIR/writeproxy-secondary-wrapper 32180 #! $TESTSHELL 32181 CVS_SERVER=$TESTDIR/writeproxy-primary-wrapper 32182 export CVS_SERVER 32183 32184 # No need to check the PID of the last client since we are testing with 32185 # Redirect disabled. 32186 proot_arg="--allow-root $SECONDARY_CVSROOT_DIRNAME" 32187 exec $servercvs \$proot_arg "\$@" 32188 EOF 32189 cat <<EOF >$TESTDIR/writeproxy-primary-wrapper 32190 #! $TESTSHELL 32191 #CVS_SERVER_LOG=/tmp/cvsprimarylog 32192 exec $servercvs "\$@" 32193 EOF 32194 32195 chmod a+x $TESTDIR/writeproxy-secondary-wrapper \ 32196 $TESTDIR/writeproxy-primary-wrapper 32197 32198 # Checkout from secondary 32199 # 32200 # It may look like we are checking out from the primary here, but 32201 # in fork mode, the deciding factor is the PrimaryServer translation 32202 # above. 32203 # 32204 # When the primary and secondary hostname were different, the server 32205 # the client is talking directly to is more obvious. 32206 # 32207 # For now, move the primary root out of the way to satisfy 32208 # ourselves that the data is coming from the secondary. 32209 mv $PRIMARY_CVSROOT_DIRNAME $TESTDIR/save-root 32210 cd ../.. 32211 mkdir secondary; cd secondary 32212 dotest writeproxy-noredirect-1 \ 32213 "$testcvs -qd'$PRIMARY_CVSROOT' co CVSROOT" \ 32214 "U CVSROOT/access 32215 U CVSROOT/aclconfig 32216 U CVSROOT/checkoutlist 32217 U CVSROOT/commitinfo 32218 U CVSROOT/config 32219 U CVSROOT/cvswrappers 32220 U CVSROOT/group 32221 U CVSROOT/loginfo 32222 U CVSROOT/modules 32223 U CVSROOT/notify 32224 U CVSROOT/postadmin 32225 U CVSROOT/postproxy 32226 U CVSROOT/posttag 32227 U CVSROOT/postwatch 32228 U CVSROOT/preproxy 32229 U CVSROOT/rcsinfo 32230 U CVSROOT/taginfo 32231 U CVSROOT/verifymsg" 32232 32233 # Confirm data present 32234 cd CVSROOT 32235 dotest writeproxy-noredirect-2 "grep rsync loginfo" \ 32236 "ALL $RSYNC -gopr --delete $PRIMARY_CVSROOT_DIRNAME/ $SECONDARY_CVSROOT_DIRNAME" 32237 dotest writeproxy-noredirect-3 "grep PrimaryServer config" \ 32238 "${DOTSTAR} 32239 PrimaryServer=$PRIMARY_CVSROOT" 32240 32241 # Checkin to secondary 32242 cd .. 32243 dotest writeproxy-noredirect-4 \ 32244 "$testcvs -Qd'$PRIMARY_CVSROOT' co -ldtop ." 32245 cd top 32246 mkdir firstdir 32247 32248 # Have to move the primary root back before we can perform write 32249 # operations. 32250 mv $TESTDIR/save-root $PRIMARY_CVSROOT_DIRNAME 32251 32252 dotest writeproxy-noredirect-5 "$CVS_SERVER server" \ 32253 "Valid-requests Root Valid-responses valid-requests Command-prep Referrer Repository Directory Relative-directory Max-dotdot Static-directory Sticky Checkin-prog Update-prog Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Hostname LocalDir Questionable Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set ${DOTSTAR}expand-modules ci co update diff log rlog acl racl list rlist global-list-quiet ls add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors edit init annotate rannotate noop version 32254 ok 32255 ok 32256 ok 32257 Clear-template firstdir/ 32258 firstdir/ 32259 ok" \ 32260 << EOF 32261 Root $PRIMARY_CVSROOT_DIRNAME 32262 Valid-responses ok error Valid-requests Checked-in New-entry Checksum Copy-file Updated Created Update-existing Merged Patched Rcs-diff Mode Mod-time Removed Remove-entry Set-static-directory Clear-static-directory Set-sticky Clear-sticky Template Clear-template Notified Module-expansion Wrapper-rcsOption M Mbinary E F MT 32263 valid-requests 32264 UseUnchanged 32265 Command-prep add 32266 Global_option -q 32267 Global_option -Q 32268 wrapper-sendme-rcsOptions 32269 Argument -- 32270 Directory firstdir 32271 firstdir 32272 Directory . 32273 32274 Argument firstdir 32275 add 32276 EOF 32277 32278 # Gotta update the workspace ourselves since we bypassed the client. 32279 cp -R CVS firstdir/CVS 32280 echo "firstdir" >firstdir/CVS/Repository 32281 32282 cd firstdir 32283 echo now you see me >file1 32284 dotest writeproxy-noredirect-6 "$CVS_SERVER server" \ 32285 "Valid-requests Root Valid-responses valid-requests Command-prep Referrer Repository Directory Relative-directory Max-dotdot Static-directory Sticky Checkin-prog Update-prog Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Hostname LocalDir Questionable Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set ${DOTSTAR}expand-modules ci co update diff log rlog acl racl list rlist global-list-quiet ls add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors edit init annotate rannotate noop version 32286 ok 32287 ok 32288 ok 32289 Checked-in \./ 32290 firstdir/file1 32291 /file1/0/// 32292 ok" \ 32293 << EOF 32294 Root $PRIMARY_CVSROOT_DIRNAME 32295 Valid-responses ok error Valid-requests Checked-in New-entry Checksum Copy-file Updated Created Update-existing Merged Patched Rcs-diff Mode Mod-time Removed Remove-entry Set-static-directory Clear-static-directory Set-sticky Clear-sticky Template Clear-template Notified Module-expansion Wrapper-rcsOption M Mbinary E F MT 32296 valid-requests 32297 UseUnchanged 32298 Command-prep add 32299 Global_option -q 32300 Global_option -Q 32301 wrapper-sendme-rcsOptions 32302 Argument -- 32303 Directory . 32304 firstdir 32305 Is-modified file1 32306 Argument file1 32307 add 32308 EOF 32309 32310 # Have to add it to the workspace ourselves again since we are 32311 # bypassing the client. 32312 echo /file1/0/dummy+timestamp// >>CVS/Entries 32313 32314 dotest writeproxy-noredirect-7 "$CVS_SERVER server" \ 32315 "Valid-requests Root Valid-responses valid-requests Command-prep Referrer Repository Directory Relative-directory Max-dotdot Static-directory Sticky Checkin-prog Update-prog Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Hostname LocalDir Questionable Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set ${DOTSTAR}expand-modules ci co update diff log rlog acl racl list rlist global-list-quiet ls add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors edit init annotate rannotate noop version 32316 ok 32317 ok 32318 Mode u=rw,g=rw,o=r 32319 Checked-in \./ 32320 firstdir/file1 32321 /file1/1\.1/// 32322 ok" \ 32323 << EOF 32324 Root $PRIMARY_CVSROOT_DIRNAME 32325 Valid-responses ok error Valid-requests Checked-in New-entry Checksum Copy-file Updated Created Update-existing Merged Patched Rcs-diff Mode Mod-time Removed Remove-entry Set-static-directory Clear-static-directory Set-sticky Clear-sticky Template Clear-template Notified Module-expansion Wrapper-rcsOption M Mbinary E F MT 32326 valid-requests 32327 UseUnchanged 32328 Command-prep commit 32329 Global_option -q 32330 Global_option -Q 32331 Argument -m 32332 Argument first-file 32333 Argument -- 32334 Directory . 32335 firstdir 32336 Entry /file1/0/+modified// 32337 Modified file1 32338 u=rw,g=rw,o=r 32339 15 32340 now you see me 32341 Argument file1 32342 ci 32343 EOF 32344 32345 # Have to add it to the workspace ourselves again since we are 32346 # bypassing the client. 32347 echo D >CVS/Entries 32348 echo /file1/1.1/dummy+timestamp// >>CVS/Entries 32349 32350 # Make sure the sync took place 32351 dotest writeproxy-noredirect-7a "$testcvs -Q up" 32352 32353 CVS_SERVER=$servercvs 32354 # Checkout from primary 32355 cd ../../../primary 32356 dotest writeproxy-noredirect-8 \ 32357 "$testcvs -qd'$PRIMARY_CVSROOT' co firstdir" \ 32358 "U firstdir/file1" 32359 32360 # Confirm data present 32361 # - This test indirectly confirms that the commit did not take 32362 # place on the secondary. 32363 cd firstdir 32364 dotest writeproxy-noredirect-9 "cat file1" "now you see me" 32365 32366 # Commit to primary 32367 echo now you see me again >file1 32368 dotest writeproxy-noredirect-10 "$testcvs -Q ci -medit file1" 32369 32370 CVS_SERVER=$CVS_SERVER_secondary 32371 # Update from secondary 32372 cd ../../secondary/top/firstdir 32373 dotest writeproxy-noredirect-11 "$testcvs -q up" "U file1" 32374 32375 # Confirm data present 32376 dotest writeproxy-noredirect-12 "cat file1" "now you see me again" 32377 32378 dokeep 32379 cd ../../../.. 32380 rm -r writeproxy-noredirect 32381 rm -rf $PRIMARY_CVSROOT_DIRNAME $SECONDARY_CVSROOT_DIRNAME 32382 rm $TESTDIR/writeproxy-secondary-wrapper \ 32383 $TESTDIR/writeproxy-primary-wrapper 32384 CVS_SERVER=$CVS_SERVER_save 32385 PRIMARY_CVSROOT_DIRNAME=$PRIMARY_CVSROOT_DIRNAME_save 32386 PRIMARY_CVSROOT=$PRIMARY_CVSROOT_save 32387 SECONDARY_CVSROOT_DIRNAME=$SECONDARY_CVSROOT_DIRNAME_save 32388 ;; 32389 32390 32391 32392 writeproxy-ssh) 32393 # Various tests for a read-only CVS mirror set up as a write-proxy 32394 # for a central server accessed via the :ext: method. 32395 # 32396 # Mostly these tests are intended to set up for the final test which 32397 # verifies that the server registers the referrer. 32398 if $remote; then :; else 32399 remoteonly writeproxy-ssh 32400 continue 32401 fi 32402 32403 if $noredirect; then 32404 notnoredirect writeproxy-ssh 32405 continue 32406 fi 32407 32408 require_rsh "$CVS_RSH" 32409 if test $? -eq 77; then 32410 skip writeproxy-ssh "$skipreason" 32411 continue 32412 fi 32413 32414 require_rsync 32415 if test $? -eq 77; then 32416 skip writeproxy-ssh "$skipreason" 32417 continue 32418 fi 32419 32420 # Save old roots. 32421 PRIMARY_CVSROOT_DIRNAME_save=$PRIMARY_CVSROOT_DIRNAME 32422 PRIMARY_CVSROOT_save=$PRIMARY_CVSROOT 32423 SECONDARY_CVSROOT_DIRNAME_save=$SECONDARY_CVSROOT_DIRNAME 32424 SECONDARY_CVSROOT_save=$SECONDARY_CVSROOT 32425 32426 # Set new roots. 32427 PRIMARY_CVSROOT_DIRNAME=$TESTDIR/primary_cvsroot 32428 PRIMARY_CVSROOT=:ext:$host$PRIMARY_CVSROOT_DIRNAME 32429 SECONDARY_CVSROOT_DIRNAME=$TESTDIR/writeproxy_cvsroot 32430 SECONDARY_CVSROOT=":ext;Redirect=yes:$host$SECONDARY_CVSROOT_DIRNAME" 32431 32432 # Initialize the primary repository 32433 dotest writeproxy-ssh-init-1 "$testcvs -d$PRIMARY_CVSROOT init" 32434 mkdir writeproxy-ssh; cd writeproxy-ssh 32435 mkdir primary; cd primary 32436 dotest writeproxy-ssh-init-2 "$testcvs -Qd$PRIMARY_CVSROOT co CVSROOT" 32437 cd CVSROOT 32438 cat >>loginfo <<EOF 32439 ALL $RSYNC -gopr --delete $PRIMARY_CVSROOT_DIRNAME/ $SECONDARY_CVSROOT_DIRNAME 32440 EOF 32441 cat >>loginfo <<EOF 32442 ALL echo Referrer=%R; cat >/dev/null 32443 EOF 32444 cat >>config <<EOF 32445 PrimaryServer=$PRIMARY_CVSROOT 32446 EOF 32447 dotest writeproxy-ssh-init-3 \ 32448 "$testcvs -Q ci -mconfigure-writeproxy-ssh" \ 32449 "Referrer=NONE" 32450 32451 # And now the secondary. 32452 $RSYNC -gopr $PRIMARY_CVSROOT_DIRNAME/ $SECONDARY_CVSROOT_DIRNAME 32453 32454 # Checkout from secondary 32455 # 32456 # For now, move the primary root out of the way to satisfy 32457 # ourselves that the data is coming from the secondary. 32458 mv $PRIMARY_CVSROOT_DIRNAME $TESTDIR/save-root 32459 32460 # Checkin to secondary 32461 cd ../.. 32462 save_CVSROOT=$CVSROOT 32463 CVSROOT=$SECONDARY_CVSROOT 32464 export CVSROOT 32465 dotest writeproxy-ssh-1 "$testcvs -Q co -ldtop ." 32466 CVSROOT=$save_CVSROOT 32467 export CVSROOT 32468 cd top 32469 mkdir firstdir 32470 32471 # Have to move the primary root back before we can perform write 32472 # operations. 32473 mv $TESTDIR/save-root $PRIMARY_CVSROOT_DIRNAME 32474 32475 dotest writeproxy-ssh-2 "$testcvs -Q add firstdir" \ 32476 "Referrer=:ext:$username@$hostname$SECONDARY_CVSROOT_DIRNAME" 32477 32478 cd firstdir 32479 echo now you see me >file1 32480 dotest writeproxy-ssh-3 "$testcvs -Q add file1" 32481 dotest writeproxy-ssh-4 "$testcvs -Q ci -mfirst-file file1" \ 32482 "Referrer=:ext:$username@$hostname$SECONDARY_CVSROOT_DIRNAME" 32483 32484 dokeep 32485 cd ../../.. 32486 rm -r writeproxy-ssh 32487 rm -rf $PRIMARY_CVSROOT_DIRNAME $SECONDARY_CVSROOT_DIRNAME 32488 PRIMARY_CVSROOT_DIRNAME=$PRIMARY_CVSROOT_DIRNAME_save 32489 PRIMARY_CVSROOT=$PRIMARY_CVSROOT_save 32490 SECONDARY_CVSROOT_DIRNAME=$SECONDARY_CVSROOT_DIRNAME_save 32491 SECONDARY_CVSROOT=$SECONDARY_CVSROOT_save 32492 ;; 32493 32494 32495 32496 writeproxy-ssh-noredirect) 32497 # Various tests for a read-only CVS mirror set up as a write-proxy 32498 # for a central server accessed via the :ext: method. 32499 # 32500 # Mostly these tests are intended to set up for the final test which 32501 # verifies that the server registers the referrer. 32502 if $remote; then :; else 32503 remoteonly writeproxy-ssh-noredirect 32504 continue 32505 fi 32506 32507 require_rsh "$CVS_RSH" 32508 if test $? -eq 77; then 32509 skip writeproxy-ssh-noredirect "$skipreason" 32510 continue 32511 fi 32512 32513 require_rsync 32514 if test $? -eq 77; then 32515 skip writeproxy-ssh-noredirect "$skipreason" 32516 continue 32517 fi 32518 32519 # Save old roots. 32520 PRIMARY_CVSROOT_DIRNAME_save=$PRIMARY_CVSROOT_DIRNAME 32521 PRIMARY_CVSROOT_save=$PRIMARY_CVSROOT 32522 SECONDARY_CVSROOT_DIRNAME_save=$SECONDARY_CVSROOT_DIRNAME 32523 SECONDARY_CVSROOT_save=$SECONDARY_CVSROOT 32524 32525 # Set new roots. 32526 PRIMARY_CVSROOT_DIRNAME=$TESTDIR/primary_cvsroot 32527 PRIMARY_CVSROOT=:ext:$host$PRIMARY_CVSROOT_DIRNAME 32528 SECONDARY_CVSROOT_DIRNAME=$TESTDIR/writeproxy_cvsroot 32529 SECONDARY_CVSROOT=":ext;Redirect=no:$host$PRIMARY_CVSROOT_DIRNAME" 32530 32531 # Initialize the primary repository 32532 dotest writeproxy-ssh-noredirect-init-1 \ 32533 "$testcvs -d$PRIMARY_CVSROOT init" 32534 mkdir writeproxy-ssh-noredirect; cd writeproxy-ssh-noredirect 32535 mkdir primary; cd primary 32536 dotest writeproxy-ssh-noredirect-init-2 \ 32537 "$testcvs -Qd$PRIMARY_CVSROOT co CVSROOT" 32538 cd CVSROOT 32539 cat >>loginfo <<EOF 32540 ALL $RSYNC -gopr --delete $PRIMARY_CVSROOT_DIRNAME/ $SECONDARY_CVSROOT_DIRNAME 32541 EOF 32542 cat >>loginfo <<EOF 32543 ALL echo Referrer=%R; cat >/dev/null 32544 EOF 32545 cat >>config <<EOF 32546 PrimaryServer=$PRIMARY_CVSROOT 32547 EOF 32548 dotest writeproxy-ssh-noredirect-init-3 \ 32549 "$testcvs -Q ci -mconfigure-writeproxy-ssh-noredirect" \ 32550 "Referrer=NONE" 32551 32552 # And now the secondary. 32553 $RSYNC -gopr $PRIMARY_CVSROOT_DIRNAME/ $SECONDARY_CVSROOT_DIRNAME 32554 32555 # Wrap the CVS server to allow --primary-root to be set by the 32556 # secondary. 32557 cat <<EOF >$TESTDIR/writeproxy-secondary-wrapper 32558 #! $TESTSHELL 32559 CVS_SERVER=$TESTDIR/writeproxy-primary-wrapper 32560 export CVS_SERVER 32561 32562 # No need to check the PID of the last client since we are testing with 32563 # Redirect disabled. 32564 proot_arg="--allow-root=$SECONDARY_CVSROOT_DIRNAME" 32565 exec $CVS_SERVER \$proot_arg "\$@" 32566 EOF 32567 cat <<EOF >$TESTDIR/writeproxy-primary-wrapper 32568 #! $TESTSHELL 32569 if test -n "\$CVS_SERVER_LOG"; then 32570 CVS_SERVER_LOG=$TMPDIR/cvsprimarylog; export CVS_SERVER_LOG 32571 fi 32572 exec $CVS_SERVER "\$@" 32573 EOF 32574 32575 CVS_SERVER_save=$CVS_SERVER 32576 CVS_SERVER_secondary=$TESTDIR/writeproxy-secondary-wrapper 32577 CVS_SERVER=$CVS_SERVER_secondary 32578 32579 chmod a+x $TESTDIR/writeproxy-secondary-wrapper \ 32580 $TESTDIR/writeproxy-primary-wrapper 32581 32582 # Checkout from secondary 32583 # 32584 # For now, move the primary root out of the way to satisfy 32585 # ourselves that the data is coming from the secondary. 32586 mv $PRIMARY_CVSROOT_DIRNAME $TESTDIR/save-root 32587 32588 # Checkin to secondary 32589 cd ../.. 32590 dotest writeproxy-ssh-noredirect-1 \ 32591 "$testcvs -qd '$SECONDARY_CVSROOT' co -ldtop ." 32592 32593 cd top 32594 mkdir firstdir 32595 32596 # Have to move the primary root back before we can perform write 32597 # operations. 32598 mv $TESTDIR/save-root $PRIMARY_CVSROOT_DIRNAME 32599 32600 dotest writeproxy-ssh-noredirect-2 "$testcvs -Q add firstdir" \ 32601 "Referrer=NONE" 32602 32603 cd firstdir 32604 echo now you see me >file1 32605 dotest writeproxy-ssh-noredirect-3 "$testcvs -Q add file1" 32606 dotest writeproxy-ssh-noredirect-4 \ 32607 "$testcvs -Q ci -mfirst-file file1" \ 32608 "Referrer=NONE" 32609 32610 dokeep 32611 cd ../../.. 32612 rm -r writeproxy-ssh-noredirect 32613 rm -rf $PRIMARY_CVSROOT_DIRNAME $SECONDARY_CVSROOT_DIRNAME 32614 PRIMARY_CVSROOT_DIRNAME=$PRIMARY_CVSROOT_DIRNAME_save 32615 PRIMARY_CVSROOT=$PRIMARY_CVSROOT_save 32616 SECONDARY_CVSROOT_DIRNAME=$SECONDARY_CVSROOT_DIRNAME_save 32617 SECONDARY_CVSROOT=$SECONDARY_CVSROOT_save 32618 rm $TESTDIR/writeproxy-secondary-wrapper \ 32619 $TESTDIR/writeproxy-primary-wrapper 32620 CVS_SERVER=$CVS_SERVER_save 32621 ;; 32622 32623 32624 32625 trace) 32626 # Check that there are no core dumps lurking in the trace 32627 # options. 32628 32629 # Perform some cleanup for normalized testing... 32630 rm ${CVSROOT_DIRNAME}/CVSROOT/history 32631 rm -f ${CVSROOT_DIRNAME}/CVSROOT/cvsignore 32632 rm -f ${CVSROOT_DIRNAME}/CVSROOT/cvsignore,v 32633 32634 # checkout the trace option 32635 32636 mkdir trace && cd trace 32637 mkdir imp && cd imp 32638 touch file1 32639 32640 dotest_sort trace-1 "${testcvs} -t -t -t init" \ 32641 " *-> Lock_Cleanup() 32642 *-> RCS_checkout (access,v, , , , \.#[0-9][0-9]*) 32643 *-> RCS_checkout (aclconfig,v, , , , \.#[0-9][0-9]*) 32644 *-> RCS_checkout (checkoutlist,v, , , , \.#[0-9][0-9]*) 32645 *-> RCS_checkout (commitinfo,v, , , , \.#[0-9][0-9]*) 32646 *-> RCS_checkout (config,v, , , , \.#[0-9][0-9]*) 32647 *-> RCS_checkout (cvswrappers,v, , , , \.#[0-9][0-9]*) 32648 *-> RCS_checkout (group,v, , , , \.#[0-9][0-9]*) 32649 *-> RCS_checkout (loginfo,v, , , , \.#[0-9][0-9]*) 32650 *-> RCS_checkout (modules,v, , , , \.#[0-9][0-9]*) 32651 *-> RCS_checkout (notify,v, , , , \.#[0-9][0-9]*) 32652 *-> RCS_checkout (postadmin,v, , , , \.#[0-9][0-9]*) 32653 *-> RCS_checkout (postproxy,v, , , , \.#[0-9][0-9]*) 32654 *-> RCS_checkout (posttag,v, , , , \.#[0-9][0-9]*) 32655 *-> RCS_checkout (postwatch,v, , , , \.#[0-9][0-9]*) 32656 *-> RCS_checkout (preproxy,v, , , , \.#[0-9][0-9]*) 32657 *-> RCS_checkout (rcsinfo,v, , , , \.#[0-9][0-9]*) 32658 *-> RCS_checkout (taginfo,v, , , , \.#[0-9][0-9]*) 32659 *-> RCS_checkout (verifymsg,v, , , , \.#[0-9][0-9]*) 32660 *-> Simple_Lock_Cleanup() 32661 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 32662 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 32663 *-> remove_locks() 32664 *-> unlink_file(\.#[0-9][0-9]*) 32665 *-> unlink_file(\.#[0-9][0-9]*) 32666 *-> unlink_file(\.#[0-9][0-9]*) 32667 *-> unlink_file(\.#[0-9][0-9]*) 32668 *-> unlink_file(\.#[0-9][0-9]*) 32669 *-> unlink_file(\.#[0-9][0-9]*) 32670 *-> unlink_file(\.#[0-9][0-9]*) 32671 *-> unlink_file(\.#[0-9][0-9]*) 32672 *-> unlink_file(\.#[0-9][0-9]*) 32673 *-> unlink_file(\.#[0-9][0-9]*) 32674 *-> unlink_file(\.#[0-9][0-9]*) 32675 *-> unlink_file(\.#[0-9][0-9]*) 32676 *-> unlink_file(\.#[0-9][0-9]*) 32677 *-> unlink_file(\.#access) 32678 *-> unlink_file(\.#aclconfig) 32679 *-> unlink_file(\.#checkoutlist) 32680 *-> unlink_file(\.#commitinfo) 32681 *-> unlink_file(\.#config) 32682 *-> unlink_file(\.#cvswrappers) 32683 *-> unlink_file(\.#group) 32684 *-> unlink_file(\.#loginfo) 32685 *-> unlink_file(\.#modules) 32686 *-> unlink_file(\.#notify) 32687 *-> unlink_file(\.#postadmin) 32688 *-> unlink_file(\.#postproxy) 32689 *-> unlink_file(\.#posttag) 32690 *-> unlink_file(\.#postwatch) 32691 *-> unlink_file(\.#preproxy) 32692 *-> unlink_file(\.#rcsinfo) 32693 *-> unlink_file(\.#taginfo) 32694 *-> unlink_file(\.#verifymsg) 32695 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32696 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} )" \ 32697 " 32698 *-> Forking server: ${CVS_SERVER} server 32699 *-> main loop with CVSROOT=${CVSROOT} 32700 *-> parse_cvsroot ( ${CVSROOT} ) 32701 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32702 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32703 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32704 S -> CVS_SERVER_SLEEP not set\. 32705 S -> Lock_Cleanup() 32706 S -> Lock_Cleanup() 32707 S -> RCS_checkout (access,v, , , , \.#[0-9][0-9]*) 32708 S -> RCS_checkout (aclconfig,v, , , , \.#[0-9][0-9]*) 32709 S -> RCS_checkout (checkoutlist,v, , , , \.#[0-9][0-9]*) 32710 S -> RCS_checkout (commitinfo,v, , , , \.#[0-9][0-9]*) 32711 S -> RCS_checkout (config,v, , , , \.#[0-9][0-9]*) 32712 S -> RCS_checkout (cvswrappers,v, , , , \.#[0-9][0-9]*) 32713 S -> RCS_checkout (group,v, , , , \.#[0-9][0-9]*) 32714 S -> RCS_checkout (loginfo,v, , , , \.#[0-9][0-9]*) 32715 S -> RCS_checkout (modules,v, , , , \.#[0-9][0-9]*) 32716 S -> RCS_checkout (notify,v, , , , \.#[0-9][0-9]*) 32717 S -> RCS_checkout (postadmin,v, , , , \.#[0-9][0-9]*) 32718 S -> RCS_checkout (postproxy,v, , , , \.#[0-9][0-9]*) 32719 S -> RCS_checkout (posttag,v, , , , \.#[0-9][0-9]*) 32720 S -> RCS_checkout (postwatch,v, , , , \.#[0-9][0-9]*) 32721 S -> RCS_checkout (preproxy,v, , , , \.#[0-9][0-9]*) 32722 S -> RCS_checkout (rcsinfo,v, , , , \.#[0-9][0-9]*) 32723 S -> RCS_checkout (taginfo,v, , , , \.#[0-9][0-9]*) 32724 S -> RCS_checkout (verifymsg,v, , , , \.#[0-9][0-9]*) 32725 S -> Simple_Lock_Cleanup() 32726 S -> Simple_Lock_Cleanup() 32727 S -> do_cvs_command (init) 32728 S -> remove_locks() 32729 S -> remove_locks() 32730 S -> server_cleanup() 32731 S -> server_cleanup() 32732 S -> server_notify() 32733 S -> unlink_file(\.#[0-9][0-9]*) 32734 S -> unlink_file(\.#[0-9][0-9]*) 32735 S -> unlink_file(\.#[0-9][0-9]*) 32736 S -> unlink_file(\.#[0-9][0-9]*) 32737 S -> unlink_file(\.#[0-9][0-9]*) 32738 S -> unlink_file(\.#[0-9][0-9]*) 32739 S -> unlink_file(\.#[0-9][0-9]*) 32740 S -> unlink_file(\.#[0-9][0-9]*) 32741 S -> unlink_file(\.#[0-9][0-9]*) 32742 S -> unlink_file(\.#[0-9][0-9]*) 32743 S -> unlink_file(\.#[0-9][0-9]*) 32744 S -> unlink_file(\.#[0-9][0-9]*) 32745 S -> unlink_file(\.#[0-9][0-9]*) 32746 S -> unlink_file(\.#access) 32747 S -> unlink_file(\.#aclconfig) 32748 S -> unlink_file(\.#checkoutlist) 32749 S -> unlink_file(\.#commitinfo) 32750 S -> unlink_file(\.#config) 32751 S -> unlink_file(\.#cvswrappers) 32752 S -> unlink_file(\.#group) 32753 S -> unlink_file(\.#loginfo) 32754 S -> unlink_file(\.#modules) 32755 S -> unlink_file(\.#notify) 32756 S -> unlink_file(\.#postadmin) 32757 S -> unlink_file(\.#postproxy) 32758 S -> unlink_file(\.#posttag) 32759 S -> unlink_file(\.#postwatch) 32760 S -> unlink_file(\.#preproxy) 32761 S -> unlink_file(\.#rcsinfo) 32762 S -> unlink_file(\.#taginfo) 32763 S -> unlink_file(\.#verifymsg)" \ 32764 32765 dotest_sort trace-2 \ 32766 "${testcvs} -t -t -t import -mimport trace MYVENDOR version-1" \ 32767 " 32768 32769 *-> Lock_Cleanup() 32770 *-> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/loginfo, trace, ALL) 32771 *-> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/verifymsg, trace, not ALL) 32772 *-> Simple_Lock_Cleanup() 32773 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 32774 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 32775 *-> remove_locks() 32776 *-> safe_location( where=(null) ) 32777 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32778 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32779 N trace/file1 32780 No conflicts created by this import" \ 32781 " 32782 32783 32784 *-> Forking server: ${CVS_SERVER} server 32785 *-> Sending file \`file1' to server 32786 *-> main loop with CVSROOT=${CVSROOT} 32787 *-> parse_cvsroot ( ${CVSROOT} ) 32788 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32789 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32790 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32791 N trace/file1 32792 No conflicts created by this import 32793 S -> CVS_SERVER_SLEEP not set\. 32794 S -> Lock_Cleanup() 32795 S -> Lock_Cleanup() 32796 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/loginfo, trace, ALL) 32797 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/verifymsg, trace, not ALL) 32798 S -> Simple_Lock_Cleanup() 32799 S -> Simple_Lock_Cleanup() 32800 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 32801 S -> do_cvs_command (import) 32802 S -> remove_locks() 32803 S -> remove_locks() 32804 S -> safe_location( where=(null) ) 32805 S -> serve_directory (\.) 32806 S -> server_cleanup() 32807 S -> server_cleanup() 32808 S -> server_notify()" 32809 32810 cd .. 32811 rm -fr imp 32812 32813 dotest_sort trace-3 "${testcvs} -t -t -t co trace" \ 32814 " *callerdat=${PFMT}, argc=0, argv=${PFMT}, 32815 *direntproc=${PFMT}, dirleavproc=${PFMT}, 32816 *dosrcs=1, repository_in=${CVSROOT_DIRNAME}/trace ) 32817 *local=0, which=3, aflag=0, 32818 *locktype=1, update_preload=trace 32819 *-> Create_Admin 32820 *-> Create_Admin (\., trace, ${CVSROOT_DIRNAME}/trace, , , 0, 0, 1) 32821 *-> Leaving do_recursion ( frame=${PFMT} ) 32822 *-> Leaving do_recursion ( frame=${PFMT} ) 32823 *-> Lock_Cleanup() 32824 *-> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.1\.1\.1, , , file1) 32825 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace) 32826 *-> Register(file1, 1\.1\.1\.1, ${DATE}, , ) 32827 *-> Simple_Lock_Cleanup() 32828 *-> Simple_Lock_Cleanup() 32829 *-> Write_Template (trace, ${CVSROOT_DIRNAME}/trace) 32830 *-> chmod(file1,[0-7][0-7]*) 32831 *-> do_module (trace, Updating, NULL, NULL) 32832 *-> do_recursion ( frame=${PFMT} ) 32833 *-> do_recursion ( frame=${PFMT} ) 32834 *-> fopen(${CVSROOT_DIRNAME}/CVSROOT/history,a) 32835 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 32836 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 32837 *-> lock_simple_remove() 32838 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 32839 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 32840 *-> remove_locks() 32841 *-> rename(CVS/Entries\.Backup,CVS/Entries) 32842 *-> safe_location( where=(null) ) 32843 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 32844 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 32845 *-> unlink_file(\./CVS/Entries\.Static) 32846 *-> unlink_file(\./CVS/Tag) 32847 *-> unlink_file(CVS/Entries\.Log) 32848 *-> unlink_file_dir(CVS/,,file1) 32849 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32850 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32851 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32852 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32853 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32854 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32855 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32856 U trace/file1 32857 ${SPROG} checkout: Updating trace" \ 32858 " 32859 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 32860 *direntproc=${PFMT}, dirleavproc=${PFMT}, 32861 *dosrcs=1, repository_in=${CVSROOT_DIRNAME}/trace ) 32862 *local=0, which=3, aflag=0, 32863 *locktype=1, update_preload=trace 32864 *-> Create_Admin 32865 *-> Create_Admin (trace, trace, ${CVSROOT_DIRNAME}/trace, , , 0, 0, 1) 32866 *-> Forking server: ${CVS_SERVER} server 32867 *-> Register(file1, 1\.1\.1\.1, ${DATE}, , ) 32868 *-> main loop with CVSROOT=${CVSROOT} 32869 *-> parse_cvsroot ( ${CVSROOT} ) 32870 *-> rename(\.new\.file1,file1) 32871 *-> rename(CVS/Entries\.Backup,CVS/Entries) 32872 *-> safe_location( where=(null) ) 32873 *-> unlink_file(CVS/Entries\.Log) 32874 *-> unlink_file(CVS/Entries\.Static) 32875 *-> unlink_file(CVS/Tag) 32876 *-> unlink_file(CVS/Template) 32877 *-> unlink_file(trace/CVS/Tag) 32878 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32879 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32880 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32881 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32882 S -> CVS_SERVER_SLEEP not set\. 32883 S -> Create_Admin 32884 S -> Create_Admin (\., trace, ${CVSROOT_DIRNAME}/trace, , , 0, 0, 1) 32885 S -> Leaving do_recursion ( frame=${PFMT} ) 32886 S -> Leaving do_recursion ( frame=${PFMT} ) 32887 S -> Lock_Cleanup() 32888 S -> Lock_Cleanup() 32889 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/rcsinfo, trace, ALL) 32890 S -> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.1\.1\.1, , , (function)) 32891 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace) 32892 S -> Register(file1, 1\.1\.1\.1, , , ) 32893 S -> Simple_Lock_Cleanup() 32894 S -> Simple_Lock_Cleanup() 32895 S -> Simple_Lock_Cleanup() 32896 S -> Write_Template (trace, ${CVSROOT_DIRNAME}/trace) 32897 S -> dirswitch (\., ${CVSROOT_DIRNAME}) 32898 S -> dirswitch (\., ${CVSROOT_DIRNAME}) 32899 S -> do_cvs_command (checkout) 32900 S -> do_module (trace, Updating, NULL, NULL) 32901 S -> do_module (trace, Updating, NULL, NULL) 32902 S -> do_recursion ( frame=${PFMT} ) 32903 S -> do_recursion ( frame=${PFMT} ) 32904 S -> fopen(${CVSROOT_DIRNAME}/CVSROOT/history,a) 32905 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 32906 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 32907 S -> lock_simple_remove() 32908 S -> remove_locks() 32909 S -> remove_locks() 32910 S -> rename(CVS/Entries\.Backup,CVS/Entries) 32911 S -> safe_location( where=(null) ) 32912 S -> serve_directory (\.) 32913 S -> serve_directory (\.) 32914 S -> server_cleanup() 32915 S -> server_cleanup() 32916 S -> server_notify() 32917 S -> server_register(file1, 1\.1\.1\.1, , , , , ) 32918 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 32919 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 32920 S -> unlink_file(\./CVS/Entries\.Static) 32921 S -> unlink_file(\./CVS/Tag) 32922 S -> unlink_file(CVS/Entries\.Log) 32923 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32924 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32925 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32926 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32927 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32928 U trace/file1 32929 ${SPROG} checkout: Updating trace" 32930 32931 cd trace 32932 mkdir subdir 32933 dotest_sort trace-4 "${testcvs} -t -t -t add subdir" \ 32934 " *-> Create_Admin 32935 *-> Create_Admin (\., subdir, ${CVSROOT_DIRNAME}/trace/subdir, , , 0, 0, 1) 32936 *-> Lock_Cleanup() 32937 *-> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/loginfo, trace/subdir, ALL) 32938 *-> Simple_Lock_Cleanup() 32939 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 32940 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 32941 *-> remove_locks() 32942 *-> rename(CVS/Entries\.Backup,CVS/Entries) 32943 *-> unlink_file(\./CVS/Tag) 32944 *-> unlink_file(${CVSROOT_DIRNAME}/trace/subdir/CVS/fileattr) 32945 *-> unlink_file(CVS/Entries\.Log) 32946 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32947 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32948 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32949 Directory ${CVSROOT_DIRNAME}/trace/subdir added to the repository" \ 32950 " 32951 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 32952 *direntproc=${PFMT}, dirleavproc=${PFMT}, 32953 *dosrcs=0, repository_in=(null) ) 32954 *local=0, which=1, aflag=0, 32955 *locktype=0, update_preload=(null) 32956 *-> Create_Admin 32957 *-> Create_Admin (subdir, subdir, ${CVSROOT_DIRNAME}/trace/subdir, , , 0, 0, 1) 32958 *-> Forking server: ${CVS_SERVER} server 32959 *-> Leaving do_recursion ( frame=${PFMT} ) 32960 *-> Leaving do_recursion ( frame=${PFMT} ) 32961 *-> do_recursion ( frame=${PFMT} ) 32962 *-> do_recursion ( frame=${PFMT} ) 32963 *-> main loop with CVSROOT=${CVSROOT} 32964 *-> parse_cvsroot ( ${CVSROOT} ) 32965 *-> rename(CVS/Entries\.Backup,CVS/Entries) 32966 ${DOTSTAR} *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 32967 *-> unlink_file(CVS/Entries\.Log) 32968 ${DOTSTAR} *-> unlink_file(CVS/Template) 32969 *-> unlink_file(subdir/CVS/Tag) 32970 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32971 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32972 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32973 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32974 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32975 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32976 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32977 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32978 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32979 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32980 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 32981 ${DOTSTAR}Directory ${CVSROOT_DIRNAME}/trace/subdir added to the repository 32982 S -> CVS_SERVER_SLEEP not set\. 32983 S -> Lock_Cleanup() 32984 S -> Lock_Cleanup() 32985 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/loginfo, trace/subdir, ALL) 32986 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/rcsinfo, trace/subdir, ALL) 32987 S -> Simple_Lock_Cleanup() 32988 S -> Simple_Lock_Cleanup() 32989 S -> Write_Template (subdir, ${CVSROOT_DIRNAME}/trace/subdir) 32990 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 32991 S -> dirswitch (subdir, ${CVSROOT_DIRNAME}/trace/subdir) 32992 S -> do_cvs_command (add) 32993 S -> remove_locks() 32994 S -> remove_locks() 32995 S -> rename(CVS/Entries\.Backup,CVS/Entries) 32996 S -> rename(CVS/Entries\.Backup,CVS/Entries) 32997 S -> serve_directory (\.) 32998 S -> serve_directory (subdir) 32999 S -> server_cleanup() 33000 S -> server_cleanup() 33001 S -> server_notify() 33002 S -> unlink_file(${CVSROOT_DIRNAME}/trace/subdir/CVS/fileattr) 33003 S -> unlink_file(CVS/Entries\.Log) 33004 S -> unlink_file(CVS/Entries\.Log) 33005 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33006 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} )" 33007 touch file2 33008 dotest_sort trace-5 "${testcvs} -t -t -t add file2" \ 33009 " *-> Lock_Cleanup() 33010 *-> Register(file2, 0, Initial file2, , ) 33011 *-> Simple_Lock_Cleanup() 33012 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 33013 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 33014 *-> remove_locks() 33015 *-> rename(CVS/Entries\.Backup,CVS/Entries) 33016 *-> unlink_file(CVS/Entries\.Log) 33017 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33018 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33019 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33020 ${SPROG} add: scheduling file \`file2' for addition 33021 ${SPROG} add: use \`${SPROG} commit' to add this file permanently" \ 33022 " 33023 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 33024 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33025 *dosrcs=0, repository_in=(null) ) 33026 *local=0, which=1, aflag=0, 33027 *locktype=0, update_preload=(null) 33028 *-> Forking server: ${CVS_SERVER} server 33029 *-> Leaving do_recursion ( frame=${PFMT} ) 33030 *-> Register(file2, 0, dummy timestamp, , ) 33031 *-> do_recursion ( frame=${PFMT} ) 33032 *-> main loop with CVSROOT=${CVSROOT} 33033 *-> parse_cvsroot ( ${CVSROOT} ) 33034 *-> rename(CVS/Entries\.Backup,CVS/Entries) 33035 ${DOTSTAR} *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33036 *-> unlink_file(CVS/Entries\.Log) 33037 ${DOTSTAR} *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33038 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33039 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33040 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33041 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33042 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33043 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33044 ${DOTSTAR}S -> CVS_SERVER_SLEEP not set\. 33045 S -> Lock_Cleanup() 33046 S -> Lock_Cleanup() 33047 S -> Register(file2, 0, Initial file2, , ) 33048 S -> Simple_Lock_Cleanup() 33049 S -> Simple_Lock_Cleanup() 33050 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 33051 S -> do_cvs_command (add) 33052 S -> remove_locks() 33053 S -> remove_locks() 33054 S -> rename(CVS/Entries\.Backup,CVS/Entries) 33055 S -> serve_directory (\.) 33056 S -> server_cleanup() 33057 S -> server_cleanup() 33058 S -> server_notify() 33059 S -> server_register(file2, 0, Initial file2, , , , ) 33060 S -> unlink_file(CVS/Entries\.Log) 33061 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33062 ${SPROG} add: scheduling file \`file2' for addition 33063 ${SPROG} add: use \`${SPROG} commit' to add this file permanently" 33064 dotest_sort trace-6 "${testcvs} -t -t -t ci -mnew-file file2" \ 33065 " *callerdat=${PFMT}, argc=1, argv=${PFMT}, 33066 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 33067 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 33068 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33069 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33070 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33071 *dosrcs=0, repository_in=(null) ) 33072 *dosrcs=1, repository_in=(null) ) 33073 *dosrcs=1, repository_in=(null) ) 33074 *local=0, which=1, aflag=0, 33075 *local=0, which=1, aflag=0, 33076 *local=0, which=1, aflag=0, 33077 *locktype=0, update_preload=(null) 33078 *locktype=0, update_preload=(null) 33079 *locktype=2, update_preload=(null) 33080 *-> Leaving do_recursion ( frame=${PFMT} ) 33081 *-> Leaving do_recursion ( frame=${PFMT} ) 33082 *-> Leaving do_recursion ( frame=${PFMT} ) 33083 *-> Lock_Cleanup() 33084 *-> Lock_Cleanup() 33085 *-> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/commitinfo, trace, ALL) 33086 *-> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/loginfo, trace, ALL) 33087 *-> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/verifymsg, trace, not ALL) 33088 *-> Promotable_Lock () 33089 *-> RCS_checkout (${CVSROOT_DIRNAME}/trace/file2,v, 1, , , (function)) 33090 *-> RCS_cmp_file( ${CVSROOT_DIRNAME}/trace/file2,v, 1, (null), , file2 ) 33091 *-> Register(file2, 1\.1, ${DATE}, , ) 33092 *-> Simple_Lock_Cleanup() 33093 *-> Simple_Lock_Cleanup() 33094 *-> Simple_Lock_Cleanup() 33095 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 33096 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 33097 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.\*, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33098 *-> do_recursion ( frame=${PFMT} ) 33099 *-> do_recursion ( frame=${PFMT} ) 33100 *-> do_recursion ( frame=${PFMT} ) 33101 *-> fopen(${CVSROOT_DIRNAME}/CVSROOT/history,a) 33102 *-> lock_dir_for_write (${CVSROOT_DIRNAME}/trace) 33103 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33104 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33105 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33106 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 33107 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33108 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 33109 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 33110 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 33111 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 33112 *-> lock_simple_remove() 33113 *-> lock_simple_remove() 33114 *-> lock_tree_promotably (1, argv, 0, 1, 0) 33115 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 33116 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 33117 *-> promotable_exists (${CVSROOT_DIRNAME}/trace) 33118 *-> promotable_exists (${CVSROOT_DIRNAME}/trace) 33119 *-> promotable_lock(${CVSROOT_DIRNAME}/trace) 33120 *-> rcs_cleanup() 33121 *-> readers_exist (${CVSROOT_DIRNAME}/trace) 33122 *-> remove_locks() 33123 *-> remove_locks() 33124 *-> rename(${CVSROOT_DIRNAME}/trace/,file2,,${CVSROOT_DIRNAME}/trace/file2,v) 33125 *-> rename(${CVSROOT_DIRNAME}/trace/,file2,,${CVSROOT_DIRNAME}/trace/file2,v) 33126 *-> rename(CVS/Entries\.Backup,CVS/Entries) 33127 *-> set_lock (${CVSROOT_DIRNAME}/trace, 0) 33128 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 33129 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33130 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33131 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33132 *-> unlink_file(CVS/Base/file2) 33133 *-> unlink_file(CVS/Entries\.Log) 33134 *-> unlink_file(CVS/file2,t) 33135 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33136 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33137 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33138 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33139 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33140 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33141 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33142 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33143 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33144 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33145 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33146 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33147 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33148 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33149 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33150 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33151 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33152 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33153 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33154 ${CVSROOT_DIRNAME}/trace/file2,v <-- file2 33155 initial revision: 1\.1" \ 33156 " 33157 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 33158 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 33159 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 33160 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 33161 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 33162 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33163 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33164 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33165 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33166 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33167 *dosrcs=0, repository_in=(null) ) 33168 *dosrcs=0, repository_in=(null) ) 33169 *dosrcs=0, repository_in=(null) ) 33170 *dosrcs=1, repository_in=(null) ) 33171 *dosrcs=1, repository_in=(null) ) 33172 *local=0, which=1, aflag=0, 33173 *local=0, which=1, aflag=0, 33174 *local=0, which=1, aflag=0, 33175 *local=0, which=1, aflag=0, 33176 *local=0, which=1, aflag=0, 33177 *locktype=0, update_preload=(null) 33178 *locktype=0, update_preload=(null) 33179 *locktype=0, update_preload=(null) 33180 *locktype=0, update_preload=(null) 33181 *locktype=2, update_preload=(null) 33182 *-> Forking server: ${CVS_SERVER} server 33183 *-> Leaving do_recursion ( frame=${PFMT} ) 33184 *-> Leaving do_recursion ( frame=${PFMT} ) 33185 *-> Register(file2, 1\.1, ${DATE}, , ) 33186 *-> Sending file \`file2' to server 33187 *-> do_recursion ( frame=${PFMT} ) 33188 *-> do_recursion ( frame=${PFMT} ) 33189 *-> main loop with CVSROOT=${CVSROOT} 33190 *-> parse_cvsroot ( ${CVSROOT} ) 33191 *-> rename(CVS/Entries\.Backup,CVS/Entries) 33192 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33193 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33194 *-> unlink_file(CVS/Base/file2) 33195 *-> unlink_file(CVS/Entries\.Log) 33196 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33197 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33198 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33199 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33200 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33201 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33202 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33203 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33204 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33205 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33206 ${CVSROOT_DIRNAME}/trace/file2,v <-- file2 33207 S -> CVS_SERVER_SLEEP not set\. 33208 S -> Leaving do_recursion ( frame=${PFMT} ) 33209 S -> Leaving do_recursion ( frame=${PFMT} ) 33210 S -> Leaving do_recursion ( frame=${PFMT} ) 33211 S -> Lock_Cleanup() 33212 S -> Lock_Cleanup() 33213 S -> Lock_Cleanup() 33214 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/commitinfo, trace, ALL) 33215 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/loginfo, trace, ALL) 33216 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/verifymsg, trace, not ALL) 33217 S -> Promotable_Lock () 33218 S -> RCS_checkout (${CVSROOT_DIRNAME}/trace/file2,v, 1, , , (function)) 33219 S -> RCS_cmp_file( ${CVSROOT_DIRNAME}/trace/file2,v, 1, (null), , file2 ) 33220 S -> Register(file2, 1\.1, ${DATE}, , ) 33221 S -> Simple_Lock_Cleanup() 33222 S -> Simple_Lock_Cleanup() 33223 S -> Simple_Lock_Cleanup() 33224 S -> Simple_Lock_Cleanup() 33225 S -> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 33226 S -> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 33227 S -> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.\*, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33228 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 33229 S -> do_cvs_command (commit) 33230 S -> do_recursion ( frame=${PFMT} ) 33231 S -> do_recursion ( frame=${PFMT} ) 33232 S -> do_recursion ( frame=${PFMT} ) 33233 S -> fopen(${CVSROOT_DIRNAME}/CVSROOT/history,a) 33234 S -> lock_dir_for_write (${CVSROOT_DIRNAME}/trace) 33235 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33236 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33237 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33238 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 33239 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33240 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 33241 S -> lock_name (${CVSROOT_DIRNAME}/trace, ) 33242 S -> lock_name (${CVSROOT_DIRNAME}/trace, ) 33243 S -> lock_name (${CVSROOT_DIRNAME}/trace, ) 33244 S -> lock_simple_remove() 33245 S -> lock_simple_remove() 33246 S -> lock_tree_promotably (1, argv, 0, 1, 0) 33247 S -> promotable_exists (${CVSROOT_DIRNAME}/trace) 33248 S -> promotable_exists (${CVSROOT_DIRNAME}/trace) 33249 S -> promotable_lock(${CVSROOT_DIRNAME}/trace) 33250 S -> rcs_cleanup() 33251 S -> readers_exist (${CVSROOT_DIRNAME}/trace) 33252 S -> remove_locks() 33253 S -> remove_locks() 33254 S -> remove_locks() 33255 S -> rename(${CVSROOT_DIRNAME}/trace/,file2,,${CVSROOT_DIRNAME}/trace/file2,v) 33256 S -> rename(${CVSROOT_DIRNAME}/trace/,file2,,${CVSROOT_DIRNAME}/trace/file2,v) 33257 S -> rename(CVS/Entries\.Backup,CVS/Entries) 33258 S -> serve_directory (\.) 33259 S -> server_cleanup() 33260 S -> server_cleanup() 33261 S -> server_notify() 33262 S -> server_pathname_check (file2) 33263 S -> server_pathname_check (file2) 33264 S -> server_pathname_check (file2) 33265 S -> server_register(file2, 1\.1, ${DATE}, , , , ) 33266 S -> set_lock (${CVSROOT_DIRNAME}/trace, 0) 33267 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 33268 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33269 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33270 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33271 S -> unlink_file(CVS/Entries\.Log) 33272 S -> unlink_file(CVS/file2,t) 33273 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33274 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33275 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33276 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33277 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33278 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33279 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33280 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33281 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33282 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33283 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33284 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33285 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33286 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33287 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33288 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33289 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33290 initial revision: 1\.1" 33291 dotest_sort trace-7 "${testcvs} -t -t -t tag bp" \ 33292 " *callerdat=${PFMT}, argc=0, argv=${PFMT}, 33293 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 33294 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33295 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33296 *dosrcs=1, repository_in= ) 33297 *dosrcs=1, repository_in= ) 33298 *local=0, which=1, aflag=0, 33299 *local=0, which=1, aflag=0, 33300 *locktype=1, update_preload=(null) 33301 *locktype=2, update_preload=(null) 33302 *local_specified=0, mname=(null), msg=(null) ) 33303 *mwhere=(null), mfile=(null), shorten=0, 33304 *-> Leaving do_recursion ( frame=${PFMT} ) 33305 *-> Leaving do_recursion ( frame=${PFMT} ) 33306 *-> Leaving do_recursion ( frame=${PFMT} ) 33307 *-> Leaving do_recursion ( frame=${PFMT} ) 33308 *-> Leaving do_recursion ( frame=${PFMT} ) 33309 *-> Leaving do_recursion ( frame=${PFMT} ) 33310 *-> Lock_Cleanup() 33311 *-> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/taginfo, trace, ALL) 33312 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace) 33313 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace/subdir) 33314 *-> Simple_Lock_Cleanup() 33315 *-> Simple_Lock_Cleanup() 33316 *-> Simple_Lock_Cleanup() 33317 *-> Simple_Lock_Cleanup() 33318 *-> Simple_Lock_Cleanup() 33319 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, (null)) 33320 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.\*, (null)) 33321 *-> _lock_exists (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.pfl\.\*, (null)) 33322 *-> _lock_exists (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.\*, (null)) 33323 *-> check_fileproc ( ${CVSROOT_DIRNAME}/trace, file1, ${CVSROOT_DIRNAME}/trace/file1,v ) 33324 *-> check_fileproc ( ${CVSROOT_DIRNAME}/trace, file2, ${CVSROOT_DIRNAME}/trace/file2,v ) 33325 *-> do_recursion ( frame=${PFMT} ) 33326 *-> do_recursion ( frame=${PFMT} ) 33327 *-> do_recursion ( frame=${PFMT} ) 33328 *-> do_recursion ( frame=${PFMT} ) 33329 *-> do_recursion ( frame=${PFMT} ) 33330 *-> do_recursion ( frame=${PFMT} ) 33331 *-> lock_dir_for_write (${CVSROOT_DIRNAME}/trace) 33332 *-> lock_dir_for_write (${CVSROOT_DIRNAME}/trace/subdir) 33333 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33334 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33335 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33336 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33337 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 33338 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 33339 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 33340 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 33341 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 33342 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 33343 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33344 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 33345 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, ) 33346 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, ) 33347 *-> lock_simple_remove() 33348 *-> lock_simple_remove() 33349 *-> lock_simple_remove() 33350 *-> lock_simple_remove() 33351 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 33352 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 33353 *-> promotable_exists (${CVSROOT_DIRNAME}/trace) 33354 *-> promotable_exists (${CVSROOT_DIRNAME}/trace/subdir) 33355 *-> rcs_cleanup() 33356 *-> readers_exist (${CVSROOT_DIRNAME}/trace) 33357 *-> readers_exist (${CVSROOT_DIRNAME}/trace/subdir) 33358 *-> remove_locks() 33359 *-> rename(${CVSROOT_DIRNAME}/trace/,file1,,${CVSROOT_DIRNAME}/trace/file1,v) 33360 *-> rename(${CVSROOT_DIRNAME}/trace/,file2,,${CVSROOT_DIRNAME}/trace/file2,v) 33361 *-> rename(CVS/Entries\.Backup,CVS/Entries) 33362 *-> rtag_proc ( argc=1, argv=${PFMT}, xwhere=(null), 33363 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 33364 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 33365 *-> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 33366 *-> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 33367 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33368 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33369 *-> unlink_file(CVS/Entries\.Log) 33370 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33371 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33372 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33373 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33374 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33375 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33376 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33377 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33378 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33379 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33380 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33381 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33382 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33383 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33384 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33385 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33386 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33387 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33388 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33389 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33390 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33391 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33392 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33393 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33394 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33395 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33396 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33397 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33398 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33399 T file1 33400 T file2 33401 ${SPROG} tag: Tagging \. 33402 ${SPROG} tag: Tagging subdir" \ 33403 " 33404 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 33405 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 33406 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 33407 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33408 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33409 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33410 *dosrcs=0, repository_in=(null) ) 33411 *dosrcs=1, repository_in= ) 33412 *dosrcs=1, repository_in= ) 33413 *local=0, which=1, aflag=0, 33414 *local=0, which=1, aflag=0, 33415 *local=0, which=1, aflag=0, 33416 *locktype=0, update_preload=(null) 33417 *locktype=1, update_preload=(null) 33418 *locktype=2, update_preload=(null) 33419 *local_specified=0, mname=(null), msg=(null) ) 33420 *mwhere=(null), mfile=(null), shorten=0, 33421 *-> Forking server: ${CVS_SERVER} server 33422 *-> Leaving do_recursion ( frame=${PFMT} ) 33423 *-> Leaving do_recursion ( frame=${PFMT} ) 33424 *-> Leaving do_recursion ( frame=${PFMT} ) 33425 *-> do_recursion ( frame=${PFMT} ) 33426 *-> do_recursion ( frame=${PFMT} ) 33427 *-> do_recursion ( frame=${PFMT} ) 33428 *-> main loop with CVSROOT=${CVSROOT} 33429 *-> parse_cvsroot ( ${CVSROOT} ) 33430 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33431 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33432 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33433 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33434 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33435 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33436 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33437 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33438 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33439 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33440 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33441 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33442 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33443 S -> CVS_SERVER_SLEEP not set\. 33444 S -> Leaving do_recursion ( frame=${PFMT} ) 33445 S -> Leaving do_recursion ( frame=${PFMT} ) 33446 S -> Leaving do_recursion ( frame=${PFMT} ) 33447 S -> Leaving do_recursion ( frame=${PFMT} ) 33448 S -> Leaving do_recursion ( frame=${PFMT} ) 33449 S -> Leaving do_recursion ( frame=${PFMT} ) 33450 S -> Lock_Cleanup() 33451 S -> Lock_Cleanup() 33452 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/taginfo, trace, ALL) 33453 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace) 33454 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace/subdir) 33455 S -> Simple_Lock_Cleanup() 33456 S -> Simple_Lock_Cleanup() 33457 S -> Simple_Lock_Cleanup() 33458 S -> Simple_Lock_Cleanup() 33459 S -> Simple_Lock_Cleanup() 33460 S -> Simple_Lock_Cleanup() 33461 S -> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, (null)) 33462 S -> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.\*, (null)) 33463 S -> _lock_exists (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.pfl\.\*, (null)) 33464 S -> _lock_exists (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.\*, (null)) 33465 S -> check_fileproc ( ${CVSROOT_DIRNAME}/trace, file1, ${CVSROOT_DIRNAME}/trace/file1,v ) 33466 S -> check_fileproc ( ${CVSROOT_DIRNAME}/trace, file2, ${CVSROOT_DIRNAME}/trace/file2,v ) 33467 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 33468 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 33469 S -> dirswitch (subdir, ${CVSROOT_DIRNAME}/trace/subdir) 33470 S -> do_cvs_command (tag) 33471 S -> do_recursion ( frame=${PFMT} ) 33472 S -> do_recursion ( frame=${PFMT} ) 33473 S -> do_recursion ( frame=${PFMT} ) 33474 S -> do_recursion ( frame=${PFMT} ) 33475 S -> do_recursion ( frame=${PFMT} ) 33476 S -> do_recursion ( frame=${PFMT} ) 33477 S -> lock_dir_for_write (${CVSROOT_DIRNAME}/trace) 33478 S -> lock_dir_for_write (${CVSROOT_DIRNAME}/trace/subdir) 33479 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33480 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33481 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33482 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33483 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 33484 S -> lock_name (${CVSROOT_DIRNAME}/trace, ) 33485 S -> lock_name (${CVSROOT_DIRNAME}/trace, ) 33486 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 33487 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 33488 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 33489 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33490 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 33491 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, ) 33492 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, ) 33493 S -> lock_simple_remove() 33494 S -> lock_simple_remove() 33495 S -> lock_simple_remove() 33496 S -> lock_simple_remove() 33497 S -> promotable_exists (${CVSROOT_DIRNAME}/trace) 33498 S -> promotable_exists (${CVSROOT_DIRNAME}/trace/subdir) 33499 S -> rcs_cleanup() 33500 S -> readers_exist (${CVSROOT_DIRNAME}/trace) 33501 S -> readers_exist (${CVSROOT_DIRNAME}/trace/subdir) 33502 S -> remove_locks() 33503 S -> remove_locks() 33504 S -> rename(${CVSROOT_DIRNAME}/trace/,file1,,${CVSROOT_DIRNAME}/trace/file1,v) 33505 S -> rename(${CVSROOT_DIRNAME}/trace/,file2,,${CVSROOT_DIRNAME}/trace/file2,v) 33506 S -> rename(CVS/Entries\.Backup,CVS/Entries) 33507 S -> rename(CVS/Entries\.Backup,CVS/Entries) 33508 S -> rtag_proc ( argc=1, argv=${PFMT}, xwhere=(null), 33509 S -> serve_directory (\.) 33510 S -> serve_directory (\.) 33511 S -> serve_directory (subdir) 33512 S -> server_cleanup() 33513 S -> server_cleanup() 33514 S -> server_notify() 33515 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 33516 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 33517 S -> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 33518 S -> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 33519 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33520 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33521 S -> unlink_file(CVS/Entries\.Log) 33522 S -> unlink_file(CVS/Entries\.Log) 33523 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33524 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33525 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33526 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33527 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33528 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33529 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33530 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33531 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33532 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33533 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33534 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33535 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33536 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33537 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33538 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33539 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33540 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33541 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33542 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33543 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33544 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33545 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33546 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33547 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33548 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33549 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33550 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33551 T file1 33552 T file2 33553 ${SPROG} tag: Tagging \. 33554 ${SPROG} tag: Tagging subdir" 33555 33556 dotest_sort trace-8 "${testcvs} -t -t -t tag -b branch1" \ 33557 " *callerdat=${PFMT}, argc=0, argv=${PFMT}, 33558 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 33559 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33560 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33561 *dosrcs=1, repository_in= ) 33562 *dosrcs=1, repository_in= ) 33563 *local=0, which=1, aflag=0, 33564 *local=0, which=1, aflag=0, 33565 *locktype=1, update_preload=(null) 33566 *locktype=2, update_preload=(null) 33567 *local_specified=0, mname=(null), msg=(null) ) 33568 *mwhere=(null), mfile=(null), shorten=0, 33569 *-> Leaving do_recursion ( frame=${PFMT} ) 33570 *-> Leaving do_recursion ( frame=${PFMT} ) 33571 *-> Leaving do_recursion ( frame=${PFMT} ) 33572 *-> Leaving do_recursion ( frame=${PFMT} ) 33573 *-> Leaving do_recursion ( frame=${PFMT} ) 33574 *-> Leaving do_recursion ( frame=${PFMT} ) 33575 *-> Lock_Cleanup() 33576 *-> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/taginfo, trace, ALL) 33577 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace) 33578 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace/subdir) 33579 *-> Simple_Lock_Cleanup() 33580 *-> Simple_Lock_Cleanup() 33581 *-> Simple_Lock_Cleanup() 33582 *-> Simple_Lock_Cleanup() 33583 *-> Simple_Lock_Cleanup() 33584 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, (null)) 33585 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.\*, (null)) 33586 *-> _lock_exists (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.pfl\.\*, (null)) 33587 *-> _lock_exists (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.\*, (null)) 33588 *-> check_fileproc ( ${CVSROOT_DIRNAME}/trace, file1, ${CVSROOT_DIRNAME}/trace/file1,v ) 33589 *-> check_fileproc ( ${CVSROOT_DIRNAME}/trace, file2, ${CVSROOT_DIRNAME}/trace/file2,v ) 33590 *-> do_recursion ( frame=${PFMT} ) 33591 *-> do_recursion ( frame=${PFMT} ) 33592 *-> do_recursion ( frame=${PFMT} ) 33593 *-> do_recursion ( frame=${PFMT} ) 33594 *-> do_recursion ( frame=${PFMT} ) 33595 *-> do_recursion ( frame=${PFMT} ) 33596 *-> lock_dir_for_write (${CVSROOT_DIRNAME}/trace) 33597 *-> lock_dir_for_write (${CVSROOT_DIRNAME}/trace/subdir) 33598 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33599 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33600 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33601 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33602 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 33603 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 33604 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 33605 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 33606 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 33607 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 33608 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33609 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 33610 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, ) 33611 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, ) 33612 *-> lock_simple_remove() 33613 *-> lock_simple_remove() 33614 *-> lock_simple_remove() 33615 *-> lock_simple_remove() 33616 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 33617 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 33618 *-> promotable_exists (${CVSROOT_DIRNAME}/trace) 33619 *-> promotable_exists (${CVSROOT_DIRNAME}/trace/subdir) 33620 *-> rcs_cleanup() 33621 *-> readers_exist (${CVSROOT_DIRNAME}/trace) 33622 *-> readers_exist (${CVSROOT_DIRNAME}/trace/subdir) 33623 *-> remove_locks() 33624 *-> rename(${CVSROOT_DIRNAME}/trace/,file1,,${CVSROOT_DIRNAME}/trace/file1,v) 33625 *-> rename(${CVSROOT_DIRNAME}/trace/,file2,,${CVSROOT_DIRNAME}/trace/file2,v) 33626 *-> rtag_proc ( argc=1, argv=${PFMT}, xwhere=(null), 33627 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 33628 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 33629 *-> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 33630 *-> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 33631 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33632 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33633 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33634 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33635 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33636 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33637 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33638 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33639 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33640 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33641 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33642 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33643 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33644 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33645 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33646 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33647 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33648 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33649 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33650 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33651 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33652 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33653 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33654 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33655 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33656 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33657 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33658 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33659 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33660 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33661 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33662 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33663 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33664 T file1 33665 T file2 33666 ${SPROG} tag: Tagging \. 33667 ${SPROG} tag: Tagging subdir" \ 33668 " 33669 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 33670 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 33671 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 33672 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33673 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33674 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33675 *dosrcs=0, repository_in=(null) ) 33676 *dosrcs=1, repository_in= ) 33677 *dosrcs=1, repository_in= ) 33678 *local=0, which=1, aflag=0, 33679 *local=0, which=1, aflag=0, 33680 *local=0, which=1, aflag=0, 33681 *locktype=0, update_preload=(null) 33682 *locktype=1, update_preload=(null) 33683 *locktype=2, update_preload=(null) 33684 *local_specified=0, mname=(null), msg=(null) ) 33685 *mwhere=(null), mfile=(null), shorten=0, 33686 *-> Forking server: ${CVS_SERVER} server 33687 *-> Leaving do_recursion ( frame=${PFMT} ) 33688 *-> Leaving do_recursion ( frame=${PFMT} ) 33689 *-> Leaving do_recursion ( frame=${PFMT} ) 33690 *-> do_recursion ( frame=${PFMT} ) 33691 *-> do_recursion ( frame=${PFMT} ) 33692 *-> do_recursion ( frame=${PFMT} ) 33693 *-> main loop with CVSROOT=${CVSROOT} 33694 *-> parse_cvsroot ( ${CVSROOT} ) 33695 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33696 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33697 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33698 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33699 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33700 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33701 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33702 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33703 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33704 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33705 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33706 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33707 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33708 S -> CVS_SERVER_SLEEP not set\. 33709 S -> Leaving do_recursion ( frame=${PFMT} ) 33710 S -> Leaving do_recursion ( frame=${PFMT} ) 33711 S -> Leaving do_recursion ( frame=${PFMT} ) 33712 S -> Leaving do_recursion ( frame=${PFMT} ) 33713 S -> Leaving do_recursion ( frame=${PFMT} ) 33714 S -> Leaving do_recursion ( frame=${PFMT} ) 33715 S -> Lock_Cleanup() 33716 S -> Lock_Cleanup() 33717 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/taginfo, trace, ALL) 33718 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace) 33719 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace/subdir) 33720 S -> Simple_Lock_Cleanup() 33721 S -> Simple_Lock_Cleanup() 33722 S -> Simple_Lock_Cleanup() 33723 S -> Simple_Lock_Cleanup() 33724 S -> Simple_Lock_Cleanup() 33725 S -> Simple_Lock_Cleanup() 33726 S -> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, (null)) 33727 S -> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.\*, (null)) 33728 S -> _lock_exists (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.pfl\.\*, (null)) 33729 S -> _lock_exists (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.\*, (null)) 33730 S -> check_fileproc ( ${CVSROOT_DIRNAME}/trace, file1, ${CVSROOT_DIRNAME}/trace/file1,v ) 33731 S -> check_fileproc ( ${CVSROOT_DIRNAME}/trace, file2, ${CVSROOT_DIRNAME}/trace/file2,v ) 33732 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 33733 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 33734 S -> dirswitch (subdir, ${CVSROOT_DIRNAME}/trace/subdir) 33735 S -> do_cvs_command (tag) 33736 S -> do_recursion ( frame=${PFMT} ) 33737 S -> do_recursion ( frame=${PFMT} ) 33738 S -> do_recursion ( frame=${PFMT} ) 33739 S -> do_recursion ( frame=${PFMT} ) 33740 S -> do_recursion ( frame=${PFMT} ) 33741 S -> do_recursion ( frame=${PFMT} ) 33742 S -> lock_dir_for_write (${CVSROOT_DIRNAME}/trace) 33743 S -> lock_dir_for_write (${CVSROOT_DIRNAME}/trace/subdir) 33744 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33745 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33746 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33747 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33748 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 33749 S -> lock_name (${CVSROOT_DIRNAME}/trace, ) 33750 S -> lock_name (${CVSROOT_DIRNAME}/trace, ) 33751 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 33752 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 33753 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 33754 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33755 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 33756 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, ) 33757 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, ) 33758 S -> lock_simple_remove() 33759 S -> lock_simple_remove() 33760 S -> lock_simple_remove() 33761 S -> lock_simple_remove() 33762 S -> promotable_exists (${CVSROOT_DIRNAME}/trace) 33763 S -> promotable_exists (${CVSROOT_DIRNAME}/trace/subdir) 33764 S -> rcs_cleanup() 33765 S -> readers_exist (${CVSROOT_DIRNAME}/trace) 33766 S -> readers_exist (${CVSROOT_DIRNAME}/trace/subdir) 33767 S -> remove_locks() 33768 S -> remove_locks() 33769 S -> rename(${CVSROOT_DIRNAME}/trace/,file1,,${CVSROOT_DIRNAME}/trace/file1,v) 33770 S -> rename(${CVSROOT_DIRNAME}/trace/,file2,,${CVSROOT_DIRNAME}/trace/file2,v) 33771 S -> rename(CVS/Entries\.Backup,CVS/Entries) 33772 S -> rename(CVS/Entries\.Backup,CVS/Entries) 33773 S -> rtag_proc ( argc=1, argv=${PFMT}, xwhere=(null), 33774 S -> serve_directory (\.) 33775 S -> serve_directory (\.) 33776 S -> serve_directory (subdir) 33777 S -> server_cleanup() 33778 S -> server_cleanup() 33779 S -> server_notify() 33780 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 33781 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 33782 S -> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 33783 S -> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 33784 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33785 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33786 S -> unlink_file(CVS/Entries\.Log) 33787 S -> unlink_file(CVS/Entries\.Log) 33788 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33789 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33790 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33791 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33792 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33793 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33794 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33795 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33796 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33797 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33798 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33799 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33800 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33801 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33802 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33803 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33804 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33805 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33806 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33807 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33808 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33809 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33810 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33811 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33812 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33813 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33814 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33815 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33816 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33817 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33818 T file1 33819 T file2 33820 ${SPROG} tag: Tagging \. 33821 ${SPROG} tag: Tagging subdir" 33822 dotest_sort trace-9 "${testcvs} -t -t -t log" \ 33823 " 33824 33825 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 33826 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33827 *dosrcs=1, repository_in=(null) ) 33828 *local=0, which=7, aflag=0, 33829 *locktype=1, update_preload=(null) 33830 *-> Leaving do_recursion ( frame=${PFMT} ) 33831 *-> Leaving do_recursion ( frame=${PFMT} ) 33832 *-> Leaving do_recursion ( frame=${PFMT} ) 33833 *-> Lock_Cleanup() 33834 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace) 33835 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace/subdir) 33836 *-> Simple_Lock_Cleanup() 33837 *-> Simple_Lock_Cleanup() 33838 *-> Simple_Lock_Cleanup() 33839 *-> do_recursion ( frame=${PFMT} ) 33840 *-> do_recursion ( frame=${PFMT} ) 33841 *-> do_recursion ( frame=${PFMT} ) 33842 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33843 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33844 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 33845 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33846 *-> lock_simple_remove() 33847 *-> lock_simple_remove() 33848 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 33849 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 33850 *-> remove_locks() 33851 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 33852 *-> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 33853 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33854 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33855 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33856 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33857 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33858 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33859 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33860 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33861 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33862 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33863 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33864 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33865 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33866 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33867 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33868 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33869 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33870 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33871 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33872 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33873 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33874 MYVENDOR: 1\.1\.1 33875 bp: 1\.1 33876 bp: 1\.1\.1\.1 33877 branch1: 1\.1\.0\.2 33878 branch1: 1\.1\.1\.1\.0\.2 33879 version-1: 1\.1\.1\.1 33880 ---------------------------- 33881 ---------------------------- 33882 ---------------------------- 33883 ============================================================================= 33884 ============================================================================= 33885 Initial revision 33886 RCS file: ${CVSROOT_DIRNAME}/trace/file1,v 33887 RCS file: ${CVSROOT_DIRNAME}/trace/file2,v 33888 Working file: file1 33889 Working file: file2 33890 access list: 33891 access list: 33892 branch: 33893 branch: 1\.1\.1 33894 branches: 1\.1\.1; 33895 ${SPROG} log: Logging \. 33896 ${SPROG} log: Logging subdir 33897 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 33898 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}0 -0; commitid: ${commitid}; 33899 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 33900 description: 33901 description: 33902 head: 1\.1 33903 head: 1\.1 33904 import 33905 keyword substitution: kv 33906 keyword substitution: kv 33907 locks: strict 33908 locks: strict 33909 new-file 33910 revision 1\.1 33911 revision 1\.1 33912 revision 1\.1\.1\.1 33913 symbolic names: 33914 symbolic names: 33915 total revisions: 1; selected revisions: 1 33916 total revisions: 2; selected revisions: 2" \ 33917 " 33918 33919 33920 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 33921 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 33922 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33923 *direntproc=${PFMT}, dirleavproc=${PFMT}, 33924 *dosrcs=0, repository_in=(null) ) 33925 *dosrcs=1, repository_in=(null) ) 33926 *local=0, which=1, aflag=0, 33927 *local=0, which=7, aflag=0, 33928 *locktype=0, update_preload=(null) 33929 *locktype=1, update_preload=(null) 33930 *-> Forking server: ${CVS_SERVER} server 33931 *-> Leaving do_recursion ( frame=${PFMT} ) 33932 *-> Leaving do_recursion ( frame=${PFMT} ) 33933 *-> Leaving do_recursion ( frame=${PFMT} ) 33934 *-> do_recursion ( frame=${PFMT} ) 33935 *-> do_recursion ( frame=${PFMT} ) 33936 *-> do_recursion ( frame=${PFMT} ) 33937 *-> main loop with CVSROOT=${CVSROOT} 33938 *-> parse_cvsroot ( ${CVSROOT} ) 33939 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 33940 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33941 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33942 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33943 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33944 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33945 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33946 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33947 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33948 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33949 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33950 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33951 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 33952 MYVENDOR: 1\.1\.1 33953 bp: 1\.1 33954 bp: 1\.1\.1\.1 33955 branch1: 1\.1\.0\.2 33956 branch1: 1\.1\.1\.1\.0\.2 33957 version-1: 1\.1\.1\.1 33958 ---------------------------- 33959 ---------------------------- 33960 ---------------------------- 33961 ============================================================================= 33962 ============================================================================= 33963 Initial revision 33964 RCS file: ${CVSROOT_DIRNAME}/trace/file1,v 33965 RCS file: ${CVSROOT_DIRNAME}/trace/file2,v 33966 S -> CVS_SERVER_SLEEP not set\. 33967 S -> Leaving do_recursion ( frame=${PFMT} ) 33968 S -> Leaving do_recursion ( frame=${PFMT} ) 33969 S -> Leaving do_recursion ( frame=${PFMT} ) 33970 S -> Lock_Cleanup() 33971 S -> Lock_Cleanup() 33972 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace) 33973 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace/subdir) 33974 S -> Simple_Lock_Cleanup() 33975 S -> Simple_Lock_Cleanup() 33976 S -> Simple_Lock_Cleanup() 33977 S -> Simple_Lock_Cleanup() 33978 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 33979 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 33980 S -> dirswitch (subdir, ${CVSROOT_DIRNAME}/trace/subdir) 33981 S -> do_cvs_command (log) 33982 S -> do_recursion ( frame=${PFMT} ) 33983 S -> do_recursion ( frame=${PFMT} ) 33984 S -> do_recursion ( frame=${PFMT} ) 33985 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 33986 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33987 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 33988 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 33989 S -> lock_simple_remove() 33990 S -> lock_simple_remove() 33991 S -> remove_locks() 33992 S -> remove_locks() 33993 S -> rename(CVS/Entries\.Backup,CVS/Entries) 33994 S -> rename(CVS/Entries\.Backup,CVS/Entries) 33995 S -> serve_directory (\.) 33996 S -> serve_directory (\.) 33997 S -> serve_directory (subdir) 33998 S -> server_cleanup() 33999 S -> server_cleanup() 34000 S -> server_notify() 34001 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34002 S -> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 34003 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34004 S -> unlink_file(CVS/Entries\.Log) 34005 S -> unlink_file(CVS/Entries\.Log) 34006 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34007 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34008 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34009 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34010 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34011 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34012 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34013 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34014 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34015 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34016 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34017 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34018 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34019 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34020 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34021 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34022 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34023 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34024 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34025 Working file: file1 34026 Working file: file2 34027 access list: 34028 access list: 34029 branch: 34030 branch: 1\.1\.1 34031 branches: 1\.1\.1; 34032 ${SPROG} log: Logging \. 34033 ${SPROG} log: Logging subdir 34034 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 34035 date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}0 -0; commitid: ${commitid}; 34036 date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid}; 34037 description: 34038 description: 34039 head: 1\.1 34040 head: 1\.1 34041 import 34042 keyword substitution: kv 34043 keyword substitution: kv 34044 locks: strict 34045 locks: strict 34046 new-file 34047 revision 1\.1 34048 revision 1\.1 34049 revision 1\.1\.1\.1 34050 symbolic names: 34051 symbolic names: 34052 total revisions: 1; selected revisions: 1 34053 total revisions: 2; selected revisions: 2" 34054 34055 dotest_sort trace-10 "${testcvs} -t -t -t annotate file1" \ 34056 " 34057 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34058 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34059 *dosrcs=1, repository_in= ) 34060 *local=0, which=1, aflag=0, 34061 *locktype=1, update_preload=(null) 34062 *-> Leaving do_recursion ( frame=${PFMT} ) 34063 *-> Lock_Cleanup() 34064 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace) 34065 *-> Simple_Lock_Cleanup() 34066 *-> Simple_Lock_Cleanup() 34067 *-> do_recursion ( frame=${PFMT} ) 34068 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34069 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34070 *-> lock_simple_remove() 34071 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 34072 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 34073 *-> remove_locks() 34074 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34075 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34076 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34077 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34078 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34079 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34080 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 34081 Annotations for file1" \ 34082 " 34083 34084 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34085 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34086 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34087 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34088 *dosrcs=0, repository_in=(null) ) 34089 *dosrcs=1, repository_in= ) 34090 *local=0, which=1, aflag=0, 34091 *local=0, which=1, aflag=0, 34092 *locktype=0, update_preload=(null) 34093 *locktype=1, update_preload=(null) 34094 *-> Forking server: ${CVS_SERVER} server 34095 *-> Leaving do_recursion ( frame=${PFMT} ) 34096 *-> do_recursion ( frame=${PFMT} ) 34097 *-> main loop with CVSROOT=${CVSROOT} 34098 *-> parse_cvsroot ( ${CVSROOT} ) 34099 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34100 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34101 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34102 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34103 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34104 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34105 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 34106 Annotations for file1 34107 S -> CVS_SERVER_SLEEP not set\. 34108 S -> Leaving do_recursion ( frame=${PFMT} ) 34109 S -> Lock_Cleanup() 34110 S -> Lock_Cleanup() 34111 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace) 34112 S -> Simple_Lock_Cleanup() 34113 S -> Simple_Lock_Cleanup() 34114 S -> Simple_Lock_Cleanup() 34115 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 34116 S -> do_cvs_command (annotate) 34117 S -> do_recursion ( frame=${PFMT} ) 34118 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34119 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34120 S -> lock_simple_remove() 34121 S -> remove_locks() 34122 S -> remove_locks() 34123 S -> serve_directory (\.) 34124 S -> server_cleanup() 34125 S -> server_cleanup() 34126 S -> server_notify() 34127 S -> server_pathname_check (file1) 34128 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34129 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34130 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34131 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} )" 34132 34133 dotest_sort \ 34134 trace-11 "${testcvs} -t -t -t rtag -r bp -b branch2 trace" \ 34135 " *aflag=0, repository=${CVSROOT_DIRNAME}/trace ) 34136 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 34137 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 34138 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 34139 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34140 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34141 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34142 *dosrcs=1, repository_in=${CVSROOT_DIRNAME}/trace ) 34143 *dosrcs=1, repository_in=${CVSROOT_DIRNAME}/trace ) 34144 *dosrcs=1, repository_in=${CVSROOT_DIRNAME}/trace ) 34145 *local=0, which=6, aflag=0, 34146 *local=0, which=6, aflag=0, 34147 *local=0, which=6, aflag=0, 34148 *locktype=1, update_preload=(null) 34149 *locktype=1, update_preload=trace 34150 *locktype=2, update_preload=trace 34151 *local_specified=0, mname=trace, msg=Tagging ) 34152 *mwhere=(null), mfile=(null), shorten=0, 34153 *-> Leaving do_recursion ( frame=${PFMT} ) 34154 *-> Leaving do_recursion ( frame=${PFMT} ) 34155 *-> Leaving do_recursion ( frame=${PFMT} ) 34156 *-> Leaving do_recursion ( frame=${PFMT} ) 34157 *-> Leaving do_recursion ( frame=${PFMT} ) 34158 *-> Leaving do_recursion ( frame=${PFMT} ) 34159 *-> Leaving do_recursion ( frame=${PFMT} ) 34160 *-> Leaving do_recursion ( frame=${PFMT} ) 34161 *-> Leaving do_recursion ( frame=${PFMT} ) 34162 *-> Lock_Cleanup() 34163 *-> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/taginfo, trace, ALL) 34164 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace) 34165 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace) 34166 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace/subdir) 34167 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace/subdir) 34168 *-> Simple_Lock_Cleanup() 34169 *-> Simple_Lock_Cleanup() 34170 *-> Simple_Lock_Cleanup() 34171 *-> Simple_Lock_Cleanup() 34172 *-> Simple_Lock_Cleanup() 34173 *-> Simple_Lock_Cleanup() 34174 *-> Simple_Lock_Cleanup() 34175 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, (null)) 34176 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.\*, (null)) 34177 *-> _lock_exists (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.pfl\.\*, (null)) 34178 *-> _lock_exists (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.\*, (null)) 34179 *-> check_fileproc ( ${CVSROOT_DIRNAME}/trace, trace/file1, ${CVSROOT_DIRNAME}/trace/file1,v ) 34180 *-> check_fileproc ( ${CVSROOT_DIRNAME}/trace, trace/file2, ${CVSROOT_DIRNAME}/trace/file2,v ) 34181 *-> do_module (trace, Tagging, NULL, branch2) 34182 *-> do_recursion ( frame=${PFMT} ) 34183 *-> do_recursion ( frame=${PFMT} ) 34184 *-> do_recursion ( frame=${PFMT} ) 34185 *-> do_recursion ( frame=${PFMT} ) 34186 *-> do_recursion ( frame=${PFMT} ) 34187 *-> do_recursion ( frame=${PFMT} ) 34188 *-> do_recursion ( frame=${PFMT} ) 34189 *-> do_recursion ( frame=${PFMT} ) 34190 *-> do_recursion ( frame=${PFMT} ) 34191 *-> fopen(${CVSROOT_DIRNAME}/CVSROOT/history,a) 34192 *-> lock_dir_for_write (${CVSROOT_DIRNAME}/trace) 34193 *-> lock_dir_for_write (${CVSROOT_DIRNAME}/trace/subdir) 34194 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34195 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34196 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34197 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34198 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34199 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34200 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 34201 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 34202 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 34203 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 34204 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 34205 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 34206 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 34207 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34208 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34209 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 34210 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, ) 34211 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, ) 34212 *-> lock_simple_remove() 34213 *-> lock_simple_remove() 34214 *-> lock_simple_remove() 34215 *-> lock_simple_remove() 34216 *-> lock_simple_remove() 34217 *-> lock_simple_remove() 34218 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 34219 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 34220 *-> promotable_exists (${CVSROOT_DIRNAME}/trace) 34221 *-> promotable_exists (${CVSROOT_DIRNAME}/trace/subdir) 34222 *-> rcs_cleanup() 34223 *-> readers_exist (${CVSROOT_DIRNAME}/trace) 34224 *-> readers_exist (${CVSROOT_DIRNAME}/trace/subdir) 34225 *-> remove_locks() 34226 *-> rename(${CVSROOT_DIRNAME}/trace/,file1,,${CVSROOT_DIRNAME}/trace/file1,v) 34227 *-> rename(${CVSROOT_DIRNAME}/trace/,file2,,${CVSROOT_DIRNAME}/trace/file2,v) 34228 *-> rtag_proc ( argc=1, argv=${PFMT}, xwhere=(null), 34229 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34230 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34231 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34232 *-> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 34233 *-> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 34234 *-> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 34235 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34236 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34237 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34238 *-> tag_check_valid ( name=bp, argc=0, argv=${PFMT}, local=0, 34239 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34240 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34241 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34242 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34243 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34244 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34245 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34246 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34247 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34248 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34249 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34250 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34251 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34252 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34253 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34254 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34255 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34256 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34257 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34258 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34259 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34260 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34261 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34262 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34263 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34264 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34265 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34266 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34267 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34268 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34269 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34270 ${SPROG} rtag: Tagging trace 34271 ${SPROG} rtag: Tagging trace/subdir" \ 34272 " 34273 *aflag=0, repository=${CVSROOT_DIRNAME}/trace ) 34274 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 34275 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 34276 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 34277 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34278 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34279 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34280 *dosrcs=1, repository_in=${CVSROOT_DIRNAME}/trace ) 34281 *dosrcs=1, repository_in=${CVSROOT_DIRNAME}/trace ) 34282 *dosrcs=1, repository_in=${CVSROOT_DIRNAME}/trace ) 34283 *local=0, which=6, aflag=0, 34284 *local=0, which=6, aflag=0, 34285 *local=0, which=6, aflag=0, 34286 *locktype=1, update_preload=(null) 34287 *locktype=1, update_preload=trace 34288 *locktype=2, update_preload=trace 34289 *local_specified=0, mname=trace, msg=Tagging ) 34290 *mwhere=(null), mfile=(null), shorten=0, 34291 *-> Forking server: ${CVS_SERVER} server 34292 *-> main loop with CVSROOT=${CVSROOT} 34293 *-> parse_cvsroot ( ${CVSROOT} ) 34294 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34295 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34296 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34297 S -> CVS_SERVER_SLEEP not set\. 34298 S -> Leaving do_recursion ( frame=${PFMT} ) 34299 S -> Leaving do_recursion ( frame=${PFMT} ) 34300 S -> Leaving do_recursion ( frame=${PFMT} ) 34301 S -> Leaving do_recursion ( frame=${PFMT} ) 34302 S -> Leaving do_recursion ( frame=${PFMT} ) 34303 S -> Leaving do_recursion ( frame=${PFMT} ) 34304 S -> Leaving do_recursion ( frame=${PFMT} ) 34305 S -> Leaving do_recursion ( frame=${PFMT} ) 34306 S -> Leaving do_recursion ( frame=${PFMT} ) 34307 S -> Lock_Cleanup() 34308 S -> Lock_Cleanup() 34309 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/taginfo, trace, ALL) 34310 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace) 34311 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace) 34312 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace/subdir) 34313 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace/subdir) 34314 S -> Simple_Lock_Cleanup() 34315 S -> Simple_Lock_Cleanup() 34316 S -> Simple_Lock_Cleanup() 34317 S -> Simple_Lock_Cleanup() 34318 S -> Simple_Lock_Cleanup() 34319 S -> Simple_Lock_Cleanup() 34320 S -> Simple_Lock_Cleanup() 34321 S -> Simple_Lock_Cleanup() 34322 S -> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, (null)) 34323 S -> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.\*, (null)) 34324 S -> _lock_exists (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.pfl\.\*, (null)) 34325 S -> _lock_exists (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.\*, (null)) 34326 S -> check_fileproc ( ${CVSROOT_DIRNAME}/trace, trace/file1, ${CVSROOT_DIRNAME}/trace/file1,v ) 34327 S -> check_fileproc ( ${CVSROOT_DIRNAME}/trace, trace/file2, ${CVSROOT_DIRNAME}/trace/file2,v ) 34328 S -> do_cvs_command (rtag) 34329 S -> do_module (trace, Tagging, NULL, branch2) 34330 S -> do_recursion ( frame=${PFMT} ) 34331 S -> do_recursion ( frame=${PFMT} ) 34332 S -> do_recursion ( frame=${PFMT} ) 34333 S -> do_recursion ( frame=${PFMT} ) 34334 S -> do_recursion ( frame=${PFMT} ) 34335 S -> do_recursion ( frame=${PFMT} ) 34336 S -> do_recursion ( frame=${PFMT} ) 34337 S -> do_recursion ( frame=${PFMT} ) 34338 S -> do_recursion ( frame=${PFMT} ) 34339 S -> fopen(${CVSROOT_DIRNAME}/CVSROOT/history,a) 34340 S -> lock_dir_for_write (${CVSROOT_DIRNAME}/trace) 34341 S -> lock_dir_for_write (${CVSROOT_DIRNAME}/trace/subdir) 34342 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34343 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34344 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34345 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34346 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34347 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34348 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 34349 S -> lock_name (${CVSROOT_DIRNAME}/trace, ) 34350 S -> lock_name (${CVSROOT_DIRNAME}/trace, ) 34351 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 34352 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 34353 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 34354 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 34355 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34356 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34357 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 34358 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, ) 34359 S -> lock_name (${CVSROOT_DIRNAME}/trace/subdir, ) 34360 S -> lock_simple_remove() 34361 S -> lock_simple_remove() 34362 S -> lock_simple_remove() 34363 S -> lock_simple_remove() 34364 S -> lock_simple_remove() 34365 S -> lock_simple_remove() 34366 S -> promotable_exists (${CVSROOT_DIRNAME}/trace) 34367 S -> promotable_exists (${CVSROOT_DIRNAME}/trace/subdir) 34368 S -> rcs_cleanup() 34369 S -> readers_exist (${CVSROOT_DIRNAME}/trace) 34370 S -> readers_exist (${CVSROOT_DIRNAME}/trace/subdir) 34371 S -> remove_locks() 34372 S -> remove_locks() 34373 S -> rename(${CVSROOT_DIRNAME}/trace/,file1,,${CVSROOT_DIRNAME}/trace/file1,v) 34374 S -> rename(${CVSROOT_DIRNAME}/trace/,file2,,${CVSROOT_DIRNAME}/trace/file2,v) 34375 S -> rtag_proc ( argc=1, argv=${PFMT}, xwhere=(null), 34376 S -> server_cleanup() 34377 S -> server_cleanup() 34378 S -> server_notify() 34379 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34380 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34381 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34382 S -> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 34383 S -> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 34384 S -> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 34385 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34386 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34387 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34388 S -> tag_check_valid ( name=bp, argc=0, argv=${PFMT}, local=0, 34389 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34390 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34391 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34392 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34393 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34394 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34395 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34396 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34397 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34398 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34399 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34400 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34401 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34402 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34403 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34404 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34405 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34406 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34407 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34408 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34409 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34410 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34411 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34412 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34413 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34414 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34415 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34416 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34417 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34418 ${SPROG} rtag: Tagging trace 34419 ${SPROG} rtag: Tagging trace/subdir" 34420 34421 dotest_sort trace-12 "${testcvs} -t -t -t status file1" \ 34422 " 34423 34424 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34425 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34426 *dosrcs=1, repository_in=(null) ) 34427 *local=0, which=1, aflag=0, 34428 *locktype=1, update_preload=(null) 34429 Repository revision: 1\.1\.1\.1 ${CVSROOT_DIRNAME}/trace/file1,v 34430 Sticky Date: (none) 34431 Sticky Options: (none) 34432 Sticky Tag: (none) 34433 Working revision: 1\.1\.1\.1 ${DATE} 34434 *-> Leaving do_recursion ( frame=${PFMT} ) 34435 *-> Lock_Cleanup() 34436 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace) 34437 *-> Simple_Lock_Cleanup() 34438 *-> Simple_Lock_Cleanup() 34439 *-> do_recursion ( frame=${PFMT} ) 34440 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34441 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34442 *-> lock_simple_remove() 34443 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 34444 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 34445 *-> remove_locks() 34446 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34447 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34448 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34449 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34450 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34451 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34452 =================================================================== 34453 File: file1 *Status: Up-to-date" \ 34454 " 34455 34456 34457 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34458 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34459 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34460 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34461 *dosrcs=0, repository_in=(null) ) 34462 *dosrcs=1, repository_in=(null) ) 34463 *local=0, which=1, aflag=0, 34464 *local=0, which=1, aflag=0, 34465 *locktype=0, update_preload=(null) 34466 *locktype=1, update_preload=(null) 34467 Repository revision: 1\.1\.1\.1 ${CVSROOT_DIRNAME}/trace/file1,v 34468 Sticky Date: (none) 34469 Sticky Options: (none) 34470 Sticky Tag: (none) 34471 Working revision: 1\.1\.1\.1 34472 *-> Forking server: ${CVS_SERVER} server 34473 *-> Leaving do_recursion ( frame=${PFMT} ) 34474 *-> do_recursion ( frame=${PFMT} ) 34475 *-> main loop with CVSROOT=${CVSROOT} 34476 *-> parse_cvsroot ( ${CVSROOT} ) 34477 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34478 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34479 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34480 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34481 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34482 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34483 =================================================================== 34484 File: file1 *Status: Up-to-date 34485 S -> CVS_SERVER_SLEEP not set\. 34486 S -> Leaving do_recursion ( frame=${PFMT} ) 34487 S -> Lock_Cleanup() 34488 S -> Lock_Cleanup() 34489 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace) 34490 S -> Simple_Lock_Cleanup() 34491 S -> Simple_Lock_Cleanup() 34492 S -> Simple_Lock_Cleanup() 34493 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 34494 S -> do_cvs_command (status) 34495 S -> do_recursion ( frame=${PFMT} ) 34496 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34497 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34498 S -> lock_simple_remove() 34499 S -> remove_locks() 34500 S -> remove_locks() 34501 S -> serve_directory (\.) 34502 S -> server_cleanup() 34503 S -> server_cleanup() 34504 S -> server_notify() 34505 S -> server_pathname_check (file1) 34506 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34507 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34508 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34509 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} )" 34510 34511 echo foo >> file1 34512 dotest_sort trace-13 "${testcvs} -t -t -t up -C file1" \ 34513 " *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34514 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34515 *dosrcs=1, repository_in=(null) ) 34516 *local=0, which=3, aflag=0, 34517 *locktype=1, update_preload=(null) 34518 *-> Leaving do_recursion ( frame=${PFMT} ) 34519 *-> Lock_Cleanup() 34520 *-> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.1\.1\.1, , , (function)) 34521 *-> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.1\.1\.1, , , file1) 34522 *-> RCS_cmp_file( ${CVSROOT_DIRNAME}/trace/file1,v, 1\.1\.1\.1, (null), , file1 ) 34523 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace) 34524 *-> Register(file1, 1\.1\.1\.1, ${DATE}, , ) 34525 *-> Simple_Lock_Cleanup() 34526 *-> Simple_Lock_Cleanup() 34527 *-> chmod(file1,[0-7][0-7]*) 34528 *-> copy(file1,\.#file1\.1\.1\.1\.1) 34529 *-> do_recursion ( frame=${PFMT} ) 34530 *-> fopen(${CVSROOT_DIRNAME}/CVSROOT/history,a) 34531 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34532 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34533 *-> lock_simple_remove() 34534 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 34535 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 34536 *-> remove_locks() 34537 *-> rename(CVS/Entries\.Backup,CVS/Entries) 34538 *-> rename(file1,CVS/,,file1) 34539 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34540 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34541 *-> unlink_file(CVS/Entries\.Log) 34542 *-> unlink_file_dir(CVS/,,file1) 34543 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34544 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34545 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34546 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34547 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34548 (Locally modified file1 moved to \.#file1\.1\.1\.1\.1) 34549 U file1" \ 34550 " 34551 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34552 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34553 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34554 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34555 *dosrcs=0, repository_in=(null) ) 34556 *dosrcs=1, repository_in=(null) ) 34557 *local=0, which=1, aflag=0, 34558 *local=0, which=3, aflag=0, 34559 *locktype=0, update_preload=(null) 34560 *locktype=1, update_preload=(null) 34561 *-> Forking server: ${CVS_SERVER} server 34562 *-> Leaving do_recursion ( frame=${PFMT} ) 34563 *-> Register(file1, 1\.1\.1\.1, ${DATE}, , ) 34564 *-> copy(file1,\.#file1\.1\.1\.1\.1) 34565 *-> do_recursion ( frame=${PFMT} ) 34566 *-> main loop with CVSROOT=${CVSROOT} 34567 *-> parse_cvsroot ( ${CVSROOT} ) 34568 *-> rename(\.new\.file1,file1) 34569 *-> rename(CVS/Entries\.Backup,CVS/Entries) 34570 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34571 *-> unlink_file(CVS/Entries\.Log) 34572 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34573 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34574 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34575 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34576 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34577 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34578 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34579 (Locally modified file1 moved to \.#file1\.1\.1\.1\.1) 34580 S -> CVS_SERVER_SLEEP not set\. 34581 S -> Leaving do_recursion ( frame=${PFMT} ) 34582 S -> Lock_Cleanup() 34583 S -> Lock_Cleanup() 34584 S -> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.1\.1\.1, , , (function)) 34585 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace) 34586 S -> Register(file1, 1\.1\.1\.1, M, , ) 34587 S -> Simple_Lock_Cleanup() 34588 S -> Simple_Lock_Cleanup() 34589 S -> Simple_Lock_Cleanup() 34590 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 34591 S -> do_cvs_command (update) 34592 S -> do_recursion ( frame=${PFMT} ) 34593 S -> fopen(${CVSROOT_DIRNAME}/CVSROOT/history,a) 34594 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34595 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34596 S -> lock_simple_remove() 34597 S -> remove_locks() 34598 S -> remove_locks() 34599 S -> rename(CVS/Entries\.Backup,CVS/Entries) 34600 S -> serve_directory (\.) 34601 S -> server_cleanup() 34602 S -> server_cleanup() 34603 S -> server_notify() 34604 S -> server_pathname_check (file1) 34605 S -> server_register(file1, 1\.1\.1\.1, M, , , , ) 34606 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34607 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34608 S -> unlink_file(CVS/Entries\.Log) 34609 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34610 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34611 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34612 U file1" 34613 echo foo >> file1 34614 dotest_sort trace-14 "${testcvs} -t -t -t ci -madd-data file1" \ 34615 " *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34616 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34617 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34618 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34619 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34620 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34621 *dosrcs=0, repository_in=(null) ) 34622 *dosrcs=1, repository_in=(null) ) 34623 *dosrcs=1, repository_in=(null) ) 34624 *local=0, which=1, aflag=0, 34625 *local=0, which=1, aflag=0, 34626 *local=0, which=1, aflag=0, 34627 *locktype=0, update_preload=(null) 34628 *locktype=0, update_preload=(null) 34629 *locktype=2, update_preload=(null) 34630 *-> Leaving do_recursion ( frame=${PFMT} ) 34631 *-> Leaving do_recursion ( frame=${PFMT} ) 34632 *-> Leaving do_recursion ( frame=${PFMT} ) 34633 *-> Lock_Cleanup() 34634 *-> Lock_Cleanup() 34635 *-> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/commitinfo, trace, ALL) 34636 *-> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/loginfo, trace, ALL) 34637 *-> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/verifymsg, trace, not ALL) 34638 *-> Promotable_Lock () 34639 *-> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, , , , (function)) 34640 *-> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.1, , -ko, ${tempname}) 34641 *-> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.1\.1\.1, , , (function)) 34642 *-> RCS_cmp_file( ${CVSROOT_DIRNAME}/trace/file1,v, (null), (null), , file1 ) 34643 *-> RCS_cmp_file( ${CVSROOT_DIRNAME}/trace/file1,v, 1\.1\.1\.1, (null), , file1 ) 34644 *-> Register(file1, 1\.2, ${DATE}, , ) 34645 *-> Simple_Lock_Cleanup() 34646 *-> Simple_Lock_Cleanup() 34647 *-> Simple_Lock_Cleanup() 34648 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 34649 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 34650 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.\*, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34651 *-> do_recursion ( frame=${PFMT} ) 34652 *-> do_recursion ( frame=${PFMT} ) 34653 *-> do_recursion ( frame=${PFMT} ) 34654 *-> fopen(${CVSROOT_DIRNAME}/CVSROOT/history,a) 34655 *-> lock_dir_for_write (${CVSROOT_DIRNAME}/trace) 34656 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34657 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34658 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34659 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 34660 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34661 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 34662 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 34663 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 34664 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 34665 *-> lock_simple_remove() 34666 *-> lock_simple_remove() 34667 *-> lock_tree_promotably (1, argv, 0, 1, 0) 34668 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 34669 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 34670 *-> promotable_exists (${CVSROOT_DIRNAME}/trace) 34671 *-> promotable_exists (${CVSROOT_DIRNAME}/trace) 34672 *-> promotable_lock(${CVSROOT_DIRNAME}/trace) 34673 *-> rcs_cleanup() 34674 *-> readers_exist (${CVSROOT_DIRNAME}/trace) 34675 *-> remove_locks() 34676 *-> remove_locks() 34677 *-> rename(${CVSROOT_DIRNAME}/trace/,file1,,${CVSROOT_DIRNAME}/trace/file1,v) 34678 *-> rename(CVS/Entries\.Backup,CVS/Entries) 34679 *-> set_lock (${CVSROOT_DIRNAME}/trace, 0) 34680 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34681 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34682 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34683 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34684 *-> unlink_file(${tempname}) 34685 *-> unlink_file(${tempname}) 34686 *-> unlink_file(CVS/Base/file1) 34687 *-> unlink_file(CVS/Entries\.Log) 34688 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34689 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34690 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34691 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34692 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34693 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34694 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34695 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34696 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34697 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34698 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34699 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34700 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34701 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34702 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34703 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34704 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34705 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34706 ${CVSROOT_DIRNAME}/trace/file1,v <-- file1 34707 new revision: 1\.2; previous revision: 1\.1" \ 34708 " 34709 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34710 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34711 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34712 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34713 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34714 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34715 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34716 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34717 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34718 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34719 *dosrcs=0, repository_in=(null) ) 34720 *dosrcs=0, repository_in=(null) ) 34721 *dosrcs=0, repository_in=(null) ) 34722 *dosrcs=1, repository_in=(null) ) 34723 *dosrcs=1, repository_in=(null) ) 34724 *local=0, which=1, aflag=0, 34725 *local=0, which=1, aflag=0, 34726 *local=0, which=1, aflag=0, 34727 *local=0, which=1, aflag=0, 34728 *local=0, which=1, aflag=0, 34729 *locktype=0, update_preload=(null) 34730 *locktype=0, update_preload=(null) 34731 *locktype=0, update_preload=(null) 34732 *locktype=0, update_preload=(null) 34733 *locktype=2, update_preload=(null) 34734 *-> Forking server: ${CVS_SERVER} server 34735 *-> Leaving do_recursion ( frame=${PFMT} ) 34736 *-> Leaving do_recursion ( frame=${PFMT} ) 34737 *-> Register(file1, 1\.2, ${DATE}, , ) 34738 *-> Sending file \`file1' to server 34739 *-> do_recursion ( frame=${PFMT} ) 34740 *-> do_recursion ( frame=${PFMT} ) 34741 *-> main loop with CVSROOT=${CVSROOT} 34742 *-> parse_cvsroot ( ${CVSROOT} ) 34743 *-> rename(CVS/Entries\.Backup,CVS/Entries) 34744 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34745 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34746 *-> unlink_file(CVS/Base/file1) 34747 *-> unlink_file(CVS/Entries\.Log) 34748 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34749 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34750 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34751 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34752 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34753 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34754 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34755 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34756 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34757 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34758 ${CVSROOT_DIRNAME}/trace/file1,v <-- file1 34759 S -> CVS_SERVER_SLEEP not set\. 34760 S -> Leaving do_recursion ( frame=${PFMT} ) 34761 S -> Leaving do_recursion ( frame=${PFMT} ) 34762 S -> Leaving do_recursion ( frame=${PFMT} ) 34763 S -> Lock_Cleanup() 34764 S -> Lock_Cleanup() 34765 S -> Lock_Cleanup() 34766 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/commitinfo, trace, ALL) 34767 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/loginfo, trace, ALL) 34768 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/verifymsg, trace, not ALL) 34769 S -> Promotable_Lock () 34770 S -> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, , , , (function)) 34771 S -> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.1, , -ko, ${tempname}) 34772 S -> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.1\.1\.1, , , (function)) 34773 S -> RCS_cmp_file( ${CVSROOT_DIRNAME}/trace/file1,v, (null), (null), , file1 ) 34774 S -> RCS_cmp_file( ${CVSROOT_DIRNAME}/trace/file1,v, 1\.1\.1\.1, (null), , file1 ) 34775 S -> Register(file1, 1\.2, ${DATE}, , ) 34776 S -> Simple_Lock_Cleanup() 34777 S -> Simple_Lock_Cleanup() 34778 S -> Simple_Lock_Cleanup() 34779 S -> Simple_Lock_Cleanup() 34780 S -> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 34781 S -> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 34782 S -> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.\*, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34783 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 34784 S -> do_cvs_command (commit) 34785 S -> do_recursion ( frame=${PFMT} ) 34786 S -> do_recursion ( frame=${PFMT} ) 34787 S -> do_recursion ( frame=${PFMT} ) 34788 S -> fopen(${CVSROOT_DIRNAME}/CVSROOT/history,a) 34789 S -> lock_dir_for_write (${CVSROOT_DIRNAME}/trace) 34790 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34791 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34792 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34793 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 34794 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34795 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 34796 S -> lock_name (${CVSROOT_DIRNAME}/trace, ) 34797 S -> lock_name (${CVSROOT_DIRNAME}/trace, ) 34798 S -> lock_name (${CVSROOT_DIRNAME}/trace, ) 34799 S -> lock_simple_remove() 34800 S -> lock_simple_remove() 34801 S -> lock_tree_promotably (1, argv, 0, 1, 0) 34802 S -> promotable_exists (${CVSROOT_DIRNAME}/trace) 34803 S -> promotable_exists (${CVSROOT_DIRNAME}/trace) 34804 S -> promotable_lock(${CVSROOT_DIRNAME}/trace) 34805 S -> rcs_cleanup() 34806 S -> readers_exist (${CVSROOT_DIRNAME}/trace) 34807 S -> remove_locks() 34808 S -> remove_locks() 34809 S -> remove_locks() 34810 S -> rename(${CVSROOT_DIRNAME}/trace/,file1,,${CVSROOT_DIRNAME}/trace/file1,v) 34811 S -> rename(CVS/Entries\.Backup,CVS/Entries) 34812 S -> serve_directory (\.) 34813 S -> server_cleanup() 34814 S -> server_cleanup() 34815 S -> server_notify() 34816 S -> server_pathname_check (file1) 34817 S -> server_pathname_check (file1) 34818 S -> server_pathname_check (file1) 34819 S -> server_register(file1, 1\.2, ${DATE}, , , , ) 34820 S -> set_lock (${CVSROOT_DIRNAME}/trace, 0) 34821 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34822 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34823 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34824 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34825 S -> unlink_file(${tempname}) 34826 S -> unlink_file(${tempname}) 34827 S -> unlink_file(CVS/Entries\.Log) 34828 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34829 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34830 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34831 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34832 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34833 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34834 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34835 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34836 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34837 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34838 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34839 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34840 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34841 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34842 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34843 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34844 new revision: 1\.2; previous revision: 1\.1" 34845 34846 dotest_fail_sort trace-15 "${testcvs} -t -t -t diff -r1.1 file1" \ 34847 " *aflag=0, repository= ) 34848 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34849 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34850 *dosrcs=1, repository_in=(null) ) 34851 *local=0, which=7, aflag=0, 34852 *locktype=1, update_preload=(null) 34853 *-> Leaving do_recursion ( frame=${PFMT} ) 34854 *-> Lock_Cleanup() 34855 *-> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.1, , , ${tempname}) 34856 *-> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.2, , , (function)) 34857 *-> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.2, , , ${tempname}) 34858 *-> RCS_cmp_file( ${CVSROOT_DIRNAME}/trace/file1,v, 1\.1, 1\.2, , file1 ) 34859 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace) 34860 *-> Simple_Lock_Cleanup() 34861 *-> Simple_Lock_Cleanup() 34862 *-> diff_file_nodiff (file1, 3) 34863 *-> do_recursion ( frame=${PFMT} ) 34864 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34865 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34866 *-> lock_simple_remove() 34867 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 34868 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 34869 *-> remove_locks() 34870 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34871 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34872 *-> tag_check_valid ( name=1\.1, argc=1, argv=${PFMT}, local=0, 34873 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34874 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34875 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34876 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34877 0a1 34878 =================================================================== 34879 > foo 34880 Index: file1 34881 RCS file: ${CVSROOT_DIRNAME}/trace/file1,v 34882 diff -r1\.1 -r1\.2 34883 retrieving revision 1\.1 34884 retrieving revision 1\.2" \ 34885 " 34886 *aflag=0, repository= ) 34887 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34888 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34889 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34890 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34891 *dosrcs=0, repository_in=(null) ) 34892 *dosrcs=1, repository_in=(null) ) 34893 *local=0, which=1, aflag=0, 34894 *local=0, which=7, aflag=0, 34895 *locktype=0, update_preload=(null) 34896 *locktype=1, update_preload=(null) 34897 *-> Forking server: ${CVS_SERVER} server 34898 *-> Leaving do_recursion ( frame=${PFMT} ) 34899 *-> do_recursion ( frame=${PFMT} ) 34900 *-> main loop with CVSROOT=${CVSROOT} 34901 *-> parse_cvsroot ( ${CVSROOT} ) 34902 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34903 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34904 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34905 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34906 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34907 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34908 0a1 34909 =================================================================== 34910 > foo 34911 Index: file1 34912 RCS file: ${CVSROOT_DIRNAME}/trace/file1,v 34913 S -> CVS_SERVER_SLEEP not set\. 34914 S -> Leaving do_recursion ( frame=${PFMT} ) 34915 S -> Lock_Cleanup() 34916 S -> Lock_Cleanup() 34917 S -> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.1, , , ${tempname}) 34918 S -> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.2, , , (function)) 34919 S -> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.2, , , ${tempname}) 34920 S -> RCS_cmp_file( ${CVSROOT_DIRNAME}/trace/file1,v, 1\.1, 1\.2, , file1 ) 34921 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace) 34922 S -> Simple_Lock_Cleanup() 34923 S -> Simple_Lock_Cleanup() 34924 S -> Simple_Lock_Cleanup() 34925 S -> diff_file_nodiff (file1, 3) 34926 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 34927 S -> do_cvs_command (diff) 34928 S -> do_recursion ( frame=${PFMT} ) 34929 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34930 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34931 S -> lock_simple_remove() 34932 S -> remove_locks() 34933 S -> remove_locks() 34934 S -> serve_directory (\.) 34935 S -> server_cleanup() 34936 S -> server_cleanup() 34937 S -> server_notify() 34938 S -> server_pathname_check (file1) 34939 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34940 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34941 S -> tag_check_valid ( name=1\.1, argc=1, argv=${PFMT}, local=0, 34942 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34943 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34944 diff -r1\.1 -r1\.2 34945 retrieving revision 1\.1 34946 retrieving revision 1\.2" 34947 34948 dotest_sort trace-16 "${testcvs} -t -t -t rdiff -rbp trace/file1" \ 34949 " *aflag=0, repository=${CVSROOT_DIRNAME}/trace ) 34950 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34951 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34952 *dosrcs=1, repository_in=${CVSROOT_DIRNAME}/trace ) 34953 *local=0, which=6, aflag=0, 34954 *locktype=1, update_preload=trace 34955 *-> Leaving do_recursion ( frame=${PFMT} ) 34956 *-> Lock_Cleanup() 34957 *-> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.1\.1\.1, bp, , ${tempname}) 34958 *-> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.2, , , ${tempname}) 34959 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace) 34960 *-> Simple_Lock_Cleanup() 34961 *-> Simple_Lock_Cleanup() 34962 *-> do_module (trace/file1, Patching, NULL, NULL) 34963 *-> do_recursion ( frame=${PFMT} ) 34964 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 34965 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 34966 *-> lock_simple_remove() 34967 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 34968 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 34969 *-> patch_proc ( (null), (null), (null), 0, 0, trace/file1, Patching ) 34970 *-> remove_locks() 34971 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 34972 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 34973 *-> tag_check_valid ( name=bp, argc=1, argv=${PFMT}, local=0, 34974 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34975 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34976 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34977 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34978 \*\*\* 0 \*\*\*\* 34979 \*\*\* trace/file1:1\.1\.1\.1 ${DATE} 34980 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 34981 ${PLUS} foo 34982 --- 1 ---- 34983 --- trace/file1 ${DATE} 34984 Index: trace/file1 34985 diff -c trace/file1:1\.1\.1\.1 trace/file1:1\.2" \ 34986 " 34987 *aflag=0, repository=${CVSROOT_DIRNAME}/trace ) 34988 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 34989 *direntproc=${PFMT}, dirleavproc=${PFMT}, 34990 *dosrcs=1, repository_in=${CVSROOT_DIRNAME}/trace ) 34991 *local=0, which=6, aflag=0, 34992 *locktype=1, update_preload=trace 34993 *-> Forking server: ${CVS_SERVER} server 34994 *-> main loop with CVSROOT=${CVSROOT} 34995 *-> parse_cvsroot ( ${CVSROOT} ) 34996 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34997 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34998 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 34999 \*\*\* 0 \*\*\*\* 35000 \*\*\* trace/file1:1\.1\.1\.1 ${DATE} 35001 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 35002 ${PLUS} foo 35003 --- 1 ---- 35004 --- trace/file1 ${DATE} 35005 Index: trace/file1 35006 S -> CVS_SERVER_SLEEP not set\. 35007 S -> Leaving do_recursion ( frame=${PFMT} ) 35008 S -> Lock_Cleanup() 35009 S -> Lock_Cleanup() 35010 S -> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.1\.1\.1, bp, , ${tempname}) 35011 S -> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.2, , , ${tempname}) 35012 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace) 35013 S -> Simple_Lock_Cleanup() 35014 S -> Simple_Lock_Cleanup() 35015 S -> Simple_Lock_Cleanup() 35016 S -> do_cvs_command (rdiff) 35017 S -> do_module (trace/file1, Patching, NULL, NULL) 35018 S -> do_recursion ( frame=${PFMT} ) 35019 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 35020 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 35021 S -> lock_simple_remove() 35022 S -> patch_proc ( (null), (null), (null), 0, 0, trace/file1, Patching ) 35023 S -> remove_locks() 35024 S -> remove_locks() 35025 S -> server_cleanup() 35026 S -> server_cleanup() 35027 S -> server_notify() 35028 S -> server_pathname_check (file1) 35029 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 35030 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35031 S -> tag_check_valid ( name=bp, argc=1, argv=${PFMT}, local=0, 35032 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35033 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35034 diff -c trace/file1:1\.1\.1\.1 trace/file1:1\.2" 35035 35036 dotest_sort trace-17 "${testcvs} -t -t -t rm -f file1" \ 35037 " *callerdat=${PFMT}, argc=1, argv=${PFMT}, 35038 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35039 *dosrcs=1, repository_in=(null) ) 35040 *local=0, which=1, aflag=0, 35041 *locktype=1, update_preload=(null) 35042 *-> Leaving do_recursion ( frame=${PFMT} ) 35043 *-> Lock_Cleanup() 35044 *-> Reader_Lock(${CVSROOT_DIRNAME}/trace) 35045 *-> Register(file1, -1\.2, ${DATE}, , ) 35046 *-> Simple_Lock_Cleanup() 35047 *-> Simple_Lock_Cleanup() 35048 *-> do_recursion ( frame=${PFMT} ) 35049 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 35050 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 35051 *-> lock_simple_remove() 35052 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 35053 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 35054 *-> remove_locks() 35055 *-> rename(CVS/Entries\.Backup,CVS/Entries) 35056 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 35057 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35058 *-> unlink_file(CVS/Entries\.Log) 35059 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35060 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35061 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35062 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35063 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35064 ${SPROG} remove: scheduling \`file1' for removal 35065 ${SPROG} remove: use \`${SPROG} commit' to remove this file permanently" \ 35066 " 35067 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 35068 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 35069 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 35070 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35071 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35072 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35073 *dosrcs=0, repository_in=(null) ) 35074 *dosrcs=0, repository_in=(null) ) 35075 *dosrcs=1, repository_in=(null) ) 35076 *local=0, which=1, aflag=0, 35077 *local=0, which=1, aflag=0, 35078 *local=0, which=1, aflag=0, 35079 *locktype=0, update_preload=(null) 35080 *locktype=0, update_preload=(null) 35081 *locktype=1, update_preload=(null) 35082 *-> Forking server: ${CVS_SERVER} server 35083 *-> Leaving do_recursion ( frame=${PFMT} ) 35084 *-> Leaving do_recursion ( frame=${PFMT} ) 35085 *-> Register(file1, -1\.2, dummy timestamp, , ) 35086 *-> do_recursion ( frame=${PFMT} ) 35087 *-> do_recursion ( frame=${PFMT} ) 35088 *-> main loop with CVSROOT=${CVSROOT} 35089 *-> parse_cvsroot ( ${CVSROOT} ) 35090 *-> rename(CVS/Entries\.Backup,CVS/Entries) 35091 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35092 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35093 *-> unlink_file(CVS/Entries\.Log) 35094 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35095 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35096 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35097 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35098 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35099 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35100 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35101 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35102 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35103 S -> CVS_SERVER_SLEEP not set\. 35104 S -> Leaving do_recursion ( frame=${PFMT} ) 35105 S -> Lock_Cleanup() 35106 S -> Lock_Cleanup() 35107 S -> Reader_Lock(${CVSROOT_DIRNAME}/trace) 35108 S -> Register(file1, -1\.2, , , ) 35109 S -> Simple_Lock_Cleanup() 35110 S -> Simple_Lock_Cleanup() 35111 S -> Simple_Lock_Cleanup() 35112 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 35113 S -> do_cvs_command (remove) 35114 S -> do_recursion ( frame=${PFMT} ) 35115 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 35116 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 35117 S -> lock_simple_remove() 35118 S -> remove_locks() 35119 S -> remove_locks() 35120 S -> rename(CVS/Entries\.Backup,CVS/Entries) 35121 S -> serve_directory (\.) 35122 S -> server_cleanup() 35123 S -> server_cleanup() 35124 S -> server_notify() 35125 S -> server_pathname_check (file1) 35126 S -> server_register(file1, -1\.2, , , , , ) 35127 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 35128 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35129 S -> unlink_file(CVS/Entries\.Log) 35130 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35131 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35132 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35133 ${SPROG} remove: scheduling \`file1' for removal 35134 ${SPROG} remove: use \`${SPROG} commit' to remove this file permanently" 35135 35136 dotest_sort trace-18 "${testcvs} -t -t -t ci -mremove file1" \ 35137 " *callerdat=${PFMT}, argc=1, argv=${PFMT}, 35138 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 35139 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 35140 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35141 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35142 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35143 *dosrcs=0, repository_in=(null) ) 35144 *dosrcs=1, repository_in=(null) ) 35145 *dosrcs=1, repository_in=(null) ) 35146 *local=0, which=1, aflag=0, 35147 *local=0, which=1, aflag=0, 35148 *local=0, which=1, aflag=0, 35149 *locktype=0, update_preload=(null) 35150 *locktype=0, update_preload=(null) 35151 *locktype=2, update_preload=(null) 35152 *-> Leaving do_recursion ( frame=${PFMT} ) 35153 *-> Leaving do_recursion ( frame=${PFMT} ) 35154 *-> Leaving do_recursion ( frame=${PFMT} ) 35155 *-> Lock_Cleanup() 35156 *-> Lock_Cleanup() 35157 *-> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/commitinfo, trace, ALL) 35158 *-> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/loginfo, trace, ALL) 35159 *-> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/verifymsg, trace, not ALL) 35160 *-> Promotable_Lock () 35161 *-> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, , , , file1) 35162 *-> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.2, , -ko, ${tempname}) 35163 *-> Scratch_Entry(file1) 35164 *-> Simple_Lock_Cleanup() 35165 *-> Simple_Lock_Cleanup() 35166 *-> Simple_Lock_Cleanup() 35167 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, #cvs.pfl\.${hostname}\.[0-9][0-9]*) 35168 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, #cvs.pfl\.${hostname}\.[0-9][0-9]*) 35169 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.\*, #cvs.rfl\.${hostname}\.[0-9][0-9]*) 35170 *-> do_recursion ( frame=${PFMT} ) 35171 *-> do_recursion ( frame=${PFMT} ) 35172 *-> do_recursion ( frame=${PFMT} ) 35173 *-> fopen(${CVSROOT_DIRNAME}/CVSROOT/history,a) 35174 *-> lock_dir_for_write (${CVSROOT_DIRNAME}/trace) 35175 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 35176 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 35177 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 35178 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 35179 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 35180 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 35181 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 35182 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 35183 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 35184 *-> lock_simple_remove() 35185 *-> lock_simple_remove() 35186 *-> lock_tree_promotably (1, argv, 0, 1, 0) 35187 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 35188 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 35189 *-> promotable_exists (${CVSROOT_DIRNAME}/trace) 35190 *-> promotable_exists (${CVSROOT_DIRNAME}/trace) 35191 *-> promotable_lock(${CVSROOT_DIRNAME}/trace) 35192 *-> rcs_cleanup() 35193 *-> readers_exist (${CVSROOT_DIRNAME}/trace) 35194 *-> remove_locks() 35195 *-> remove_locks() 35196 *-> rename(${CVSROOT_DIRNAME}/trace/,file1,,${CVSROOT_DIRNAME}/trace/file1,v) 35197 *-> rename(${CVSROOT_DIRNAME}/trace/,file1,,${CVSROOT_DIRNAME}/trace/file1,v) 35198 *-> rename(${CVSROOT_DIRNAME}/trace/,file1,,${CVSROOT_DIRNAME}/trace/file1,v) 35199 *-> rename(CVS/Entries\.Backup,CVS/Entries) 35200 *-> set_lock (${CVSROOT_DIRNAME}/trace, 0) 35201 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 35202 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35203 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35204 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35205 *-> unlink_file(${tempname}) 35206 *-> unlink_file(${tempname}) 35207 *-> unlink_file(CVS/Entries\.Log) 35208 *-> unlink_file(file1) 35209 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35210 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35211 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35212 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35213 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35214 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35215 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35216 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35217 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35218 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35219 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35220 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35221 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35222 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35223 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35224 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35225 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35226 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35227 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35228 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35229 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35230 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35231 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35232 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35233 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35234 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35235 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35236 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35237 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35238 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35239 ${CVSROOT_DIRNAME}/trace/file1,v <-- file1 35240 new revision: delete; previous revision: 1\.2" \ 35241 " 35242 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 35243 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 35244 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 35245 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 35246 *callerdat=${PFMT}, argc=1, argv=${PFMT}, 35247 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35248 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35249 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35250 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35251 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35252 *dosrcs=0, repository_in=(null) ) 35253 *dosrcs=0, repository_in=(null) ) 35254 *dosrcs=0, repository_in=(null) ) 35255 *dosrcs=1, repository_in=(null) ) 35256 *dosrcs=1, repository_in=(null) ) 35257 *local=0, which=1, aflag=0, 35258 *local=0, which=1, aflag=0, 35259 *local=0, which=1, aflag=0, 35260 *local=0, which=1, aflag=0, 35261 *local=0, which=1, aflag=0, 35262 *locktype=0, update_preload=(null) 35263 *locktype=0, update_preload=(null) 35264 *locktype=0, update_preload=(null) 35265 *locktype=0, update_preload=(null) 35266 *locktype=2, update_preload=(null) 35267 *-> Forking server: ${CVS_SERVER} server 35268 *-> Leaving do_recursion ( frame=${PFMT} ) 35269 *-> Leaving do_recursion ( frame=${PFMT} ) 35270 *-> Scratch_Entry(file1) 35271 *-> do_recursion ( frame=${PFMT} ) 35272 *-> do_recursion ( frame=${PFMT} ) 35273 *-> main loop with CVSROOT=${CVSROOT} 35274 *-> parse_cvsroot ( ${CVSROOT} ) 35275 *-> rename(CVS/Entries\.Backup,CVS/Entries) 35276 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35277 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35278 *-> unlink_file(CVS/Entries\.Log) 35279 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35280 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35281 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35282 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35283 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35284 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35285 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35286 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35287 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35288 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35289 ${CVSROOT_DIRNAME}/trace/file1,v <-- file1 35290 S -> CVS_SERVER_SLEEP not set\. 35291 S -> Leaving do_recursion ( frame=${PFMT} ) 35292 S -> Leaving do_recursion ( frame=${PFMT} ) 35293 S -> Leaving do_recursion ( frame=${PFMT} ) 35294 S -> Lock_Cleanup() 35295 S -> Lock_Cleanup() 35296 S -> Lock_Cleanup() 35297 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/commitinfo, trace, ALL) 35298 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/loginfo, trace, ALL) 35299 S -> Parse_Info (${CVSROOT_DIRNAME}/CVSROOT/verifymsg, trace, not ALL) 35300 S -> Promotable_Lock () 35301 S -> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, , , , file1) 35302 S -> RCS_checkout (${CVSROOT_DIRNAME}/trace/file1,v, 1\.2, , -ko, ${tempname}) 35303 S -> Scratch_Entry(file1) 35304 S -> Simple_Lock_Cleanup() 35305 S -> Simple_Lock_Cleanup() 35306 S -> Simple_Lock_Cleanup() 35307 S -> Simple_Lock_Cleanup() 35308 S -> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, #cvs.pfl\.${hostname}\.[0-9][0-9]*) 35309 S -> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, #cvs.pfl\.${hostname}\.[0-9][0-9]*) 35310 S -> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.\*, #cvs.rfl\.${hostname}\.[0-9][0-9]*) 35311 S -> dirswitch (\., ${CVSROOT_DIRNAME}/trace) 35312 S -> do_cvs_command (commit) 35313 S -> do_recursion ( frame=${PFMT} ) 35314 S -> do_recursion ( frame=${PFMT} ) 35315 S -> do_recursion ( frame=${PFMT} ) 35316 S -> fopen(${CVSROOT_DIRNAME}/CVSROOT/history,a) 35317 S -> lock_dir_for_write (${CVSROOT_DIRNAME}/trace) 35318 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 35319 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 35320 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 35321 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 35322 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 35323 S -> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 35324 S -> lock_name (${CVSROOT_DIRNAME}/trace, ) 35325 S -> lock_name (${CVSROOT_DIRNAME}/trace, ) 35326 S -> lock_name (${CVSROOT_DIRNAME}/trace, ) 35327 S -> lock_simple_remove() 35328 S -> lock_simple_remove() 35329 S -> lock_tree_promotably (1, argv, 0, 1, 0) 35330 S -> promotable_exists (${CVSROOT_DIRNAME}/trace) 35331 S -> promotable_exists (${CVSROOT_DIRNAME}/trace) 35332 S -> promotable_lock(${CVSROOT_DIRNAME}/trace) 35333 S -> rcs_cleanup() 35334 S -> readers_exist (${CVSROOT_DIRNAME}/trace) 35335 S -> remove_locks() 35336 S -> remove_locks() 35337 S -> remove_locks() 35338 S -> rename(${CVSROOT_DIRNAME}/trace/,file1,,${CVSROOT_DIRNAME}/trace/file1,v) 35339 S -> rename(${CVSROOT_DIRNAME}/trace/,file1,,${CVSROOT_DIRNAME}/trace/file1,v) 35340 S -> rename(${CVSROOT_DIRNAME}/trace/,file1,,${CVSROOT_DIRNAME}/trace/file1,v) 35341 S -> rename(CVS/Entries\.Backup,CVS/Entries) 35342 S -> serve_directory (\.) 35343 S -> server_cleanup() 35344 S -> server_cleanup() 35345 S -> server_notify() 35346 S -> server_pathname_check (file1) 35347 S -> server_pathname_check (file1) 35348 S -> server_pathname_check (file1) 35349 S -> set_lock (${CVSROOT_DIRNAME}/trace, 0) 35350 S -> set_lock (${CVSROOT_DIRNAME}/trace, 1) 35351 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35352 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35353 S -> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35354 S -> unlink_file(${tempname}) 35355 S -> unlink_file(${tempname}) 35356 S -> unlink_file(CVS/Entries\.Log) 35357 S -> unlink_file(file1) 35358 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35359 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35360 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35361 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35362 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35363 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35364 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35365 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35366 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35367 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35368 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35369 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35370 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35371 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35372 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35373 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35374 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35375 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35376 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35377 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35378 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35379 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35380 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35381 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35382 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35383 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35384 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35385 S -> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35386 done 35387 new revision: delete; previous revision: 1\.2" 35388 35389 # SGI IRIX seems to have problems with the stdout and stderr 35390 # mix for this test, so separate them. 35391 dotest_sort trace-19 "${testcvs} -t -t -t history file1 2>stderr19" \ 35392 "O ${ISODATE} ${username} trace =trace= ${TESTDIR}/trace/\*" \ 35393 "O ${ISODATE} ${username} trace =trace= <remote>/\*" 35394 dotest_sort trace-19stderr "sort < stderr19" \ 35395 " *-> Lock_Cleanup() 35396 *-> Simple_Lock_Cleanup() 35397 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 35398 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 35399 *-> remove_locks() 35400 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35401 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} )" \ 35402 " 35403 *-> Forking server: ${CVS_SERVER} server 35404 *-> main loop with CVSROOT=${CVSROOT} 35405 *-> parse_cvsroot ( ${CVSROOT} ) 35406 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35407 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35408 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35409 S -> CVS_SERVER_SLEEP not set\. 35410 S -> Lock_Cleanup() 35411 S -> Lock_Cleanup() 35412 S -> Simple_Lock_Cleanup() 35413 S -> Simple_Lock_Cleanup() 35414 S -> do_cvs_command (history) 35415 S -> remove_locks() 35416 S -> remove_locks() 35417 S -> server_cleanup() 35418 S -> server_cleanup() 35419 S -> server_notify()" 35420 rm stderr19 35421 35422 cd .. 35423 dotest_sort \ 35424 trace-20 "echo yes | ${testcvs} -t -t -t release -d trace" \ 35425 " *callerdat=${PFMT}, argc=0, argv=${PFMT}, 35426 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 35427 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 35428 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35429 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35430 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35431 *dosrcs=0, repository_in=(null) ) 35432 *dosrcs=0, repository_in=(null) ) 35433 *dosrcs=0, repository_in=(null) ) 35434 *local=0, which=1, aflag=0, 35435 *local=0, which=1, aflag=0, 35436 *local=0, which=1, aflag=0, 35437 *locktype=0, update_preload=(null) 35438 *locktype=0, update_preload=(null) 35439 *locktype=2, update_preload=(null) 35440 *-> Leaving do_recursion ( frame=${PFMT} ) 35441 *-> Leaving do_recursion ( frame=${PFMT} ) 35442 *-> Leaving do_recursion ( frame=${PFMT} ) 35443 *-> Leaving do_recursion ( frame=${PFMT} ) 35444 *-> Leaving do_recursion ( frame=${PFMT} ) 35445 *-> Leaving do_recursion ( frame=${PFMT} ) 35446 *-> Leaving do_recursion ( frame=${PFMT} ) 35447 *-> Leaving do_recursion ( frame=${PFMT} ) 35448 *-> Leaving do_recursion ( frame=${PFMT} ) 35449 *-> Lock_Cleanup() 35450 *-> Lock_Cleanup() 35451 *-> Promotable_Lock () 35452 *-> Simple_Lock_Cleanup() 35453 *-> Simple_Lock_Cleanup() 35454 *-> Simple_Lock_Cleanup() 35455 *-> Simple_Lock_Cleanup() 35456 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 35457 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.\*, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 35458 *-> _lock_exists (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.\*, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 35459 *-> _lock_exists (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.pfl\.\*, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 35460 *-> _lock_exists (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.pfl\.\*, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 35461 *-> _lock_exists (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.\*, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 35462 *-> do_recursion ( frame=${PFMT} ) 35463 *-> do_recursion ( frame=${PFMT} ) 35464 *-> do_recursion ( frame=${PFMT} ) 35465 *-> do_recursion ( frame=${PFMT} ) 35466 *-> do_recursion ( frame=${PFMT} ) 35467 *-> do_recursion ( frame=${PFMT} ) 35468 *-> do_recursion ( frame=${PFMT} ) 35469 *-> do_recursion ( frame=${PFMT} ) 35470 *-> do_recursion ( frame=${PFMT} ) 35471 *-> fopen(${CVSROOT_DIRNAME}/CVSROOT/history,a) 35472 *-> lock_dir_for_write (${CVSROOT_DIRNAME}/trace) 35473 *-> lock_dir_for_write (${CVSROOT_DIRNAME}/trace/subdir) 35474 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 35475 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 35476 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.lock) 35477 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 35478 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 35479 *-> lock_name (${CVSROOT_DIRNAME}/trace, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 35480 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 35481 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 35482 *-> lock_name (${CVSROOT_DIRNAME}/trace, ) 35483 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 35484 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 35485 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.lock) 35486 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.pfl\.${hostname}\.[0-9][0-9]*) 35487 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.rfl\.${hostname}\.[0-9][0-9]*) 35488 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, #cvs\.wfl\.${hostname}\.[0-9][0-9]*) 35489 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, ) 35490 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, ) 35491 *-> lock_name (${CVSROOT_DIRNAME}/trace/subdir, ) 35492 *-> lock_simple_remove() 35493 *-> lock_simple_remove() 35494 *-> lock_simple_remove() 35495 *-> lock_simple_remove() 35496 *-> lock_tree_promotably (0, argv, 0, 1, 0) 35497 *-> main loop with CVSROOT=${CVSROOT_DIRNAME} 35498 *-> parse_cvsroot ( ${CVSROOT_DIRNAME} ) 35499 *-> promotable_exists (${CVSROOT_DIRNAME}/trace) 35500 *-> promotable_exists (${CVSROOT_DIRNAME}/trace) 35501 *-> promotable_exists (${CVSROOT_DIRNAME}/trace/subdir) 35502 *-> promotable_exists (${CVSROOT_DIRNAME}/trace/subdir) 35503 *-> promotable_lock(${CVSROOT_DIRNAME}/trace) 35504 *-> promotable_lock(${CVSROOT_DIRNAME}/trace/subdir) 35505 *-> readers_exist (${CVSROOT_DIRNAME}/trace) 35506 *-> readers_exist (${CVSROOT_DIRNAME}/trace/subdir) 35507 *-> remove_locks() 35508 *-> remove_locks() 35509 *-> run_popen(${testcvs} -n -q -d ${CVSROOT_DIRNAME} update,r) 35510 *-> set_lock (${CVSROOT_DIRNAME}/trace, 0) 35511 *-> set_lock (${CVSROOT_DIRNAME}/trace, 1) 35512 *-> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 0) 35513 *-> set_lock (${CVSROOT_DIRNAME}/trace/subdir, 1) 35514 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35515 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35516 *-> unlink_file_dir(trace) 35517 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35518 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35519 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35520 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35521 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35522 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35523 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35524 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35525 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35526 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35527 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35528 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35529 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35530 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35531 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35532 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35533 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35534 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35535 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35536 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35537 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35538 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35539 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35540 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35541 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35542 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35543 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35544 Are you sure you want to release (and delete) directory \`trace': *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35545 You have \[0\] altered files in this repository\." \ 35546 " 35547 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 35548 *callerdat=${PFMT}, argc=0, argv=${PFMT}, 35549 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35550 *direntproc=${PFMT}, dirleavproc=${PFMT}, 35551 *dosrcs=0, repository_in=(null) ) 35552 *dosrcs=0, repository_in=(null) ) 35553 *local=0, which=1, aflag=0, 35554 *local=0, which=1, aflag=0, 35555 *locktype=0, update_preload=(null) 35556 *locktype=0, update_preload=(null) 35557 *-> Forking server: ${CVS_SERVER} server 35558 *-> Leaving do_recursion ( frame=${PFMT} ) 35559 *-> Leaving do_recursion ( frame=${PFMT} ) 35560 *-> Leaving do_recursion ( frame=${PFMT} ) 35561 *-> Leaving do_recursion ( frame=${PFMT} ) 35562 *-> Leaving do_recursion ( frame=${PFMT} ) 35563 *-> Leaving do_recursion ( frame=${PFMT} ) 35564 *-> do_recursion ( frame=${PFMT} ) 35565 *-> do_recursion ( frame=${PFMT} ) 35566 *-> do_recursion ( frame=${PFMT} ) 35567 *-> do_recursion ( frame=${PFMT} ) 35568 *-> do_recursion ( frame=${PFMT} ) 35569 *-> do_recursion ( frame=${PFMT} ) 35570 *-> main loop with CVSROOT=${CVSROOT} 35571 *-> parse_cvsroot ( ${CVSROOT} ) 35572 *-> run_popen(${testcvs} -n -q -d ${CVSROOT} update,r) 35573 *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35574 *-> unlink_file_dir(trace) 35575 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35576 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35577 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35578 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35579 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35580 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35581 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35582 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35583 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35584 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35585 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35586 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35587 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35588 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35589 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35590 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35591 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35592 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35593 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35594 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35595 *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} ) 35596 Are you sure you want to release (and delete) directory \`trace': *-> start_recursion ( fileproc=${PFMT}, filesdoneproc=${PFMT}, 35597 S -> CVS_SERVER_SLEEP not set\. 35598 S -> Lock_Cleanup() 35599 S -> Lock_Cleanup() 35600 S -> Simple_Lock_Cleanup() 35601 S -> Simple_Lock_Cleanup() 35602 S -> do_cvs_command (release) 35603 S -> fopen(${CVSROOT_DIRNAME}/CVSROOT/history,a) 35604 S -> remove_locks() 35605 S -> remove_locks() 35606 S -> server_cleanup() 35607 S -> server_cleanup() 35608 S -> server_notify() 35609 S -> server_notify() 35610 S -> server_notify() 35611 You have \[0\] altered files in this repository\." 35612 35613 dokeep 35614 cd .. 35615 rm -fr trace 35616 modify_repo rm -fr $CVSROOT_DIRNAME/trace 35617 ;; 35618 35619 35620 35621 *) 35622 echo $what is not the name of a test -- ignored 35623 ;; 35624 esac 35625 35626 # Sanity check sanity.sh. :) 35627 # 35628 # Test our exit directory so that tests that exit in an incorrect directory 35629 # are noticed during single test runs. 35630 # 35631 # FIXME? 35632 # Sparc Solaris 9 is dereferencing paths here as if /bin/pwd were 35633 # called when /tmp is a symlink. This might be a new problem with this 35634 # test, but since this was recently tested I think it more likely to be 35635 # A Solaris issue. 35636 if test "x$TESTDIR" != "x`pwd`"; then 35637 fail "cleanup: PWD != TESTDIR (\``pwd`' != \`$TESTDIR')" 35638 fi 35639 35640 # Test that the last test didn't overwrite any write proxy configuration 35641 # which may be in place. 35642 if $proxy; then 35643 problem=false 35644 for file in \ 35645 $SECONDARY_CVSROOT_DIRNAME/CVSROOT/config \ 35646 $CVSROOT_DIRNAME/CVSROOT/config \ 35647 $SECONDARY_CVSROOT_DIRNAME/CVSROOT/loginfo \ 35648 $CVSROOT_DIRNAME/CVSROOT/loginfo \ 35649 $SECONDARY_CVSROOT_DIRNAME/CVSROOT/postadmin \ 35650 $CVSROOT_DIRNAME/CVSROOT/postadmin \ 35651 $SECONDARY_CVSROOT_DIRNAME/CVSROOT/posttag \ 35652 $CVSROOT_DIRNAME/CVSROOT/posttag \ 35653 $SECONDARY_CVSROOT_DIRNAME/CVSROOT/postwatch \ 35654 $CVSROOT_DIRNAME/CVSROOT/postwatch; do 35655 if cmp $file $TESTDIR/`basename $file`-clean >/dev/null 2>&1; then 35656 :; 35657 else 35658 echo "\`$file' and \`$TESTDIR/`basename $file`-clean' differ." \ 35659 >>$LOGFILE 35660 problem=: 35661 fi 35662 done 35663 if $problem; then 35664 fail "cleanup: write proxy configuration not preserved" 35665 fi 35666 fi 35667 35668 if $remote && test "$servercvs_orig" != "$servercvs" >/dev/null 2>&1; then 35669 fail "test slagged \$servercvs" 35670 fi 35671 35672 # Reset val-tags to a pristine state. 35673 if test -s $CVSROOT_DIRNAME/CVSROOT/val-tags; then 35674 modify_repo ":" > $CVSROOT_DIRNAME/CVSROOT/val-tags 35675 fi 35676 verify_tmp_empty "post $what" 35677 35678 done # The big loop 35679 35680 # Set up summary data for output. 35681 skippedoutput= 35682 warningsoutput= 35683 extendedinfo= 35684 if test $skipped -ne 0; then 35685 skippedoutput="$skipped test group" 35686 if test $skipped -ne 1; then 35687 skippedoutput="${skippedoutput}s" 35688 fi 35689 skippedoutput="$skippedoutput skipped" 35690 fi 35691 if test $warnings -ne 0; then 35692 warningsoutput="$warnings test" 35693 if test $warnings -ne 1; then 35694 warningsoutput="${warningsoutput}s" 35695 fi 35696 warningsoutput="$warningsoutput passed with warnings" 35697 fi 35698 if test -n "$skippedoutput" || test -n "$warningsoutput"; then 35699 extendedinfo=" (" 35700 if test -n "$skippedoutput"; then 35701 extendedinfo="$extendedinfo$skippedoutput" 35702 fi 35703 if test -n "$skippedoutput" && test -n "$warningsoutput"; then 35704 extendedinfo="$extendedinfo and " 35705 fi 35706 if test -n "$warningsoutput"; then 35707 extendedinfo="$extendedinfo$warningsoutput" 35708 fi 35709 extendedinfo="$extendedinfo)" 35710 fi 35711 35712 echo "OK, all $passed tests passed$extendedinfo." 35713 35714 # TODO: 35715 # * Test `cvs update -d foo' (where foo does not exist). 35716 # * Test `cvs update foo bar' (where foo and bar are both from the 35717 # same directory in the repository). Suppose one is a branch--make 35718 # sure that both directories get updated with the respective correct 35719 # thing. 35720 # * `cvs update ../foo'. Also ../../foo ./../foo foo/../../bar /foo/bar 35721 # foo/.././../bar foo/../bar etc. 35722 # * Test all flags in modules file. 35723 # Test that ciprog gets run both on checkin in that directory, or a 35724 # higher-level checkin which recurses into it. 35725 # * Test operations on a directory that contains other directories but has 35726 # no files of its own. 35727 # * -t global option 35728 # * cvs rm followed by cvs add or vice versa (with no checkin in between). 35729 # * cvs rm twice (should be a nice error message). 35730 # * -P option to checkout--(a) refrains from checking out new empty dirs, 35731 # (b) prunes empty dirs already there. 35732 # * Test that cvs -d `hostname`:${TESTDIR}/non/existent co foo 35733 # gives an appropriate error (e.g. 35734 # Cannot access ${TESTDIR}/non-existent/CVSROOT 35735 # No such file or directory). 35736 # (like basica-9, but for remote). 35737 # * Test ability to send notifications in response to watches. (currently 35738 # hard to test because CVS doesn't send notifications if username is the 35739 # same). 35740 # * Test the contents of adm files other than Root and Repository. 35741 # Entries seems the next most important thing. 35742 # * Test the following compatibility issues: 35743 # - The filler fields in "D" entries in CVS/Entries get preserved 35744 # (per cvs.texinfo). 35745 # - Unrecognized entry types in CVS/Entries get ignored (looks like 35746 # this needs to be documented in cvs.texinfo, but is not) 35747 # - Test that unrecognized files in CVS directories (e.g. CVS/Foobar) 35748 # are ignored (per cvs.texinfo). 35749 # - Test 'cvs history' with symlinks in the path to the working directory. 35750 # - Remove most of the CVS_SERVER stuff after a reasonable amount of time. 35751 # The "fork" & "client" series of tests should be left. 4/2/00, CVS 35752 # 1.11.0.1 was altered so that it would default to program_name (set from 35753 # argv[0]) rather than "cvs", but I'd like this script to work on legacy 35754 # versions of CVS for awhile. 35755 # - Testsuite doesn't work with usernames over eight characters in length. 35756 # Fix it. 35757 # End of TODO list. 35758 35759 # Exit if keep set 35760 dokeep 35761 35762 # Remove the test directory, but first change out of it. 35763 if $TIMING; then 35764 echo "exiting without removing test dir in order to preserve timing information." 35765 else 35766 cd `dirname $TESTDIR` 35767 rm -rf $TESTDIR 35768 fi 35769 35770 # end of sanity.sh 35771