(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ 
                (Token
                  id: Id.Lit_Chars
                  val: 'Test handling of ref names that check-ref-format rejects'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:19) 
          (Token id:Id.Lit_Chars val:'\ttest_commit one &&\n' span_id:20) (Token id:Id.Lit_Chars val:'\ttest_commit two\n' span_id:21)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'fast-import: fail on invalid branch name ".badbranchname"'
            span_id: 28
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:32) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/objects/pack_* .git/objects/index_*" &&\n'
            span_id: 33
          ) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\t\tcommit .badbranchname\n' span_id:35) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 36
          ) (Token id:Id.Lit_Chars val:'\t\tdata <<COMMIT\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\t\tcorrupt\n' span_id:38) (Token id:Id.Lit_Chars val:'\t\tCOMMIT\n' span_id:39) (Token id:Id.Lit_Chars val:'\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\t\tfrom refs/heads/master\n' span_id:41) (Token id:Id.Lit_Chars val:'\n' span_id:42) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:43) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import <input\n'
            span_id: 44
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'fast-import: fail on invalid branch name "bad[branch]name"'
            span_id: 51
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:55) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/objects/pack_* .git/objects/index_*" &&\n'
            span_id: 56
          ) (Token id:Id.Lit_Chars val:'\tcat >input <<-INPUT_END &&\n' span_id:57) 
          (Token id:Id.Lit_Chars val:'\t\tcommit bad[branch]name\n' span_id:58) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcommitter $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE\n'
            span_id: 59
          ) (Token id:Id.Lit_Chars val:'\t\tdata <<COMMIT\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\t\tcorrupt\n' span_id:61) (Token id:Id.Lit_Chars val:'\t\tCOMMIT\n' span_id:62) (Token id:Id.Lit_Chars val:'\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\t\tfrom refs/heads/master\n' span_id:64) (Token id:Id.Lit_Chars val:'\n' span_id:65) (Token id:Id.Lit_Chars val:'\tINPUT_END\n' span_id:66) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git fast-import <input\n'
            span_id: 67
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git branch shows badly named ref as warning' span_id:74))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:78) 
          (Token
            id: Id.Lit_Chars
            val: '\tcp .git/refs/heads/master .git/refs/heads/broken...ref &&\n'
            span_id: 79
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...ref" &&\n'
            span_id: 80
          ) (Token id:Id.Lit_Chars val:'\tgit branch >output 2>error &&\n' span_id:81) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_i18ngrep -e "ignoring ref with broken name refs/heads/broken\\.\\.\\.ref" error &&\n'
            span_id: 82
          ) (Token id:Id.Lit_Chars val:'\t! grep -e "broken\\.\\.\\.ref" output\n' span_id:83)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'branch -d can delete badly named ref' span_id:90))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:94) 
          (Token
            id: Id.Lit_Chars
            val: '\tcp .git/refs/heads/master .git/refs/heads/broken...ref &&\n'
            span_id: 95
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...ref" &&\n'
            span_id: 96
          ) (Token id:Id.Lit_Chars val:'\tgit branch -d broken...ref &&\n' span_id:97) 
          (Token id:Id.Lit_Chars val:'\tgit branch >output 2>error &&\n' span_id:98) (Token id:Id.Lit_Chars val:'\t! grep -e "broken\\.\\.\\.ref" error &&\n' span_id:99) 
          (Token
            id: Id.Lit_Chars
            val: '\t! grep -e "broken\\.\\.\\.ref" output\n'
            span_id: 100
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'branch -D can delete badly named ref' span_id:107))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:111) 
          (Token
            id: Id.Lit_Chars
            val: '\tcp .git/refs/heads/master .git/refs/heads/broken...ref &&\n'
            span_id: 112
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...ref" &&\n'
            span_id: 113
          ) (Token id:Id.Lit_Chars val:'\tgit branch -D broken...ref &&\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\tgit branch >output 2>error &&\n' span_id:115) (Token id:Id.Lit_Chars val:'\t! grep -e "broken\\.\\.\\.ref" error &&\n' span_id:116) 
          (Token
            id: Id.Lit_Chars
            val: '\t! grep -e "broken\\.\\.\\.ref" output\n'
            span_id: 117
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'branch -D cannot delete non-ref in .git dir' span_id:124))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:128) 
          (Token
            id: Id.Lit_Chars
            val: '\techo precious >.git/my-private-file &&\n'
            span_id: 129
          ) (Token id:Id.Lit_Chars val:'\techo precious >expect &&\n' span_id:130) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git branch -D ../../my-private-file &&\n'
            span_id: 131
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect .git/my-private-file\n' span_id:132)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'branch -D cannot delete ref in .git dir' span_id:139))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:143) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse HEAD >.git/my-private-file &&\n'
            span_id: 144
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD >expect &&\n' span_id:145) 
          (Token id:Id.Lit_Chars val:'\tgit branch foo/legit &&\n' span_id:146) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git branch -D foo////./././../../../my-private-file &&\n'
            span_id: 147
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect .git/my-private-file\n' span_id:148)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'branch -D cannot delete absolute path' span_id:155))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:159) 
          (Token id:Id.Lit_Chars val:'\tgit branch -f extra &&\n' span_id:160) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git branch -D "$(pwd)/.git/refs/heads/extra" &&\n'
            span_id: 161
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev HEAD extra\n' span_id:162)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git branch cannot create a badly named ref' span_id:169))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:173) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...ref" &&\n'
            span_id: 174
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git branch broken...ref &&\n' span_id:175) 
          (Token id:Id.Lit_Chars val:'\tgit branch >output 2>error &&\n' span_id:176) (Token id:Id.Lit_Chars val:'\t! grep -e "broken\\.\\.\\.ref" error &&\n' span_id:177) 
          (Token
            id: Id.Lit_Chars
            val: '\t! grep -e "broken\\.\\.\\.ref" output\n'
            span_id: 178
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'branch -m cannot rename to a bad ref name' span_id:185))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:189) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...ref" &&\n'
            span_id: 190
          ) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D goodref &&\n' span_id:191) 
          (Token id:Id.Lit_Chars val:'\tgit branch goodref &&\n' span_id:192) (Token id:Id.Lit_Chars val:'\ttest_must_fail git branch -m goodref broken...ref &&\n' span_id:193) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp_rev master goodref &&\n' span_id:194) (Token id:Id.Lit_Chars val:'\tgit branch >output 2>error &&\n' span_id:195) 
          (Token
            id: Id.Lit_Chars
            val: '\t! grep -e "broken\\.\\.\\.ref" error &&\n'
            span_id: 196
          ) (Token id:Id.Lit_Chars val:'\t! grep -e "broken\\.\\.\\.ref" output\n' span_id:197)
        )
      }
    )
    (C {(test_expect_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'branch -m can rename from a bad ref name' span_id:204))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:208) 
          (Token
            id: Id.Lit_Chars
            val: '\tcp .git/refs/heads/master .git/refs/heads/broken...ref &&\n'
            span_id: 209
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...ref" &&\n'
            span_id: 210
          ) (Token id:Id.Lit_Chars val:'\tgit branch -m broken...ref renamed &&\n' span_id:211) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp_rev master renamed &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\tgit branch >output 2>error &&\n' span_id:213) 
          (Token
            id: Id.Lit_Chars
            val: '\t! grep -e "broken\\.\\.\\.ref" error &&\n'
            span_id: 214
          ) (Token id:Id.Lit_Chars val:'\t! grep -e "broken\\.\\.\\.ref" output\n' span_id:215)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push cannot create a badly named ref' span_id:222))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:226) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...ref" &&\n'
            span_id: 227
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git push "file://$(pwd)" HEAD:refs/heads/broken...ref &&\n'
            span_id: 228
          ) (Token id:Id.Lit_Chars val:'\tgit branch >output 2>error &&\n' span_id:229) 
          (Token
            id: Id.Lit_Chars
            val: '\t! grep -e "broken\\.\\.\\.ref" error &&\n'
            span_id: 230
          ) (Token id:Id.Lit_Chars val:'\t! grep -e "broken\\.\\.\\.ref" output\n' span_id:231)
        )
      }
    )
    (C {(test_expect_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'push --mirror can delete badly named ref' span_id:238))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:242) 
          (Token id:Id.Lit_Chars val:'\ttop=$(pwd) &&\n' span_id:243) (Token id:Id.Lit_Chars val:'\tgit init src &&\n' span_id:244) 
          (Token id:Id.Lit_Chars val:'\tgit init dest &&\n' span_id:245) (Token id:Id.Lit_Chars val:'\n' span_id:246) (Token id:Id.Lit_Chars val:'\t(\n' span_id:247) 
          (Token id:Id.Lit_Chars val:'\t\tcd src &&\n' span_id:248) (Token id:Id.Lit_Chars val:'\t\ttest_commit one\n' span_id:249) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:250) (Token id:Id.Lit_Chars val:'\t(\n' span_id:251) 
          (Token id:Id.Lit_Chars val:'\t\tcd dest &&\n' span_id:252) (Token id:Id.Lit_Chars val:'\t\ttest_commit two &&\n' span_id:253) 
          (Token id:Id.Lit_Chars val:'\t\tgit checkout --detach &&\n' span_id:254) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcp .git/refs/heads/master .git/refs/heads/broken...ref\n'
            span_id: 255
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:256) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -C src push --mirror "file://$top/dest" &&\n'
            span_id: 257
          ) (Token id:Id.Lit_Chars val:'\tgit -C dest branch >output 2>error &&\n' span_id:258) 
          (Token
            id: Id.Lit_Chars
            val: '\t! grep -e "broken\\.\\.\\.ref" error &&\n'
            span_id: 259
          ) (Token id:Id.Lit_Chars val:'\t! grep -e "broken\\.\\.\\.ref" output\n' span_id:260)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'rev-parse skips symref pointing to broken name' span_id:267))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:271) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...ref" &&\n'
            span_id: 272
          ) (Token id:Id.Lit_Chars val:'\tgit branch shadow one &&\n' span_id:273) 
          (Token
            id: Id.Lit_Chars
            val: '\tcp .git/refs/heads/master .git/refs/heads/broken...ref &&\n'
            span_id: 274
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "ref: refs/heads/broken...ref\\n" >.git/refs/tags/shadow &&\n'
            span_id: 275
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f .git/refs/tags/shadow" &&\n' span_id:276) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse --verify one >expect &&\n'
            span_id: 277
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify shadow >actual 2>err &&\n' span_id:278) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:279) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "ignoring dangling symref refs/tags/shadow" err\n'
            span_id: 280
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'for-each-ref emits warnings for broken names' span_id:287))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:291) 
          (Token
            id: Id.Lit_Chars
            val: '\tcp .git/refs/heads/master .git/refs/heads/broken...ref &&\n'
            span_id: 292
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...ref" &&\n'
            span_id: 293
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "ref: refs/heads/broken...ref\\n" >.git/refs/heads/badname &&\n'
            span_id: 294
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f .git/refs/heads/badname" &&\n' span_id:295) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "ref: refs/heads/master\\n" >.git/refs/heads/broken...symref &&\n'
            span_id: 296
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...symref" &&\n'
            span_id: 297
          ) (Token id:Id.Lit_Chars val:'\tgit for-each-ref >output 2>error &&\n' span_id:298) 
          (Token
            id: Id.Lit_Chars
            val: '\t! grep -e "broken\\.\\.\\.ref" output &&\n'
            span_id: 299
          ) (Token id:Id.Lit_Chars val:'\t! grep -e "badname" output &&\n' span_id:300) 
          (Token
            id: Id.Lit_Chars
            val: '\t! grep -e "broken\\.\\.\\.symref" output &&\n'
            span_id: 301
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_i18ngrep "ignoring ref with broken name refs/heads/broken\\.\\.\\.ref" error &&\n'
            span_id: 302
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "ignoring broken ref refs/heads/badname" error &&\n'
            span_id: 303
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_i18ngrep "ignoring ref with broken name refs/heads/broken\\.\\.\\.symref" error\n'
            span_id: 304
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'update-ref -d can delete broken name' span_id:311))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:315) 
          (Token
            id: Id.Lit_Chars
            val: '\tcp .git/refs/heads/master .git/refs/heads/broken...ref &&\n'
            span_id: 316
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...ref" &&\n'
            span_id: 317
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref -d refs/heads/broken...ref >output 2>error &&\n'
            span_id: 318
          ) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty output &&\n' span_id:319) 
          (Token id:Id.Lit_Chars val:'\ttest_must_be_empty error &&\n' span_id:320) (Token id:Id.Lit_Chars val:'\tgit branch >output 2>error &&\n' span_id:321) 
          (Token
            id: Id.Lit_Chars
            val: '\t! grep -e "broken\\.\\.\\.ref" error &&\n'
            span_id: 322
          ) (Token id:Id.Lit_Chars val:'\t! grep -e "broken\\.\\.\\.ref" output\n' span_id:323)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'branch -d can delete broken name' span_id:330))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:334) 
          (Token
            id: Id.Lit_Chars
            val: '\tcp .git/refs/heads/master .git/refs/heads/broken...ref &&\n'
            span_id: 335
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...ref" &&\n'
            span_id: 336
          ) (Token id:Id.Lit_Chars val:'\tgit branch -d broken...ref >output 2>error &&\n' span_id:337) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "Deleted branch broken...ref (was broken)" output &&\n'
            span_id: 338
          ) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty error &&\n' span_id:339) 
          (Token id:Id.Lit_Chars val:'\tgit branch >output 2>error &&\n' span_id:340) (Token id:Id.Lit_Chars val:'\t! grep -e "broken\\.\\.\\.ref" error &&\n' span_id:341) 
          (Token
            id: Id.Lit_Chars
            val: '\t! grep -e "broken\\.\\.\\.ref" output\n'
            span_id: 342
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'update-ref --no-deref -d can delete symref to broken name'
            span_id: 349
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:353) 
          (Token
            id: Id.Lit_Chars
            val: '\tcp .git/refs/heads/master .git/refs/heads/broken...ref &&\n'
            span_id: 354
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...ref" &&\n'
            span_id: 355
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "ref: refs/heads/broken...ref\\n" >.git/refs/heads/badname &&\n'
            span_id: 356
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f .git/refs/heads/badname" &&\n' span_id:357) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref --no-deref -d refs/heads/badname >output 2>error &&\n'
            span_id: 358
          ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/refs/heads/badname &&\n' span_id:359) 
          (Token id:Id.Lit_Chars val:'\ttest_must_be_empty output &&\n' span_id:360) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty error\n' span_id:361)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'branch -d can delete symref to broken name' span_id:368))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:372) 
          (Token
            id: Id.Lit_Chars
            val: '\tcp .git/refs/heads/master .git/refs/heads/broken...ref &&\n'
            span_id: 373
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...ref" &&\n'
            span_id: 374
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "ref: refs/heads/broken...ref\\n" >.git/refs/heads/badname &&\n'
            span_id: 375
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f .git/refs/heads/badname" &&\n' span_id:376) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit branch -d badname >output 2>error &&\n'
            span_id: 377
          ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/refs/heads/badname &&\n' span_id:378) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_i18ngrep "Deleted branch badname (was refs/heads/broken\\.\\.\\.ref)" output &&\n'
            span_id: 379
          ) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty error\n' span_id:380)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'update-ref --no-deref -d can delete dangling symref to broken name'
            span_id: 387
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:391) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "ref: refs/heads/broken...ref\\n" >.git/refs/heads/badname &&\n'
            span_id: 392
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f .git/refs/heads/badname" &&\n' span_id:393) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref --no-deref -d refs/heads/badname >output 2>error &&\n'
            span_id: 394
          ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/refs/heads/badname &&\n' span_id:395) 
          (Token id:Id.Lit_Chars val:'\ttest_must_be_empty output &&\n' span_id:396) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty error\n' span_id:397)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'branch -d can delete dangling symref to broken name'
            span_id: 404
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:408) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "ref: refs/heads/broken...ref\\n" >.git/refs/heads/badname &&\n'
            span_id: 409
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f .git/refs/heads/badname" &&\n' span_id:410) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit branch -d badname >output 2>error &&\n'
            span_id: 411
          ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/refs/heads/badname &&\n' span_id:412) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_i18ngrep "Deleted branch badname (was refs/heads/broken\\.\\.\\.ref)" output &&\n'
            span_id: 413
          ) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty error\n' span_id:414)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'update-ref -d can delete broken name through symref'
            span_id: 421
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:425) 
          (Token
            id: Id.Lit_Chars
            val: '\tcp .git/refs/heads/master .git/refs/heads/broken...ref &&\n'
            span_id: 426
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...ref" &&\n'
            span_id: 427
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "ref: refs/heads/broken...ref\\n" >.git/refs/heads/badname &&\n'
            span_id: 428
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f .git/refs/heads/badname" &&\n' span_id:429) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref -d refs/heads/badname >output 2>error &&\n'
            span_id: 430
          ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/refs/heads/broken...ref &&\n' span_id:431) 
          (Token id:Id.Lit_Chars val:'\ttest_must_be_empty output &&\n' span_id:432) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty error\n' span_id:433)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'update-ref --no-deref -d can delete symref with broken name'
            span_id: 440
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:444) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "ref: refs/heads/master\\n" >.git/refs/heads/broken...symref &&\n'
            span_id: 445
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...symref" &&\n'
            span_id: 446
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref --no-deref -d refs/heads/broken...symref >output 2>error &&\n'
            span_id: 447
          ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/refs/heads/broken...symref &&\n' span_id:448) 
          (Token id:Id.Lit_Chars val:'\ttest_must_be_empty output &&\n' span_id:449) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty error\n' span_id:450)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'branch -d can delete symref with broken name' span_id:457))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:461) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "ref: refs/heads/master\\n" >.git/refs/heads/broken...symref &&\n'
            span_id: 462
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...symref" &&\n'
            span_id: 463
          ) (Token id:Id.Lit_Chars val:'\tgit branch -d broken...symref >output 2>error &&\n' span_id:464) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_path_is_missing .git/refs/heads/broken...symref &&\n'
            span_id: 465
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_i18ngrep "Deleted branch broken...symref (was refs/heads/master)" output &&\n'
            span_id: 466
          ) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty error\n' span_id:467)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'update-ref --no-deref -d can delete dangling symref with broken name'
            span_id: 474
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:478) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "ref: refs/heads/idonotexist\\n" >.git/refs/heads/broken...symref &&\n'
            span_id: 479
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...symref" &&\n'
            span_id: 480
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref --no-deref -d refs/heads/broken...symref >output 2>error &&\n'
            span_id: 481
          ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/refs/heads/broken...symref &&\n' span_id:482) 
          (Token id:Id.Lit_Chars val:'\ttest_must_be_empty output &&\n' span_id:483) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty error\n' span_id:484)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'branch -d can delete dangling symref with broken name'
            span_id: 491
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:495) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "ref: refs/heads/idonotexist\\n" >.git/refs/heads/broken...symref &&\n'
            span_id: 496
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/broken...symref" &&\n'
            span_id: 497
          ) (Token id:Id.Lit_Chars val:'\tgit branch -d broken...symref >output 2>error &&\n' span_id:498) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_path_is_missing .git/refs/heads/broken...symref &&\n'
            span_id: 499
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_i18ngrep "Deleted branch broken...symref (was refs/heads/idonotexist)" output &&\n'
            span_id: 500
          ) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty error\n' span_id:501)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'update-ref -d cannot delete non-ref in .git dir' span_id:508))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:512) 
          (Token
            id: Id.Lit_Chars
            val: '\techo precious >.git/my-private-file &&\n'
            span_id: 513
          ) (Token id:Id.Lit_Chars val:'\techo precious >expect &&\n' span_id:514) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -d my-private-file >output 2>error &&\n'
            span_id: 515
          ) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty output &&\n' span_id:516) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep -e "refusing to update ref with bad name" error &&\n'
            span_id: 517
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect .git/my-private-file\n' span_id:518)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'update-ref -d cannot delete absolute path' span_id:525))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:529) 
          (Token id:Id.Lit_Chars val:'\tgit branch -f extra &&\n' span_id:530) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -d "$(pwd)/.git/refs/heads/extra" &&\n'
            span_id: 531
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev HEAD extra\n' span_id:532)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'update-ref --stdin fails create with bad ref name'
            span_id: 539
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:543) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "create ~a refs/heads/master" >stdin &&\n'
            span_id: 544
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:545) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: invalid ref format: ~a" err\n'
            span_id: 546
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'update-ref --stdin fails update with bad ref name'
            span_id: 553
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:557) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "update ~a refs/heads/master" >stdin &&\n'
            span_id: 558
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:559) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: invalid ref format: ~a" err\n'
            span_id: 560
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'update-ref --stdin fails delete with bad ref name'
            span_id: 567
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:571) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "delete ~a refs/heads/master" >stdin &&\n'
            span_id: 572
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:573) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: invalid ref format: ~a" err\n'
            span_id: 574
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'update-ref --stdin -z fails create with bad ref name'
            span_id: 581
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:585) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "%s\\0" "create ~a " refs/heads/master >stdin &&\n'
            span_id: 586
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 587
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: invalid ref format: ~a " err\n' span_id:588)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'update-ref --stdin -z fails update with bad ref name'
            span_id: 595
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:599) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "%s\\0" "update ~a" refs/heads/master "" >stdin &&\n'
            span_id: 600
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 601
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: invalid ref format: ~a" err\n' span_id:602)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'update-ref --stdin -z fails delete with bad ref name'
            span_id: 609
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:613) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "%s\\0" "delete ~a" refs/heads/master >stdin &&\n'
            span_id: 614
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 615
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: invalid ref format: ~a" err\n' span_id:616)
        )
      }
    )
    (C {(test_done)})
  ]
)