(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(gitattributes)}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: attr_check
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:path)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [21]
                )
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:expect)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$2'))}
                  spids: [26]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [
                    {(git)}
                    {($ Id.VSub_Number '$3')}
                    {(check-attr)}
                    {(test)}
                    {(--)}
                    {(DQ ($ Id.VSub_DollarName '$path'))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:47)
                      fd: -1
                      arg_word: {(actual)}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'2>' span_id:50)
                      fd: 2
                      arg_word: {(err)}
                    )
                  ]
                )
                (command.Simple
                  words: [
                    {(echo)}
                    {(DQ ($ Id.VSub_DollarName '$path') (': test: ') ($ Id.VSub_Number '$2'))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:64)
                      fd: -1
                      arg_word: {(expect)}
                    )
                  ]
                )
                (C {(test_cmp)} {(expect)} {(actual)})
                (C {(test_line_count)} {(Id.Lit_Equals '=')} {(0)} {(err)})
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:93))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:97) 
          (Token id:Id.Lit_Chars val:'\tmkdir -p a/b/d a/c b &&\n' span_id:98) (Token id:Id.Lit_Chars val:'\t(\n' span_id:99) 
          (Token id:Id.Lit_Chars val:'\t\techo "[attr]notest !test"\n' span_id:100) (Token id:Id.Lit_Chars val:'\t\techo "f\ttest=f"\n' span_id:101) 
          (Token id:Id.Lit_Chars val:'\t\techo "a/i test=a/i"\n' span_id:102) (Token id:Id.Lit_Chars val:'\t\techo "onoff test -test"\n' span_id:103) 
          (Token id:Id.Lit_Chars val:'\t\techo "offon -test test"\n' span_id:104) (Token id:Id.Lit_Chars val:'\t\techo "no notest"\n' span_id:105) 
          (Token id:Id.Lit_Chars val:'\t\techo "A/e/F test=A/e/F"\n' span_id:106) (Token id:Id.Lit_Chars val:'\t) >.gitattributes &&\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:108) (Token id:Id.Lit_Chars val:'\t\techo "g test=a/g" &&\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'\t\techo "b/g test=a/b/g"\n' span_id:110) (Token id:Id.Lit_Chars val:'\t) >a/.gitattributes &&\n' span_id:111) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:112) (Token id:Id.Lit_Chars val:'\t\techo "h test=a/b/h" &&\n' span_id:113) 
          (Token id:Id.Lit_Chars val:'\t\techo "d/* test=a/b/d/*"\n' span_id:114) (Token id:Id.Lit_Chars val:'\t\techo "d/yes notest"\n' span_id:115) 
          (Token id:Id.Lit_Chars val:'\t) >a/b/.gitattributes &&\n' span_id:116) (Token id:Id.Lit_Chars val:'\t(\n' span_id:117) 
          (Token id:Id.Lit_Chars val:'\t\techo "global test=global"\n' span_id:118) (Token id:Id.Lit_Chars val:'\t) >"$HOME"/global-gitattributes &&\n' span_id:119) 
          (Token id:Id.Lit_Chars val:'\tcat <<-EOF >expect-all\n' span_id:120) (Token id:Id.Lit_Chars val:'\tf: test: f\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'\ta/f: test: f\n' span_id:122) (Token id:Id.Lit_Chars val:'\ta/c/f: test: f\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\ta/g: test: a/g\n' span_id:124) (Token id:Id.Lit_Chars val:'\ta/b/g: test: a/b/g\n' span_id:125) 
          (Token id:Id.Lit_Chars val:'\tb/g: test: unspecified\n' span_id:126) (Token id:Id.Lit_Chars val:'\ta/b/h: test: a/b/h\n' span_id:127) 
          (Token id:Id.Lit_Chars val:'\ta/b/d/g: test: a/b/d/*\n' span_id:128) (Token id:Id.Lit_Chars val:'\tonoff: test: unset\n' span_id:129) 
          (Token id:Id.Lit_Chars val:'\toffon: test: set\n' span_id:130) (Token id:Id.Lit_Chars val:'\tno: notest: set\n' span_id:131) 
          (Token id:Id.Lit_Chars val:'\tno: test: unspecified\n' span_id:132) (Token id:Id.Lit_Chars val:'\ta/b/d/no: notest: set\n' span_id:133) 
          (Token id:Id.Lit_Chars val:'\ta/b/d/no: test: a/b/d/*\n' span_id:134) (Token id:Id.Lit_Chars val:'\ta/b/d/yes: notest: set\n' span_id:135) 
          (Token id:Id.Lit_Chars val:'\ta/b/d/yes: test: unspecified\n' span_id:136) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:137)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'command line checks' span_id:144))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:148) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git check-attr &&\n' span_id:149) (Token id:Id.Lit_Chars val:'\ttest_must_fail git check-attr -- &&\n' span_id:150) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git check-attr test &&\n'
            span_id: 151
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git check-attr test -- &&\n' span_id:152) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git check-attr -- f &&\n'
            span_id: 153
          ) (Token id:Id.Lit_Chars val:'\techo "f" | test_must_fail git check-attr --stdin &&\n' span_id:154) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "f" | test_must_fail git check-attr --stdin -- f &&\n'
            span_id: 155
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "f" | test_must_fail git check-attr --stdin test -- f &&\n'
            span_id: 156
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git check-attr "" -- f\n' span_id:157)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'attribute test' span_id:164))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:168) 
          (Token id:Id.Lit_Chars val:'\tattr_check f f &&\n' span_id:169) (Token id:Id.Lit_Chars val:'\tattr_check a/f f &&\n' span_id:170) 
          (Token id:Id.Lit_Chars val:'\tattr_check a/c/f f &&\n' span_id:171) (Token id:Id.Lit_Chars val:'\tattr_check a/g a/g &&\n' span_id:172) 
          (Token id:Id.Lit_Chars val:'\tattr_check a/b/g a/b/g &&\n' span_id:173) (Token id:Id.Lit_Chars val:'\tattr_check b/g unspecified &&\n' span_id:174) 
          (Token id:Id.Lit_Chars val:'\tattr_check a/b/h a/b/h &&\n' span_id:175) (Token id:Id.Lit_Chars val:'\tattr_check a/b/d/g "a/b/d/*" &&\n' span_id:176) 
          (Token id:Id.Lit_Chars val:'\tattr_check onoff unset &&\n' span_id:177) (Token id:Id.Lit_Chars val:'\tattr_check offon set &&\n' span_id:178) 
          (Token id:Id.Lit_Chars val:'\tattr_check no unspecified &&\n' span_id:179) (Token id:Id.Lit_Chars val:'\tattr_check a/b/d/no "a/b/d/*" &&\n' span_id:180) 
          (Token id:Id.Lit_Chars val:'\tattr_check a/b/d/yes unspecified\n' span_id:181)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'attribute matching is case sensitive when core.ignorecase=0'
            span_id: 188
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:192) (Token id:Id.Lit_Chars val:'\n' span_id:193) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail attr_check F f "-c core.ignorecase=0" &&\n'
            span_id: 194
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail attr_check a/F f "-c core.ignorecase=0" &&\n'
            span_id: 195
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail attr_check a/c/F f "-c core.ignorecase=0" &&\n'
            span_id: 196
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail attr_check a/G a/g "-c core.ignorecase=0" &&\n'
            span_id: 197
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail attr_check a/B/g a/b/g "-c core.ignorecase=0" &&\n'
            span_id: 198
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail attr_check a/b/G a/b/g "-c core.ignorecase=0" &&\n'
            span_id: 199
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail attr_check a/b/H a/b/h "-c core.ignorecase=0" &&\n'
            span_id: 200
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail attr_check a/b/D/g "a/b/d/*" "-c core.ignorecase=0" &&\n'
            span_id: 201
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail attr_check oNoFf unset "-c core.ignorecase=0" &&\n'
            span_id: 202
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail attr_check oFfOn set "-c core.ignorecase=0" &&\n'
            span_id: 203
          ) (Token id:Id.Lit_Chars val:'\tattr_check NO unspecified "-c core.ignorecase=0" &&\n' span_id:204) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail attr_check a/b/D/NO "a/b/d/*" "-c core.ignorecase=0" &&\n'
            span_id: 205
          ) (Token id:Id.Lit_Chars val:'\tattr_check a/b/d/YES a/b/d/* "-c core.ignorecase=0" &&\n' span_id:206) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail attr_check a/E/f "A/e/F" "-c core.ignorecase=0"\n'
            span_id: 207
          ) (Token id:Id.Lit_Chars val:'\n' span_id:208)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'attribute matching is case insensitive when core.ignorecase=1'
            span_id: 215
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:219) (Token id:Id.Lit_Chars val:'\n' span_id:220) 
          (Token
            id: Id.Lit_Chars
            val: '\tattr_check F f "-c core.ignorecase=1" &&\n'
            span_id: 221
          ) (Token id:Id.Lit_Chars val:'\tattr_check a/F f "-c core.ignorecase=1" &&\n' span_id:222) 
          (Token
            id: Id.Lit_Chars
            val: '\tattr_check a/c/F f "-c core.ignorecase=1" &&\n'
            span_id: 223
          ) (Token id:Id.Lit_Chars val:'\tattr_check a/G a/g "-c core.ignorecase=1" &&\n' span_id:224) 
          (Token
            id: Id.Lit_Chars
            val: '\tattr_check a/B/g a/b/g "-c core.ignorecase=1" &&\n'
            span_id: 225
          ) (Token id:Id.Lit_Chars val:'\tattr_check a/b/G a/b/g "-c core.ignorecase=1" &&\n' span_id:226) 
          (Token
            id: Id.Lit_Chars
            val: '\tattr_check a/b/H a/b/h "-c core.ignorecase=1" &&\n'
            span_id: 227
          ) (Token id:Id.Lit_Chars val:'\tattr_check a/b/D/g "a/b/d/*" "-c core.ignorecase=1" &&\n' span_id:228) 
          (Token
            id: Id.Lit_Chars
            val: '\tattr_check oNoFf unset "-c core.ignorecase=1" &&\n'
            span_id: 229
          ) (Token id:Id.Lit_Chars val:'\tattr_check oFfOn set "-c core.ignorecase=1" &&\n' span_id:230) 
          (Token
            id: Id.Lit_Chars
            val: '\tattr_check NO unspecified "-c core.ignorecase=1" &&\n'
            span_id: 231
          ) (Token id:Id.Lit_Chars val:'\tattr_check a/b/D/NO "a/b/d/*" "-c core.ignorecase=1" &&\n' span_id:232) 
          (Token
            id: Id.Lit_Chars
            val: '\tattr_check a/b/d/YES unspecified "-c core.ignorecase=1" &&\n'
            span_id: 233
          ) (Token id:Id.Lit_Chars val:'\tattr_check a/E/f "A/e/F" "-c core.ignorecase=1"\n' span_id:234) 
          (Token id:Id.Lit_Chars val:'\n' span_id:235)
        )
      }
    )
    (C {(test_expect_success)} {(CASE_INSENSITIVE_FS)} 
      {(SQ (Token id:Id.Lit_Chars val:'additional case insensitivity tests' span_id:244))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:248) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail attr_check a/B/D/g "a/b/d/*" "-c core.ignorecase=0" &&\n'
            span_id: 249
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail attr_check A/B/D/NO "a/b/d/*" "-c core.ignorecase=0" &&\n'
            span_id: 250
          ) (Token id:Id.Lit_Chars val:'\tattr_check A/b/h a/b/h "-c core.ignorecase=1" &&\n' span_id:251) 
          (Token
            id: Id.Lit_Chars
            val: '\tattr_check a/B/D/g "a/b/d/*" "-c core.ignorecase=1" &&\n'
            span_id: 252
          ) (Token id:Id.Lit_Chars val:'\tattr_check A/B/D/NO "a/b/d/*" "-c core.ignorecase=1"\n' span_id:253)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'unnormalized paths' span_id:260))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:264) 
          (Token id:Id.Lit_Chars val:'\tattr_check ./f f &&\n' span_id:265) (Token id:Id.Lit_Chars val:'\tattr_check ./a/g a/g &&\n' span_id:266) 
          (Token id:Id.Lit_Chars val:'\tattr_check a/./g a/g &&\n' span_id:267) (Token id:Id.Lit_Chars val:'\tattr_check a/c/../b/g a/b/g\n' span_id:268)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'relative paths' span_id:275))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:279) 
          (Token id:Id.Lit_Chars val:'\t(cd a && attr_check ../f f) &&\n' span_id:280) (Token id:Id.Lit_Chars val:'\t(cd a && attr_check f f) &&\n' span_id:281) 
          (Token id:Id.Lit_Chars val:'\t(cd a && attr_check i a/i) &&\n' span_id:282) (Token id:Id.Lit_Chars val:'\t(cd a && attr_check g a/g) &&\n' span_id:283) 
          (Token id:Id.Lit_Chars val:'\t(cd a && attr_check b/g a/b/g) &&\n' span_id:284) (Token id:Id.Lit_Chars val:'\t(cd b && attr_check ../a/f f) &&\n' span_id:285) 
          (Token id:Id.Lit_Chars val:'\t(cd b && attr_check ../a/g a/g) &&\n' span_id:286) (Token id:Id.Lit_Chars val:'\t(cd b && attr_check ../a/b/g a/b/g)\n' span_id:287)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'prefixes are not confused with leading directories'
            span_id: 294
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:298) 
          (Token id:Id.Lit_Chars val:'\tattr_check a_plus/g unspecified &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:300) 
          (Token id:Id.Lit_Chars val:'\ta/g: test: a/g\n' span_id:301) (Token id:Id.Lit_Chars val:'\ta_plus/g: test: unspecified\n' span_id:302) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:303) (Token id:Id.Lit_Chars val:'\tgit check-attr test a/g a_plus/g >actual &&\n' span_id:304) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:305)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:core.attributesfile span_id:312))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:316) 
          (Token id:Id.Lit_Chars val:'\tattr_check global unspecified &&\n' span_id:317) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.attributesfile "$HOME/global-gitattributes" &&\n'
            span_id: 318
          ) (Token id:Id.Lit_Chars val:'\tattr_check global global &&\n' span_id:319) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.attributesfile "~/global-gitattributes" &&\n'
            span_id: 320
          ) (Token id:Id.Lit_Chars val:'\tattr_check global global &&\n' span_id:321) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "global test=precedence" >>.gitattributes &&\n'
            span_id: 322
          ) (Token id:Id.Lit_Chars val:'\tattr_check global precedence\n' span_id:323)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'attribute test: read paths from stdin' span_id:330))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:334) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep -v notest <expect-all >expect &&\n'
            span_id: 335
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/:.*//" <expect | git check-attr --stdin test >actual &&\n'
            span_id: 336
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:337)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'attribute test: --all option' span_id:344))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:348) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep -v unspecified <expect-all | sort >specified-all &&\n'
            span_id: 349
          ) (Token id:Id.Lit_Chars val:'\tsed -e "s/:.*//" <expect-all | uniq >stdin-all &&\n' span_id:350) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit check-attr --stdin --all <stdin-all | sort >actual &&\n'
            span_id: 351
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp specified-all actual\n' span_id:352)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'attribute test: --cached option' span_id:359))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:363) 
          (Token id:Id.Lit_Chars val:'\t: >empty &&\n' span_id:364) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit check-attr --cached --stdin --all <stdin-all | sort >actual &&\n'
            span_id: 365
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp empty actual &&\n' span_id:366) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit add .gitattributes a/.gitattributes a/b/.gitattributes &&\n'
            span_id: 367
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit check-attr --cached --stdin --all <stdin-all | sort >actual &&\n'
            span_id: 368
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp specified-all actual\n' span_id:369)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'root subdir attribute test' span_id:376))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:380) 
          (Token id:Id.Lit_Chars val:'\tattr_check a/i a/i &&\n' span_id:381) (Token id:Id.Lit_Chars val:'\tattr_check subdir/a/i unspecified\n' span_id:382)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'negative patterns' span_id:389))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:393) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "!f test=bar" >.gitattributes &&\n'
            span_id: 394
          ) (Token id:Id.Lit_Chars val:'\tgit check-attr test -- ' span_id:395)
        ) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:'!f' span_id:401)) (DQ ("'")) 
        (SQ (Token id:Id.Lit_Chars val:' 2>errors &&\n' span_id:407) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "Negative patterns are ignored" errors\n'
            span_id: 408
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'patterns starting with exclamation' span_id:415))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:419) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "\\!f test=foo" >.gitattributes &&\n'
            span_id: 420
          ) (Token id:Id.Lit_Chars val:'\tattr_check "!f" foo\n' span_id:421)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'"**" test' span_id:428))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:432) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "**/f foo=bar" >.gitattributes &&\n'
            span_id: 433
          ) (Token id:Id.Lit_Chars val:'\tcat <<\\EOF >expect &&\n' span_id:434) 
          (Token id:Id.Lit_Chars val:'f: foo: bar\n' span_id:435) (Token id:Id.Lit_Chars val:'a/f: foo: bar\n' span_id:436) 
          (Token id:Id.Lit_Chars val:'a/b/f: foo: bar\n' span_id:437) (Token id:Id.Lit_Chars val:'a/b/c/f: foo: bar\n' span_id:438) 
          (Token id:Id.Lit_Chars val:'EOF\n' span_id:439) (Token id:Id.Lit_Chars val:'\tgit check-attr foo -- "f" >actual 2>err &&\n' span_id:440) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit check-attr foo -- "a/f" >>actual 2>>err &&\n'
            span_id: 441
          ) (Token id:Id.Lit_Chars val:'\tgit check-attr foo -- "a/b/f" >>actual 2>>err &&\n' span_id:442) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit check-attr foo -- "a/b/c/f" >>actual 2>>err &&\n'
            span_id: 443
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:444) 
          (Token id:Id.Lit_Chars val:'\ttest_line_count = 0 err\n' span_id:445)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'"**" with no slashes test' span_id:452))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:456) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "a**f foo=bar" >.gitattributes &&\n'
            span_id: 457
          ) (Token id:Id.Lit_Chars val:'\tgit check-attr foo -- "f" >actual &&\n' span_id:458) 
          (Token id:Id.Lit_Chars val:'\tcat <<\\EOF >expect &&\n' span_id:459) (Token id:Id.Lit_Chars val:'f: foo: unspecified\n' span_id:460) 
          (Token id:Id.Lit_Chars val:'af: foo: bar\n' span_id:461) (Token id:Id.Lit_Chars val:'axf: foo: bar\n' span_id:462) 
          (Token id:Id.Lit_Chars val:'a/f: foo: unspecified\n' span_id:463) (Token id:Id.Lit_Chars val:'a/b/f: foo: unspecified\n' span_id:464) 
          (Token id:Id.Lit_Chars val:'a/b/c/f: foo: unspecified\n' span_id:465) (Token id:Id.Lit_Chars val:'EOF\n' span_id:466) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit check-attr foo -- "f" >actual 2>err &&\n'
            span_id: 467
          ) (Token id:Id.Lit_Chars val:'\tgit check-attr foo -- "af" >>actual 2>err &&\n' span_id:468) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit check-attr foo -- "axf" >>actual 2>err &&\n'
            span_id: 469
          ) (Token id:Id.Lit_Chars val:'\tgit check-attr foo -- "a/f" >>actual 2>>err &&\n' span_id:470) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit check-attr foo -- "a/b/f" >>actual 2>>err &&\n'
            span_id: 471
          ) (Token id:Id.Lit_Chars val:'\tgit check-attr foo -- "a/b/c/f" >>actual 2>>err &&\n' span_id:472) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:473) (Token id:Id.Lit_Chars val:'\ttest_line_count = 0 err\n' span_id:474)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'using --git-dir and --work-tree' span_id:481))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:485) 
          (Token id:Id.Lit_Chars val:'\tmkdir unreal real &&\n' span_id:486) (Token id:Id.Lit_Chars val:'\tgit init real &&\n' span_id:487) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "file test=in-real" >real/.gitattributes &&\n'
            span_id: 488
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:489) 
          (Token id:Id.Lit_Chars val:'\t\tcd unreal &&\n' span_id:490) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tattr_check file in-real "--git-dir ../real/.git --work-tree ../real"\n'
            span_id: 491
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:492)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup bare' span_id:499))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:503) 
          (Token id:Id.Lit_Chars val:'\tgit clone --bare . bare.git\n' span_id:504)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'bare repository: check that .gitattribute is ignored'
            span_id: 511
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:515) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:516) (Token id:Id.Lit_Chars val:'\t\tcd bare.git &&\n' span_id:517) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:518) (Token id:Id.Lit_Chars val:'\t\t\techo "f\ttest=f"\n' span_id:519) 
          (Token id:Id.Lit_Chars val:'\t\t\techo "a/i test=a/i"\n' span_id:520) (Token id:Id.Lit_Chars val:'\t\t) >.gitattributes &&\n' span_id:521) 
          (Token id:Id.Lit_Chars val:'\t\tattr_check f unspecified &&\n' span_id:522) (Token id:Id.Lit_Chars val:'\t\tattr_check a/f unspecified &&\n' span_id:523) 
          (Token id:Id.Lit_Chars val:'\t\tattr_check a/c/f unspecified &&\n' span_id:524) (Token id:Id.Lit_Chars val:'\t\tattr_check a/i unspecified &&\n' span_id:525) 
          (Token id:Id.Lit_Chars val:'\t\tattr_check subdir/a/i unspecified\n' span_id:526) (Token id:Id.Lit_Chars val:'\t)\n' span_id:527)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'bare repository: check that --cached honors index'
            span_id: 534
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:538) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:539) (Token id:Id.Lit_Chars val:'\t\tcd bare.git &&\n' span_id:540) 
          (Token id:Id.Lit_Chars val:'\t\tGIT_INDEX_FILE=../.git/index \\\n' span_id:541) (Token id:Id.Lit_Chars val:'\t\tgit check-attr --cached --stdin --all <../stdin-all |\n' span_id:542) 
          (Token id:Id.Lit_Chars val:'\t\tsort >actual &&\n' span_id:543) (Token id:Id.Lit_Chars val:'\t\ttest_cmp ../specified-all actual\n' span_id:544) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:545)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'bare repository: test info/attributes' span_id:552))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:556) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:557) (Token id:Id.Lit_Chars val:'\t\tcd bare.git &&\n' span_id:558) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:559) (Token id:Id.Lit_Chars val:'\t\t\techo "f\ttest=f"\n' span_id:560) 
          (Token id:Id.Lit_Chars val:'\t\t\techo "a/i test=a/i"\n' span_id:561) (Token id:Id.Lit_Chars val:'\t\t) >info/attributes &&\n' span_id:562) 
          (Token id:Id.Lit_Chars val:'\t\tattr_check f f &&\n' span_id:563) (Token id:Id.Lit_Chars val:'\t\tattr_check a/f f &&\n' span_id:564) 
          (Token id:Id.Lit_Chars val:'\t\tattr_check a/c/f f &&\n' span_id:565) (Token id:Id.Lit_Chars val:'\t\tattr_check a/i a/i &&\n' span_id:566) 
          (Token id:Id.Lit_Chars val:'\t\tattr_check subdir/a/i unspecified\n' span_id:567) (Token id:Id.Lit_Chars val:'\t)\n' span_id:568)
        )
      }
    )
    (C {(test_done)})
  ]
)