t / t9402-git-cvsserver-refs.shon commit t9402: sed -i is not portable (76095f6)
   1#!/bin/sh
   2
   3test_description='git-cvsserver and git refspecs
   4
   5tests ability for git-cvsserver to switch between and compare
   6tags, branches and other git refspecs'
   7
   8. ./test-lib.sh
   9
  10#########
  11
  12check_start_tree() {
  13    rm -f "$WORKDIR/check.list"
  14    echo "start $1" >> "${WORKDIR}/check.log"
  15}
  16
  17check_file() {
  18    sandbox="$1"
  19    file="$2"
  20    ver="$3"
  21    GIT_DIR=$SERVERDIR git show "${ver}:${file}" \
  22        > "$WORKDIR/check.got" 2> "$WORKDIR/check.stderr"
  23    test_cmp "$WORKDIR/check.got" "$sandbox/$file"
  24    stat=$?
  25    echo "check_file $sandbox $file $ver : $stat" >> "$WORKDIR/check.log"
  26    echo "$file" >> "$WORKDIR/check.list"
  27    return $stat
  28}
  29
  30check_end_tree() {
  31    sandbox="$1"
  32    expectCount=$(wc -l < "$WORKDIR/check.list")
  33    cvsCount=$(find "$sandbox" -name CVS -prune -o -type f -print | wc -l)
  34    test x"$cvsCount" = x"$expectCount"
  35    stat=$?
  36    echo "check_end $sandbox : $stat cvs=$cvsCount expect=$expectCount" \
  37        >> "$WORKDIR/check.log"
  38    return $stat
  39}
  40
  41check_end_full_tree() {
  42    sandbox="$1"
  43    ver="$2"
  44    expectCount=$(wc -l < "$WORKDIR/check.list")
  45    cvsCount=$(find "$sandbox" -name CVS -prune -o -type f -print | wc -l)
  46    gitCount=$(git ls-tree -r "$2" | wc -l)
  47    test x"$cvsCount" = x"$expectCount" -a x"$gitCount" = x"$expectCount"
  48    stat=$?
  49    echo "check_end $sandbox : $stat cvs=$cvsCount git=$gitCount expect=$expectCount" \
  50        >> "$WORKDIR/check.log"
  51    return $stat
  52}
  53
  54#########
  55
  56check_diff() {
  57    diffFile="$1"
  58    vOld="$2"
  59    vNew="$3"
  60    rm -rf diffSandbox
  61    git clone -q -n . diffSandbox &&
  62    ( cd diffSandbox &&
  63      git checkout "$vOld" &&
  64      git apply -p0 --index <"../$diffFile" &&
  65      git diff --exit-code "$vNew" ) > check_diff_apply.out 2>&1
  66}
  67
  68#########
  69
  70cvs >/dev/null 2>&1
  71if test $? -ne 1
  72then
  73    skip_all='skipping git-cvsserver tests, cvs not found'
  74    test_done
  75fi
  76if ! test_have_prereq PERL
  77then
  78    skip_all='skipping git-cvsserver tests, perl not available'
  79    test_done
  80fi
  81"$PERL_PATH" -e 'use DBI; use DBD::SQLite' >/dev/null 2>&1 || {
  82    skip_all='skipping git-cvsserver tests, Perl SQLite interface unavailable'
  83    test_done
  84}
  85
  86unset GIT_DIR GIT_CONFIG
  87WORKDIR=$(pwd)
  88SERVERDIR=$(pwd)/gitcvs.git
  89git_config="$SERVERDIR/config"
  90CVSROOT=":fork:$SERVERDIR"
  91CVSWORK="$(pwd)/cvswork"
  92CVS_SERVER=git-cvsserver
  93export CVSROOT CVS_SERVER
  94
  95rm -rf "$CVSWORK" "$SERVERDIR"
  96test_expect_success 'setup v1, b1' '
  97    echo "Simple text file" > textfile.c &&
  98    echo "t2" > t2 &&
  99    mkdir adir &&
 100    echo "adir/afile line1" > adir/afile &&
 101    echo "adir/afile line2" >> adir/afile &&
 102    echo "adir/afile line3" >> adir/afile &&
 103    echo "adir/afile line4" >> adir/afile &&
 104    echo "adir/a2file" >> adir/a2file &&
 105    mkdir adir/bdir &&
 106    echo "adir/bdir/bfile line 1" > adir/bdir/bfile &&
 107    echo "adir/bdir/bfile line 2" >> adir/bdir/bfile &&
 108    echo "adir/bdir/b2file" > adir/bdir/b2file &&
 109    git add textfile.c t2 adir &&
 110    git commit -q -m "First Commit (v1)" &&
 111    git tag v1 &&
 112    git branch b1 &&
 113    git clone -q --bare "$WORKDIR/.git" "$SERVERDIR" >/dev/null 2>&1 &&
 114    GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&
 115    GIT_DIR="$SERVERDIR" git config gitcvs.logfile "$SERVERDIR/gitcvs.log"
 116'
 117
 118rm -rf cvswork
 119test_expect_success 'cvs co v1' '
 120    cvs -f -Q co -r v1 -d cvswork master >cvs.log 2>&1 &&
 121    check_start_tree cvswork &&
 122    check_file cvswork textfile.c v1 &&
 123    check_file cvswork t2 v1 &&
 124    check_file cvswork adir/afile v1 &&
 125    check_file cvswork adir/a2file v1 &&
 126    check_file cvswork adir/bdir/bfile v1 &&
 127    check_file cvswork adir/bdir/b2file v1 &&
 128    check_end_tree cvswork
 129'
 130
 131rm -rf cvswork
 132test_expect_success 'cvs co b1' '
 133    cvs -f co -r b1 -d cvswork master >cvs.log 2>&1 &&
 134    check_start_tree cvswork &&
 135    check_file cvswork textfile.c v1 &&
 136    check_file cvswork t2 v1 &&
 137    check_file cvswork adir/afile v1 &&
 138    check_file cvswork adir/a2file v1 &&
 139    check_file cvswork adir/bdir/bfile v1 &&
 140    check_file cvswork adir/bdir/b2file v1 &&
 141    check_end_tree cvswork
 142'
 143
 144test_expect_success 'cvs co b1 [cvswork3]' '
 145    cvs -f co -r b1 -d cvswork3 master >cvs.log 2>&1 &&
 146    check_start_tree cvswork3 &&
 147    check_file cvswork3 textfile.c v1 &&
 148    check_file cvswork3 t2 v1 &&
 149    check_file cvswork3 adir/afile v1 &&
 150    check_file cvswork3 adir/a2file v1 &&
 151    check_file cvswork3 adir/bdir/bfile v1 &&
 152    check_file cvswork3 adir/bdir/b2file v1 &&
 153    check_end_full_tree cvswork3 v1
 154'
 155
 156test_expect_success 'edit cvswork3 and save diff' '
 157    ( cd cvswork3 &&
 158      sed -e "s/line1/line1 - data/" adir/afile >adir/afileNEW &&
 159                        mv -f adir/afileNEW adir/afile &&
 160      echo "afile5" > adir/afile5 &&
 161      rm t2 &&
 162      cvs -f add adir/afile5 &&
 163      cvs -f rm t2 &&
 164      test_must_fail cvs -f diff -N -u >"$WORKDIR/cvswork3edit.diff"
 165    )
 166'
 167
 168test_expect_success 'setup v1.2 on b1' '
 169    git checkout b1 &&
 170    echo "new v1.2" > t3 &&
 171    rm t2 &&
 172    sed -e "s/line3/line3 - more data/" adir/afile >adir/afileNEW &&
 173                mv -f adir/afileNEW adir/afile &&
 174    rm adir/a2file &&
 175    echo "a3file" >> adir/a3file &&
 176    echo "bfile line 3" >> adir/bdir/bfile &&
 177    rm adir/bdir/b2file &&
 178    echo "b3file" > adir/bdir/b3file &&
 179    mkdir cdir &&
 180    echo "cdir/cfile" > cdir/cfile &&
 181    git add -A cdir adir t3 t2 &&
 182    git commit -q -m 'v1.2' &&
 183    git tag v1.2 &&
 184    git push --tags gitcvs.git b1:b1
 185'
 186
 187test_expect_success 'cvs -f up (on b1 adir)' '
 188    ( cd cvswork/adir &&
 189      cvs -f up -d ) >cvs.log 2>&1 &&
 190    check_start_tree cvswork &&
 191    check_file cvswork textfile.c v1 &&
 192    check_file cvswork t2 v1 &&
 193    check_file cvswork adir/afile v1.2 &&
 194    check_file cvswork adir/a3file v1.2 &&
 195    check_file cvswork adir/bdir/bfile v1.2 &&
 196    check_file cvswork adir/bdir/b3file v1.2 &&
 197    check_end_tree cvswork
 198'
 199
 200test_expect_success 'cvs up (on b1 /)' '
 201    ( cd cvswork &&
 202      cvs -f up -d ) >cvs.log 2>&1 &&
 203    check_start_tree cvswork &&
 204    check_file cvswork textfile.c v1.2 &&
 205    check_file cvswork t3 v1.2 &&
 206    check_file cvswork adir/afile v1.2 &&
 207    check_file cvswork adir/a3file v1.2 &&
 208    check_file cvswork adir/bdir/bfile v1.2 &&
 209    check_file cvswork adir/bdir/b3file v1.2 &&
 210    check_file cvswork cdir/cfile v1.2 &&
 211    check_end_tree cvswork
 212'
 213
 214# Make sure "CVS/Tag" files didn't get messed up:
 215test_expect_success 'cvs up (on b1 /) (again; check CVS/Tag files)' '
 216    ( cd cvswork &&
 217      cvs -f up -d ) >cvs.log 2>&1 &&
 218    check_start_tree cvswork &&
 219    check_file cvswork textfile.c v1.2 &&
 220    check_file cvswork t3 v1.2 &&
 221    check_file cvswork adir/afile v1.2 &&
 222    check_file cvswork adir/a3file v1.2 &&
 223    check_file cvswork adir/bdir/bfile v1.2 &&
 224    check_file cvswork adir/bdir/b3file v1.2 &&
 225    check_file cvswork cdir/cfile v1.2 &&
 226    check_end_tree cvswork
 227'
 228
 229# update to another version:
 230test_expect_success 'cvs up -r v1' '
 231    ( cd cvswork &&
 232      cvs -f up -r v1 ) >cvs.log 2>&1 &&
 233    check_start_tree cvswork &&
 234    check_file cvswork textfile.c v1 &&
 235    check_file cvswork t2 v1 &&
 236    check_file cvswork adir/afile v1 &&
 237    check_file cvswork adir/a2file v1 &&
 238    check_file cvswork adir/bdir/bfile v1 &&
 239    check_file cvswork adir/bdir/b2file v1 &&
 240    check_end_tree cvswork
 241'
 242
 243test_expect_success 'cvs up' '
 244    ( cd cvswork &&
 245      cvs -f up ) >cvs.log 2>&1 &&
 246    check_start_tree cvswork &&
 247    check_file cvswork textfile.c v1 &&
 248    check_file cvswork t2 v1 &&
 249    check_file cvswork adir/afile v1 &&
 250    check_file cvswork adir/a2file v1 &&
 251    check_file cvswork adir/bdir/bfile v1 &&
 252    check_file cvswork adir/bdir/b2file v1 &&
 253    check_end_tree cvswork
 254'
 255
 256test_expect_success 'cvs up (again; check CVS/Tag files)' '
 257    ( cd cvswork &&
 258      cvs -f up -d ) >cvs.log 2>&1 &&
 259    check_start_tree cvswork &&
 260    check_file cvswork textfile.c v1 &&
 261    check_file cvswork t2 v1 &&
 262    check_file cvswork adir/afile v1 &&
 263    check_file cvswork adir/a2file v1 &&
 264    check_file cvswork adir/bdir/bfile v1 &&
 265    check_file cvswork adir/bdir/b2file v1 &&
 266    check_end_tree cvswork
 267'
 268
 269test_expect_success 'setup simple b2' '
 270    git branch b2 v1 &&
 271    git push --tags gitcvs.git b2:b2
 272'
 273
 274test_expect_success 'cvs co b2 [into cvswork2]' '
 275    cvs -f co -r b2 -d cvswork2 master >cvs.log 2>&1 &&
 276    check_start_tree cvswork &&
 277    check_file cvswork textfile.c v1 &&
 278    check_file cvswork t2 v1 &&
 279    check_file cvswork adir/afile v1 &&
 280    check_file cvswork adir/a2file v1 &&
 281    check_file cvswork adir/bdir/bfile v1 &&
 282    check_file cvswork adir/bdir/b2file v1 &&
 283    check_end_tree cvswork
 284'
 285
 286test_expect_success 'root dir edit [cvswork2]' '
 287    ( cd cvswork2 &&
 288      echo "Line 2" >> textfile.c &&
 289      test_must_fail cvs -f diff -u >"$WORKDIR/cvsEdit1.diff" &&
 290      cvs -f commit -m "edit textfile.c" textfile.c
 291    ) >cvsEdit1.log 2>&1
 292'
 293
 294test_expect_success 'root dir rm file [cvswork2]' '
 295    ( cd cvswork2 &&
 296      cvs -f rm -f t2 &&
 297      cvs -f diff -u > ../cvsEdit2-empty.diff &&
 298      test_must_fail cvs -f diff -N -u >"$WORKDIR/cvsEdit2-N.diff" &&
 299      cvs -f commit -m "rm t2"
 300    ) > cvsEdit2.log 2>&1
 301'
 302
 303test_expect_success 'subdir edit/add/rm files [cvswork2' '
 304    ( cd cvswork2 &&
 305      sed -e "s/line 1/line 1 (v2)/" adir/bdir/bfile >adir/bdir/bfileNEW &&
 306      mv -f adir/bdir/bfileNEW adir/bdir/bfile &&
 307      rm adir/bdir/b2file &&
 308      cd adir &&
 309      cvs -f rm bdir/b2file &&
 310      echo "4th file" > bdir/b4file &&
 311      cvs -f add bdir/b4file &&
 312      test_must_fail cvs -f diff -N -u >"$WORKDIR/cvsEdit3.diff" &&
 313      git fetch gitcvs.git b2:b2 &&
 314      ( cd .. &&
 315        test_must_fail cvs -f diff -u -N -r v1.2 >"$WORKDIR/cvsEdit3-v1.2.diff" &&
 316        test_must_fail cvs -f diff -u -N -r v1.2 -r v1 >"$WORKDIR/cvsEdit3-v1.2-v1.diff"
 317      ) &&
 318      cvs -f commit -m "various add/rm/edit"
 319    ) >cvs.log 2>&1
 320'
 321
 322test_expect_success 'validate result of edits [cvswork2]' '
 323    git fetch gitcvs.git b2:b2 &&
 324    git tag v2 b2 &&
 325    git push --tags gitcvs.git b2:b2 &&
 326    check_start_tree cvswork2 &&
 327    check_file cvswork2 textfile.c v2 &&
 328    check_file cvswork2 adir/afile v2 &&
 329    check_file cvswork2 adir/a2file v2 &&
 330    check_file cvswork2 adir/bdir/bfile v2 &&
 331    check_file cvswork2 adir/bdir/b4file v2 &&
 332    check_end_full_tree cvswork2 v2
 333'
 334
 335test_expect_success 'validate basic diffs saved during above cvswork2 edits' '
 336    test $(grep Index: cvsEdit1.diff | wc -l) = 1 &&
 337    test ! -s cvsEdit2-empty.diff &&
 338    test $(grep Index: cvsEdit2-N.diff | wc -l) = 1 &&
 339    test $(grep Index: cvsEdit3.diff | wc -l) = 3 &&
 340    rm -rf diffSandbox &&
 341    git clone -q -n . diffSandbox &&
 342    ( cd diffSandbox &&
 343      git checkout v1 &&
 344      git apply -p0 --index <"$WORKDIR/cvsEdit1.diff" &&
 345      git apply -p0 --index <"$WORKDIR/cvsEdit2-N.diff" &&
 346      git apply -p0 --directory=adir --index <"$WORKDIR/cvsEdit3.diff" &&
 347      git diff --exit-code v2 ) >"check_diff_apply.out" 2>&1
 348'
 349
 350test_expect_success 'validate v1.2 diff saved during last cvswork2 edit' '
 351    test $(grep Index: cvsEdit3-v1.2.diff | wc -l) = 9 &&
 352    check_diff cvsEdit3-v1.2.diff v1.2 v2
 353'
 354
 355test_expect_success 'validate v1.2 v1 diff saved during last cvswork2 edit' '
 356    test $(grep Index: cvsEdit3-v1.2-v1.diff | wc -l) = 9 &&
 357    check_diff cvsEdit3-v1.2-v1.diff v1.2 v1
 358'
 359
 360test_expect_success 'cvs up [cvswork2]' '
 361    ( cd cvswork2 &&
 362      cvs -f up ) >cvs.log 2>&1 &&
 363    check_start_tree cvswork2 &&
 364    check_file cvswork2 textfile.c v2 &&
 365    check_file cvswork2 adir/afile v2 &&
 366    check_file cvswork2 adir/a2file v2 &&
 367    check_file cvswork2 adir/bdir/bfile v2 &&
 368    check_file cvswork2 adir/bdir/b4file v2 &&
 369    check_end_full_tree cvswork2 v2
 370'
 371
 372test_expect_success 'cvs up -r b2 [back to cvswork]' '
 373    ( cd cvswork &&
 374      cvs -f up -r b2 ) >cvs.log 2>&1 &&
 375    check_start_tree cvswork &&
 376    check_file cvswork textfile.c v2 &&
 377    check_file cvswork adir/afile v2 &&
 378    check_file cvswork adir/a2file v2 &&
 379    check_file cvswork adir/bdir/bfile v2 &&
 380    check_file cvswork adir/bdir/b4file v2 &&
 381    check_end_full_tree cvswork v2
 382'
 383
 384test_expect_success 'cvs up -r b1' '
 385    ( cd cvswork &&
 386      cvs -f up -r b1 ) >cvs.log 2>&1 &&
 387    check_start_tree cvswork &&
 388    check_file cvswork textfile.c v1.2 &&
 389    check_file cvswork t3 v1.2 &&
 390    check_file cvswork adir/afile v1.2 &&
 391    check_file cvswork adir/a3file v1.2 &&
 392    check_file cvswork adir/bdir/bfile v1.2 &&
 393    check_file cvswork adir/bdir/b3file v1.2 &&
 394    check_file cvswork cdir/cfile v1.2 &&
 395    check_end_full_tree cvswork v1.2
 396'
 397
 398test_expect_success 'cvs up -A' '
 399    ( cd cvswork &&
 400      cvs -f up -A ) >cvs.log 2>&1 &&
 401    check_start_tree cvswork &&
 402    check_file cvswork textfile.c v1 &&
 403    check_file cvswork t2 v1 &&
 404    check_file cvswork adir/afile v1 &&
 405    check_file cvswork adir/a2file v1 &&
 406    check_file cvswork adir/bdir/bfile v1 &&
 407    check_file cvswork adir/bdir/b2file v1 &&
 408    check_end_full_tree cvswork v1
 409'
 410
 411test_expect_success 'cvs up (check CVS/Tag files)' '
 412    ( cd cvswork &&
 413      cvs -f up ) >cvs.log 2>&1 &&
 414    check_start_tree cvswork &&
 415    check_file cvswork textfile.c v1 &&
 416    check_file cvswork t2 v1 &&
 417    check_file cvswork adir/afile v1 &&
 418    check_file cvswork adir/a2file v1 &&
 419    check_file cvswork adir/bdir/bfile v1 &&
 420    check_file cvswork adir/bdir/b2file v1 &&
 421    check_end_full_tree cvswork v1
 422'
 423
 424# This is not really legal CVS, but it seems to work anyway:
 425test_expect_success 'cvs up -r heads/b1' '
 426    ( cd cvswork &&
 427      cvs -f up -r heads/b1 ) >cvs.log 2>&1 &&
 428    check_start_tree cvswork &&
 429    check_file cvswork textfile.c v1.2 &&
 430    check_file cvswork t3 v1.2 &&
 431    check_file cvswork adir/afile v1.2 &&
 432    check_file cvswork adir/a3file v1.2 &&
 433    check_file cvswork adir/bdir/bfile v1.2 &&
 434    check_file cvswork adir/bdir/b3file v1.2 &&
 435    check_file cvswork cdir/cfile v1.2 &&
 436    check_end_full_tree cvswork v1.2
 437'
 438
 439# But this should work even if CVS client checks -r more carefully:
 440test_expect_success 'cvs up -r heads_-s-b2 (cvsserver escape mechanism)' '
 441    ( cd cvswork &&
 442      cvs -f up -r heads_-s-b2 ) >cvs.log 2>&1 &&
 443    check_start_tree cvswork &&
 444    check_file cvswork textfile.c v2 &&
 445    check_file cvswork adir/afile v2 &&
 446    check_file cvswork adir/a2file v2 &&
 447    check_file cvswork adir/bdir/bfile v2 &&
 448    check_file cvswork adir/bdir/b4file v2 &&
 449    check_end_full_tree cvswork v2
 450'
 451
 452v1hash=$(git rev-parse v1)
 453test_expect_success 'cvs up -r $(git rev-parse v1)' '
 454    test -n "$v1hash" &&
 455    ( cd cvswork &&
 456      cvs -f up -r "$v1hash" ) >cvs.log 2>&1 &&
 457    check_start_tree cvswork &&
 458    check_file cvswork textfile.c v1 &&
 459    check_file cvswork t2 v1 &&
 460    check_file cvswork adir/afile v1 &&
 461    check_file cvswork adir/a2file v1 &&
 462    check_file cvswork adir/bdir/bfile v1 &&
 463    check_file cvswork adir/bdir/b2file v1 &&
 464    check_end_full_tree cvswork v1
 465'
 466
 467test_expect_success 'cvs diff -r v1 -u' '
 468    ( cd cvswork &&
 469      cvs -f diff -r v1 -u ) >cvsDiff.out 2>cvs.log &&
 470    test ! -s cvsDiff.out &&
 471    test ! -s cvs.log
 472'
 473
 474test_expect_success 'cvs diff -N -r v2 -u' '
 475    ( cd cvswork &&
 476      test_must_fail cvs -f diff -N -r v2 -u ) >cvsDiff.out 2>cvs.log &&
 477    test ! -s cvs.log &&
 478    test -s cvsDiff.out &&
 479    check_diff cvsDiff.out v2 v1 > check_diff.out 2>&1
 480'
 481
 482test_expect_success 'cvs diff -N -r v2 -r v1.2' '
 483    ( cd cvswork &&
 484      test_must_fail cvs -f diff -N -r v2 -r v1.2 -u ) >cvsDiff.out 2>cvs.log &&
 485    test ! -s cvs.log &&
 486    test -s cvsDiff.out &&
 487    check_diff cvsDiff.out v2 v1.2 > check_diff.out 2>&1
 488'
 489
 490test_expect_success 'apply early [cvswork3] diff to b3' '
 491    git clone -q . gitwork3 &&
 492    ( cd gitwork3 &&
 493      git checkout -b b3 v1 &&
 494      git apply -p0 --index <"$WORKDIR/cvswork3edit.diff" &&
 495      git commit -m "cvswork3 edits applied" ) &&
 496    git fetch gitwork3 b3:b3 &&
 497    git tag v3 b3
 498'
 499
 500test_expect_success 'check [cvswork3] diff' '
 501    ( cd cvswork3 &&
 502      test_must_fail cvs -f diff -N -u ) >"$WORKDIR/cvsDiff.out" 2>cvs.log &&
 503    test ! -s cvs.log &&
 504    test -s cvsDiff.out &&
 505    test $(grep Index: cvsDiff.out | wc -l) = 3 &&
 506    test_cmp cvsDiff.out cvswork3edit.diff &&
 507    check_diff cvsDiff.out v1 v3 > check_diff.out 2>&1
 508'
 509
 510test_expect_success 'merge early [cvswork3] b3 with b1' '
 511    ( cd gitwork3 &&
 512      git merge "message" HEAD b1 )
 513    git fetch gitwork3 b3:b3 &&
 514    git tag v3merged b3 &&
 515    git push --tags gitcvs.git b3:b3
 516'
 517
 518# This test would fail if cvsserver properly created a ".#afile"* file
 519# for the merge.
 520# TODO: Validate that the .# file was saved properly, and then
 521#   delete/ignore it when checking the tree.
 522test_expect_success 'cvs up dirty [cvswork3]' '
 523    ( cd cvswork3 &&
 524      cvs -f up &&
 525      test_must_fail cvs -f diff -N -u >"$WORKDIR/cvsDiff.out" ) >cvs.log 2>&1 &&
 526    test -s cvsDiff.out &&
 527    test $(grep Index: cvsDiff.out | wc -l) = 2
 528    check_start_tree cvswork3 &&
 529    check_file cvswork3 textfile.c v3merged &&
 530    check_file cvswork3 t3 v3merged &&
 531    check_file cvswork3 adir/afile v3merged &&
 532    check_file cvswork3 adir/a3file v3merged &&
 533    check_file cvswork3 adir/afile5 v3merged &&
 534    check_file cvswork3 adir/bdir/bfile v3merged &&
 535    check_file cvswork3 adir/bdir/b3file v3merged &&
 536    check_file cvswork3 cdir/cfile v3merged &&
 537    check_end_full_tree cvswork3 v3merged
 538'
 539
 540# TODO: test cvs status
 541
 542test_expect_success 'cvs commit [cvswork3' '
 543    ( cd cvswork3 &&
 544      cvs -f commit -m "dirty sandbox after auto-merge"
 545    ) > cvs.log 2>&1 &&
 546    check_start_tree cvswork3 &&
 547    check_file cvswork3 textfile.c v3merged &&
 548    check_file cvswork3 t3 v3merged &&
 549    check_file cvswork3 adir/afile v3merged &&
 550    check_file cvswork3 adir/a3file v3merged &&
 551    check_file cvswork3 adir/afile5 v3merged &&
 552    check_file cvswork3 adir/bdir/bfile v3merged &&
 553    check_file cvswork3 adir/bdir/b3file v3merged &&
 554    check_file cvswork3 cdir/cfile v3merged &&
 555    check_end_full_tree cvswork3 v3merged &&
 556    git fetch gitcvs.git b3:b4 &&
 557    git tag v4.1 b4 &&
 558    git diff --exit-code v4.1 v3merged > check_diff_apply.out 2>&1
 559'
 560
 561test_done