blob: 7294147334a92e6be082ad57177adb6e0857facc [file] [log] [blame]
Junio C Hamano16652172006-09-27 12:34:37 -07001#!/bin/sh
2
3test_description='Revision traversal vs grafts and path limiter'
4
Johannes Schindelin1550bb62020-11-18 23:44:36 +00005GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
Johannes Schindelin334afbc2020-11-18 23:44:19 +00006export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
7
Junio C Hamano16652172006-09-27 12:34:37 -07008. ./test-lib.sh
9
10test_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." &&
Elia Pinto11da5712016-01-07 14:51:42 +010016 A0=$(git rev-parse --verify HEAD) &&
Junio C Hamano16652172006-09-27 12:34:37 -070017
18 echo >fileA fileA modified &&
19 git commit -a -m "Second in one history." &&
Elia Pinto11da5712016-01-07 14:51:42 +010020 A1=$(git rev-parse --verify HEAD) &&
Junio C Hamano16652172006-09-27 12:34:37 -070021
22 echo >subdir/fileB fileB modified &&
23 git commit -a -m "Third in one history." &&
Elia Pinto11da5712016-01-07 14:51:42 +010024 A2=$(git rev-parse --verify HEAD) &&
Junio C Hamano16652172006-09-27 12:34:37 -070025
Han-Wen Nienhuys977f8ac2021-08-02 16:53:36 +000026 git update-ref -d refs/heads/main &&
27 rm -f .git/index &&
Junio C Hamano16652172006-09-27 12:34:37 -070028
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." &&
Elia Pinto11da5712016-01-07 14:51:42 +010033 B0=$(git rev-parse --verify HEAD) &&
Junio C Hamano16652172006-09-27 12:34:37 -070034
35 echo >fileA fileA modified in alternate history &&
36 git commit -a -m "Second in alternate history." &&
Elia Pinto11da5712016-01-07 14:51:42 +010037 B1=$(git rev-parse --verify HEAD) &&
Junio C Hamano16652172006-09-27 12:34:37 -070038
39 echo >subdir/fileB fileB modified in alternate history &&
40 git commit -a -m "Third in alternate history." &&
Elia Pinto11da5712016-01-07 14:51:42 +010041 B2=$(git rev-parse --verify HEAD) &&
Junio C Hamano16652172006-09-27 12:34:37 -070042 : done
43'
44
45check () {
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
Gary V. Vaughan4fdf71b2010-05-14 09:31:37 +000091 test_cmp test.expect test.actual
Junio C Hamano16652172006-09-27 12:34:37 -070092}
93
94for type in basic parents parents-raw
95do
96 test_expect_success 'without grafts' "
Jonathan Niedera48fcd82010-10-30 20:46:54 -050097 rm -f .git/info/grafts &&
Junio C Hamano16652172006-09-27 12:34:37 -070098 check $type $B2 -- $B2 $B1 $B0
99 "
100
101 test_expect_success 'with grafts' "
Jonathan Niedera48fcd82010-10-30 20:46:54 -0500102 echo '$B0 $A2' >.git/info/grafts &&
Junio C Hamano16652172006-09-27 12:34:37 -0700103 check $type $B2 -- $B2 $B1 $B0 $A2 $A1 $A0
104 "
105
106 test_expect_success 'without grafts, with pathlimit' "
Jonathan Niedera48fcd82010-10-30 20:46:54 -0500107 rm -f .git/info/grafts &&
Junio C Hamano16652172006-09-27 12:34:37 -0700108 check $type $B2 subdir -- $B2 $B0
109 "
110
111 test_expect_success 'with grafts, with pathlimit' "
Jonathan Niedera48fcd82010-10-30 20:46:54 -0500112 echo '$B0 $A2' >.git/info/grafts &&
Junio C Hamano16652172006-09-27 12:34:37 -0700113 check $type $B2 subdir -- $B2 $B0 $A2 $A0
114 "
115
116done
Johannes Schindelinf9f99b32018-04-29 00:44:44 +0200117
118test_expect_success 'show advice that grafts are deprecated' '
119 git show HEAD 2>err &&
120 test_i18ngrep "git replace" err &&
121 test_config advice.graftFileDeprecated false &&
122 git show HEAD 2>err &&
123 test_i18ngrep ! "git replace" err
124'
125
Junio C Hamano16652172006-09-27 12:34:37 -0700126test_done