(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'support for reading config from a blob'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <'create config blob'>)} 
      {
        (SQ <'\n'> <'\tcat >config <<-\\EOF &&\n'> <'\t[some]\n'> <'\t\tvalue = 1\n'> <'\tEOF\n'> 
          <'\tgit add config &&\n'> <'\tgit commit -m foo\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'list config blob contents'>)} 
      {
        (SQ <'\n'> <'\techo some.value=1 >expect &&\n'> 
          <'\tgit config --blob=HEAD:config --list >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'fetch value from blob'>)} 
      {
        (SQ <'\n'> <'\techo true >expect &&\n'> 
          <'\tgit config --blob=HEAD:config --bool some.value >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'reading non-existing value from blob is an error'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git config --blob=HEAD:config non.existing\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'reading from blob and file is an error'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git config --blob=HEAD:config --system --list\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'reading from missing ref is an error'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git config --blob=HEAD:doesnotexist --list\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'reading from non-blob is an error'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git config --blob=HEAD --list\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'setting a value in a blob is an error'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git config --blob=HEAD:config some.value foo\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'deleting a value in a blob is an error'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git config --blob=HEAD:config --unset some.value\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'editing a blob is an error'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git config --blob=HEAD:config --edit\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'parse errors in blobs are properly attributed'>)} 
      {
        (SQ <'\n'> <'\tcat >config <<-\\EOF &&\n'> <'\t[some]\n'> <'\t\tvalue = "\n'> <'\tEOF\n'> 
          <'\tgit add config &&\n'> <'\tgit commit -m broken &&\n'> <'\n'> 
          <'\ttest_must_fail git config --blob=HEAD:config some.value 2>err &&\n'> <'\ttest_i18ngrep "HEAD:config" err\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'can parse blob ending with CR'>)} 
      {
        (SQ <'\n'> <'\tprintf "[some]key = value\\\\r" >config &&\n'> <'\tgit add config &&\n'> 
          <'\tgit commit -m CR &&\n'> <'\techo value >expect &&\n'> <'\tgit config --blob=HEAD:config some.key >actual &&\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)