(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'diff --no-index'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\tmkdir a &&\n'> <'\tmkdir b &&\n'> <'\techo 1 >a/1 &&\n'> <'\techo 2 >a/2 &&\n'> 
          <'\tgit init repo &&\n'> <'\techo 1 >repo/a &&\n'> <'\tmkdir -p non/git &&\n'> <'\techo 1 >non/git/a &&\n'> 
          <'\techo 1 >non/git/b\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git diff --no-index directories'>)} 
      {
        (SQ <'\n'> <'\ttest_expect_code 1 git diff --no-index a b >cnt &&\n'> 
          <'\ttest_line_count = 14 cnt\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git diff --no-index relative path outside repo'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd repo &&\n'> 
          <'\t\ttest_expect_code 0 git diff --no-index a ../non/git/a &&\n'> <'\t\ttest_expect_code 0 git diff --no-index ../non/git/a ../non/git/b\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git diff --no-index with broken index'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd repo &&\n'> <'\t\techo broken >.git/index &&\n'> 
          <'\t\tgit diff --no-index a ../non/git/a\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git diff outside repo with broken index'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd repo &&\n'> <'\t\tgit diff ../non/git/a ../non/git/b\n'> <'\t)\n'>)
      }
    )
    (C {(test_expect_success)} 
      {(SQ <'git diff --no-index executed outside repo gives correct error message'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tGIT_CEILING_DIRECTORIES=$TRASH_DIRECTORY/non &&\n'> 
          <'\t\texport GIT_CEILING_DIRECTORIES &&\n'> <'\t\tcd non/git &&\n'> <'\t\ttest_must_fail git diff --no-index a 2>actual.err &&\n'> 
          <'\t\techo "usage: git diff --no-index <path> <path>" >expect.err &&\n'> <'\t\ttest_cmp expect.err actual.err\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'diff D F and diff F D'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd repo &&\n'> <'\t\techo in-repo >a &&\n'> 
          <'\t\techo non-repo >../non/git/a &&\n'> <'\t\tmkdir sub &&\n'> <'\t\techo sub-repo >sub/a &&\n'> <'\n'> 
          <'\t\ttest_must_fail git diff --no-index sub/a ../non/git/a >expect &&\n'> <'\t\ttest_must_fail git diff --no-index sub/a ../non/git/ >actual &&\n'> 
          <'\t\ttest_cmp expect actual &&\n'> <'\n'> <'\t\ttest_must_fail git diff --no-index a ../non/git/a >expect &&\n'> 
          <'\t\ttest_must_fail git diff --no-index a ../non/git/ >actual &&\n'> <'\t\ttest_cmp expect actual &&\n'> <'\n'> 
          <'\t\ttest_must_fail git diff --no-index ../non/git/a a >expect &&\n'> <'\t\ttest_must_fail git diff --no-index ../non/git a >actual &&\n'> <'\t\ttest_cmp expect actual\n'> 
          <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'turning a file into a directory'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd non/git &&\n'> <'\t\tmkdir d e e/sub &&\n'> 
          <'\t\techo 1 >d/sub &&\n'> <'\t\techo 2 >e/sub/file &&\n'> <'\t\tprintf "D\\td/sub\\nA\\te/sub/file\\n" >expect &&\n'> 
          <'\t\ttest_must_fail git diff --no-index --name-status d e >actual &&\n'> <'\t\ttest_cmp expect actual\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'diff from repo subdir shows real paths (explicit)'>)} 
      {
        (SQ <'\n'> <'\techo "diff --git a/../../non/git/a b/../../non/git/b" >expect &&\n'> 
          <'\ttest_expect_code 1 \\\n'> <'\t\tgit -C repo/sub \\\n'> <'\t\tdiff --no-index ../../non/git/a ../../non/git/b >actual &&\n'> 
          <'\thead -n 1 <actual >actual.head &&\n'> <'\ttest_cmp expect actual.head\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'diff from repo subdir shows real paths (implicit)'>)} 
      {
        (SQ <'\n'> <'\techo "diff --git a/../../non/git/a b/../../non/git/b" >expect &&\n'> 
          <'\ttest_expect_code 1 \\\n'> <'\t\tgit -C repo/sub \\\n'> <'\t\tdiff ../../non/git/a ../../non/git/b >actual &&\n'> 
          <'\thead -n 1 <actual >actual.head &&\n'> <'\ttest_cmp expect actual.head\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'diff --no-index from repo subdir respects config (explicit)'>)} 
      {
        (SQ <'\n'> <'\techo "diff --git ../../non/git/a ../../non/git/b" >expect &&\n'> 
          <'\ttest_config -C repo diff.noprefix true &&\n'> <'\ttest_expect_code 1 \\\n'> <'\t\tgit -C repo/sub \\\n'> 
          <'\t\tdiff --no-index ../../non/git/a ../../non/git/b >actual &&\n'> <'\thead -n 1 <actual >actual.head &&\n'> <'\ttest_cmp expect actual.head\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'diff --no-index from repo subdir respects config (implicit)'>)} 
      {
        (SQ <'\n'> <'\techo "diff --git ../../non/git/a ../../non/git/b" >expect &&\n'> 
          <'\ttest_config -C repo diff.noprefix true &&\n'> <'\ttest_expect_code 1 \\\n'> <'\t\tgit -C repo/sub \\\n'> 
          <'\t\tdiff ../../non/git/a ../../non/git/b >actual &&\n'> <'\thead -n 1 <actual >actual.head &&\n'> <'\ttest_cmp expect actual.head\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)