Merge branch 'jc/maint-combined-diff-work-tree'
[git] / t / t6001-rev-list-graft.sh
1 #!/bin/sh
2
3 test_description='Revision traversal vs grafts and path limiter'
4
5 . ./test-lib.sh
6
7 test_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
41 check () {
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         test_cmp test.expect test.actual
88 }
89
90 for type in basic parents parents-raw
91 do
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
112 done
113 test_done