(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"setup taking and sanitizing funny paths">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ <"\n"> <"\n"> <"\tmkdir -p a/b/c a/e &&\n"> <"\tD=$(pwd) &&\n"> <"\t>a/b/c/d &&\n"> 
          <"\t>a/e/f\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"git add (absolute)">)} 
      {
        (SQ <"\n"> <"\n"> <"\tgit add \"$D/a/b/c/d\" &&\n"> <"\tgit ls-files >current &&\n"> 
          <"\techo a/b/c/d >expect &&\n"> <"\ttest_cmp expect current\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"git add (funny relative)">)} 
      {
        (SQ <"\n"> <"\n"> <"\trm -f .git/index &&\n"> <"\t(\n"> <"\t\tcd a/b &&\n"> 
          <"\t\tgit add \"../e/./f\"\n"> <"\t) &&\n"> <"\tgit ls-files >current &&\n"> <"\techo a/e/f >expect &&\n"> 
          <"\ttest_cmp expect current\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"git rm (absolute)">)} 
      {
        (SQ <"\n"> <"\n"> <"\trm -f .git/index &&\n"> <"\tgit add a &&\n"> 
          <"\tgit rm -f --cached \"$D/a/b/c/d\" &&\n"> <"\tgit ls-files >current &&\n"> <"\techo a/e/f >expect &&\n"> <"\ttest_cmp expect current\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"git rm (funny relative)">)} 
      {
        (SQ <"\n"> <"\n"> <"\trm -f .git/index &&\n"> <"\tgit add a &&\n"> <"\t(\n"> <"\t\tcd a/b &&\n"> 
          <"\t\tgit rm -f --cached \"../e/./f\"\n"> <"\t) &&\n"> <"\tgit ls-files >current &&\n"> <"\techo a/b/c/d >expect &&\n"> 
          <"\ttest_cmp expect current\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"git ls-files (absolute)">)} 
      {
        (SQ <"\n"> <"\n"> <"\trm -f .git/index &&\n"> <"\tgit add a &&\n"> 
          <"\tgit ls-files \"$D/a/e/../b\" >current &&\n"> <"\techo a/b/c/d >expect &&\n"> <"\ttest_cmp expect current\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"git ls-files (relative #1)">)} 
      {
        (SQ <"\n"> <"\n"> <"\trm -f .git/index &&\n"> <"\tgit add a &&\n"> <"\t(\n"> <"\t\tcd a/b &&\n"> 
          <"\t\tgit ls-files \"../b/c\"\n"> <"\t)  >current &&\n"> <"\techo c/d >expect &&\n"> <"\ttest_cmp expect current\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"git ls-files (relative #2)">)} 
      {
        (SQ <"\n"> <"\n"> <"\trm -f .git/index &&\n"> <"\tgit add a &&\n"> <"\t(\n"> <"\t\tcd a/b &&\n"> 
          <"\t\tgit ls-files --full-name \"../e/f\"\n"> <"\t)  >current &&\n"> <"\techo a/e/f >expect &&\n"> <"\ttest_cmp expect current\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"git ls-files (relative #3)">)} 
      {
        (SQ <"\n"> <"\n"> <"\trm -f .git/index &&\n"> <"\tgit add a &&\n"> <"\t(\n"> <"\t\tcd a/b &&\n"> 
          <"\t\tgit ls-files \"../e/f\"\n"> <"\t)  >current &&\n"> <"\techo ../e/f >expect &&\n"> <"\ttest_cmp expect current\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"commit using absolute path names">)} 
      {
        (SQ <"\n"> <"\tgit commit -m \"foo\" &&\n"> <"\techo aa >>a/b/c/d &&\n"> 
          <"\tgit commit -m \"aa\" \"$(pwd)/a/b/c/d\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"log using absolute path names">)} 
      {
        (SQ <"\n"> <"\techo bb >>a/b/c/d &&\n"> <"\tgit commit -m \"bb\" \"$(pwd)/a/b/c/d\" &&\n"> 
          <"\n"> <"\tgit log a/b/c/d >f1.txt &&\n"> <"\tgit log \"$(pwd)/a/b/c/d\" >f2.txt &&\n"> 
          <"\ttest_cmp f1.txt f2.txt\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"blame using absolute path names">)} 
      {
        (SQ <"\n"> <"\tgit blame a/b/c/d >f1.txt &&\n"> <"\tgit blame \"$(pwd)/a/b/c/d\" >f2.txt &&\n"> 
          <"\ttest_cmp f1.txt f2.txt\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"setup deeper work tree">)} 
      {(SQ <"\n"> <"\ttest_create_repo tester\n">)}
    )
    (C {(test_expect_success)} {(SQ <"add a directory outside the work tree">)} 
      {
        (SQ <"(\n"> <"\tcd tester &&\n"> <"\td1=\"$(cd .. ; pwd)\" &&\n"> 
          <"\ttest_must_fail git add \"$d1\"\n"> <")">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"add a file outside the work tree, nasty case 1">)} 
      {
        (SQ <"(\n"> <"\tcd tester &&\n"> <"\tf=\"$(pwd)x\" &&\n"> <"\techo \"$f\" &&\n"> 
          <"\ttouch \"$f\" &&\n"> <"\ttest_must_fail git add \"$f\"\n"> <")">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"add a file outside the work tree, nasty case 2">)} 
      {
        (SQ <"(\n"> <"\tcd tester &&\n"> <"\tf=\"$(pwd | sed \"s/.$//\")x\" &&\n"> 
          <"\techo \"$f\" &&\n"> <"\ttouch \"$f\" &&\n"> <"\ttest_must_fail git add \"$f\"\n"> <")">
        )
      }
    )
    (C {(test_done)})
  ]
)