(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'git show'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ <'\n'> <'\techo hello world >foo &&\n'> <'\tH=$(git hash-object -w foo) &&\n'> 
          <'\tgit tag -a foo-tag -m "Tags $H" $H &&\n'> <'\tHH=$(expr "$H" : "\\(..\\)") &&\n'> <'\tH38=$(expr "$H" : "..\\(.*\\)") &&\n'> 
          <'\trm -f .git/objects/$HH/$H38\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'showing a tag that point at a missing object'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git --no-pager show foo-tag\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'set up a bit of history'>)} 
      {
        (SQ <'\n'> <'\ttest_commit main1 &&\n'> <'\ttest_commit main2 &&\n'> 
          <'\ttest_commit main3 &&\n'> <'\tgit tag -m "annotated tag" annotated &&\n'> <'\tgit checkout -b side HEAD^^ &&\n'> 
          <'\ttest_commit side2 &&\n'> <'\ttest_commit side3 &&\n'> <'\ttest_merge merge main3\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'showing two commits'>)} 
      {
        (SQ <'\n'> <'\tcat >expect <<-EOF &&\n'> <'\tcommit $(git rev-parse main2)\n'> 
          <'\tcommit $(git rev-parse main3)\n'> <'\tEOF\n'> <'\tgit show main2 main3 >actual &&\n'> <'\tgrep ^commit actual >actual.filtered &&\n'> 
          <'\ttest_cmp expect actual.filtered\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'showing a range walks (linear)'>)} 
      {
        (SQ <'\n'> <'\tcat >expect <<-EOF &&\n'> <'\tcommit $(git rev-parse main3)\n'> 
          <'\tcommit $(git rev-parse main2)\n'> <'\tEOF\n'> <'\tgit show main1..main3 >actual &&\n'> <'\tgrep ^commit actual >actual.filtered &&\n'> 
          <'\ttest_cmp expect actual.filtered\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'showing a range walks (Y shape, ^ first)'>)} 
      {
        (SQ <'\n'> <'\tcat >expect <<-EOF &&\n'> <'\tcommit $(git rev-parse main3)\n'> 
          <'\tcommit $(git rev-parse main2)\n'> <'\tEOF\n'> <'\tgit show ^side3 main3 >actual &&\n'> <'\tgrep ^commit actual >actual.filtered &&\n'> 
          <'\ttest_cmp expect actual.filtered\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'showing a range walks (Y shape, ^ last)'>)} 
      {
        (SQ <'\n'> <'\tcat >expect <<-EOF &&\n'> <'\tcommit $(git rev-parse main3)\n'> 
          <'\tcommit $(git rev-parse main2)\n'> <'\tEOF\n'> <'\tgit show main3 ^side3 >actual &&\n'> <'\tgrep ^commit actual >actual.filtered &&\n'> 
          <'\ttest_cmp expect actual.filtered\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'showing with -N walks'>)} 
      {
        (SQ <'\n'> <'\tcat >expect <<-EOF &&\n'> <'\tcommit $(git rev-parse main3)\n'> 
          <'\tcommit $(git rev-parse main2)\n'> <'\tEOF\n'> <'\tgit show -2 main3 >actual &&\n'> <'\tgrep ^commit actual >actual.filtered &&\n'> 
          <'\ttest_cmp expect actual.filtered\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'showing annotated tag'>)} 
      {
        (SQ <'\n'> <'\tcat >expect <<-EOF &&\n'> <'\ttag annotated\n'> 
          <'\tcommit $(git rev-parse annotated^{commit})\n'> <'\tEOF\n'> <'\tgit show annotated >actual &&\n'> 
          <'\tgrep -E "^(commit|tag)" actual >actual.filtered &&\n'> <'\ttest_cmp expect actual.filtered\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'showing annotated tag plus commit'>)} 
      {
        (SQ <'\n'> <'\tcat >expect <<-EOF &&\n'> <'\ttag annotated\n'> 
          <'\tcommit $(git rev-parse annotated^{commit})\n'> <'\tcommit $(git rev-parse side3)\n'> <'\tEOF\n'> <'\tgit show annotated side3 >actual &&\n'> 
          <'\tgrep -E "^(commit|tag)" actual >actual.filtered &&\n'> <'\ttest_cmp expect actual.filtered\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'showing range'>)} 
      {
        (SQ <'\n'> <'\tcat >expect <<-EOF &&\n'> <'\tcommit $(git rev-parse main3)\n'> 
          <'\tcommit $(git rev-parse main2)\n'> <'\tEOF\n'> <'\tgit show ^side3 annotated >actual &&\n'> 
          <'\tgrep -E "^(commit|tag)" actual >actual.filtered &&\n'> <'\ttest_cmp expect actual.filtered\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'-s suppresses diff'>)} 
      {
        (SQ <'\n'> <'\tcat >expect <<-\\EOF &&\n'> <'\tmerge\n'> <'\tmain3\n'> <'\tEOF\n'> 
          <'\tgit show -s --format=%s merge main3 >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--quiet suppresses diff'>)} 
      {
        (SQ <'\n'> <'\techo main3 >expect &&\n'> <'\tgit show --quiet --format=%s main3 >actual &&\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'show --graph is forbidden'>)} 
      {(SQ <'\n'> <'  test_must_fail git show --graph HEAD\n'>)}
    )
    (C {(test_done)})
  ]
)