(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 submit' 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:30))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:34) (Token id:Id.Lit_Chars val:'\t(\n' span_id:35) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\t\techo file1 >file1 &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\t\tp4 add file1 &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "change 1"\n' span_id:39) (Token id:Id.Lit_Chars val:'\t)\n' span_id:40) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'is_cli_file_writeable function' span_id:47))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:51) (Token id:Id.Lit_Chars val:'\t(\n' span_id:52) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\t\techo a >a &&\n' span_id:54) (Token id:Id.Lit_Chars val:'\t\tis_cli_file_writeable a &&\n' span_id:55) (Token id:Id.Lit_Chars val:'\t\t! is_cli_file_writeable file1 &&\n' span_id:56) (Token id:Id.Lit_Chars val:'\t\trm a\n' span_id:57) (Token id:Id.Lit_Chars val:'\t)\n' span_id:58) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submit with no client dir' span_id:65))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:69) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:70) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:71) (Token id:Id.Lit_Chars val:'\t(\n' span_id:72) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\t\techo file2 >file2 &&\n' span_id:74) (Token id:Id.Lit_Chars val:'\t\tgit add file2 &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "git commit 2" &&\n' span_id:76) (Token id:Id.Lit_Chars val:'\t\trm -rf "$cli" &&\n' span_id:77) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id: 78 ) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit\n' span_id:79) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:80) (Token id:Id.Lit_Chars val:'\t(\n' span_id:81) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file file1 &&\n' span_id:83) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file file2\n' span_id:84) (Token id:Id.Lit_Chars val:'\t)\n' span_id:85) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submit --origin' span_id:95))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:99) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:100) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:101) (Token id:Id.Lit_Chars val:'\t(\n' span_id:102) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\t\ttest_commit "file3" &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\t\ttest_commit "file4" &&\n' span_id:105) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id: 106 ) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --origin=HEAD^\n' span_id:107) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:108) (Token id:Id.Lit_Chars val:'\t(\n' span_id:109) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:110) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing "file3.t" &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file "file4.t"\n' span_id:112) (Token id:Id.Lit_Chars val:'\t)\n' span_id:113) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submit --dry-run' span_id:120))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:124) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\t(\n' span_id:127) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\t\ttest_commit "dry-run1" &&\n' span_id:129) (Token id:Id.Lit_Chars val:'\t\ttest_commit "dry-run2" &&\n' span_id:130) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --dry-run >out &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\t\ttest_i18ngrep "Would apply" out\n' span_id:132) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:133) (Token id:Id.Lit_Chars val:'\t(\n' span_id:134) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:135) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing "dry-run1.t" &&\n' span_id:136) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing "dry-run2.t"\n' span_id:137) (Token id:Id.Lit_Chars val:'\t)\n' span_id:138) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submit --dry-run --export-labels' span_id:145))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:149) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:151) (Token id:Id.Lit_Chars val:'\t(\n' span_id:152) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:153) (Token id:Id.Lit_Chars val:'\t\techo dry-run1 >dry-run1 &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\t\tgit add dry-run1 &&\n' span_id:155) (Token id: Id.Lit_Chars val: '\t\tgit commit -m "dry-run1" dry-run1 &&\n' span_id: 156 ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit &&\n' span_id:158) (Token id:Id.Lit_Chars val:'\t\techo dry-run2 >dry-run2 &&\n' span_id:159) (Token id:Id.Lit_Chars val:'\t\tgit add dry-run2 &&\n' span_id:160) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "dry-run2" dry-run2 &&\n' span_id:161) (Token id: Id.Lit_Chars val: '\t\tgit tag -m "dry-run-tag1" dry-run-tag1 HEAD^ &&\n' span_id: 162 ) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --dry-run --export-labels >out &&\n' span_id:163) (Token id: Id.Lit_Chars val: '\t\ttest_i18ngrep "Would create p4 label" out\n' span_id: 164 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:165) (Token id:Id.Lit_Chars val:'\t(\n' span_id:166) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:167) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file "dry-run1" &&\n' span_id:168) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing "dry-run2"\n' span_id:169) (Token id:Id.Lit_Chars val:'\t)\n' span_id:170) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submit with allowSubmit' span_id:177))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:181) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:182) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:183) (Token id:Id.Lit_Chars val:'\t(\n' span_id:184) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:185) (Token id:Id.Lit_Chars val:'\t\ttest_commit "file5" &&\n' span_id:186) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:187) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.allowSubmit "nobranch" &&\n' span_id: 188 ) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git p4 submit &&\n' span_id:189) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.allowSubmit "nobranch,master" &&\n' span_id: 190 ) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit\n' span_id:191) (Token id:Id.Lit_Chars val:'\t)\n' span_id:192) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submit with master branch name from argv' span_id:199))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:203) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:205) (Token id:Id.Lit_Chars val:'\t(\n' span_id:206) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:207) (Token id:Id.Lit_Chars val:'\t\ttest_commit "file6" &&\n' span_id:208) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:209) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git p4 submit nobranch &&\n' span_id: 210 ) (Token id:Id.Lit_Chars val:'\t\tgit branch otherbranch &&\n' span_id:211) (Token id:Id.Lit_Chars val:'\t\tgit reset --hard HEAD^ &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\t\ttest_commit "file7" &&\n' span_id:213) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit otherbranch\n' span_id:214) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:215) (Token id:Id.Lit_Chars val:'\t(\n' span_id:216) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:217) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file "file6.t" &&\n' span_id:218) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing "file7.t"\n' span_id:219) (Token id:Id.Lit_Chars val:'\t)\n' span_id:220) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submit modify' span_id:237))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:241) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:242) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:243) (Token id:Id.Lit_Chars val:'\t(\n' span_id:244) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:245) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id: 246 ) (Token id:Id.Lit_Chars val:'\t\techo line >>file1 &&\n' span_id:247) (Token id:Id.Lit_Chars val:'\t\tgit add file1 &&\n' span_id:248) (Token id:Id.Lit_Chars val:'\t\tgit commit -m file1 &&\n' span_id:249) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit\n' span_id:250) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:251) (Token id:Id.Lit_Chars val:'\t(\n' span_id:252) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:253) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file file1 &&\n' span_id:254) (Token id:Id.Lit_Chars val:'\t\ttest_line_count = 2 file1\n' span_id:255) (Token id:Id.Lit_Chars val:'\t)\n' span_id:256) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submit add' span_id:263))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:267) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:268) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:269) (Token id:Id.Lit_Chars val:'\t(\n' span_id:270) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:271) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id: 272 ) (Token id:Id.Lit_Chars val:'\t\techo file13 >file13 &&\n' span_id:273) (Token id:Id.Lit_Chars val:'\t\tgit add file13 &&\n' span_id:274) (Token id:Id.Lit_Chars val:'\t\tgit commit -m file13 &&\n' span_id:275) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit\n' span_id:276) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:277) (Token id:Id.Lit_Chars val:'\t(\n' span_id:278) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:279) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file file13\n' span_id:280) (Token id:Id.Lit_Chars val:'\t)\n' span_id:281) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submit delete' span_id:288))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:292) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:293) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:294) (Token id:Id.Lit_Chars val:'\t(\n' span_id:295) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:296) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id: 297 ) (Token id:Id.Lit_Chars val:'\t\tgit rm file4.t &&\n' span_id:298) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "delete file4.t" &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit\n' span_id:300) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:301) (Token id:Id.Lit_Chars val:'\t(\n' span_id:302) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:303) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing file4.t\n' span_id:304) (Token id:Id.Lit_Chars val:'\t)\n' span_id:305) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submit copy' span_id:312))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:316) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:317) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:318) (Token id:Id.Lit_Chars val:'\t(\n' span_id:319) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:320) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id: 321 ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.detectCopies true &&\n' span_id:322) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.detectCopiesHarder true &&\n' span_id: 323 ) (Token id:Id.Lit_Chars val:'\t\tcp file5.t file5.ta &&\n' span_id:324) (Token id:Id.Lit_Chars val:'\t\tgit add file5.ta &&\n' span_id:325) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "copy to file5.ta" &&\n' span_id:326) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit\n' span_id:327) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:328) (Token id:Id.Lit_Chars val:'\t(\n' span_id:329) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:330) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file file5.ta &&\n' span_id:331) (Token id:Id.Lit_Chars val:'\t\t! is_cli_file_writeable file5.ta\n' span_id:332) (Token id:Id.Lit_Chars val:'\t)\n' span_id:333) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submit rename' span_id:340))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:344) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:345) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:346) (Token id:Id.Lit_Chars val:'\t(\n' span_id:347) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:348) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id: 349 ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.detectRenames true &&\n' span_id:350) (Token id:Id.Lit_Chars val:'\t\tgit mv file6.t file6.ta &&\n' span_id:351) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "rename file6.t to file6.ta" &&\n' span_id:352) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit\n' span_id:353) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:354) (Token id:Id.Lit_Chars val:'\t(\n' span_id:355) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:356) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing file6.t &&\n' span_id:357) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file file6.ta &&\n' span_id:358) (Token id:Id.Lit_Chars val:'\t\t! is_cli_file_writeable file6.ta\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:'simple one-line description' span_id:379))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:383) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:384) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:385) (Token id:Id.Lit_Chars val:'\t(\n' span_id:386) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:387) (Token id:Id.Lit_Chars val:'\t\techo desc2 >desc2 &&\n' span_id:388) (Token id:Id.Lit_Chars val:'\t\tgit add desc2 &&\n' span_id:389) (Token id:Id.Lit_Chars val:'\t\tcat >msg <<-EOF &&\n' span_id:390) (Token id:Id.Lit_Chars val:'\t\tOne-line description line for desc2.\n' span_id:391) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:392) (Token id:Id.Lit_Chars val:'\t\tgit commit -F - <msg &&\n' span_id:393) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id: 394 ) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit &&\n' span_id:395) (Token id: Id.Lit_Chars val: '\t\tchange=$(p4 -G changes -m 1 //depot/... | \\\n' span_id: 396 ) (Token id:Id.Lit_Chars val:'\t\t\t marshal_dump change) &&\n' span_id:397) (Token id: Id.Lit_Chars val: '\t\t# marshal_dump always adds a newline\n' span_id: 398 ) (Token id: Id.Lit_Chars val: '\t\tp4 -G describe $change | marshal_dump desc | sed \\$d >pmsg &&\n' span_id: 399 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp msg pmsg\n' span_id:400) (Token id:Id.Lit_Chars val:'\t)\n' span_id:401) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'description with odd formatting' span_id:408))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:412) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:413) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:414) (Token id:Id.Lit_Chars val:'\t(\n' span_id:415) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:416) (Token id:Id.Lit_Chars val:'\t\techo desc3 >desc3 &&\n' span_id:417) (Token id:Id.Lit_Chars val:'\t\tgit add desc3 &&\n' span_id:418) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:419) (Token id: Id.Lit_Chars val: '\t\t\tprintf "subject line\\n\\n\\tExtra tab\\nline.\\n\\n" &&\n' span_id: 420 ) (Token id: Id.Lit_Chars val: '\t\t\tprintf "Description:\\n\\tBogus description marker\\n\\n" &&\n' span_id: 421 ) (Token id:Id.Lit_Chars val:'\t\t\t# git commit eats trailing newlines; only use one\n' span_id:422) (Token id: Id.Lit_Chars val: '\t\t\tprintf "Files:\\n\\tBogus descs marker\\n"\n' span_id: 423 ) (Token id:Id.Lit_Chars val:'\t\t) >msg &&\n' span_id:424) (Token id:Id.Lit_Chars val:'\t\tgit commit -F - <msg &&\n' span_id:425) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:426) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit &&\n' span_id:427) (Token id:Id.Lit_Chars val:'\t\tchange=$(p4 -G changes -m 1 //depot/... | \\\n' span_id:428) (Token id:Id.Lit_Chars val:'\t\t\t marshal_dump change) &&\n' span_id:429) (Token id:Id.Lit_Chars val:'\t\t# marshal_dump always adds a newline\n' span_id:430) (Token id: Id.Lit_Chars val: '\t\tp4 -G describe $change | marshal_dump desc | sed \\$d >pmsg &&\n' span_id: 431 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp msg pmsg\n' span_id:432) (Token id:Id.Lit_Chars val:'\t)\n' span_id:433) ) } ) (command.ShFunction name: make_job body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [444] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tab) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:454) command_list: (command.CommandList children: [ (C {(printf)} { (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:457) ) (t) } ) ] ) ) ) } spids: [452] ) ] ) (command.Pipeline children: [ (C {(p4)} {(job)} {(-o)}) (C {(sed)} {(-e)} {(DQ ('/^Job:/s/.*/Job: ') ($ Id.VSub_DollarName '$name') (/))} {(-e)} {(DQ ('/^Description/{ n; s/.*/') ($ Id.VSub_DollarName '$tab') (' job text/; }'))} ) (C {(p4)} {(job)} {(-i)}) ] negated: F ) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'description with Jobs section at end' span_id:511))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:515) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:516) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:517) (Token id:Id.Lit_Chars val:'\t(\n' span_id:518) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:519) (Token id:Id.Lit_Chars val:'\t\techo desc4 >desc4 &&\n' span_id:520) (Token id:Id.Lit_Chars val:'\t\tgit add desc4 &&\n' span_id:521) (Token id:Id.Lit_Chars val:'\t\techo 6060842 >jobname &&\n' span_id:522) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:523) (Token id: Id.Lit_Chars val: '\t\t\tprintf "subject line\\n\\n\\tExtra tab\\nline.\\n\\n" &&\n' span_id: 524 ) (Token id:Id.Lit_Chars val:'\t\t\tprintf "Files:\\n\\tBogus files marker\\n" &&\n' span_id:525) (Token id:Id.Lit_Chars val:'\t\t\tprintf "Junk: 3164175\\n" &&\n' span_id:526) (Token id:Id.Lit_Chars val:'\t\t\tprintf "Jobs: $(cat jobname)\\n"\n' span_id:527) (Token id:Id.Lit_Chars val:'\t\t) >msg &&\n' span_id:528) (Token id:Id.Lit_Chars val:'\t\tgit commit -F - <msg &&\n' span_id:529) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id: 530 ) (Token id:Id.Lit_Chars val:'\t\t# build a job\n' span_id:531) (Token id:Id.Lit_Chars val:'\t\tmake_job $(cat jobname) &&\n' span_id:532) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit &&\n' span_id:533) (Token id: Id.Lit_Chars val: '\t\tchange=$(p4 -G changes -m 1 //depot/... | \\\n' span_id: 534 ) (Token id:Id.Lit_Chars val:'\t\t\t marshal_dump change) &&\n' span_id:535) (Token id: Id.Lit_Chars val: '\t\t# marshal_dump always adds a newline\n' span_id: 536 ) (Token id: Id.Lit_Chars val: '\t\tp4 -G describe $change | marshal_dump desc | sed \\$d >pmsg &&\n' span_id: 537 ) (Token id:Id.Lit_Chars val:'\t\t# make sure Jobs line and all following is gone\n' span_id:538) (Token id:Id.Lit_Chars val:'\t\tsed "/^Jobs:/,\\$d" msg >jmsg &&\n' span_id:539) (Token id:Id.Lit_Chars val:'\t\ttest_cmp jmsg pmsg &&\n' span_id:540) (Token id:Id.Lit_Chars val:'\t\t# make sure p4 knows about job\n' span_id:541) (Token id:Id.Lit_Chars val:'\t\tp4 -G describe $change | marshal_dump job0 >job0 &&\n' span_id:542) (Token id:Id.Lit_Chars val:'\t\ttest_cmp jobname job0\n' span_id:543) (Token id:Id.Lit_Chars val:'\t)\n' span_id:544) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'description with Jobs and values on separate lines' span_id: 551 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:555) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:556) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:557) (Token id:Id.Lit_Chars val:'\t(\n' span_id:558) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:559) (Token id:Id.Lit_Chars val:'\t\techo desc5 >desc5 &&\n' span_id:560) (Token id:Id.Lit_Chars val:'\t\tgit add desc5 &&\n' span_id:561) (Token id:Id.Lit_Chars val:'\t\techo PROJ-6060842 >jobname1 &&\n' span_id:562) (Token id:Id.Lit_Chars val:'\t\techo PROJ-6060847 >jobname2 &&\n' span_id:563) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:564) (Token id: Id.Lit_Chars val: '\t\t\tprintf "subject line\\n\\n\\tExtra tab\\nline.\\n\\n" &&\n' span_id: 565 ) (Token id:Id.Lit_Chars val:'\t\t\tprintf "Files:\\n\\tBogus files marker\\n" &&\n' span_id:566) (Token id:Id.Lit_Chars val:'\t\t\tprintf "Junk: 3164175\\n" &&\n' span_id:567) (Token id:Id.Lit_Chars val:'\t\t\tprintf "Jobs:\\n" &&\n' span_id:568) (Token id: Id.Lit_Chars val: '\t\t\tprintf "\\t$(cat jobname1)\\n" &&\n' span_id: 569 ) (Token id:Id.Lit_Chars val:'\t\t\tprintf "\\t$(cat jobname2)\\n"\n' span_id:570) (Token id:Id.Lit_Chars val:'\t\t) >msg &&\n' span_id:571) (Token id:Id.Lit_Chars val:'\t\tgit commit -F - <msg &&\n' span_id:572) (Token id: Id.Lit_Chars val: '\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id: 573 ) (Token id:Id.Lit_Chars val:'\t\t# build two jobs\n' span_id:574) (Token id:Id.Lit_Chars val:'\t\tmake_job $(cat jobname1) &&\n' span_id:575) (Token id:Id.Lit_Chars val:'\t\tmake_job $(cat jobname2) &&\n' span_id:576) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit &&\n' span_id:577) (Token id:Id.Lit_Chars val:'\t\tchange=$(p4 -G changes -m 1 //depot/... | \\\n' span_id:578) (Token id:Id.Lit_Chars val:'\t\t\t marshal_dump change) &&\n' span_id:579) (Token id:Id.Lit_Chars val:'\t\t# marshal_dump always adds a newline\n' span_id:580) (Token id: Id.Lit_Chars val: '\t\tp4 -G describe $change | marshal_dump desc | sed \\$d >pmsg &&\n' span_id: 581 ) (Token id:Id.Lit_Chars val:'\t\t# make sure Jobs line and all following is gone\n' span_id:582) (Token id:Id.Lit_Chars val:'\t\tsed "/^Jobs:/,\\$d" msg >jmsg &&\n' span_id:583) (Token id:Id.Lit_Chars val:'\t\ttest_cmp jmsg pmsg &&\n' span_id:584) (Token id: Id.Lit_Chars val: '\t\t# make sure p4 knows about the two jobs\n' span_id: 585 ) (Token id:Id.Lit_Chars val:'\t\tp4 -G describe $change >change &&\n' span_id:586) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:587) (Token id:Id.Lit_Chars val:'\t\t\tmarshal_dump job0 <change &&\n' span_id:588) (Token id:Id.Lit_Chars val:'\t\t\tmarshal_dump job1 <change\n' span_id:589) (Token id:Id.Lit_Chars val:'\t\t) | sort >jobs &&\n' span_id:590) (Token id: Id.Lit_Chars val: '\t\tcat jobname1 jobname2 | sort >expected &&\n' span_id: 591 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected jobs\n' span_id:592) (Token id:Id.Lit_Chars val:'\t)\n' span_id:593) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'description with Jobs section and bogus following text' span_id: 600 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:604) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:605) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:606) (Token id:Id.Lit_Chars val:'\t(\n' span_id:607) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:608) (Token id:Id.Lit_Chars val:'\t\techo desc6 >desc6 &&\n' span_id:609) (Token id:Id.Lit_Chars val:'\t\tgit add desc6 &&\n' span_id:610) (Token id:Id.Lit_Chars val:'\t\techo 6060843 >jobname &&\n' span_id:611) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:612) (Token id: Id.Lit_Chars val: '\t\t\tprintf "subject line\\n\\n\\tExtra tab\\nline.\\n\\n" &&\n' span_id: 613 ) (Token id:Id.Lit_Chars val:'\t\t\tprintf "Files:\\n\\tBogus files marker\\n" &&\n' span_id:614) (Token id:Id.Lit_Chars val:'\t\t\tprintf "Junk: 3164175\\n" &&\n' span_id:615) (Token id:Id.Lit_Chars val:'\t\t\tprintf "Jobs: $(cat jobname)\\n" &&\n' span_id:616) (Token id:Id.Lit_Chars val:'\t\t\tprintf "MoreJunk: 3711\\n"\n' span_id:617) (Token id:Id.Lit_Chars val:'\t\t) >msg &&\n' span_id:618) (Token id:Id.Lit_Chars val:'\t\tgit commit -F - <msg &&\n' span_id:619) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:620) (Token id:Id.Lit_Chars val:'\t\t# build a job\n' span_id:621) (Token id:Id.Lit_Chars val:'\t\tmake_job $(cat jobname) &&\n' span_id:622) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git p4 submit 2>err &&\n' span_id: 623 ) (Token id:Id.Lit_Chars val:'\t\ttest_i18ngrep "Unknown field name" err\n' span_id:624) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:625) (Token id:Id.Lit_Chars val:'\t(\n' span_id:626) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:627) (Token id:Id.Lit_Chars val:'\t\tp4 revert desc6 &&\n' span_id:628) (Token id:Id.Lit_Chars val:'\t\trm -f desc6\n' span_id:629) (Token id:Id.Lit_Chars val:'\t)\n' span_id:630) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submit --prepare-p4-only' span_id:637))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:641) (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:642) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:643) (Token id:Id.Lit_Chars val:'\t(\n' span_id:644) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:645) (Token id: Id.Lit_Chars val: '\t\techo prep-only-add >prep-only-add &&\n' span_id: 646 ) (Token id:Id.Lit_Chars val:'\t\tgit add prep-only-add &&\n' span_id:647) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "prep only add" &&\n' span_id:648) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --prepare-p4-only >out &&\n' span_id:649) (Token id: Id.Lit_Chars val: '\t\ttest_i18ngrep "prepared for submission" out &&\n' span_id: 650 ) (Token id:Id.Lit_Chars val:'\t\ttest_i18ngrep "must be deleted" out &&\n' span_id:651) (Token id: Id.Lit_Chars val: '\t\ttest_i18ngrep ! "everything below this line is just the diff" out\n' span_id: 652 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:653) (Token id:Id.Lit_Chars val:'\t(\n' span_id:654) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:655) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file prep-only-add &&\n' span_id:656) (Token id: Id.Lit_Chars val: '\t\tp4 fstat -T action prep-only-add | grep -w add\n' span_id: 657 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:658) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'kill p4d' span_id:665))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:669) (Token id:Id.Lit_Chars val:'\tkill_p4d\n' span_id:670) ) } ) (C {(test_done)}) ] )