(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"Intent to add">)}
          spids: [4]
        )
      ]
      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)})
  ]
)