(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: 'Combination of submodules and multiple workdirs' span_id: 6 ) ) } 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: (Token id:Id.Left_DollarParen val:'$(' span_id:16) command_list: (command.CommandList children:[(C {(pwd)} {(-P)})]) ) } spids: [15] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup: make origin' span_id:26))} { (SQ (Token id: Id.Lit_Chars val: 'mkdir -p origin/sub && ( cd origin/sub && git init &&\n' span_id: 32 ) (Token id:Id.Lit_Chars val:'\techo file1 >file1 &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\tgit add file1 &&\n' span_id:34) (Token id:Id.Lit_Chars val:'\tgit commit -m file1 ) &&\n' span_id:35) (Token id: Id.Lit_Chars val: ' mkdir -p origin/main && ( cd origin/main && git init &&\n' span_id: 36 ) (Token id:Id.Lit_Chars val:'\tgit submodule add ../sub &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\tgit commit -m "add sub" ) &&\n' span_id:38) (Token id:Id.Lit_Chars val:' ( cd origin/sub &&\n' span_id:39) (Token id:Id.Lit_Chars val:'\techo file1updated >file1 &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\tgit add file1 &&\n' span_id:41) (Token id:Id.Lit_Chars val:'\tgit commit -m "file1 updated" ) &&\n' span_id:42) (Token id:Id.Lit_Chars val:' ( cd origin/main/sub && git pull ) &&\n' span_id:43) (Token id:Id.Lit_Chars val:' ( cd origin/main &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\tgit add sub &&\n' span_id:45) (Token id:Id.Lit_Chars val:'\tgit commit -m "sub updated" )' span_id:46) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup: clone' span_id:53))} { (SQ (Token id:Id.Lit_Chars val:'mkdir clone && ( cd clone &&\n' span_id:59) (Token id: Id.Lit_Chars val: '\tgit clone --recursive "$base_path/origin/main")' span_id: 60 ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:rev1_hash_main) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:65) command_list: (command.CommandList children: [ (C {(git)} {(--git-dir) (Id.Lit_Equals '=') (origin/main/.git)} {(show)} {(--pretty) (Id.Lit_Equals '=') (format) (Id.Lit_Other ':') (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: (Token id:Id.Left_DollarParen val:'$(' span_id:89) command_list: (command.CommandList children: [ (C {(git)} {(--git-dir) (Id.Lit_Equals '=') (origin/sub/.git)} {(show)} {(--pretty) (Id.Lit_Equals '=') (format) (Id.Lit_Other ':') (Id.Lit_Other '%') (h) } {(-q)} {(DQ ('HEAD~1'))} ) ] ) ) } spids: [88] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout main' span_id:116))} { (SQ (Token id:Id.Lit_Chars val:'mkdir default_checkout &&\n' span_id:122) (Token id:Id.Lit_Chars val:' (cd clone/main &&\n' span_id:123) (Token id: Id.Lit_Chars val: '\tgit worktree add "$base_path/default_checkout/main" "$rev1_hash_main")' span_id: 124 ) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'can see submodule diffs just after checkout' span_id:131))} { (SQ (Token id: Id.Lit_Chars val: '(cd default_checkout/main && git diff --submodule master"^!" | grep "file1 updated")' span_id: 137 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout main and initialize independed clones' span_id:144))} { (SQ (Token id:Id.Lit_Chars val:'mkdir fully_cloned_submodule &&\n' span_id:150) (Token id:Id.Lit_Chars val:' (cd clone/main &&\n' span_id:151) (Token id: Id.Lit_Chars val: '\tgit worktree add "$base_path/fully_cloned_submodule/main" "$rev1_hash_main") &&\n' span_id: 152 ) (Token id: Id.Lit_Chars val: ' (cd fully_cloned_submodule/main && git submodule update)' span_id: 153 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'can see submodule diffs after independed cloning' span_id: 160 ) ) } { (SQ (Token id: Id.Lit_Chars val: '(cd fully_cloned_submodule/main && git diff --submodule master"^!" | grep "file1 updated")' span_id: 166 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout sub manually' span_id:173))} { (SQ (Token id:Id.Lit_Chars val:'mkdir linked_submodule &&\n' span_id:179) (Token id:Id.Lit_Chars val:' (cd clone/main &&\n' span_id:180) (Token id: Id.Lit_Chars val: '\tgit worktree add "$base_path/linked_submodule/main" "$rev1_hash_main") &&\n' span_id: 181 ) (Token id:Id.Lit_Chars val:' (cd clone/main/sub &&\n' span_id:182) (Token id: Id.Lit_Chars val: '\tgit worktree add "$base_path/linked_submodule/main/sub" "$rev1_hash_sub")' span_id: 183 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'can see submodule diffs after manual checkout of linked submodule' span_id: 190 ) ) } { (SQ (Token id: Id.Lit_Chars val: '(cd linked_submodule/main && git diff --submodule master"^!" | grep "file1 updated")' span_id: 196 ) ) } ) (C {(test_done)}) ] )