(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 automatic use of a pager.' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-pager.sh)})
    (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-terminal.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:32))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:36) 
          (Token
            id: Id.Lit_Chars
            val: '\tsane_unset GIT_PAGER GIT_PAGER_IN_USE &&\n'
            span_id: 37
          ) (Token id:Id.Lit_Chars val:'\ttest_unconfig core.pager &&\n' span_id:38) 
          (Token id:Id.Lit_Chars val:'\n' span_id:39) (Token id:Id.Lit_Chars val:'\tPAGER="cat >paginated.out" &&\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\texport PAGER &&\n' span_id:41) (Token id:Id.Lit_Chars val:'\n' span_id:42) 
          (Token id:Id.Lit_Chars val:'\ttest_commit initial\n' span_id:43)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'some commands use a pager' span_id:52))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\trm -f paginated.out &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\ttest_terminal git log &&\n' span_id:58) 
          (Token id:Id.Lit_Chars val:'\ttest -e paginated.out\n' span_id:59)
        )
      }
    )
    (C {(test_expect_failure)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'pager runs from subdir' span_id:68))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:72) 
          (Token
            id: Id.Lit_Chars
            val: '\techo subdir/paginated.out >expected &&\n'
            span_id: 73
          ) (Token id:Id.Lit_Chars val:'\tmkdir -p subdir &&\n' span_id:74) 
          (Token
            id: Id.Lit_Chars
            val: '\trm -f paginated.out subdir/paginated.out &&\n'
            span_id: 75
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:76) 
          (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:77) (Token id:Id.Lit_Chars val:'\t\ttest_terminal git log\n' span_id:78) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:79) (Token id:Id.Lit_Chars val:'\t{\n' span_id:80) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tls paginated.out subdir/paginated.out ||\n'
            span_id: 81
          ) (Token id:Id.Lit_Chars val:'\t\t:\n' span_id:82) 
          (Token id:Id.Lit_Chars val:'\t} >actual &&\n' span_id:83) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:84)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'LESS and LV envvars are set for pagination' span_id:93))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:97) (Token id:Id.Lit_Chars val:'\t(\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\t\tsane_unset LESS LV &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\t\tPAGER="env >pager-env.out; wc" &&\n' span_id:100) 
          (Token id:Id.Lit_Chars val:'\t\texport PAGER &&\n' span_id:101) (Token id:Id.Lit_Chars val:'\n' span_id:102) 
          (Token id:Id.Lit_Chars val:'\t\ttest_terminal git log\n' span_id:103) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:104) 
          (Token id:Id.Lit_Chars val:'\tgrep ^LESS= pager-env.out &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\tgrep ^LV= pager-env.out\n' span_id:106)
        )
      }
    )
    (C {(test_expect_success)} {(Id.KW_Bang '!') (MINGW) (Id.Lit_Comma ',') (TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'LESS and LV envvars set by git-sh-setup' span_id:118))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:122) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:123) (Token id:Id.Lit_Chars val:'\t\tsane_unset LESS LV &&\n' span_id:124) 
          (Token id:Id.Lit_Chars val:'\t\tPAGER="env >pager-env.out; wc" &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\t\texport PAGER &&\n' span_id:126) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tPATH="$(git --exec-path):$PATH" &&\n'
            span_id: 127
          ) (Token id:Id.Lit_Chars val:'\t\texport PATH &&\n' span_id:128) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_terminal sh -c ". git-sh-setup && git_pager"\n'
            span_id: 129
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:130) 
          (Token id:Id.Lit_Chars val:'\tgrep ^LESS= pager-env.out &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\tgrep ^LV= pager-env.out\n' span_id:132)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'some commands do not use a pager' span_id:141))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:145) 
          (Token id:Id.Lit_Chars val:'\trm -f paginated.out &&\n' span_id:146) (Token id:Id.Lit_Chars val:'\ttest_terminal git rev-list HEAD &&\n' span_id:147) 
          (Token id:Id.Lit_Chars val:'\t! test -e paginated.out\n' span_id:148)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'no pager when stdout is a pipe' span_id:155))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:159) 
          (Token id:Id.Lit_Chars val:'\trm -f paginated.out &&\n' span_id:160) (Token id:Id.Lit_Chars val:'\tgit log | cat &&\n' span_id:161) 
          (Token id:Id.Lit_Chars val:'\t! test -e paginated.out\n' span_id:162)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'no pager when stdout is a regular file' span_id:169))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:173) 
          (Token id:Id.Lit_Chars val:'\trm -f paginated.out &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\tgit log >file &&\n' span_id:175) 
          (Token id:Id.Lit_Chars val:'\t! test -e paginated.out\n' span_id:176)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'git --paginate rev-list uses a pager' span_id:185))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:189) 
          (Token id:Id.Lit_Chars val:'\trm -f paginated.out &&\n' span_id:190) (Token id:Id.Lit_Chars val:'\ttest_terminal git --paginate rev-list HEAD &&\n' span_id:191) 
          (Token id:Id.Lit_Chars val:'\ttest -e paginated.out\n' span_id:192)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'no pager even with --paginate when stdout is a pipe'
            span_id: 199
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:203) 
          (Token id:Id.Lit_Chars val:'\trm -f file paginated.out &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\tgit --paginate log | cat &&\n' span_id:205) 
          (Token id:Id.Lit_Chars val:'\t! test -e paginated.out\n' span_id:206)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'no pager with --no-pager' span_id:215))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:219) 
          (Token id:Id.Lit_Chars val:'\trm -f paginated.out &&\n' span_id:220) (Token id:Id.Lit_Chars val:'\ttest_terminal git --no-pager log &&\n' span_id:221) 
          (Token id:Id.Lit_Chars val:'\t! test -e paginated.out\n' span_id:222)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'configuration can disable pager' span_id:231))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:235) 
          (Token id:Id.Lit_Chars val:'\trm -f paginated.out &&\n' span_id:236) (Token id:Id.Lit_Chars val:'\ttest_unconfig pager.grep &&\n' span_id:237) 
          (Token id:Id.Lit_Chars val:'\ttest_terminal git grep initial &&\n' span_id:238) (Token id:Id.Lit_Chars val:'\ttest -e paginated.out &&\n' span_id:239) 
          (Token id:Id.Lit_Chars val:'\n' span_id:240) (Token id:Id.Lit_Chars val:'\trm -f paginated.out &&\n' span_id:241) 
          (Token id:Id.Lit_Chars val:'\ttest_config pager.grep false &&\n' span_id:242) (Token id:Id.Lit_Chars val:'\ttest_terminal git grep initial &&\n' span_id:243) 
          (Token id:Id.Lit_Chars val:'\t! test -e paginated.out\n' span_id:244)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'git config uses a pager if configured to' span_id:253))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:257) 
          (Token id:Id.Lit_Chars val:'\trm -f paginated.out &&\n' span_id:258) (Token id:Id.Lit_Chars val:'\ttest_config pager.config true &&\n' span_id:259) 
          (Token id:Id.Lit_Chars val:'\ttest_terminal git config --list &&\n' span_id:260) (Token id:Id.Lit_Chars val:'\ttest -e paginated.out\n' span_id:261)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'configuration can enable pager (from subdir)' span_id:270))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:274) 
          (Token id:Id.Lit_Chars val:'\trm -f paginated.out &&\n' span_id:275) (Token id:Id.Lit_Chars val:'\tmkdir -p subdir &&\n' span_id:276) 
          (Token id:Id.Lit_Chars val:'\ttest_config pager.bundle true &&\n' span_id:277) (Token id:Id.Lit_Chars val:'\n' span_id:278) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit bundle create test.bundle --all &&\n'
            span_id: 279
          ) (Token id:Id.Lit_Chars val:'\trm -f paginated.out subdir/paginated.out &&\n' span_id:280) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:281) (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:282) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_terminal git bundle unbundle ../test.bundle\n'
            span_id: 283
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:284) (Token id:Id.Lit_Chars val:'\t{\n' span_id:285) 
          (Token id:Id.Lit_Chars val:'\t\ttest -e paginated.out ||\n' span_id:286) (Token id:Id.Lit_Chars val:'\t\ttest -e subdir/paginated.out\n' span_id:287) 
          (Token id:Id.Lit_Chars val:'\t}\n' span_id:288)
        )
      }
    )
    (command.ShFunction
      name: colorful
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(read)} {(firstline)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Less val:'<' span_id:309)
                  fd: -1
                  arg_word: {($ Id.VSub_Number '$1')}
                )
              ]
            )
            (command.Pipeline
              children: [
                (command.Simple
                  words: [
                    {(expr)}
                    {(DQ ($ Id.VSub_DollarName '$firstline'))}
                    {(Id.Lit_Other ':')}
                    {(DQ ('[a-zA-Z]'))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:327)
                      fd: -1
                      arg_word: {(/dev/null)}
                    )
                  ]
                )
              ]
              negated: T
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'tests can detect color' span_id:336))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:340) 
          (Token id:Id.Lit_Chars val:'\trm -f colorful.log colorless.log &&\n' span_id:341) (Token id:Id.Lit_Chars val:'\tgit log --no-color >colorless.log &&\n' span_id:342) 
          (Token id:Id.Lit_Chars val:'\tgit log --color >colorful.log &&\n' span_id:343) (Token id:Id.Lit_Chars val:'\t! colorful colorless.log &&\n' span_id:344) 
          (Token id:Id.Lit_Chars val:'\tcolorful colorful.log\n' span_id:345)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'no color when stdout is a regular file' span_id:352))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:356) 
          (Token id:Id.Lit_Chars val:'\trm -f colorless.log &&\n' span_id:357) (Token id:Id.Lit_Chars val:'\ttest_config color.ui auto &&\n' span_id:358) 
          (Token id:Id.Lit_Chars val:'\tgit log >colorless.log &&\n' span_id:359) (Token id:Id.Lit_Chars val:'\t! colorful colorless.log\n' span_id:360)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'color when writing to a pager' span_id:369))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:373) 
          (Token id:Id.Lit_Chars val:'\trm -f paginated.out &&\n' span_id:374) (Token id:Id.Lit_Chars val:'\ttest_config color.ui auto &&\n' span_id:375) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_terminal env TERM=vt100 git log &&\n'
            span_id: 376
          ) (Token id:Id.Lit_Chars val:'\tcolorful paginated.out\n' span_id:377)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'colors are suppressed by color.pager' span_id:386))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:390) 
          (Token id:Id.Lit_Chars val:'\trm -f paginated.out &&\n' span_id:391) (Token id:Id.Lit_Chars val:'\ttest_config color.ui auto &&\n' span_id:392) 
          (Token id:Id.Lit_Chars val:'\ttest_config color.pager false &&\n' span_id:393) (Token id:Id.Lit_Chars val:'\ttest_terminal env TERM=vt100 git log &&\n' span_id:394) 
          (Token id:Id.Lit_Chars val:'\t! colorful paginated.out\n' span_id:395)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'color when writing to a file intended for a pager'
            span_id: 402
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:406) 
          (Token id:Id.Lit_Chars val:'\trm -f colorful.log &&\n' span_id:407) (Token id:Id.Lit_Chars val:'\ttest_config color.ui auto &&\n' span_id:408) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:409) (Token id:Id.Lit_Chars val:'\t\tTERM=vt100 &&\n' span_id:410) 
          (Token id:Id.Lit_Chars val:'\t\tGIT_PAGER_IN_USE=true &&\n' span_id:411) (Token id:Id.Lit_Chars val:'\t\texport TERM GIT_PAGER_IN_USE &&\n' span_id:412) 
          (Token id:Id.Lit_Chars val:'\t\tgit log >colorful.log\n' span_id:413) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:414) 
          (Token id:Id.Lit_Chars val:'\tcolorful colorful.log\n' span_id:415)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'colors are sent to pager for external commands' span_id:424))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:428) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config alias.externallog "!git log" &&\n'
            span_id: 429
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.ui auto &&\n' span_id:430) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_terminal env TERM=vt100 git -p externallog &&\n'
            span_id: 431
          ) (Token id:Id.Lit_Chars val:'\tcolorful paginated.out\n' span_id:432)
        )
      }
    )
    (command.ShFunction
      name: parse_args
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:test_expectation)
                  op: assign_op.Equal
                  rhs: {(DQ (test_) ($ Id.VSub_Number '$1'))}
                  spids: [497]
                )
              ]
            )
            (C {(shift)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {(test)} {(DQ ($ Id.VSub_Number '$1'))} {(Id.Lit_Equals '=')} {(test_must_fail)})
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:full_command)
                          op: assign_op.Equal
                          rhs: {(DQ ('test_must_fail test_terminal '))}
                          spids: [523]
                        )
                      ]
                    )
                    (C {(shift)})
                  ]
                  spids: [507 520]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:full_command)
                      op: assign_op.Equal
                      rhs: {(DQ ('test_terminal '))}
                      spids: [535]
                    )
                  ]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:cmd)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [544]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:full_command)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$full_command') (' ') ($ Id.VSub_Number '$1'))}
                  spids: [548]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_default_pager
      body: 
        (command.BraceGroup
          children: [
            (C {(parse_args)} {(DQ ($ Id.VSub_At '$@'))})
            (C {($ Id.VSub_DollarName '$test_expectation')} {(SIMPLEPAGER) (Id.Lit_Comma ',') (TTY)} 
              {(DQ ($ Id.VSub_DollarName '$cmd') (' - default pager is used by default'))} 
              {
                (DQ ('\n') ('\t\tsane_unset PAGER GIT_PAGER &&\n') 
                  ('\t\ttest_unconfig core.pager &&\n') ('\t\trm -f default_pager_used &&\n') ('\t\tcat >') 
                  (word_part.EscapedLiteral
                    token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:590)
                  ) ('less <<-') (Id.Lit_Other '\\') ('EOF &&\n') ('\t\t#!/bin/sh\n') ('\t\twc >default_pager_used\n') 
                  ('\t\tEOF\n') ('\t\tchmod +x ') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:598)) 
                  ('less &&\n') ('\t\t(\n') ('\t\t\tPATH=.:') 
                  (word_part.EscapedLiteral
                    token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:602)
                  ) ('PATH &&\n') ('\t\t\texport PATH &&\n') ('\t\t\t') ($ Id.VSub_DollarName '$full_command') ('\n') 
                  ('\t\t) &&\n') ('\t\ttest -e default_pager_used\n') ('\t')
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: test_PAGER_overrides
      body: 
        (command.BraceGroup
          children: [
            (C {(parse_args)} {(DQ ($ Id.VSub_At '$@'))})
            (C {($ Id.VSub_DollarName '$test_expectation')} {(TTY)} 
              {(DQ ($ Id.VSub_DollarName '$cmd') (' - PAGER overrides default pager'))} 
              {
                (DQ ('\n') ('\t\tsane_unset GIT_PAGER &&\n') ('\t\ttest_unconfig core.pager &&\n') 
                  ('\t\trm -f PAGER_used &&\n') ("\t\tPAGER='wc >PAGER_used' &&\n") ('\t\texport PAGER &&\n') ('\t\t') 
                  ($ Id.VSub_DollarName '$full_command') (' &&\n') ('\t\ttest -e PAGER_used\n') ('\t')
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: test_core_pager_overrides
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:if_local_config)
                  op: assign_op.Equal
                  rhs: (word.Empty)
                  spids: [664]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:used_if_wanted)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:'overrides PAGER' span_id:669))}
                  spids: [667]
                )
              ]
            )
            (C {(test_core_pager)} {(DQ ($ Id.VSub_At '$@'))})
          ]
        )
    )
    (command.ShFunction
      name: test_local_config_ignored
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:if_local_config)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:'! ' span_id:691))}
                  spids: [689]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:used_if_wanted)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:'is not used' span_id:697))}
                  spids: [695]
                )
              ]
            )
            (C {(test_core_pager)} {(DQ ($ Id.VSub_At '$@'))})
          ]
        )
    )
    (command.ShFunction
      name: test_core_pager
      body: 
        (command.BraceGroup
          children: [
            (C {(parse_args)} {(DQ ($ Id.VSub_At '$@'))})
            (C {($ Id.VSub_DollarName '$test_expectation')} {(TTY)} 
              {
                (DQ ($ Id.VSub_DollarName '$cmd') (' - repository-local core.pager setting ') 
                  ($ Id.VSub_DollarName '$used_if_wanted')
                )
              } 
              {
                (DQ ('\n') ('\t\tsane_unset GIT_PAGER &&\n') ('\t\trm -f core.pager_used &&\n') 
                  ('\t\tPAGER=wc &&\n') ('\t\texport PAGER &&\n') ("\t\ttest_config core.pager 'wc >core.pager_used' &&\n") ('\t\t') 
                  ($ Id.VSub_DollarName '$full_command') (' &&\n') ('\t\t') (${ Id.VSub_Name if_local_config) ('test -e core.pager_used\n') ('\t')
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: test_core_pager_subdir
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:if_local_config)
                  op: assign_op.Equal
                  rhs: (word.Empty)
                  spids: [763]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:used_if_wanted)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:'overrides PAGER' span_id:768))}
                  spids: [766]
                )
              ]
            )
            (C {(test_pager_subdir_helper)} {(DQ ($ Id.VSub_At '$@'))})
          ]
        )
    )
    (command.ShFunction
      name: test_no_local_config_subdir
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:if_local_config)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:'! ' span_id:790))}
                  spids: [788]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:used_if_wanted)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:'is not used' span_id:796))}
                  spids: [794]
                )
              ]
            )
            (C {(test_pager_subdir_helper)} {(DQ ($ Id.VSub_At '$@'))})
          ]
        )
    )
    (command.ShFunction
      name: test_pager_subdir_helper
      body: 
        (command.BraceGroup
          children: [
            (C {(parse_args)} {(DQ ($ Id.VSub_At '$@'))})
            (C {($ Id.VSub_DollarName '$test_expectation')} {(TTY)} 
              {
                (DQ ($ Id.VSub_DollarName '$cmd') (' - core.pager ') 
                  ($ Id.VSub_DollarName '$used_if_wanted') (' from subdirectory')
                )
              } 
              {
                (DQ ('\n') ('\t\tsane_unset GIT_PAGER &&\n') ('\t\trm -f core.pager_used &&\n') 
                  ('\t\trm -fr sub &&\n') ('\t\tPAGER=wc &&\n') ('\t\tstampname=') 
                  (word_part.EscapedLiteral
                    token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:842)
                  ) ('(pwd)/core.pager_used &&\n') ('\t\texport PAGER stampname &&\n') ("\t\ttest_config core.pager 'wc >") 
                  (word_part.EscapedLiteral
                    token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:846)
                  ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:847)) (stampname) 
                  (word_part.EscapedLiteral
                    token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:849)
                  ) ("' &&\n") ('\t\tmkdir sub &&\n') ('\t\t(\n') ('\t\t\tcd sub &&\n') ('\t\t\t') 
                  ($ Id.VSub_DollarName '$full_command') ('\n') ('\t\t) &&\n') ('\t\t') (${ Id.VSub_Name if_local_config) ('test -e core.pager_used\n') ('\t')
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: test_GIT_PAGER_overrides
      body: 
        (command.BraceGroup
          children: [
            (C {(parse_args)} {(DQ ($ Id.VSub_At '$@'))})
            (C {($ Id.VSub_DollarName '$test_expectation')} {(TTY)} 
              {(DQ ($ Id.VSub_DollarName '$cmd') (' - GIT_PAGER overrides core.pager'))} 
              {
                (DQ ('\n') ('\t\trm -f GIT_PAGER_used &&\n') ('\t\ttest_config core.pager wc &&\n') 
                  ("\t\tGIT_PAGER='wc >GIT_PAGER_used' &&\n") ('\t\texport GIT_PAGER &&\n') ('\t\t') ($ Id.VSub_DollarName '$full_command') (' &&\n') 
                  ('\t\ttest -e GIT_PAGER_used\n') ('\t')
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: test_doesnt_paginate
      body: 
        (command.BraceGroup
          children: [
            (C {(parse_args)} {(DQ ($ Id.VSub_At '$@'))})
            (C {($ Id.VSub_DollarName '$test_expectation')} {(TTY)} 
              {(DQ ("no pager for '") ($ Id.VSub_DollarName '$cmd') ("'"))} 
              {
                (DQ ('\n') ('\t\trm -f GIT_PAGER_used &&\n') 
                  ("\t\tGIT_PAGER='wc >GIT_PAGER_used' &&\n") ('\t\texport GIT_PAGER &&\n') ('\t\t') ($ Id.VSub_DollarName '$full_command') (' &&\n') 
                  ('\t\t! test -e GIT_PAGER_used\n') ('\t')
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: test_pager_choices
      body: 
        (command.BraceGroup
          children: [
            (C {(test_default_pager)} {(expect_success)} {(DQ ($ Id.VSub_At '$@'))})
            (C {(test_PAGER_overrides)} {(expect_success)} {(DQ ($ Id.VSub_At '$@'))})
            (C {(test_core_pager_overrides)} {(expect_success)} {(DQ ($ Id.VSub_At '$@'))})
            (C {(test_core_pager_subdir)} {(expect_success)} {(DQ ($ Id.VSub_At '$@'))})
            (C {(test_GIT_PAGER_overrides)} {(expect_success)} {(DQ ($ Id.VSub_At '$@'))})
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup: some aliases' span_id:1006))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1010) 
          (Token id:Id.Lit_Chars val:'\tgit config alias.aliasedlog log &&\n' span_id:1011) (Token id:Id.Lit_Chars val:'\tgit config alias.true "!true"\n' span_id:1012)
        )
      }
    )
    (C {(test_pager_choices)} {(SQ (Token id:Id.Lit_Chars val:'git log' span_id:1019))})
    (C {(test_pager_choices)} {(SQ (Token id:Id.Lit_Chars val:'git -p log' span_id:1025))})
    (C {(test_pager_choices)} {(SQ (Token id:Id.Lit_Chars val:'git aliasedlog' span_id:1031))})
    (C {(test_default_pager)} {(expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p aliasedlog' span_id:1040))}
    )
    (C {(test_PAGER_overrides)} {(expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p aliasedlog' span_id:1048))}
    )
    (C {(test_core_pager_overrides)} {(expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p aliasedlog' span_id:1056))}
    )
    (C {(test_core_pager_subdir)} {(expect_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p aliasedlog' span_id:1064))}
    )
    (C {(test_GIT_PAGER_overrides)} {(expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p aliasedlog' span_id:1072))}
    )
    (C {(test_default_pager)} {(expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p true' span_id:1081))}
    )
    (C {(test_PAGER_overrides)} {(expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p true' span_id:1089))}
    )
    (C {(test_core_pager_overrides)} {(expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p true' span_id:1097))}
    )
    (C {(test_core_pager_subdir)} {(expect_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p true' span_id:1105))}
    )
    (C {(test_GIT_PAGER_overrides)} {(expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p true' span_id:1113))}
    )
    (C {(test_default_pager)} {(expect_success)} {(test_must_fail)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p request-pull' span_id:1124))}
    )
    (C {(test_PAGER_overrides)} {(expect_success)} {(test_must_fail)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p request-pull' span_id:1134))}
    )
    (C {(test_core_pager_overrides)} {(expect_success)} {(test_must_fail)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p request-pull' span_id:1144))}
    )
    (C {(test_core_pager_subdir)} {(expect_failure)} {(test_must_fail)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p request-pull' span_id:1154))}
    )
    (C {(test_GIT_PAGER_overrides)} {(expect_success)} {(test_must_fail)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p request-pull' span_id:1164))}
    )
    (C {(test_default_pager)} {(expect_success)} {(test_must_fail)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p' span_id:1175))}
    )
    (C {(test_PAGER_overrides)} {(expect_success)} {(test_must_fail)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p' span_id:1185))}
    )
    (C {(test_local_config_ignored)} {(expect_failure)} {(test_must_fail)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p' span_id:1195))}
    )
    (C {(test_no_local_config_subdir)} {(expect_success)} {(test_must_fail)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p' span_id:1205))}
    )
    (C {(test_GIT_PAGER_overrides)} {(expect_success)} {(test_must_fail)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p' span_id:1215))}
    )
    (C {(test_doesnt_paginate)} {(expect_failure)} {(test_must_fail)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p nonsense' span_id:1226))}
    )
    (C {(test_pager_choices)} {(SQ (Token id:Id.Lit_Chars val:'git shortlog' span_id:1233))})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup: configure shortlog not to paginate' span_id:1239))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1243) 
          (Token id:Id.Lit_Chars val:'\tgit config pager.shortlog false\n' span_id:1244)
        )
      }
    )
    (C {(test_doesnt_paginate)} {(expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git shortlog' span_id:1252))}
    )
    (C {(test_no_local_config_subdir)} {(expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git shortlog' span_id:1260))}
    )
    (C {(test_default_pager)} {(expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p shortlog' span_id:1268))}
    )
    (C {(test_core_pager_subdir)} {(expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p shortlog' span_id:1276))}
    )
    (C {(test_core_pager_subdir)} {(expect_success)} {(test_must_fail)} 
      {(SQ (Token id:Id.Lit_Chars val:'git -p apply </dev/null' span_id:1289))}
    )
    (C {(test_expect_success)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'command-specific pager' span_id:1298))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1302) 
          (Token id:Id.Lit_Chars val:'\tsane_unset PAGER GIT_PAGER &&\n' span_id:1303) (Token id:Id.Lit_Chars val:'\techo "foo:initial" >expect &&\n' span_id:1304) 
          (Token id:Id.Lit_Chars val:'\t>actual &&\n' span_id:1305) (Token id:Id.Lit_Chars val:'\ttest_unconfig core.pager &&\n' span_id:1306) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config pager.log "sed s/^/foo:/ >actual" &&\n'
            span_id: 1307
          ) (Token id:Id.Lit_Chars val:'\ttest_terminal git log --format=%s -1 &&\n' span_id:1308) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1309)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'command-specific pager overrides core.pager' span_id:1318))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1322) 
          (Token id:Id.Lit_Chars val:'\tsane_unset PAGER GIT_PAGER &&\n' span_id:1323) (Token id:Id.Lit_Chars val:'\techo "foo:initial" >expect &&\n' span_id:1324) 
          (Token id:Id.Lit_Chars val:'\t>actual &&\n' span_id:1325) (Token id:Id.Lit_Chars val:'\ttest_config core.pager "exit 1" &&\n' span_id:1326) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config pager.log "sed s/^/foo:/ >actual" &&\n'
            span_id: 1327
          ) (Token id:Id.Lit_Chars val:'\ttest_terminal git log --format=%s -1 &&\n' span_id:1328) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1329)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'command-specific pager overridden by environment'
            span_id: 1338
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1342) 
          (Token
            id: Id.Lit_Chars
            val: '\tGIT_PAGER="sed s/^/foo:/ >actual" && export GIT_PAGER &&\n'
            span_id: 1343
          ) (Token id:Id.Lit_Chars val:'\t>actual &&\n' span_id:1344) 
          (Token id:Id.Lit_Chars val:'\techo "foo:initial" >expect &&\n' span_id:1345) (Token id:Id.Lit_Chars val:'\ttest_config pager.log "exit 1" &&\n' span_id:1346) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_terminal git log --format=%s -1 &&\n'
            span_id: 1347
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1348)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup external command' span_id:1355))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1359) 
          (Token id:Id.Lit_Chars val:'\tcat >git-external <<-\\EOF &&\n' span_id:1360) (Token id:Id.Lit_Chars val:'\t#!/bin/sh\n' span_id:1361) 
          (Token id:Id.Lit_Chars val:'\tgit "$@"\n' span_id:1362) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1363) 
          (Token id:Id.Lit_Chars val:'\tchmod +x git-external\n' span_id:1364)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'command-specific pager works for external commands'
            span_id: 1373
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1377) 
          (Token id:Id.Lit_Chars val:'\tsane_unset PAGER GIT_PAGER &&\n' span_id:1378) (Token id:Id.Lit_Chars val:'\techo "foo:initial" >expect &&\n' span_id:1379) 
          (Token id:Id.Lit_Chars val:'\t>actual &&\n' span_id:1380) (Token id:Id.Lit_Chars val:'\ttest_config pager.external "sed s/^/foo:/ >actual" &&\n' span_id:1381) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_terminal git --exec-path="$(pwd)" external log --format=%s -1 &&\n'
            span_id: 1382
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1383)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'sub-commands of externals use their own pager' span_id:1392))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1396) 
          (Token id:Id.Lit_Chars val:'\tsane_unset PAGER GIT_PAGER &&\n' span_id:1397) (Token id:Id.Lit_Chars val:'\techo "foo:initial" >expect &&\n' span_id:1398) 
          (Token id:Id.Lit_Chars val:'\t>actual &&\n' span_id:1399) (Token id:Id.Lit_Chars val:'\ttest_config pager.log "sed s/^/foo:/ >actual" &&\n' span_id:1400) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_terminal git --exec-path=. external log --format=%s -1 &&\n'
            span_id: 1401
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1402)
        )
      }
    )
    (C {(test_expect_success)} {(TTY)} 
      {(SQ (Token id:Id.Lit_Chars val:'external command pagers override sub-commands' span_id:1411))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1415) 
          (Token id:Id.Lit_Chars val:'\tsane_unset PAGER GIT_PAGER &&\n' span_id:1416) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:1417) 
          (Token id:Id.Lit_Chars val:'\t>actual &&\n' span_id:1418) (Token id:Id.Lit_Chars val:'\ttest_config pager.external false &&\n' span_id:1419) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config pager.log "sed s/^/log:/ >actual" &&\n'
            span_id: 1420
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_terminal git --exec-path=. external log --format=%s -1 &&\n'
            span_id: 1421
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1422)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'command with underscores does not complain' span_id:1429))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1433) 
          (Token
            id: Id.Lit_Chars
            val: '\twrite_script git-under_score <<-\\EOF &&\n'
            span_id: 1434
          ) (Token id:Id.Lit_Chars val:'\techo ok\n' span_id:1435) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1436) (Token id:Id.Lit_Chars val:'\tgit --exec-path=. under_score >actual 2>&1 &&\n' span_id:1437) 
          (Token id:Id.Lit_Chars val:'\techo ok >expect &&\n' span_id:1438) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1439)
        )
      }
    )
    (C {(test_done)})
  ]
)