(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"Test various path utilities">)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: norm_path
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:expected)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(test-path-utils)} {(print_path)} {(DQ ($ VSub_Number "$2"))})
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [32 40]
                      )
                    }
                  spids: [31]
                )
              ]
              spids: [31]
            )
            (C {(test_expect_success)} {($ VSub_Number "$3")} 
              {(DQ ("normalize path: ") ($ VSub_Number "$1") (" => ") ($ VSub_Number "$2"))} 
              {
                (DQ ("test ") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("(test-path-utils normalize_path_copy '") ($ VSub_Number "$1") ("')") 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (" = '") ($ VSub_Name "$expected") ("'")
                )
              }
            )
          ]
          spids: [28]
        )
      spids: [24 27]
    )
    (FuncDef
      name: relative_path
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:expected)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(test-path-utils)} {(print_path)} {(DQ ($ VSub_Number "$3"))})
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [80 88]
                      )
                    }
                  spids: [79]
                )
              ]
              spids: [79]
            )
            (C {(test_expect_success)} {($ VSub_Number "$4")} 
              {
                (DQ ("relative path: ") ($ VSub_Number "$1") (" ") ($ VSub_Number "$2") (" => ") 
                  ($ VSub_Number "$3")
                )
              } 
              {
                (DQ ("test ") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("(test-path-utils relative_path '") ($ VSub_Number "$1") ("' '") ($ VSub_Number "$2") ("')") 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (" = '") ($ VSub_Name "$expected") ("'")
                )
              }
            )
          ]
          spids: [76]
        )
      spids: [72 75]
    )
    (FuncDef
      name: test_submodule_relative_url
      body: 
        (BraceGroup
          children: [
            (C {(test_expect_success)} 
              {
                (DQ ("test_submodule_relative_url: ") ($ VSub_Number "$1") (" ") ($ VSub_Number "$2") 
                  (" ") ($ VSub_Number "$3") (" => ") ($ VSub_Number "$4")
                )
              } 
              {
                (DQ ("\n") ("\t\tactual=") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) 
                  ("(git submodule--helper resolve-relative-url-test '") ($ VSub_Number "$1") ("' '") ($ VSub_Number "$2") ("' '") ($ VSub_Number "$3") ("') &&\n") ("\t\ttest ") 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) (actual) 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (" = '") ($ VSub_Number "$4") ("'\n") ("\t")
                )
              }
            )
          ]
          spids: [128]
        )
      spids: [124 127]
    )
    (FuncDef
      name: test_git_path
      body: 
        (BraceGroup
          children: [
            (C {(test_expect_success)} 
              {
                (DQ ("git-path ") ($ VSub_Number "$1") (" ") ($ VSub_Number "$2") (" => ") 
                  ($ VSub_Number "$3")
                )
              } 
              {
                (DQ ("\n") ("\t\t") ($ VSub_Number "$1") (" git rev-parse --git-path ") 
                  ($ VSub_Number "$2") (" >actual &&\n") ("\t\techo ") ($ VSub_Number "$3") (" >expect &&\n") ("\t\ttest_cmp expect actual\n") 
                  ("\t")
                )
              }
            )
          ]
          spids: [173]
        )
      spids: [169 172]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:rootoff)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (Pipeline
                        children: [
                          (C {(test-path-utils)} {(normalize_path_copy)} {(/)})
                          (C {(wc)} {(-c)})
                        ]
                        negated: False
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [214 226]
              )
            }
          spids: [213]
        )
      ]
      spids: [213]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(test)} {($ VSub_Name "$rootoff")} {(Lit_Other "=")} {(2)})
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:rootoff) op:Equal rhs:{(SQ )} spids:[245])]
              spids: [245]
            )
          ]
          spids: [-1 242]
        )
      ]
      else_action: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:rootoff)
              op: Equal
              rhs: 
                {
                  (ArithSubPart
                    anode: 
                      (ArithBinary
                        op_id: Arith_Minus
                        left: (ArithWord w:{($ VSub_Name "$rootoff")})
                        right: (ArithWord w:{(Lit_Digits 1)})
                      )
                    spids: [254 259]
                  )
                }
              spids: [253]
            )
          ]
          spids: [253]
        )
        (Case
          to_match: 
            {
              (DQ 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(test-path-utils)} {(print_path)} {(/)})])
                  left_token: <Left_CommandSub "$(">
                  spids: [277 283]
                )
              )
            }
          arms: [
            (case_arm
              pat_list: [{(Lit_Other "*") (/)}]
              action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:rootslash) op:Equal rhs:{(1)} spids:[293])]
                  spids: [293]
                )
              ]
              spids: [289 291 295 -1]
            )
            (case_arm
              pat_list: [{(Lit_Other "*")}]
              action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:rootslash) op:Equal rhs:{(0)} spids:[301])]
                  spids: [301]
                )
              ]
              spids: [298 299 303 -1]
            )
          ]
          spids: [274 286 306]
        )
      ]
      spids: [250 308]
    )
    (FuncDef
      name: ancestor
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:expected)
                  op: Equal
                  rhs: {($ VSub_Number "$3")}
                  spids: [322]
                )
              ]
              spids: [322]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (AndOr
                          children: [
                            (C {(test)} {(-n)} {(DQ ($ VSub_Name "$rootoff"))})
                            (C {(test)} {(DQ (x) ($ VSub_Name "$expected"))} 
                              {(KW_Bang "!") (Lit_Other "=")} {(x-1)}
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:expected)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Minus
                                    left: (ArithWord w:{($ VSub_Name "$expected")})
                                    right: (ArithWord w:{($ VSub_Name "$rootslash")})
                                  )
                                spids: [355 360]
                              )
                            }
                          spids: [354]
                        )
                      ]
                      spids: [354]
                    )
                    (AndOr
                      children: [
                        (C {(test)} {($ VSub_Name "$expected")} {(-lt)} {(0)})
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:expected)
                              op: Equal
                              rhs: 
                                {
                                  (ArithSubPart
                                    anode: 
                                      (ArithBinary
                                        op_id: Arith_Plus
                                        left: (ArithWord w:{($ VSub_Name "$expected")})
                                        right: (ArithWord w:{($ VSub_Name "$rootoff")})
                                      )
                                    spids: [375 380]
                                  )
                                }
                              spids: [374]
                            )
                          ]
                          spids: [374]
                        )
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  spids: [-1 351]
                )
              ]
              spids: [-1 383]
            )
            (C {(test_expect_success)} 
              {
                (DQ ("longest ancestor: ") ($ VSub_Number "$1") (" ") ($ VSub_Number "$2") (" => ") 
                  ($ VSub_Name "$expected")
                )
              } 
              {
                (DQ ("actual=") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) 
                  ("(test-path-utils longest_ancestor_length '") ($ VSub_Number "$1") ("' '") ($ VSub_Number "$2") ("') &&\n") ("\t test ") 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) (actual) 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (" = '") ($ VSub_Name "$expected") ("'")
                )
              }
            )
          ]
          spids: [315]
        )
      spids: [311 314]
    )
    (Case
      to_match: 
        {
          (CommandSubPart
            command_list: (CommandList children:[(C {(uname)} {(-s)})])
            left_token: <Left_CommandSub "$(">
            spids: [428 432]
          )
        }
      arms: [
        (case_arm pat_list:[{(Lit_Other "*") (MINGW) (Lit_Other "*")}] spids:[436439442-1])
        (case_arm
          pat_list: [{(Lit_Other "*")}]
          action: [(C {(test_set_prereq)} {(POSIX)})]
          spids: [444 445 453 -1]
        )
      ]
      spids: [426 434 455]
    )
    (C {(test_expect_success)} {(basename)} {(SQ <"test-path-utils basename">)})
    (C {(test_expect_success)} {(dirname)} {(SQ <"test-path-utils dirname">)})
    (C {(norm_path)} {(DQ )} {(DQ )})
    (C {(norm_path)} {(.)} {(DQ )})
    (C {(norm_path)} {(./)} {(DQ )})
    (C {(norm_path)} {(./.)} {(DQ )})
    (C {(norm_path)} {(./..)} {(Lit_Other "+") (Lit_Other "+") (failed) (Lit_Other "+") (Lit_Other "+")})
    (C {(norm_path)} {(../.)} {(Lit_Other "+") (Lit_Other "+") (failed) (Lit_Other "+") (Lit_Other "+")})
    (C {(norm_path)} {(./.././/)} 
      {(Lit_Other "+") (Lit_Other "+") (failed) (Lit_Other "+") (Lit_Other "+")}
    )
    (C {(norm_path)} {(dir/..)} {(DQ )})
    (C {(norm_path)} {(dir/sub/../..)} {(DQ )})
    (C {(norm_path)} {(dir/sub/../../..)} 
      {(Lit_Other "+") (Lit_Other "+") (failed) (Lit_Other "+") (Lit_Other "+")}
    )
    (C {(norm_path)} {(dir)} {(dir)})
    (C {(norm_path)} {(dir//)} {(dir/)})
    (C {(norm_path)} {(./dir)} {(dir)})
    (C {(norm_path)} {(dir/.)} {(dir/)})
    (C {(norm_path)} {(dir///./)} {(dir/)})
    (C {(norm_path)} {(dir//sub/..)} {(dir/)})
    (C {(norm_path)} {(dir/sub/../)} {(dir/)})
    (C {(norm_path)} {(dir/sub/../.)} {(dir/)})
    (C {(norm_path)} {(dir/s1/../s2/)} {(dir/s2/)})
    (C {(norm_path)} {(d1/s1///s2/..//../s3/)} {(d1/s3/)})
    (C {(norm_path)} {(d1/s1//../s2/../../d2)} {(d2)})
    (C {(norm_path)} {(d1/.../d2)} {(d1/.../d2)})
    (C {(norm_path)} {(d1/..././../d2)} {(d1/d2)})
    (C {(norm_path)} {(/)} {(/)})
    (C {(norm_path)} {(//)} {(/)} {(POSIX)})
    (C {(norm_path)} {(///)} {(/)} {(POSIX)})
    (C {(norm_path)} {(/.)} {(/)})
    (C {(norm_path)} {(/./)} {(/)} {(POSIX)})
    (C {(norm_path)} {(/./..)} 
      {(Lit_Other "+") (Lit_Other "+") (failed) (Lit_Other "+") (Lit_Other "+")} {(POSIX)}
    )
    (C {(norm_path)} {(/../.)} 
      {(Lit_Other "+") (Lit_Other "+") (failed) (Lit_Other "+") (Lit_Other "+")}
    )
    (C {(norm_path)} {(/./.././/)} 
      {(Lit_Other "+") (Lit_Other "+") (failed) (Lit_Other "+") (Lit_Other "+")} {(POSIX)}
    )
    (C {(norm_path)} {(/dir/..)} {(/)} {(POSIX)})
    (C {(norm_path)} {(/dir/sub/../..)} {(/)} {(POSIX)})
    (C {(norm_path)} {(/dir/sub/../../..)} 
      {(Lit_Other "+") (Lit_Other "+") (failed) (Lit_Other "+") (Lit_Other "+")} {(POSIX)}
    )
    (C {(norm_path)} {(/dir)} {(/dir)})
    (C {(norm_path)} {(/dir//)} {(/dir/)})
    (C {(norm_path)} {(/./dir)} {(/dir)})
    (C {(norm_path)} {(/dir/.)} {(/dir/)})
    (C {(norm_path)} {(/dir///./)} {(/dir/)})
    (C {(norm_path)} {(/dir//sub/..)} {(/dir/)})
    (C {(norm_path)} {(/dir/sub/../)} {(/dir/)})
    (C {(norm_path)} {(//dir/sub/../.)} {(/dir/)} {(POSIX)})
    (C {(norm_path)} {(/dir/s1/../s2/)} {(/dir/s2/)})
    (C {(norm_path)} {(/d1/s1///s2/..//../s3/)} {(/d1/s3/)})
    (C {(norm_path)} {(/d1/s1//../s2/../../d2)} {(/d2)})
    (C {(norm_path)} {(/d1/.../d2)} {(/d1/.../d2)})
    (C {(norm_path)} {(/d1/..././../d2)} {(/d1/d2)})
    (C {(ancestor)} {(/)} {(/)} {(-1)})
    (C {(ancestor)} {(/foo)} {(/)} {(0)})
    (C {(ancestor)} {(/foo)} {(/fo)} {(-1)})
    (C {(ancestor)} {(/foo)} {(/foo)} {(-1)})
    (C {(ancestor)} {(/foo)} {(/bar)} {(-1)})
    (C {(ancestor)} {(/foo)} {(/foo/bar)} {(-1)})
    (C {(ancestor)} {(/foo)} {(/foo) (Lit_Other ":") (/bar)} {(-1)})
    (C {(ancestor)} {(/foo)} {(/) (Lit_Other ":") (/foo) (Lit_Other ":") (/bar)} {(0)})
    (C {(ancestor)} {(/foo)} {(/foo) (Lit_Other ":") (/) (Lit_Other ":") (/bar)} {(0)})
    (C {(ancestor)} {(/foo)} {(/) (Lit_Other ":") (/bar) (Lit_Other ":") (/foo)} {(0)})
    (C {(ancestor)} {(/foo/bar)} {(/)} {(0)})
    (C {(ancestor)} {(/foo/bar)} {(/fo)} {(-1)})
    (C {(ancestor)} {(/foo/bar)} {(/foo)} {(4)})
    (C {(ancestor)} {(/foo/bar)} {(/foo/ba)} {(-1)})
    (C {(ancestor)} {(/foo/bar)} {(/) (Lit_Other ":") (/fo)} {(0)})
    (C {(ancestor)} {(/foo/bar)} {(/foo) (Lit_Other ":") (/foo/ba)} {(4)})
    (C {(ancestor)} {(/foo/bar)} {(/bar)} {(-1)})
    (C {(ancestor)} {(/foo/bar)} {(/fo)} {(-1)})
    (C {(ancestor)} {(/foo/bar)} {(/foo) (Lit_Other ":") (/bar)} {(4)})
    (C {(ancestor)} {(/foo/bar)} {(/) (Lit_Other ":") (/foo) (Lit_Other ":") (/bar)} {(4)})
    (C {(ancestor)} {(/foo/bar)} {(/foo) (Lit_Other ":") (/) (Lit_Other ":") (/bar)} {(4)})
    (C {(ancestor)} {(/foo/bar)} {(/) (Lit_Other ":") (/bar) (Lit_Other ":") (/fo)} {(0)})
    (C {(ancestor)} {(/foo/bar)} {(/) (Lit_Other ":") (/bar)} {(0)})
    (C {(ancestor)} {(/foo/bar)} {(/foo)} {(4)})
    (C {(ancestor)} {(/foo/bar)} {(/foo) (Lit_Other ":") (/bar)} {(4)})
    (C {(ancestor)} {(/foo/bar)} {(/bar)} {(-1)})
    (C {(test_expect_success)} {(SQ <strip_path_suffix>)} 
      {
        (SQ <"\n"> <"\ttest c:/msysgit = $(test-path-utils strip_path_suffix \\\n"> 
          <"\t\tc:/msysgit/libexec//git-core libexec/git-core)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"absolute path rejects the empty string">)} 
      {(SQ <"\n"> <"\ttest_must_fail test-path-utils absolute_path \"\"\n">)}
    )
    (C {(test_expect_success)} {(SQ <"real path rejects the empty string">)} 
      {(SQ <"\n"> <"\ttest_must_fail test-path-utils real_path \"\"\n">)}
    )
    (C {(test_expect_success)} {(POSIX)} {(SQ <"real path works on absolute paths 1">)} 
      {
        (SQ <"\n"> <"\tnopath=\"hopefully-absent-path\" &&\n"> 
          <"\ttest \"/\" = \"$(test-path-utils real_path \"/\")\" &&\n"> <"\ttest \"/$nopath\" = \"$(test-path-utils real_path \"/$nopath\")\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"real path works on absolute paths 2">)} 
      {
        (SQ <"\n"> <"\tnopath=\"hopefully-absent-path\" &&\n"> 
          <"\t# Find an existing top-level directory for the remaining tests:\n"> <"\td=$(pwd -P | sed -e \"s|^\\([^/]*/[^/]*\\)/.*|\\1|\") &&\n"> 
          <"\ttest \"$d\" = \"$(test-path-utils real_path \"$d\")\" &&\n"> <"\ttest \"$d/$nopath\" = \"$(test-path-utils real_path \"$d/$nopath\")\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(POSIX)} {(SQ <"real path removes extra leading slashes">)} 
      {
        (SQ <"\n"> <"\tnopath=\"hopefully-absent-path\" &&\n"> 
          <"\ttest \"/\" = \"$(test-path-utils real_path \"///\")\" &&\n"> <"\ttest \"/$nopath\" = \"$(test-path-utils real_path \"///$nopath\")\" &&\n"> 
          <"\t# Find an existing top-level directory for the remaining tests:\n"> <"\td=$(pwd -P | sed -e \"s|^\\([^/]*/[^/]*\\)/.*|\\1|\") &&\n"> 
          <"\ttest \"$d\" = \"$(test-path-utils real_path \"//$d\")\" &&\n"> <"\ttest \"$d/$nopath\" = \"$(test-path-utils real_path \"//$d/$nopath\")\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"real path removes other extra slashes">)} 
      {
        (SQ <"\n"> <"\tnopath=\"hopefully-absent-path\" &&\n"> 
          <"\t# Find an existing top-level directory for the remaining tests:\n"> <"\td=$(pwd -P | sed -e \"s|^\\([^/]*/[^/]*\\)/.*|\\1|\") &&\n"> 
          <"\ttest \"$d\" = \"$(test-path-utils real_path \"$d///\")\" &&\n"> <"\ttest \"$d/$nopath\" = \"$(test-path-utils real_path \"$d///$nopath\")\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} {(SQ <"real path works on symlinks">)} 
      {
        (SQ <"\n"> <"\tmkdir first &&\n"> <"\tln -s ../.git first/.git &&\n"> <"\tmkdir second &&\n"> 
          <"\tln -s ../first second/other &&\n"> <"\tmkdir third &&\n"> <"\tdir=\"$(cd .git; pwd -P)\" &&\n"> <"\tdir2=third/../second/other/.git &&\n"> 
          <"\ttest \"$dir\" = \"$(test-path-utils real_path $dir2)\" &&\n"> <"\tfile=\"$dir\"/index &&\n"> 
          <"\ttest \"$file\" = \"$(test-path-utils real_path $dir2/index)\" &&\n"> <"\tbasename=blub &&\n"> 
          <
"\ttest \"$dir/$basename\" = \"$(cd .git && test-path-utils real_path \"$basename\")\" &&\n"
          > <"\tln -s ../first/file .git/syml &&\n"> <"\tsym=\"$(cd first; pwd -P)\"/file &&\n"> 
          <"\ttest \"$sym\" = \"$(test-path-utils real_path \"$dir2/syml\")\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ <"prefix_path works with absolute paths to work tree symlinks">)} 
      {
        (SQ <"\n"> <"\tln -s target symlink &&\n"> 
          <"\ttest \"$(test-path-utils prefix_path prefix \"$(pwd)/symlink\")\" = \"symlink\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"prefix_path works with only absolute path to work tree">)} 
      {
        (SQ <"\n"> <"\techo \"\" >expected &&\n"> 
          <"\ttest-path-utils prefix_path prefix \"$(pwd)\" >actual &&\n"> <"\ttest_cmp expected actual\n">
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <"prefix_path rejects absolute path to dir with same beginning as work tree">)} {(SQ <"\n"> <"\ttest_must_fail test-path-utils prefix_path prefix \"$(pwd)a\"\n">)}
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {
        (SQ 
          <
"prefix_path works with absolute path to a symlink to work tree having  same beginning as work tree"
          >
        )
      } 
      {
        (SQ <"\n"> <"\tgit init repo &&\n"> <"\tln -s repo repolink &&\n"> 
          <
"\ttest \"a\" = \"$(cd repo && test-path-utils prefix_path prefix \"$(pwd)/../repolink/a\")\"\n"
          >
        )
      }
    )
    (C {(relative_path)} {(/foo/a/b/c/)} {(/foo/a/b/)} {(c/)})
    (C {(relative_path)} {(/foo/a/b/c/)} {(/foo/a/b)} {(c/)})
    (C {(relative_path)} {(/foo/a//b//c/)} {(///foo/a/b//)} {(c/)} {(POSIX)})
    (C {(relative_path)} {(/foo/a/b)} {(/foo/a/b)} {(./)})
    (C {(relative_path)} {(/foo/a/b/)} {(/foo/a/b)} {(./)})
    (C {(relative_path)} {(/foo/a)} {(/foo/a/b)} {(../)})
    (C {(relative_path)} {(/)} {(/foo/a/b/)} {(../../../)})
    (C {(relative_path)} {(/foo/a/c)} {(/foo/a/b/)} {(../c)})
    (C {(relative_path)} {(/foo/a/c)} {(/foo/a/b)} {(../c)})
    (C {(relative_path)} {(/foo/x/y)} {(/foo/a/b/)} {(../../x/y)})
    (C {(relative_path)} {(/foo/a/b)} {(DQ ("<empty>"))} {(/foo/a/b)})
    (C {(relative_path)} {(/foo/a/b)} {(DQ ("<null>"))} {(/foo/a/b)})
    (C {(relative_path)} {(foo/a/b/c/)} {(foo/a/b/)} {(c/)})
    (C {(relative_path)} {(foo/a/b/c/)} {(foo/a/b)} {(c/)})
    (C {(relative_path)} {(foo/a/b//c)} {(foo/a//b)} {(c)})
    (C {(relative_path)} {(foo/a/b/)} {(foo/a/b/)} {(./)})
    (C {(relative_path)} {(foo/a/b/)} {(foo/a/b)} {(./)})
    (C {(relative_path)} {(foo/a)} {(foo/a/b)} {(../)})
    (C {(relative_path)} {(foo/x/y)} {(foo/a/b)} {(../../x/y)})
    (C {(relative_path)} {(foo/a/c)} {(foo/a/b)} {(../c)})
    (C {(relative_path)} {(foo/a/b)} {(/foo/x/y)} {(foo/a/b)})
    (C {(relative_path)} {(/foo/a/b)} {(foo/x/y)} {(/foo/a/b)})
    (C {(relative_path)} {(d) (Lit_Other ":") (/a/b)} {(D) (Lit_Other ":") (/a/c)} {(../b)} {(MINGW)})
    (C {(relative_path)} {(C) (Lit_Other ":") (/a/b)} {(D) (Lit_Other ":") (/a/c)} 
      {(C) (Lit_Other ":") (/a/b)} {(MINGW)}
    )
    (C {(relative_path)} {(foo/a/b)} {(DQ ("<empty>"))} {(foo/a/b)})
    (C {(relative_path)} {(foo/a/b)} {(DQ ("<null>"))} {(foo/a/b)})
    (C {(relative_path)} {(DQ ("<empty>"))} {(/foo/a/b)} {(./)})
    (C {(relative_path)} {(DQ ("<empty>"))} {(DQ ("<empty>"))} {(./)})
    (C {(relative_path)} {(DQ ("<empty>"))} {(DQ ("<null>"))} {(./)})
    (C {(relative_path)} {(DQ ("<null>"))} {(DQ ("<empty>"))} {(./)})
    (C {(relative_path)} {(DQ ("<null>"))} {(DQ ("<null>"))} {(./)})
    (C {(relative_path)} {(DQ ("<null>"))} {(/foo/a/b)} {(./)})
    (C {(test_git_path)} {(Lit_VarLike "A=") (B)} {(info/grafts)} {(.git/info/grafts)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_GRAFT_FILE=") (foo)} {(info/grafts)} {(foo)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_GRAFT_FILE=") (foo)} {(info/////grafts)} {(foo)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_INDEX_FILE=") (foo)} {(index)} {(foo)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_INDEX_FILE=") (foo)} {(index/foo)} {(.git/index/foo)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_INDEX_FILE=") (foo)} {(index2)} {(.git/index2)})
    (C {(test_expect_success)} {(SQ <"setup fake objects directory foo">)} {(SQ <"mkdir foo">)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_OBJECT_DIRECTORY=") (foo)} {(objects)} {(foo)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_OBJECT_DIRECTORY=") (foo)} {(objects/foo)} {(foo/foo)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_OBJECT_DIRECTORY=") (foo)} {(objects2)} {(.git/objects2)})
    (C {(test_expect_success)} {(SQ <"setup common repository">)} {(SQ <"git --git-dir=bar init">)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(index)} {(.git/index)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(HEAD)} {(.git/HEAD)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(logs/HEAD)} {(.git/logs/HEAD)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(logs/refs/bisect/foo)} 
      {(.git/logs/refs/bisect/foo)}
    )
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(logs/refs/bisec/foo)} 
      {(bar/logs/refs/bisec/foo)}
    )
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(logs/refs/bisec)} 
      {(bar/logs/refs/bisec)}
    )
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(logs/refs/bisectfoo)} 
      {(bar/logs/refs/bisectfoo)}
    )
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(objects)} {(bar/objects)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(objects/bar)} {(bar/objects/bar)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(info/exclude)} {(bar/info/exclude)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(info/grafts)} {(bar/info/grafts)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(info/sparse-checkout)} 
      {(.git/info/sparse-checkout)}
    )
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(info//sparse-checkout)} 
      {(.git/info//sparse-checkout)}
    )
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(remotes/bar)} {(bar/remotes/bar)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(branches/bar)} {(bar/branches/bar)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(logs/refs/heads/master)} 
      {(bar/logs/refs/heads/master)}
    )
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(refs/heads/master)} 
      {(bar/refs/heads/master)}
    )
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(refs/bisect/foo)} 
      {(.git/refs/bisect/foo)}
    )
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(hooks/me)} {(bar/hooks/me)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(config)} {(bar/config)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(packed-refs)} {(bar/packed-refs)})
    (C {(test_git_path)} {(Lit_VarLike "GIT_COMMON_DIR=") (bar)} {(shallow)} {(bar/shallow)})
    (C {(test_submodule_relative_url)} {(DQ (../))} {(DQ (../foo))} {(DQ (../submodule))} 
      {(DQ (../../submodule))}
    )
    (C {(test_submodule_relative_url)} {(DQ (../))} {(DQ (../foo/bar))} {(DQ (../submodule))} 
      {(DQ (../../foo/submodule))}
    )
    (C {(test_submodule_relative_url)} {(DQ (../))} {(DQ (../foo/submodule))} {(DQ (../submodule))} 
      {(DQ (../../foo/submodule))}
    )
    (C {(test_submodule_relative_url)} {(DQ (../))} {(DQ (./foo))} {(DQ (../submodule))} 
      {(DQ (../submodule))}
    )
    (C {(test_submodule_relative_url)} {(DQ (../))} {(DQ (./foo/bar))} {(DQ (../submodule))} 
      {(DQ (../foo/submodule))}
    )
    (C {(test_submodule_relative_url)} {(DQ (../../../))} {(DQ (../foo/bar))} {(DQ (../sub/a/b/c))} 
      {(DQ (../../../../foo/sub/a/b/c))}
    )
    (C {(test_submodule_relative_url)} {(DQ (../))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [1977 1979]
          ) (/addtest)
        )
      } {(DQ (../repo))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [1988 1990]
          ) (/repo)
        )
      }
    )
    (C {(test_submodule_relative_url)} {(DQ (../))} {(DQ (foo/bar))} {(DQ (../submodule))} 
      {(DQ (../foo/submodule))}
    )
    (C {(test_submodule_relative_url)} {(DQ (../))} {(DQ (foo))} {(DQ (../submodule))} 
      {(DQ (../submodule))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ (../foo/bar))} {(DQ (../sub/a/b/c))} 
      {(DQ (../foo/sub/a/b/c))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ (../foo/bar))} {(DQ (../sub/a/b/c/))} 
      {(DQ (../foo/sub/a/b/c))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ (../foo/bar/))} {(DQ (../sub/a/b/c))} 
      {(DQ (../foo/sub/a/b/c))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ (../foo/bar))} {(DQ (../submodule))} 
      {(DQ (../foo/submodule))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ (../foo/submodule))} {(DQ (../submodule))} 
      {(DQ (../foo/submodule))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ (../foo))} {(DQ (../submodule))} 
      {(DQ (../submodule))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ (./foo/bar))} {(DQ (../submodule))} 
      {(DQ (foo/submodule))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ (./foo))} {(DQ (../submodule))} 
      {(DQ (submodule))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ ("//somewhere else/repo"))} 
      {(DQ (../subrepo))} {(DQ ("//somewhere else/subrepo"))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2200 2202]
          ) (/subsuper_update_r)
        )
      } {(DQ (../subsubsuper_update_r))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2211 2213]
          ) (/subsubsuper_update_r)
        )
      }
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2224 2226]
          ) (/super_update_r2)
        )
      } {(DQ (../subsuper_update_r))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2235 2237]
          ) (/subsuper_update_r)
        )
      }
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2248 2250]
          ) (/.)
        )
      } {(DQ (../.))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2259 2261]
          ) (/.)
        )
      }
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2272 2274]
          )
        )
      } {(DQ (./.))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2282 2284]
          ) (/.)
        )
      }
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2295 2297]
          ) (/addtest)
        )
      } {(DQ (../repo))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2306 2308]
          ) (/repo)
        )
      }
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2319 2321]
          )
        )
      } {(DQ ("./\u00e5 \u00e4\u00f6"))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2329 2331]
          ) ("/\u00e5 \u00e4\u00f6")
        )
      }
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2342 2344]
          ) (/.)
        )
      } {(DQ (../submodule))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2353 2355]
          ) (/submodule)
        )
      }
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2366 2368]
          ) (/submodule)
        )
      } {(DQ (../submodule))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2377 2379]
          ) (/submodule)
        )
      }
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2390 2392]
          ) (/home2/../remote)
        )
      } {(DQ (../bundle1))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2401 2403]
          ) (/home2/../bundle1)
        )
      }
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2414 2416]
          ) (/submodule_update_repo)
        )
      } {(DQ (./.))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(pwd)})])
            left_token: <Left_CommandSub "$(">
            spids: [2425 2427]
          ) (/submodule_update_repo/.)
        )
      }
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ ("file:///tmp/repo"))} {(DQ (../subrepo))} 
      {(DQ ("file:///tmp/subrepo"))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ (foo/bar))} {(DQ (../submodule))} 
      {(DQ (foo/submodule))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ (foo))} {(DQ (../submodule))} 
      {(DQ (submodule))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ ("helper:://hostname/repo"))} 
      {(DQ (../subrepo))} {(DQ ("helper:://hostname/subrepo"))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ ("ssh://hostname/repo"))} 
      {(DQ (../subrepo))} {(DQ ("ssh://hostname/subrepo"))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ ("ssh://hostname:22/repo"))} 
      {(DQ (../subrepo))} {(DQ ("ssh://hostname:22/subrepo"))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ ("user@host:path/to/repo"))} 
      {(DQ (../subrepo))} {(DQ ("user@host:path/to/subrepo"))}
    )
    (C {(test_submodule_relative_url)} {(DQ ("(null)"))} {(DQ ("user@host:repo"))} {(DQ (../subrepo))} 
      {(DQ ("user@host:subrepo"))}
    )
    (C {(test_done)})
  ]
)