(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> name:test_description) op: assign_op.Equal rhs: {(SQ <'Combination of submodules and multiple workdirs'>)} spids: [4] ) ] redirects: [] ) (C {<.>} {<'./test-lib.sh'>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'base_path='> name:base_path) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<pwd>} {<-P>}) right: <Id.Eof_RParen _> ) } spids: [15] ) ] redirects: [] ) (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 left:<Id.Lit_VarLike 'rev1_hash_main='> 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'>)} ) right: <Id.Eof_RParen _> ) } spids: [64] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rev1_hash_sub='> 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'>)} ) right: <Id.Eof_RParen _> ) } spids: [88] ) ] redirects: [] ) (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>}) ] )