Merge branch 'ds/scalar-updates' into maint-2.42
[alt-git.git] / t / t6001-rev-list-graft.sh
blob16635ecc33e5e67ab56985a5e4a071492ed22cc9
1 #!/bin/sh
3 test_description='Revision traversal vs grafts and path limiter'
5 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
6 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
8 . ./test-lib.sh
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) &&
18 echo >fileA fileA modified &&
19 git commit -a -m "Second in one history." &&
20 A1=$(git rev-parse --verify HEAD) &&
22 echo >subdir/fileB fileB modified &&
23 git commit -a -m "Third in one history." &&
24 A2=$(git rev-parse --verify HEAD) &&
26 git update-ref -d refs/heads/main &&
27 rm -f .git/index &&
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) &&
35 echo >fileA fileA modified in alternate history &&
36 git commit -a -m "Second in alternate history." &&
37 B1=$(git rev-parse --verify HEAD) &&
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
45 check () {
46 type=$1
47 shift
49 arg=
50 which=arg
51 rm -f test.expect
52 for a
54 if test "z$a" = z--
55 then
56 which=expect
57 child=
58 continue
60 if test "$which" = arg
61 then
62 arg="$arg$a "
63 continue
65 if test "$type" = basic
66 then
67 echo "$a"
68 else
69 if test "z$child" != z
70 then
71 echo "$child $a"
73 child="$a"
75 done >test.expect
76 if test "$type" != basic && test "z$child" != z
77 then
78 echo >>test.expect $child
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
91 test_cmp test.expect test.actual
94 for type in basic parents parents-raw
96 test_expect_success 'without grafts' "
97 rm -f .git/info/grafts &&
98 check $type $B2 -- $B2 $B1 $B0
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
107 test_expect_success 'without grafts, with pathlimit' "
108 rm -f .git/info/grafts &&
109 check $type $B2 subdir -- $B2 $B0
112 test_expect_success 'with grafts, with pathlimit' "
113 echo '$B0 $A2' >.git/info/grafts &&
114 check $type $B2 subdir -- $B2 $B0 $A2 $A0
117 done
119 test_expect_success 'show advice that grafts are deprecated' '
120 git show HEAD 2>err &&
121 test_i18ngrep "git replace" err &&
122 test_config advice.graftFileDeprecated false &&
123 git show HEAD 2>err &&
124 test_i18ngrep ! "git replace" err
127 test_done