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