Git fork
at reftables-rust 230 lines 5.9 kB view raw
1#!/bin/sh 2# 3# Copyright (c) 2005 Johannes Schindelin 4# 5 6test_description='Test git rev-parse with different parent options' 7 8GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main 9export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME 10 11TEST_CREATE_REPO_NO_TEMPLATE=1 12. ./test-lib.sh 13 14test_cmp_rev_output () { 15 git rev-parse --verify "$1" >expect && 16 eval "$2" >actual && 17 test_cmp expect actual 18} 19 20test_expect_success 'setup' ' 21 test_commit start && 22 test_commit second && 23 git checkout --orphan tmp && 24 test_commit start2 && 25 git checkout main && 26 git merge -m next --allow-unrelated-histories start2 && 27 test_commit final && 28 29 mkdir .git/info && 30 test_seq 40 | 31 while read i 32 do 33 git checkout --orphan "b$i" && 34 test_tick && 35 git commit --allow-empty -m "$i" && 36 commit=$(git rev-parse --verify HEAD) && 37 printf "$commit " >>.git/info/grafts || return 1 38 done 39' 40 41test_expect_success 'start is valid' ' 42 git rev-parse start | grep "^$OID_REGEX$" 43' 44 45test_expect_success 'start^0' ' 46 test_cmp_rev_output tags/start "git rev-parse start^0" 47' 48 49test_expect_success 'start^1 not valid' ' 50 test_must_fail git rev-parse --verify start^1 51' 52 53test_expect_success 'second^1 = second^' ' 54 test_cmp_rev_output second^ "git rev-parse second^1" 55' 56 57test_expect_success 'final^1^1^1' ' 58 test_cmp_rev_output start "git rev-parse final^1^1^1" 59' 60 61test_expect_success 'final^1^1^1 = final^^^' ' 62 test_cmp_rev_output final^^^ "git rev-parse final^1^1^1" 63' 64 65test_expect_success 'final^1^2' ' 66 test_cmp_rev_output start2 "git rev-parse final^1^2" 67' 68 69test_expect_success 'final^1^2 != final^1^1' ' 70 test $(git rev-parse final^1^2) != $(git rev-parse final^1^1) 71' 72 73test_expect_success 'final^1^3 not valid' ' 74 test_must_fail git rev-parse --verify final^1^3 75' 76 77test_expect_success '--verify start2^1' ' 78 test_must_fail git rev-parse --verify start2^1 79' 80 81test_expect_success '--verify start2^0' ' 82 git rev-parse --verify start2^0 83' 84 85test_expect_success 'final^1^@ = final^1^1 final^1^2' ' 86 git rev-parse final^1^1 final^1^2 >expect && 87 git rev-parse final^1^@ >actual && 88 test_cmp expect actual 89' 90 91test_expect_success 'symbolic final^1^@ = final^1^1 final^1^2' ' 92 git rev-parse --symbolic final^1^1 final^1^2 >expect && 93 git rev-parse --symbolic final^1^@ >actual && 94 test_cmp expect actual 95' 96 97test_expect_success 'final^1^! = final^1 ^final^1^1 ^final^1^2' ' 98 git rev-parse final^1 ^final^1^1 ^final^1^2 >expect && 99 git rev-parse final^1^! >actual && 100 test_cmp expect actual 101' 102 103test_expect_success 'symbolic final^1^! = final^1 ^final^1^1 ^final^1^2' ' 104 git rev-parse --symbolic final^1 ^final^1^1 ^final^1^2 >expect && 105 git rev-parse --symbolic final^1^! >actual && 106 test_cmp expect actual 107' 108 109test_expect_success 'large graft octopus' ' 110 test_cmp_rev_output b31 "git rev-parse --verify b1^30" 111' 112 113test_expect_success 'repack for next test' ' 114 git repack -a -d 115' 116 117test_expect_success 'short SHA-1 works' ' 118 start=$(git rev-parse --verify start) && 119 test_cmp_rev_output start "git rev-parse ${start%?}" 120' 121 122# rev^- tests; we can use a simpler setup for these 123 124test_expect_success 'setup for rev^- tests' ' 125 test_commit one && 126 test_commit two && 127 test_commit three && 128 129 # Merge in a branch for testing rev^- 130 git checkout -b branch && 131 git checkout HEAD^^ && 132 git merge -m merge --no-edit --no-ff branch && 133 git checkout -b merge 134' 135 136# The merged branch has 2 commits + the merge 137test_expect_success 'rev-list --count merge^- = merge^..merge' ' 138 git rev-list --count merge^..merge >expect && 139 echo 3 >actual && 140 test_cmp expect actual 141' 142 143# All rev^- rev-parse tests 144 145test_expect_success 'rev-parse merge^- = merge^..merge' ' 146 git rev-parse merge^..merge >expect && 147 git rev-parse merge^- >actual && 148 test_cmp expect actual 149' 150 151test_expect_success 'rev-parse merge^-1 = merge^..merge' ' 152 git rev-parse merge^1..merge >expect && 153 git rev-parse merge^-1 >actual && 154 test_cmp expect actual 155' 156 157test_expect_success 'rev-parse merge^-2 = merge^2..merge' ' 158 git rev-parse merge^2..merge >expect && 159 git rev-parse merge^-2 >actual && 160 test_cmp expect actual 161' 162 163test_expect_success 'symbolic merge^-1 = merge^1..merge' ' 164 git rev-parse --symbolic merge^1..merge >expect && 165 git rev-parse --symbolic merge^-1 >actual && 166 test_cmp expect actual 167' 168 169test_expect_success 'rev-parse merge^-0 (invalid parent)' ' 170 test_must_fail git rev-parse merge^-0 171' 172 173test_expect_success 'rev-parse merge^-3 (invalid parent)' ' 174 test_must_fail git rev-parse merge^-3 175' 176 177test_expect_success 'rev-parse merge^-^ (garbage after ^-)' ' 178 test_must_fail git rev-parse merge^-^ 179' 180 181test_expect_success 'rev-parse merge^-1x (garbage after ^-1)' ' 182 test_must_fail git rev-parse merge^-1x 183' 184 185# All rev^- rev-list tests (should be mostly the same as rev-parse; the reason 186# for the duplication is that rev-parse and rev-list use different parsers). 187 188test_expect_success 'rev-list merge^- = merge^..merge' ' 189 git rev-list merge^..merge >expect && 190 git rev-list merge^- >actual && 191 test_cmp expect actual 192' 193 194test_expect_success 'rev-list merge^-1 = merge^1..merge' ' 195 git rev-list merge^1..merge >expect && 196 git rev-list merge^-1 >actual && 197 test_cmp expect actual 198' 199 200test_expect_success 'rev-list merge^-2 = merge^2..merge' ' 201 git rev-list merge^2..merge >expect && 202 git rev-list merge^-2 >actual && 203 test_cmp expect actual 204' 205 206test_expect_success 'rev-list merge^-0 (invalid parent)' ' 207 test_must_fail git rev-list merge^-0 208' 209 210test_expect_success 'rev-list merge^-3 (invalid parent)' ' 211 test_must_fail git rev-list merge^-3 212' 213 214test_expect_success 'rev-list merge^-^ (garbage after ^-)' ' 215 test_must_fail git rev-list merge^-^ 216' 217 218test_expect_success 'rev-list merge^-1x (garbage after ^-1)' ' 219 test_must_fail git rev-list merge^-1x 220' 221 222test_expect_success 'rev-parse $garbage^@ does not segfault' ' 223 test_must_fail git rev-parse $EMPTY_TREE^@ 224' 225 226test_expect_success 'rev-parse $garbage...$garbage does not segfault' ' 227 test_must_fail git rev-parse $EMPTY_TREE...$EMPTY_BLOB 228' 229 230test_done