(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ (Token id:Id.Lit_Chars val:'git submodule sync\n' span_id:15) 
                (Token id:Id.Lit_Chars val:'\n' span_id:16) (Token id:Id.Lit_Chars val:'These tests exercise the "git submodule sync" subcommand.\n' span_id:17)
              )
            }
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\techo file >file &&\n' span_id:32) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:33) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:34) (Token id:Id.Lit_Chars val:'\tgit commit -m upstream &&\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\tgit clone . super &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\tgit clone super submodule &&\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:38) (Token id:Id.Lit_Chars val:'\t\tcd submodule &&\n' span_id:39) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit submodule add ../submodule sub-submodule &&\n'
            span_id: 40
          ) (Token id:Id.Lit_Chars val:'\t\ttest_tick &&\n' span_id:41) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m "sub-submodule"\n' span_id:42) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:43) (Token id:Id.Lit_Chars val:'\t(\n' span_id:44) 
          (Token id:Id.Lit_Chars val:'\t\tcd super &&\n' span_id:45) (Token id:Id.Lit_Chars val:'\t\tgit submodule add ../submodule submodule &&\n' span_id:46) 
          (Token id:Id.Lit_Chars val:'\t\ttest_tick &&\n' span_id:47) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "submodule"\n' span_id:48) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:49) (Token id:Id.Lit_Chars val:'\tgit clone super super-clone &&\n' span_id:50) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:51) (Token id:Id.Lit_Chars val:'\t\tcd super-clone &&\n' span_id:52) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit submodule update --init --recursive\n'
            span_id: 53
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:54) 
          (Token id:Id.Lit_Chars val:'\tgit clone super empty-clone &&\n' span_id:55) (Token id:Id.Lit_Chars val:'\t(\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\t\tcd empty-clone &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\t\tgit submodule init\n' span_id:58) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:59) (Token id:Id.Lit_Chars val:'\tgit clone super top-only-clone &&\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\tgit clone super relative-clone &&\n' span_id:61) (Token id:Id.Lit_Chars val:'\t(\n' span_id:62) 
          (Token id:Id.Lit_Chars val:'\t\tcd relative-clone &&\n' span_id:63) (Token id:Id.Lit_Chars val:'\t\tgit submodule update --init --recursive\n' span_id:64) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:65) (Token id:Id.Lit_Chars val:'\tgit clone super recursive-clone &&\n' span_id:66) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:67) (Token id:Id.Lit_Chars val:'\t\tcd recursive-clone &&\n' span_id:68) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit submodule update --init --recursive\n'
            span_id: 69
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:70)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'change submodule' span_id:77))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:81) (Token id:Id.Lit_Chars val:'\t(\n' span_id:82) 
          (Token id:Id.Lit_Chars val:'\t\tcd submodule &&\n' span_id:83) (Token id:Id.Lit_Chars val:'\t\techo second line >>file &&\n' span_id:84) 
          (Token id:Id.Lit_Chars val:'\t\ttest_tick &&\n' span_id:85) (Token id:Id.Lit_Chars val:'\t\tgit commit -a -m "change submodule"\n' span_id:86) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:87)
        )
      }
    )
    (command.ShFunction
      name: reset_submodule_urls
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp Id.Op_DAmp]
                          children: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:root)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: 
                                          (Token
                                            id: Id.Left_DollarParen
                                            val: '$('
                                            span_id: 103
                                          )
                                        command_list: (command.CommandList children:[(C {(pwd)})])
                                      )
                                    }
                                  spids: [102]
                                )
                              ]
                            )
                            (C {(cd)} {(super-clone/submodule)})
                            (C {(git)} {(config)} {(remote.origin.url)} 
                              {(DQ ($ Id.VSub_DollarName '$root') (/submodule))}
                            )
                          ]
                        )
                      ]
                    )
                )
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp Id.Op_DAmp]
                          children: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:root)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: 
                                          (Token
                                            id: Id.Left_DollarParen
                                            val: '$('
                                            span_id: 138
                                          )
                                        command_list: (command.CommandList children:[(C {(pwd)})])
                                      )
                                    }
                                  spids: [137]
                                )
                              ]
                            )
                            (C {(cd)} {(super-clone/submodule/sub-submodule)})
                            (C {(git)} {(config)} {(remote.origin.url)} 
                              {(DQ ($ Id.VSub_DollarName '$root') (/submodule))}
                            )
                          ]
                        )
                      ]
                    )
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'change submodule url' span_id:172))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:176) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:177) (Token id:Id.Lit_Chars val:'\t\tcd super &&\n' span_id:178) 
          (Token id:Id.Lit_Chars val:'\t\tcd submodule &&\n' span_id:179) (Token id:Id.Lit_Chars val:'\t\tgit checkout master &&\n' span_id:180) 
          (Token id:Id.Lit_Chars val:'\t\tgit pull\n' span_id:181) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:182) 
          (Token id:Id.Lit_Chars val:'\tmv submodule moved-submodule &&\n' span_id:183) (Token id:Id.Lit_Chars val:'\t(\n' span_id:184) 
          (Token id:Id.Lit_Chars val:'\t\tcd moved-submodule &&\n' span_id:185) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config -f .gitmodules submodule.sub-submodule.url ../moved-submodule &&\n'
            span_id: 186
          ) (Token id:Id.Lit_Chars val:'\t\ttest_tick &&\n' span_id:187) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -a -m moved-sub-submodule\n'
            span_id: 188
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:189) (Token id:Id.Lit_Chars val:'\t(\n' span_id:190) 
          (Token id:Id.Lit_Chars val:'\t\tcd super &&\n' span_id:191) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config -f .gitmodules submodule.submodule.url ../moved-submodule &&\n'
            span_id: 192
          ) (Token id:Id.Lit_Chars val:'\t\ttest_tick &&\n' span_id:193) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -a -m moved-submodule\n' span_id:194) (Token id:Id.Lit_Chars val:'\t)\n' span_id:195)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"git submodule sync" should update submodule URLs'
            span_id: 202
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:206) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:207) (Token id:Id.Lit_Chars val:'\t\tcd super-clone &&\n' span_id:208) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit pull --no-recurse-submodules &&\n'
            span_id: 209
          ) (Token id:Id.Lit_Chars val:'\t\tgit submodule sync\n' span_id:210) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:211) (Token id:Id.Lit_Chars val:'\ttest -d "$(\n' span_id:212) 
          (Token id:Id.Lit_Chars val:'\t\tcd super-clone/submodule &&\n' span_id:213) (Token id:Id.Lit_Chars val:'\t\tgit config remote.origin.url\n' span_id:214) 
          (Token id:Id.Lit_Chars val:'\t)" &&\n' span_id:215) (Token id:Id.Lit_Chars val:'\ttest ! -d "$(\n' span_id:216) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcd super-clone/submodule/sub-submodule &&\n'
            span_id: 217
          ) (Token id:Id.Lit_Chars val:'\t\tgit config remote.origin.url\n' span_id:218) 
          (Token id:Id.Lit_Chars val:'\t)" &&\n' span_id:219) (Token id:Id.Lit_Chars val:'\t(\n' span_id:220) 
          (Token id:Id.Lit_Chars val:'\t\tcd super-clone/submodule &&\n' span_id:221) (Token id:Id.Lit_Chars val:'\t\tgit checkout master &&\n' span_id:222) 
          (Token id:Id.Lit_Chars val:'\t\tgit pull\n' span_id:223) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:224) (Token id:Id.Lit_Chars val:'\t(\n' span_id:225) 
          (Token id:Id.Lit_Chars val:'\t\tcd super-clone &&\n' span_id:226) (Token id:Id.Lit_Chars val:'\t\ttest -d "$(git config submodule.submodule.url)"\n' span_id:227) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:228)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"git submodule sync --recursive" should update all submodule URLs'
            span_id: 235
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:239) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:240) (Token id:Id.Lit_Chars val:'\t\tcd super-clone &&\n' span_id:241) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:242) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule &&\n' span_id:243) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\tgit pull --no-recurse-submodules\n'
            span_id: 244
          ) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:245) 
          (Token id:Id.Lit_Chars val:'\t\tgit submodule sync --recursive\n' span_id:246) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:247) 
          (Token id:Id.Lit_Chars val:'\ttest -d "$(\n' span_id:248) (Token id:Id.Lit_Chars val:'\t\tcd super-clone/submodule &&\n' span_id:249) 
          (Token id:Id.Lit_Chars val:'\t\tgit config remote.origin.url\n' span_id:250) (Token id:Id.Lit_Chars val:'\t)" &&\n' span_id:251) 
          (Token id:Id.Lit_Chars val:'\ttest -d "$(\n' span_id:252) (Token id:Id.Lit_Chars val:'\t\tcd super-clone/submodule/sub-submodule &&\n' span_id:253) 
          (Token id:Id.Lit_Chars val:'\t\tgit config remote.origin.url\n' span_id:254) (Token id:Id.Lit_Chars val:'\t)" &&\n' span_id:255) (Token id:Id.Lit_Chars val:'\t(\n' span_id:256) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcd super-clone/submodule/sub-submodule &&\n'
            span_id: 257
          ) (Token id:Id.Lit_Chars val:'\t\tgit checkout master &&\n' span_id:258) 
          (Token id:Id.Lit_Chars val:'\t\tgit pull\n' span_id:259) (Token id:Id.Lit_Chars val:'\t)\n' span_id:260)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'reset submodule URLs' span_id:267))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:271) 
          (Token id:Id.Lit_Chars val:'\treset_submodule_urls super-clone\n' span_id:272)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"git submodule sync" should update submodule URLs - subdirectory'
            span_id: 279
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:283) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:284) (Token id:Id.Lit_Chars val:'\t\tcd super-clone &&\n' span_id:285) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit pull --no-recurse-submodules &&\n'
            span_id: 286
          ) (Token id:Id.Lit_Chars val:'\t\tmkdir -p sub &&\n' span_id:287) 
          (Token id:Id.Lit_Chars val:'\t\tcd sub &&\n' span_id:288) (Token id:Id.Lit_Chars val:'\t\tgit submodule sync >../../output\n' span_id:289) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:290) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "\\\\.\\\\./submodule" output &&\n' span_id:291) 
          (Token id:Id.Lit_Chars val:'\ttest -d "$(\n' span_id:292) (Token id:Id.Lit_Chars val:'\t\tcd super-clone/submodule &&\n' span_id:293) 
          (Token id:Id.Lit_Chars val:'\t\tgit config remote.origin.url\n' span_id:294) (Token id:Id.Lit_Chars val:'\t)" &&\n' span_id:295) 
          (Token id:Id.Lit_Chars val:'\ttest ! -d "$(\n' span_id:296) (Token id:Id.Lit_Chars val:'\t\tcd super-clone/submodule/sub-submodule &&\n' span_id:297) 
          (Token id:Id.Lit_Chars val:'\t\tgit config remote.origin.url\n' span_id:298) (Token id:Id.Lit_Chars val:'\t)" &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\t(\n' span_id:300) 
          (Token id:Id.Lit_Chars val:'\t\tcd super-clone/submodule &&\n' span_id:301) (Token id:Id.Lit_Chars val:'\t\tgit checkout master &&\n' span_id:302) 
          (Token id:Id.Lit_Chars val:'\t\tgit pull\n' span_id:303) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:304) (Token id:Id.Lit_Chars val:'\t(\n' span_id:305) 
          (Token id:Id.Lit_Chars val:'\t\tcd super-clone &&\n' span_id:306) (Token id:Id.Lit_Chars val:'\t\ttest -d "$(git config submodule.submodule.url)"\n' span_id:307) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:308)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"git submodule sync --recursive" should update all submodule URLs - subdirectory'
            span_id: 315
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:319) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:320) (Token id:Id.Lit_Chars val:'\t\tcd super-clone &&\n' span_id:321) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:322) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule &&\n' span_id:323) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\tgit pull --no-recurse-submodules\n'
            span_id: 324
          ) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:325) 
          (Token id:Id.Lit_Chars val:'\t\tmkdir -p sub &&\n' span_id:326) (Token id:Id.Lit_Chars val:'\t\tcd sub &&\n' span_id:327) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit submodule sync --recursive >../../output\n'
            span_id: 328
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:329) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "\\\\.\\\\./submodule/sub-submodule" output &&\n'
            span_id: 330
          ) (Token id:Id.Lit_Chars val:'\ttest -d "$(\n' span_id:331) 
          (Token id:Id.Lit_Chars val:'\t\tcd super-clone/submodule &&\n' span_id:332) (Token id:Id.Lit_Chars val:'\t\tgit config remote.origin.url\n' span_id:333) 
          (Token id:Id.Lit_Chars val:'\t)" &&\n' span_id:334) (Token id:Id.Lit_Chars val:'\ttest -d "$(\n' span_id:335) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcd super-clone/submodule/sub-submodule &&\n'
            span_id: 336
          ) (Token id:Id.Lit_Chars val:'\t\tgit config remote.origin.url\n' span_id:337) 
          (Token id:Id.Lit_Chars val:'\t)" &&\n' span_id:338) (Token id:Id.Lit_Chars val:'\t(\n' span_id:339) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcd super-clone/submodule/sub-submodule &&\n'
            span_id: 340
          ) (Token id:Id.Lit_Chars val:'\t\tgit checkout master &&\n' span_id:341) 
          (Token id:Id.Lit_Chars val:'\t\tgit pull\n' span_id:342) (Token id:Id.Lit_Chars val:'\t)\n' span_id:343)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"git submodule sync" should update known submodule URLs'
            span_id: 350
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:354) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:355) (Token id:Id.Lit_Chars val:'\t\tcd empty-clone &&\n' span_id:356) 
          (Token id:Id.Lit_Chars val:'\t\tgit pull &&\n' span_id:357) (Token id:Id.Lit_Chars val:'\t\tgit submodule sync &&\n' span_id:358) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest -d "$(git config submodule.submodule.url)"\n'
            span_id: 359
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:360)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"git submodule sync" should not vivify uninteresting submodule'
            span_id: 367
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:371) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:372) (Token id:Id.Lit_Chars val:'\t\tcd top-only-clone &&\n' span_id:373) 
          (Token id:Id.Lit_Chars val:'\t\tgit pull &&\n' span_id:374) (Token id:Id.Lit_Chars val:'\t\tgit submodule sync &&\n' span_id:375) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest -z "$(git config submodule.submodule.url)" &&\n'
            span_id: 376
          ) (Token id:Id.Lit_Chars val:'\t\tgit submodule sync submodule &&\n' span_id:377) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest -z "$(git config submodule.submodule.url)"\n'
            span_id: 378
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:379)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"git submodule sync" handles origin URL of the form foo'
            span_id: 386
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:390) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:391) (Token id:Id.Lit_Chars val:'\t\tcd relative-clone &&\n' span_id:392) 
          (Token id:Id.Lit_Chars val:'\t\tgit remote set-url origin foo &&\n' span_id:393) (Token id:Id.Lit_Chars val:'\t\tgit submodule sync &&\n' span_id:394) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:395) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule &&\n' span_id:396) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\t#actual fails with: "cannot strip off url foo\n'
            span_id: 397
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\ttest "$(git config remote.origin.url)" = "../submodule"\n'
            span_id: 398
          ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:399) (Token id:Id.Lit_Chars val:'\t)\n' span_id:400)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"git submodule sync" handles origin URL of the form foo/bar'
            span_id: 407
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:411) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:412) (Token id:Id.Lit_Chars val:'\t\tcd relative-clone &&\n' span_id:413) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit remote set-url origin foo/bar &&\n'
            span_id: 414
          ) (Token id:Id.Lit_Chars val:'\t\tgit submodule sync &&\n' span_id:415) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:416) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule &&\n' span_id:417) 
          (Token id:Id.Lit_Chars val:'\t\t\t#actual foo/submodule\n' span_id:418) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\ttest "$(git config remote.origin.url)" = "../foo/submodule"\n'
            span_id: 419
          ) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:420) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:421) 
          (Token id:Id.Lit_Chars val:'\t\t\tcd submodule/sub-submodule &&\n' span_id:422) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\ttest "$(git config remote.origin.url)" != "../../foo/submodule"\n'
            span_id: 423
          ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:424) (Token id:Id.Lit_Chars val:'\t)\n' span_id:425)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"git submodule sync --recursive" propagates changes in origin'
            span_id: 432
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:436) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:437) (Token id:Id.Lit_Chars val:'\t\tcd recursive-clone &&\n' span_id:438) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit remote set-url origin foo/bar &&\n'
            span_id: 439
          ) (Token id:Id.Lit_Chars val:'\t\tgit submodule sync --recursive &&\n' span_id:440) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:441) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule &&\n' span_id:442) 
          (Token id:Id.Lit_Chars val:'\t\t\t#actual foo/submodule\n' span_id:443) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\ttest "$(git config remote.origin.url)" = "../foo/submodule"\n'
            span_id: 444
          ) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:445) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:446) 
          (Token id:Id.Lit_Chars val:'\t\t\tcd submodule/sub-submodule &&\n' span_id:447) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\ttest "$(git config remote.origin.url)" = "../../foo/submodule"\n'
            span_id: 448
          ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:449) (Token id:Id.Lit_Chars val:'\t)\n' span_id:450)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"git submodule sync" handles origin URL of the form ./foo'
            span_id: 457
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:461) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:462) (Token id:Id.Lit_Chars val:'\t\tcd relative-clone &&\n' span_id:463) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit remote set-url origin ./foo &&\n'
            span_id: 464
          ) (Token id:Id.Lit_Chars val:'\t\tgit submodule sync &&\n' span_id:465) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:466) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule &&\n' span_id:467) 
          (Token id:Id.Lit_Chars val:'\t\t\t#actual ./submodule\n' span_id:468) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\ttest "$(git config remote.origin.url)" = "../submodule"\n'
            span_id: 469
          ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:470) (Token id:Id.Lit_Chars val:'\t)\n' span_id:471)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"git submodule sync" handles origin URL of the form ./foo/bar'
            span_id: 478
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:482) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:483) (Token id:Id.Lit_Chars val:'\t\tcd relative-clone &&\n' span_id:484) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit remote set-url origin ./foo/bar &&\n'
            span_id: 485
          ) (Token id:Id.Lit_Chars val:'\t\tgit submodule sync &&\n' span_id:486) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:487) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule &&\n' span_id:488) 
          (Token id:Id.Lit_Chars val:'\t\t\t#actual ./foo/submodule\n' span_id:489) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\ttest "$(git config remote.origin.url)" = "../foo/submodule"\n'
            span_id: 490
          ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:491) (Token id:Id.Lit_Chars val:'\t)\n' span_id:492)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"git submodule sync" handles origin URL of the form ../foo'
            span_id: 499
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:503) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:504) (Token id:Id.Lit_Chars val:'\t\tcd relative-clone &&\n' span_id:505) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit remote set-url origin ../foo &&\n'
            span_id: 506
          ) (Token id:Id.Lit_Chars val:'\t\tgit submodule sync &&\n' span_id:507) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:508) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule &&\n' span_id:509) 
          (Token id:Id.Lit_Chars val:'\t\t\t#actual ../submodule\n' span_id:510) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\ttest "$(git config remote.origin.url)" = "../../submodule"\n'
            span_id: 511
          ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:512) (Token id:Id.Lit_Chars val:'\t)\n' span_id:513)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"git submodule sync" handles origin URL of the form ../foo/bar'
            span_id: 520
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:524) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:525) (Token id:Id.Lit_Chars val:'\t\tcd relative-clone &&\n' span_id:526) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit remote set-url origin ../foo/bar &&\n'
            span_id: 527
          ) (Token id:Id.Lit_Chars val:'\t\tgit submodule sync &&\n' span_id:528) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:529) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule &&\n' span_id:530) 
          (Token id:Id.Lit_Chars val:'\t\t\t#actual ../foo/submodule\n' span_id:531) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\ttest "$(git config remote.origin.url)" = "../../foo/submodule"\n'
            span_id: 532
          ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:533) (Token id:Id.Lit_Chars val:'\t)\n' span_id:534)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'"git submodule sync" handles origin URL of the form ../foo/bar with deeply nested submodule'
            span_id: 541
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:545) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:546) (Token id:Id.Lit_Chars val:'\t\tcd relative-clone &&\n' span_id:547) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit remote set-url origin ../foo/bar &&\n'
            span_id: 548
          ) (Token id:Id.Lit_Chars val:'\t\tmkdir -p a/b/c &&\n' span_id:549) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:550) (Token id:Id.Lit_Chars val:'\t\t\tcd a/b/c &&\n' span_id:551) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit init &&\n' span_id:552) (Token id:Id.Lit_Chars val:'\t\t\t>.gitignore &&\n' span_id:553) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit add .gitignore &&\n' span_id:554) (Token id:Id.Lit_Chars val:'\t\t\ttest_tick &&\n' span_id:555) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit commit -m "initial commit"\n' span_id:556) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:557) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit submodule add ../bar/a/b/c ./a/b/c &&\n'
            span_id: 558
          ) (Token id:Id.Lit_Chars val:'\t\tgit submodule sync &&\n' span_id:559) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:560) (Token id:Id.Lit_Chars val:'\t\t\tcd a/b/c &&\n' span_id:561) 
          (Token id:Id.Lit_Chars val:'\t\t\t#actual ../foo/bar/a/b/c\n' span_id:562) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\ttest "$(git config remote.origin.url)" = "../../../../foo/bar/a/b/c"\n'
            span_id: 563
          ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:564) (Token id:Id.Lit_Chars val:'\t)\n' span_id:565)
        )
      }
    )
    (C {(test_done)})
  ]
)