(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'Combination of submodules and multiple workdirs'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:base_path)
          op: assign_op.Equal
          rhs: {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<pwd>} {<-P>}))}
          spids: [15]
        )
      ]
    )
    (C {<test_expect_success>} {(SQ <'setup: make origin'>)} 
      {
        (SQ <'mkdir -p origin/sub && ( cd origin/sub && git init &&\n'> <'\techo file1 >file1 &&\n'> 
          <'\tgit add file1 &&\n'> <'\tgit commit -m file1 ) &&\n'> <'    mkdir -p origin/main && ( cd origin/main && git init &&\n'> 
          <'\tgit submodule add ../sub &&\n'> <'\tgit commit -m "add sub" ) &&\n'> <'    ( cd origin/sub &&\n'> <'\techo file1updated >file1 &&\n'> 
          <'\tgit add file1 &&\n'> <'\tgit commit -m "file1 updated" ) &&\n'> <'    ( cd origin/main/sub && git pull ) &&\n'> 
          <'    ( cd origin/main &&\n'> <'\tgit add sub &&\n'> <'\tgit commit -m "sub updated" )'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'setup: clone'>)} 
      {(SQ <'mkdir clone && ( cd clone &&\n'> <'\tgit clone --recursive "$base_path/origin/main")'>)}
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:rev1_hash_main)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<git>} {<--git-dir> <Id.Lit_Equals '='> <'origin/main/.git'>} {<show>} 
                    {<--pretty> <Id.Lit_Equals '='> <format> <Id.Lit_Colon ':'> <Id.Lit_Other '%'> <h>} {<-q>} {(DQ <'HEAD~1'>)}
                  )
              )
            }
          spids: [64]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:rev1_hash_sub)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<git>} {<--git-dir> <Id.Lit_Equals '='> <'origin/sub/.git'>} {<show>} 
                    {<--pretty> <Id.Lit_Equals '='> <format> <Id.Lit_Colon ':'> <Id.Lit_Other '%'> <h>} {<-q>} {(DQ <'HEAD~1'>)}
                  )
              )
            }
          spids: [88]
        )
      ]
    )
    (C {<test_expect_success>} {(SQ <'checkout main'>)} 
      {
        (SQ <'mkdir default_checkout &&\n'> <'    (cd clone/main &&\n'> 
          <'\tgit worktree add "$base_path/default_checkout/main" "$rev1_hash_main")'>
        )
      }
    )
    (C {<test_expect_failure>} {(SQ <'can see submodule diffs just after checkout'>)} 
      {(SQ <'(cd default_checkout/main && git diff --submodule master"^!" | grep "file1 updated")'>)}
    )
    (C {<test_expect_success>} {(SQ <'checkout main and initialize independed clones'>)} 
      {
        (SQ <'mkdir fully_cloned_submodule &&\n'> <'    (cd clone/main &&\n'> 
          <'\tgit worktree add "$base_path/fully_cloned_submodule/main" "$rev1_hash_main") &&\n'> <'    (cd fully_cloned_submodule/main && git submodule update)'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'can see submodule diffs after independed cloning'>)} 
      {
        (SQ 
          <
'(cd fully_cloned_submodule/main && git diff --submodule master"^!" | grep "file1 updated")'
          >
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'checkout sub manually'>)} 
      {
        (SQ <'mkdir linked_submodule &&\n'> <'    (cd clone/main &&\n'> 
          <'\tgit worktree add "$base_path/linked_submodule/main" "$rev1_hash_main") &&\n'> <'    (cd clone/main/sub &&\n'> 
          <'\tgit worktree add "$base_path/linked_submodule/main/sub" "$rev1_hash_sub")'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'can see submodule diffs after manual checkout of linked submodule'>)} {(SQ <'(cd linked_submodule/main && git diff --submodule master"^!" | grep "file1 updated")'>)}
    )
    (C {<test_done>})
  ]
)