(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:'git show' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:20) 
          (Token id:Id.Lit_Chars val:'\techo hello world >foo &&\n' span_id:21) (Token id:Id.Lit_Chars val:'\tH=$(git hash-object -w foo) &&\n' span_id:22) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit tag -a foo-tag -m "Tags $H" $H &&\n'
            span_id: 23
          ) (Token id:Id.Lit_Chars val:'\tHH=$(expr "$H" : "\\(..\\)") &&\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\tH38=$(expr "$H" : "..\\(.*\\)") &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\trm -f .git/objects/$HH/$H38\n' span_id:26)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'showing a tag that point at a missing object' span_id:33))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:37) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git --no-pager show foo-tag\n'
            span_id: 38
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set up a bit of history' span_id:45))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:49) 
          (Token id:Id.Lit_Chars val:'\ttest_commit main1 &&\n' span_id:50) (Token id:Id.Lit_Chars val:'\ttest_commit main2 &&\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\ttest_commit main3 &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\tgit tag -m "annotated tag" annotated &&\n' span_id:53) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b side HEAD^^ &&\n' span_id:54) (Token id:Id.Lit_Chars val:'\ttest_commit side2 &&\n' span_id:55) 
          (Token id:Id.Lit_Chars val:'\ttest_commit side3 &&\n' span_id:56) (Token id:Id.Lit_Chars val:'\ttest_merge merge main3\n' span_id:57)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'showing two commits' span_id:64))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\tcommit $(git rev-parse main2)\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\tcommit $(git rev-parse main3)\n' span_id:71) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:72) 
          (Token id:Id.Lit_Chars val:'\tgit show main2 main3 >actual &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\tgrep ^commit actual >actual.filtered &&\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual.filtered\n' span_id:75)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'showing a range walks (linear)' span_id:82))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:86) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:87) (Token id:Id.Lit_Chars val:'\tcommit $(git rev-parse main3)\n' span_id:88) 
          (Token id:Id.Lit_Chars val:'\tcommit $(git rev-parse main2)\n' span_id:89) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\tgit show main1..main3 >actual &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\tgrep ^commit actual >actual.filtered &&\n' span_id:92) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual.filtered\n' span_id:93)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'showing a range walks (Y shape, ^ first)' span_id:100))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:104) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\tcommit $(git rev-parse main3)\n' span_id:106) 
          (Token id:Id.Lit_Chars val:'\tcommit $(git rev-parse main2)\n' span_id:107) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:108) 
          (Token id:Id.Lit_Chars val:'\tgit show ^side3 main3 >actual &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\tgrep ^commit actual >actual.filtered &&\n' span_id:110) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual.filtered\n' span_id:111)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'showing a range walks (Y shape, ^ last)' span_id:118))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:122) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:123) (Token id:Id.Lit_Chars val:'\tcommit $(git rev-parse main3)\n' span_id:124) 
          (Token id:Id.Lit_Chars val:'\tcommit $(git rev-parse main2)\n' span_id:125) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:126) 
          (Token id:Id.Lit_Chars val:'\tgit show main3 ^side3 >actual &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\tgrep ^commit actual >actual.filtered &&\n' span_id:128) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual.filtered\n' span_id:129)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'showing with -N walks' span_id:136))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:140) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:141) (Token id:Id.Lit_Chars val:'\tcommit $(git rev-parse main3)\n' span_id:142) 
          (Token id:Id.Lit_Chars val:'\tcommit $(git rev-parse main2)\n' span_id:143) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:144) 
          (Token id:Id.Lit_Chars val:'\tgit show -2 main3 >actual &&\n' span_id:145) (Token id:Id.Lit_Chars val:'\tgrep ^commit actual >actual.filtered &&\n' span_id:146) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual.filtered\n' span_id:147)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'showing annotated tag' span_id:154))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:159) (Token id:Id.Lit_Chars val:'\ttag annotated\n' span_id:160) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit $(git rev-parse annotated^{commit})\n'
            span_id: 161
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:162) 
          (Token id:Id.Lit_Chars val:'\tgit show annotated >actual &&\n' span_id:163) (Token id:Id.Lit_Chars val:'\tgrep -E "^(commit|tag)" actual >actual.filtered &&\n' span_id:164) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual.filtered\n' span_id:165)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'showing annotated tag plus commit' span_id:172))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:176) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:177) (Token id:Id.Lit_Chars val:'\ttag annotated\n' span_id:178) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit $(git rev-parse annotated^{commit})\n'
            span_id: 179
          ) (Token id:Id.Lit_Chars val:'\tcommit $(git rev-parse side3)\n' span_id:180) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:181) (Token id:Id.Lit_Chars val:'\tgit show annotated side3 >actual &&\n' span_id:182) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep -E "^(commit|tag)" actual >actual.filtered &&\n'
            span_id: 183
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual.filtered\n' span_id:184)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'showing range' span_id:191))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:195) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\tcommit $(git rev-parse main3)\n' span_id:197) 
          (Token id:Id.Lit_Chars val:'\tcommit $(git rev-parse main2)\n' span_id:198) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:199) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show ^side3 annotated >actual &&\n'
            span_id: 200
          ) (Token id:Id.Lit_Chars val:'\tgrep -E "^(commit|tag)" actual >actual.filtered &&\n' span_id:201) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual.filtered\n' span_id:202)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'-s suppresses diff' span_id:209))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:213) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:214) (Token id:Id.Lit_Chars val:'\tmerge\n' span_id:215) 
          (Token id:Id.Lit_Chars val:'\tmain3\n' span_id:216) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:217) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show -s --format=%s merge main3 >actual &&\n'
            span_id: 218
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:219)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--quiet suppresses diff' span_id:226))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:230) 
          (Token id:Id.Lit_Chars val:'\techo main3 >expect &&\n' span_id:231) (Token id:Id.Lit_Chars val:'\tgit show --quiet --format=%s main3 >actual &&\n' span_id:232) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:233)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'show --graph is forbidden' span_id:240))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:244) 
          (Token
            id: Id.Lit_Chars
            val: '  test_must_fail git show --graph HEAD\n'
            span_id: 245
          )
        )
      }
    )
    (C {(test_done)})
  ]
)