(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'Intent to add'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<test_expect_success>} {(SQ <'intent to add'>)} 
      {
        (SQ <'\n'> <'\ttest_commit 1 &&\n'> <'\tgit rm 1.t &&\n'> <'\techo hello >1.t &&\n'> 
          <'\techo hello >file &&\n'> <'\techo hello >elif &&\n'> <'\tgit add -N file &&\n'> <'\tgit add elif &&\n'> <'\tgit add -N 1.t\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git status'>)} 
      {
        (SQ <'\n'> <'\tgit status --porcelain | grep -v actual >actual &&\n'> 
          <'\tcat >expect <<-\\EOF &&\n'> <'\tDA 1.t\n'> <'\tA  elif\n'> <'\t A file\n'> <'\tEOF\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'check result of "add -N"'>)} 
      {
        (SQ <'\n'> <'\tgit ls-files -s file >actual &&\n'> 
          <'\tempty=$(git hash-object --stdin </dev/null) &&\n'> <'\techo "100644 $empty 0\tfile" >expect &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'intent to add is just an ordinary empty blob'>)} 
      {
        (SQ <'\n'> <'\tgit add -u &&\n'> <'\tgit ls-files -s file >actual &&\n'> 
          <'\tgit ls-files -s elif | sed -e "s/elif/file/" >expect &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'intent to add does not clobber existing paths'>)} 
      {
        (SQ <'\n'> <'\tgit add -N file elif &&\n'> 
          <'\tempty=$(git hash-object --stdin </dev/null) &&\n'> <'\tgit ls-files -s >actual &&\n'> <'\t! grep "$empty" actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'i-t-a entry is simply ignored'>)} 
      {
        (SQ <'\n'> <'\ttest_tick &&\n'> <'\tgit commit -a -m initial &&\n'> <'\tgit reset --hard &&\n'> 
          <'\n'> <'\techo xyzzy >rezrov &&\n'> <'\techo frotz >nitfol &&\n'> <'\tgit add rezrov &&\n'> 
          <'\tgit add -N nitfol &&\n'> <'\tgit commit -m second &&\n'> <'\ttest $(git ls-tree HEAD -- nitfol | wc -l) = 0 &&\n'> 
          <'\ttest $(git diff --name-only HEAD -- nitfol | wc -l) = 1 &&\n'> <'\ttest $(git diff --name-only --ita-invisible-in-index HEAD -- nitfol | wc -l) = 0 &&\n'> 
          <'\ttest $(git diff --name-only --ita-invisible-in-index -- nitfol | wc -l) = 1\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'can commit with an unrelated i-t-a entry in index'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\techo bozbar >rezrov &&\n'> 
          <'\techo frotz >nitfol &&\n'> <'\tgit add rezrov &&\n'> <'\tgit add -N nitfol &&\n'> <'\tgit commit -m partial rezrov\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'can "commit -a" with an i-t-a entry'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\t: >nitfol &&\n'> <'\tgit add -N nitfol &&\n'> 
          <'\tgit commit -a -m all\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'cache-tree invalidates i-t-a paths'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tmkdir dir &&\n'> <'\t: >dir/foo &&\n'> 
          <'\tgit add dir/foo &&\n'> <'\tgit commit -m foo &&\n'> <'\n'> <'\t: >dir/bar &&\n'> <'\tgit add -N dir/bar &&\n'> 
          <'\tgit diff --cached --name-only >actual &&\n'> <'\techo dir/bar >expect &&\n'> <'\ttest_cmp expect actual &&\n'> <'\n'> 
          <'\tgit write-tree >/dev/null &&\n'> <'\n'> <'\tgit diff --cached --name-only >actual &&\n'> <'\techo dir/bar >expect &&\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'cache-tree does not ignore dir that has i-t-a entries'>)} 
      {
        (SQ <'\n'> <'\tgit init ita-in-dir &&\n'> <'\t(\n'> <'\t\tcd ita-in-dir &&\n'> 
          <'\t\tmkdir 2 &&\n'> <'\t\tfor f in 1 2/1 2/2 3\n'> <'\t\tdo\n'> <'\t\t\techo "$f" >"$f"\n'> <'\t\tdone &&\n'> 
          <'\t\tgit add 1 2/2 3 &&\n'> <'\t\tgit add -N 2/1 &&\n'> <'\t\tgit commit -m committed &&\n'> 
          <'\t\tgit ls-tree -r HEAD >actual &&\n'> <'\t\tgrep 2/2 actual\n'> <'\t)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'cache-tree does skip dir that becomes empty'>)} 
      {
        (SQ <'\n'> <'\trm -fr ita-in-dir &&\n'> <'\tgit init ita-in-dir &&\n'> <'\t(\n'> 
          <'\t\tcd ita-in-dir &&\n'> <'\t\tmkdir -p 1/2/3 &&\n'> <'\t\techo 4 >1/2/3/4 &&\n'> <'\t\tgit add -N 1/2/3/4 &&\n'> 
          <'\t\tgit write-tree >actual &&\n'> <'\t\techo $EMPTY_TREE >expected &&\n'> <'\t\ttest_cmp expected actual\n'> <'\t)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'commit: ita entries ignored in empty intial commit check'>)} 
      {
        (SQ <'\n'> <'\tgit init empty-intial-commit &&\n'> <'\t(\n'> <'\t\tcd empty-intial-commit &&\n'> 
          <'\t\t: >one &&\n'> <'\t\tgit add -N one &&\n'> <'\t\ttest_must_fail git commit -m nothing-new-here\n'> <'\t)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'commit: ita entries ignored in empty commit check'>)} 
      {
        (SQ <'\n'> <'\tgit init empty-subsequent-commit &&\n'> <'\t(\n'> 
          <'\t\tcd empty-subsequent-commit &&\n'> <'\t\ttest_commit one &&\n'> <'\t\t: >two &&\n'> <'\t\tgit add -N two &&\n'> 
          <'\t\ttest_must_fail git commit -m nothing-new-here\n'> <'\t)\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)