(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 pull message generation' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:dollar)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'$Dollar' span_id:17))}
          spids: [15]
        )
      ]
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:26) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_commit initial afile original &&\n'
            span_id: 27
          ) (Token id:Id.Lit_Chars val:'\tgit clone . cloned &&\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:29) (Token id:Id.Lit_Chars val:'\t\tcd cloned &&\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\t\techo added >bfile &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\t\tgit add bfile &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\t\ttest_tick &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "add bfile"\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\ttest_tick && test_tick &&\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\techo "second" >afile &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\tgit add afile &&\n' span_id:38) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "second commit" &&\n' span_id:39) (Token id:Id.Lit_Chars val:'\techo "original $dollar" >afile &&\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\tgit add afile &&\n' span_id:41) (Token id:Id.Lit_Chars val:'\tgit commit -m "do not clobber $dollar signs"\n' span_id:42)
        )
      }
    )
    (C {(test_expect_success)} {(pull)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:51) (Token id:Id.Lit_Chars val:'(\n' span_id:52) 
          (Token id:Id.Lit_Chars val:'\tcd cloned &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\tgit pull --log &&\n' span_id:54) 
          (Token id:Id.Lit_Chars val:'\tgit log -2 &&\n' span_id:55) (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD >result &&\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\tgrep Dollar result\n' span_id:57) (Token id:Id.Lit_Chars val:')\n' span_id:58)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--log=1 limits shortlog length' span_id:65))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:69) (Token id:Id.Lit_Chars val:'(\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\tcd cloned &&\n' span_id:71) (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD^ &&\n' span_id:72) 
          (Token id:Id.Lit_Chars val:'\ttest "$(cat afile)" = original &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\ttest "$(cat bfile)" = added &&\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\tgit pull --log=1 &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\tgit log -3 &&\n' span_id:76) 
          (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD >result &&\n' span_id:77) (Token id:Id.Lit_Chars val:'\tgrep Dollar result &&\n' span_id:78) 
          (Token id:Id.Lit_Chars val:'\t! grep "second commit" result\n' span_id:79) (Token id:Id.Lit_Chars val:')\n' span_id:80)
        )
      }
    )
    (C {(test_done)})
  ]
)