(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 config file include directives' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'include file by absolute path' span_id:17))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:21) 
          (Token id:Id.Lit_Chars val:'\techo "[test]one = 1" >one &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\techo "[include]path = \\"$(pwd)/one\\"" >.gitconfig &&\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\techo 1 >expect &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\tgit config test.one >actual &&\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:26)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'include file by relative path' span_id:33))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\techo "[test]one = 1" >one &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\techo "[include]path = one" >.gitconfig &&\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\techo 1 >expect &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\tgit config test.one >actual &&\n' span_id:41) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:42)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'chained relative paths' span_id:49))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:53) 
          (Token id:Id.Lit_Chars val:'\tmkdir subdir &&\n' span_id:54) (Token id:Id.Lit_Chars val:'\techo "[test]three = 3" >subdir/three &&\n' span_id:55) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "[include]path = three" >subdir/two &&\n'
            span_id: 56
          ) (Token id:Id.Lit_Chars val:'\techo "[include]path = subdir/two" >.gitconfig &&\n' span_id:57) 
          (Token id:Id.Lit_Chars val:'\techo 3 >expect &&\n' span_id:58) (Token id:Id.Lit_Chars val:'\tgit config test.three >actual &&\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:60)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'include paths get tilde-expansion' span_id:67))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\techo "[test]one = 1" >one &&\n' span_id:72) (Token id:Id.Lit_Chars val:'\techo "[include]path = ~/one" >.gitconfig &&\n' span_id:73) 
          (Token id:Id.Lit_Chars val:'\techo 1 >expect &&\n' span_id:74) (Token id:Id.Lit_Chars val:'\tgit config test.one >actual &&\n' span_id:75) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:76)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'include options can still be examined' span_id:83))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:87) 
          (Token id:Id.Lit_Chars val:'\techo "[test]one = 1" >one &&\n' span_id:88) (Token id:Id.Lit_Chars val:'\techo "[include]path = one" >.gitconfig &&\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\techo one >expect &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\tgit config include.path >actual &&\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:92)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'listing includes option and expansion' span_id:99))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:103) 
          (Token id:Id.Lit_Chars val:'\techo "[test]one = 1" >one &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\techo "[include]path = one" >.gitconfig &&\n' span_id:105) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:106) (Token id:Id.Lit_Chars val:'\tinclude.path=one\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\ttest.one=1\n' span_id:108) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'\tgit config --list >actual.full &&\n' span_id:110) (Token id:Id.Lit_Chars val:'\tgrep -v ^core actual.full >actual &&\n' span_id:111) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:112)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'single file lookup does not expand includes by default'
            span_id: 119
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\techo "[test]one = 1" >one &&\n' span_id:124) (Token id:Id.Lit_Chars val:'\techo "[include]path = one" >.gitconfig &&\n' span_id:125) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git config -f .gitconfig test.one &&\n'
            span_id: 126
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git config --global test.one &&\n' span_id:127) 
          (Token id:Id.Lit_Chars val:'\techo 1 >expect &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\tgit config --includes -f .gitconfig test.one >actual &&\n' span_id:129) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:130)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'single file list does not expand includes by default'
            span_id: 137
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:141) 
          (Token id:Id.Lit_Chars val:'\techo "[test]one = 1" >one &&\n' span_id:142) (Token id:Id.Lit_Chars val:'\techo "[include]path = one" >.gitconfig &&\n' span_id:143) 
          (Token id:Id.Lit_Chars val:'\techo "include.path=one" >expect &&\n' span_id:144) (Token id:Id.Lit_Chars val:'\tgit config -f .gitconfig --list >actual &&\n' span_id:145) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:146)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'writing config file does not expand includes' span_id:153))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:157) 
          (Token id:Id.Lit_Chars val:'\techo "[test]one = 1" >one &&\n' span_id:158) (Token id:Id.Lit_Chars val:'\techo "[include]path = one" >.gitconfig &&\n' span_id:159) 
          (Token id:Id.Lit_Chars val:'\tgit config test.two 2 &&\n' span_id:160) (Token id:Id.Lit_Chars val:'\techo 2 >expect &&\n' span_id:161) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --no-includes test.two >actual &&\n'
            span_id: 162
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:163) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git config --no-includes test.one\n'
            span_id: 164
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'config modification does not affect includes' span_id:171))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:175) 
          (Token id:Id.Lit_Chars val:'\techo "[test]one = 1" >one &&\n' span_id:176) (Token id:Id.Lit_Chars val:'\techo "[include]path = one" >.gitconfig &&\n' span_id:177) 
          (Token id:Id.Lit_Chars val:'\tgit config test.one 2 &&\n' span_id:178) (Token id:Id.Lit_Chars val:'\techo 1 >expect &&\n' span_id:179) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config -f one test.one >actual &&\n'
            span_id: 180
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:181) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:182) (Token id:Id.Lit_Chars val:'\t1\n' span_id:183) (Token id:Id.Lit_Chars val:'\t2\n' span_id:184) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:185) (Token id:Id.Lit_Chars val:'\tgit config --get-all test.one >actual &&\n' span_id:186) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:187)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'missing include files are ignored' span_id:194))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:198) 
          (Token id:Id.Lit_Chars val:'\tcat >.gitconfig <<-\\EOF &&\n' span_id:199) (Token id:Id.Lit_Chars val:'\t[include]path = foo\n' span_id:200) 
          (Token id:Id.Lit_Chars val:'\t[test]value = yes\n' span_id:201) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:202) 
          (Token id:Id.Lit_Chars val:'\techo yes >expect &&\n' span_id:203) (Token id:Id.Lit_Chars val:'\tgit config test.value >actual &&\n' span_id:204) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:205)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'absolute includes from command line work' span_id:212))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:216) 
          (Token id:Id.Lit_Chars val:'\techo "[test]one = 1" >one &&\n' span_id:217) (Token id:Id.Lit_Chars val:'\techo 1 >expect &&\n' span_id:218) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c include.path="$(pwd)/one" config test.one >actual &&\n'
            span_id: 219
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:220)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'relative includes from command line fail' span_id:227))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:231) 
          (Token id:Id.Lit_Chars val:'\techo "[test]one = 1" >one &&\n' span_id:232) (Token id:Id.Lit_Chars val:'\ttest_must_fail git -c include.path=one config test.one\n' span_id:233)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'absolute includes from blobs work' span_id:240))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:244) 
          (Token id:Id.Lit_Chars val:'\techo "[test]one = 1" >one &&\n' span_id:245) (Token id:Id.Lit_Chars val:'\techo "[include]path=$(pwd)/one" >blob &&\n' span_id:246) 
          (Token id:Id.Lit_Chars val:'\tblob=$(git hash-object -w blob) &&\n' span_id:247) (Token id:Id.Lit_Chars val:'\techo 1 >expect &&\n' span_id:248) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --blob=$blob test.one >actual &&\n'
            span_id: 249
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:250)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'relative includes from blobs fail' span_id:257))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:261) 
          (Token id:Id.Lit_Chars val:'\techo "[test]one = 1" >one &&\n' span_id:262) (Token id:Id.Lit_Chars val:'\techo "[include]path=one" >blob &&\n' span_id:263) 
          (Token id:Id.Lit_Chars val:'\tblob=$(git hash-object -w blob) &&\n' span_id:264) (Token id:Id.Lit_Chars val:'\ttest_must_fail git config --blob=$blob test.one\n' span_id:265)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'absolute includes from stdin work' span_id:272))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:276) 
          (Token id:Id.Lit_Chars val:'\techo "[test]one = 1" >one &&\n' span_id:277) (Token id:Id.Lit_Chars val:'\techo 1 >expect &&\n' span_id:278) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "[include]path=\\"$(pwd)/one\\"" |\n'
            span_id: 279
          ) (Token id:Id.Lit_Chars val:'\tgit config --file - test.one >actual &&\n' span_id:280) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:281)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'relative includes from stdin line fail' span_id:288))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:292) 
          (Token id:Id.Lit_Chars val:'\techo "[test]one = 1" >one &&\n' span_id:293) (Token id:Id.Lit_Chars val:'\techo "[include]path=one" |\n' span_id:294) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git config --file - test.one\n'
            span_id: 295
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'include cycles are detected' span_id:302))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:306) 
          (Token id:Id.Lit_Chars val:'\tcat >.gitconfig <<-\\EOF &&\n' span_id:307) (Token id:Id.Lit_Chars val:'\t[test]value = gitconfig\n' span_id:308) 
          (Token id:Id.Lit_Chars val:'\t[include]path = cycle\n' span_id:309) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:310) 
          (Token id:Id.Lit_Chars val:'\tcat >cycle <<-\\EOF &&\n' span_id:311) (Token id:Id.Lit_Chars val:'\t[test]value = cycle\n' span_id:312) 
          (Token id:Id.Lit_Chars val:'\t[include]path = .gitconfig\n' span_id:313) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:314) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:315) (Token id:Id.Lit_Chars val:'\tgitconfig\n' span_id:316) 
          (Token id:Id.Lit_Chars val:'\tcycle\n' span_id:317) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:318) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git config --get-all test.value 2>stderr &&\n'
            span_id: 319
          ) (Token id:Id.Lit_Chars val:'\tgrep "exceeded maximum include depth" stderr\n' span_id:320)
        )
      }
    )
    (C {(test_done)})
  ]
)