(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 p4 locked file behavior' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./lib-git-p4.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'start p4d' span_id:18))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:22) (Token id:Id.Lit_Chars val:'\tstart_p4d\n' span_id:23) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init depot' span_id:42))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:46) (Token id:Id.Lit_Chars val:'\t(\n' span_id:47) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\t\techo "TypeMap: +l //depot/..." | p4 typemap -i &&\n' span_id:49) (Token id:Id.Lit_Chars val:'\t\techo file1 >file1 &&\n' span_id:50) (Token id:Id.Lit_Chars val:'\t\tp4 add file1 &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "add file1"\n' span_id:52) (Token id:Id.Lit_Chars val:'\t)\n' span_id:53) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'edit with lock not taken' span_id:60))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:64) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:65) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\t(\n' span_id:67) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\t\techo line2 >>file1 &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\t\tgit add file1 &&\n' span_id:70) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "line2 in file1" &&\n' span_id:71) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:72) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit\n' span_id:73) (Token id:Id.Lit_Chars val:'\t)\n' span_id:74) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add with lock not taken' span_id:81))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:85) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:87) (Token id:Id.Lit_Chars val:'\t(\n' span_id:88) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:89) (Token id:Id.Lit_Chars val:'\t\techo line1 >>add-lock-not-taken &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\t\tgit add add-lock-not-taken &&\n' span_id:91) (Token id: Id.Lit_Chars val: '\t\tgit commit -m "add add-lock-not-taken" &&\n' span_id: 92 ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --verbose\n' span_id:94) (Token id:Id.Lit_Chars val:'\t)\n' span_id:95) ) } ) (command.ShFunction name: lock_in_another_client body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cli2) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') (/cli2))} spids: [110] ) ] ) (C {(mkdir)} {(-p)} {(DQ ($ Id.VSub_DollarName '$cli2'))}) (C {(test_when_finished)} { (DQ ('p4 client -f -d client2 && rm -rf ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:134) ) ($ Id.VSub_DollarName '$cli2') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:136) ) ) } ) (command.Subshell command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (C {(cd)} {(DQ ($ Id.VSub_DollarName '$cli2'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P4CLIENT) op: assign_op.Equal rhs: {(client2)} spids: [154] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cli) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$cli2'))} spids: [160] ) ] ) (C {(client_view)} {(DQ ('//depot/... //client2/...'))}) (C {(p4)} {(sync)}) (C {(p4)} {(open)} {(file1)}) ] ) ] ) ) ] ) ] ) ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'edit with lock taken' span_id:199))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:203) (Token id:Id.Lit_Chars val:'\tlock_in_another_client &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:205) (Token id: Id.Lit_Chars val: '\ttest_when_finished "cd \\"$cli\\" && p4 sync -f file1" &&\n' span_id: 206 ) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:207) (Token id:Id.Lit_Chars val:'\t(\n' span_id:208) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:209) (Token id:Id.Lit_Chars val:'\t\techo line3 >>file1 &&\n' span_id:210) (Token id:Id.Lit_Chars val:'\t\tgit add file1 &&\n' span_id:211) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "line3 in file1" &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:213) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --verbose\n' span_id:214) (Token id:Id.Lit_Chars val:'\t)\n' span_id:215) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'delete with lock taken' span_id:222))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:226) (Token id:Id.Lit_Chars val:'\tlock_in_another_client &&\n' span_id:227) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:228) (Token id: Id.Lit_Chars val: '\ttest_when_finished "cd \\"$cli\\" && p4 sync -f file1" &&\n' span_id: 229 ) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:230) (Token id:Id.Lit_Chars val:'\t(\n' span_id:231) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:232) (Token id:Id.Lit_Chars val:'\t\tgit rm file1 &&\n' span_id:233) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "delete file1" &&\n' span_id:234) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id: 235 ) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --verbose\n' span_id:236) (Token id:Id.Lit_Chars val:'\t)\n' span_id:237) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'chmod with lock taken' span_id:244))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:248) (Token id:Id.Lit_Chars val:'\tlock_in_another_client &&\n' span_id:249) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:250) (Token id: Id.Lit_Chars val: '\ttest_when_finished "cd \\"$cli\\" && p4 sync -f file1" &&\n' span_id: 251 ) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:252) (Token id:Id.Lit_Chars val:'\t(\n' span_id:253) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:254) (Token id:Id.Lit_Chars val:'\t\tchmod +x file1 &&\n' span_id:255) (Token id:Id.Lit_Chars val:'\t\tgit add file1 &&\n' span_id:256) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "chmod +x file1" &&\n' span_id:257) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:258) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --verbose\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:'copy with lock taken' span_id:267))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:271) (Token id:Id.Lit_Chars val:'\tlock_in_another_client &&\n' span_id:272) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:273) (Token id: Id.Lit_Chars val: '\ttest_when_finished "cd \\"$cli\\" && p4 revert file2 && rm -f file2" &&\n' span_id: 274 ) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:275) (Token id:Id.Lit_Chars val:'\t(\n' span_id:276) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:277) (Token id:Id.Lit_Chars val:'\t\tcp file1 file2 &&\n' span_id:278) (Token id:Id.Lit_Chars val:'\t\tgit add file2 &&\n' span_id:279) (Token id: Id.Lit_Chars val: '\t\tgit commit -m "cp file1 to file2" &&\n' span_id: 280 ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:281) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.detectCopies true &&\n' span_id: 282 ) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --verbose\n' span_id:283) (Token id:Id.Lit_Chars val:'\t)\n' span_id:284) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'move with lock taken' span_id:291))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:295) (Token id:Id.Lit_Chars val:'\tlock_in_another_client &&\n' span_id:296) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:297) (Token id: Id.Lit_Chars val: '\ttest_when_finished "cd \\"$cli\\" && p4 sync file1 && rm -f file2" &&\n' span_id: 298 ) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\t(\n' span_id:300) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:301) (Token id:Id.Lit_Chars val:'\t\tgit mv file1 file3 &&\n' span_id:302) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "mv file1 to file3" &&\n' span_id:303) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id: 304 ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.detectRenames true &&\n' span_id:305) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --verbose\n' span_id:306) (Token id:Id.Lit_Chars val:'\t)\n' span_id:307) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'kill p4d' span_id:314))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:318) (Token id:Id.Lit_Chars val:'\tkill_p4d\n' span_id:319) ) } ) (C {(test_done)}) ] )