t / t6001-rev-list-graft.shon commit Merge branch 'jc/maint-checkout-keep-remove' into maint (2ba3d5d)
   1#!/bin/sh
   2
   3test_description='Revision traversal vs grafts and path limiter'
   4
   5. ./test-lib.sh
   6
   7test_expect_success setup '
   8        mkdir subdir &&
   9        echo >fileA fileA &&
  10        echo >subdir/fileB fileB &&
  11        git add fileA subdir/fileB &&
  12        git commit -a -m "Initial in one history." &&
  13        A0=`git rev-parse --verify HEAD` &&
  14
  15        echo >fileA fileA modified &&
  16        git commit -a -m "Second in one history." &&
  17        A1=`git rev-parse --verify HEAD` &&
  18
  19        echo >subdir/fileB fileB modified &&
  20        git commit -a -m "Third in one history." &&
  21        A2=`git rev-parse --verify HEAD` &&
  22
  23        rm -f .git/refs/heads/master .git/index &&
  24
  25        echo >fileA fileA again &&
  26        echo >subdir/fileB fileB again &&
  27        git add fileA subdir/fileB &&
  28        git commit -a -m "Initial in alternate history." &&
  29        B0=`git rev-parse --verify HEAD` &&
  30
  31        echo >fileA fileA modified in alternate history &&
  32        git commit -a -m "Second in alternate history." &&
  33        B1=`git rev-parse --verify HEAD` &&
  34
  35        echo >subdir/fileB fileB modified in alternate history &&
  36        git commit -a -m "Third in alternate history." &&
  37        B2=`git rev-parse --verify HEAD` &&
  38        : done
  39'
  40
  41check () {
  42        type=$1
  43        shift
  44
  45        arg=
  46        which=arg
  47        rm -f test.expect
  48        for a
  49        do
  50                if test "z$a" = z--
  51                then
  52                        which=expect
  53                        child=
  54                        continue
  55                fi
  56                if test "$which" = arg
  57                then
  58                        arg="$arg$a "
  59                        continue
  60                fi
  61                if test "$type" = basic
  62                then
  63                        echo "$a"
  64                else
  65                        if test "z$child" != z
  66                        then
  67                                echo "$child $a"
  68                        fi
  69                        child="$a"
  70                fi
  71        done >test.expect
  72        if test "$type" != basic && test "z$child" != z
  73        then
  74                echo >>test.expect $child
  75        fi
  76        if test $type = basic
  77        then
  78                git rev-list $arg >test.actual
  79        elif test $type = parents
  80        then
  81                git rev-list --parents $arg >test.actual
  82        elif test $type = parents-raw
  83        then
  84                git rev-list --parents --pretty=raw $arg |
  85                sed -n -e 's/^commit //p' >test.actual
  86        fi
  87        diff test.expect test.actual
  88}
  89
  90for type in basic parents parents-raw
  91do
  92        test_expect_success 'without grafts' "
  93                rm -f .git/info/grafts
  94                check $type $B2 -- $B2 $B1 $B0
  95        "
  96
  97        test_expect_success 'with grafts' "
  98                echo '$B0 $A2' >.git/info/grafts
  99                check $type $B2 -- $B2 $B1 $B0 $A2 $A1 $A0
 100        "
 101
 102        test_expect_success 'without grafts, with pathlimit' "
 103                rm -f .git/info/grafts
 104                check $type $B2 subdir -- $B2 $B0
 105        "
 106
 107        test_expect_success 'with grafts, with pathlimit' "
 108                echo '$B0 $A2' >.git/info/grafts
 109                check $type $B2 subdir -- $B2 $B0 $A2 $A0
 110        "
 111
 112done
 113test_done