(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:'update-index with options' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(basics)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:20) 
          (Token id:Id.Lit_Chars val:'\t>one &&\n' span_id:21) (Token id:Id.Lit_Chars val:'\t>two &&\n' span_id:22) 
          (Token id:Id.Lit_Chars val:'\t>three &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\t# need --add when adding\n' span_id:25) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-index one &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\ttest -z "$(git ls-files)" &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\tgit update-index --add one &&\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\ttest zone = "z$(git ls-files)" &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\t# update-index is atomic\n' span_id:31) (Token id:Id.Lit_Chars val:'\techo 1 >one &&\n' span_id:32) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-index one two &&\n'
            span_id: 33
          ) (Token id:Id.Lit_Chars val:'\techo "M\tone" >expect &&\n' span_id:34) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-files --name-status >actual &&\n'
            span_id: 35
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\n' span_id:37) (Token id:Id.Lit_Chars val:'\tgit update-index --add one two three &&\n' span_id:38) 
          (Token
            id: Id.Lit_Chars
            val: '\tfor i in one three two; do echo $i; done >expect &&\n'
            span_id: 39
          ) (Token id:Id.Lit_Chars val:'\tgit ls-files >actual &&\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:41) (Token id:Id.Lit_Chars val:'\n' span_id:42) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:43) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:44) (Token id:Id.Lit_Chars val:'\t\ttest_create_repo xyzzy &&\n' span_id:45) 
          (Token id:Id.Lit_Chars val:'\t\tcd xyzzy &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\t\t>file &&\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\t\tgit add file\n' span_id:48) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "sub initial"\n' span_id:49) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:50) (Token id:Id.Lit_Chars val:'\tgit add xyzzy &&\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\n' span_id:52) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:53) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:54) (Token id:Id.Lit_Chars val:'\tgit tag initial\n' span_id:55)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--ignore-missing --refresh' span_id:62))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:66) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:67) (Token id:Id.Lit_Chars val:'\techo 2 >one &&\n' span_id:68) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-index --refresh &&\n'
            span_id: 69
          ) (Token id:Id.Lit_Chars val:'\techo 1 >one &&\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:71) (Token id:Id.Lit_Chars val:'\trm -f two &&\n' span_id:72) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-index --refresh &&\n'
            span_id: 73
          ) (Token id:Id.Lit_Chars val:'\tgit update-index --ignore-missing --refresh\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\n' span_id:75)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--unmerged --refresh' span_id:82))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:86) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:87) (Token id:Id.Lit_Chars val:'\tinfo=$(git ls-files -s one | sed -e "s/ 0\t/ 1\t/") &&\n' span_id:88) 
          (Token id:Id.Lit_Chars val:'\tgit rm --cached one &&\n' span_id:89) (Token id:Id.Lit_Chars val:'\techo "$info" | git update-index --index-info &&\n' span_id:90) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-index --refresh &&\n'
            span_id: 91
          ) (Token id:Id.Lit_Chars val:'\tgit update-index --unmerged --refresh &&\n' span_id:92) 
          (Token id:Id.Lit_Chars val:'\techo 2 >two &&\n' span_id:93) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-index --unmerged --refresh >actual &&\n'
            span_id: 94
          ) (Token id:Id.Lit_Chars val:'\tgrep two actual &&\n' span_id:95) 
          (Token id:Id.Lit_Chars val:'\t! grep one actual &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\t! grep three actual\n' span_id:97)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--ignore-submodules --refresh (1)' span_id:104))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:108) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\trm -f two &&\n' span_id:110) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-index --ignore-submodules --refresh\n'
            span_id: 111
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--ignore-submodules --refresh (2)' span_id:118))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:122) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:123) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:124) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:125) (Token id:Id.Lit_Chars val:'\t\tcd xyzzy &&\n' span_id:126) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "sub second" --allow-empty\n'
            span_id: 127
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:128) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-index --refresh &&\n'
            span_id: 129
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-index --ignore-missing --refresh &&\n'
            span_id: 130
          ) (Token id:Id.Lit_Chars val:'\tgit update-index --ignore-submodules --refresh\n' span_id:131)
        )
      }
    )
    (C {(test_done)})
  ]
)