(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 failure handling' 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\tp4 client -o | sed "/LineEnd/s/:.*/:unix/" | p4 client -i &&\n'
            span_id: 37
          ) (Token id:Id.Lit_Chars val:'\t\techo line1 >file1 &&\n' span_id:38) 
          (Token id:Id.Lit_Chars val:'\t\tp4 add file1 &&\n' span_id:39) (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "line1 in file1"\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:41)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'conflict on one commit' span_id:48))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:52) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:54) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:55) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\t\tp4 open file1 &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\t\techo line2 >>file1 &&\n' span_id:58) 
          (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "line2 in file1"\n' span_id:59) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\t(\n' span_id:61) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# now this commit should cause a conflict\n'
            span_id: 62
          ) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:63) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config git-p4.skipSubmitEdit true &&\n'
            span_id: 64
          ) (Token id:Id.Lit_Chars val:'\t\techo line3 >>file1 &&\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'\t\tgit add file1 &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "line3 in file1 will conflict" &&\n' span_id:67) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_expect_code 1 git p4 submit >out &&\n'
            span_id: 68
          ) (Token id:Id.Lit_Chars val:'\t\ttest_i18ngrep "No commits applied" out\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:70)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'conflict on second of two commits' span_id:77))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:84) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'\t\tp4 open file1 &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\t\techo line3 >>file1 &&\n' span_id:87) 
          (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "line3 in file1"\n' span_id:88) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:89) (Token id:Id.Lit_Chars val:'\t(\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:92) 
          (Token id:Id.Lit_Chars val:'\t\t# this commit is okay\n' span_id:93) (Token id:Id.Lit_Chars val:'\t\ttest_commit "first_commit_okay" &&\n' span_id:94) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# now this submit should cause a conflict\n'
            span_id: 95
          ) (Token id:Id.Lit_Chars val:'\t\techo line4 >>file1 &&\n' span_id:96) 
          (Token id:Id.Lit_Chars val:'\t\tgit add file1 &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "line4 in file1 will conflict" &&\n' span_id:98) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_expect_code 1 git p4 submit >out &&\n'
            span_id: 99
          ) (Token id:Id.Lit_Chars val:'\t\ttest_i18ngrep "Applied only the commits" out\n' span_id:100) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:101)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'conflict on first of two commits, skip' span_id:108))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:112) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:115) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:116) 
          (Token id:Id.Lit_Chars val:'\t\tp4 open file1 &&\n' span_id:117) (Token id:Id.Lit_Chars val:'\t\techo line4 >>file1 &&\n' span_id:118) 
          (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "line4 in file1"\n' span_id:119) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\t(\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:122) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:123) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# this submit should cause a conflict\n'
            span_id: 124
          ) (Token id:Id.Lit_Chars val:'\t\techo line5 >>file1 &&\n' span_id:125) 
          (Token id:Id.Lit_Chars val:'\t\tgit add file1 &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "line5 in file1 will conflict" &&\n' span_id:127) 
          (Token id:Id.Lit_Chars val:'\t\t# but this commit is okay\n' span_id:128) (Token id:Id.Lit_Chars val:'\t\ttest_commit "okay_commit_after_skip" &&\n' span_id:129) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo s | test_expect_code 1 git p4 submit >out &&\n'
            span_id: 130
          ) (Token id:Id.Lit_Chars val:'\t\ttest_i18ngrep "Applied only the commits" out\n' span_id:131) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:132)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'conflict on first of two commits, quit' span_id:139))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:143) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:144) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:145) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:146) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:147) 
          (Token id:Id.Lit_Chars val:'\t\tp4 open file1 &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\t\techo line7 >>file1 &&\n' span_id:149) 
          (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "line7 in file1"\n' span_id:150) (Token id:Id.Lit_Chars val:'\t) &&\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\tgit config git-p4.skipSubmitEdit true &&\n' span_id:154) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# this submit should cause a conflict\n'
            span_id: 155
          ) (Token id:Id.Lit_Chars val:'\t\techo line8 >>file1 &&\n' span_id:156) 
          (Token id:Id.Lit_Chars val:'\t\tgit add file1 &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "line8 in file1 will conflict" &&\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'\t\t# but this commit is okay\n' span_id:159) (Token id:Id.Lit_Chars val:'\t\ttest_commit "okay_commit_after_quit" &&\n' span_id:160) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo q | test_expect_code 1 git p4 submit >out &&\n'
            span_id: 161
          ) (Token id:Id.Lit_Chars val:'\t\ttest_i18ngrep "No commits applied" out\n' span_id:162) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:163)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'conflict cli and config options' span_id:170))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:174) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:175) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:176) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:177) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:178) 
          (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --conflict=ask &&\n' span_id:179) (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --conflict=skip &&\n' span_id:180) 
          (Token id:Id.Lit_Chars val:'\t\tgit p4 submit --conflict=quit &&\n' span_id:181) (Token id:Id.Lit_Chars val:'\t\ttest_expect_code 2 git p4 submit --conflict=foo &&\n' span_id:182) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_expect_code 2 git p4 submit --conflict &&\n'
            span_id: 183
          ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.conflict foo &&\n' span_id:184) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_expect_code 1 git p4 submit &&\n'
            span_id: 185
          ) (Token id:Id.Lit_Chars val:'\t\tgit config --unset git-p4.conflict &&\n' span_id:186) 
          (Token id:Id.Lit_Chars val:'\t\tgit p4 submit\n' span_id:187) (Token id:Id.Lit_Chars val:'\t)\n' span_id:188)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'conflict on first of two commits, --conflict=skip'
            span_id: 195
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:199) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:200) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:201) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:202) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:203) 
          (Token id:Id.Lit_Chars val:'\t\tp4 open file1 &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\t\techo line9 >>file1 &&\n' span_id:205) 
          (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "line9 in file1"\n' span_id:206) (Token id:Id.Lit_Chars val:'\t) &&\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\tgit config git-p4.skipSubmitEdit true &&\n' span_id:210) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# this submit should cause a conflict\n'
            span_id: 211
          ) (Token id:Id.Lit_Chars val:'\t\techo line10 >>file1 &&\n' span_id:212) 
          (Token id:Id.Lit_Chars val:'\t\tgit add file1 &&\n' span_id:213) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "line10 in file1 will conflict" &&\n' span_id:214) 
          (Token id:Id.Lit_Chars val:'\t\t# but this commit is okay\n' span_id:215) (Token id:Id.Lit_Chars val:'\t\ttest_commit "okay_commit_after_auto_skip" &&\n' span_id:216) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_expect_code 1 git p4 submit --conflict=skip >out &&\n'
            span_id: 217
          ) (Token id:Id.Lit_Chars val:'\t\ttest_i18ngrep "Applied only the commits" out\n' span_id:218) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:219)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'conflict on first of two commits, --conflict=quit'
            span_id: 226
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:230) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:231) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:232) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:233) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:234) 
          (Token id:Id.Lit_Chars val:'\t\tp4 open file1 &&\n' span_id:235) (Token id:Id.Lit_Chars val:'\t\techo line11 >>file1 &&\n' span_id:236) 
          (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "line11 in file1"\n' span_id:237) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:238) (Token id:Id.Lit_Chars val:'\t(\n' span_id:239) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:240) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.skipSubmitEdit true &&\n' span_id:241) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# this submit should cause a conflict\n'
            span_id: 242
          ) (Token id:Id.Lit_Chars val:'\t\techo line12 >>file1 &&\n' span_id:243) 
          (Token id:Id.Lit_Chars val:'\t\tgit add file1 &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "line12 in file1 will conflict" &&\n' span_id:245) 
          (Token id:Id.Lit_Chars val:'\t\t# but this commit is okay\n' span_id:246) (Token id:Id.Lit_Chars val:'\t\ttest_commit "okay_commit_after_auto_quit" &&\n' span_id:247) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_expect_code 1 git p4 submit --conflict=quit >out &&\n'
            span_id: 248
          ) (Token id:Id.Lit_Chars val:'\t\ttest_i18ngrep "No commits applied" out\n' span_id:249) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:250)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cleanup edit p4 populate' span_id:276))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:280) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:281) (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:282) 
          (Token id:Id.Lit_Chars val:'\t\techo text file >text &&\n' span_id:283) (Token id:Id.Lit_Chars val:'\t\tp4 add text &&\n' span_id:284) 
          (Token id:Id.Lit_Chars val:'\t\techo text+x file >text+x &&\n' span_id:285) (Token id:Id.Lit_Chars val:'\t\tchmod 755 text+x &&\n' span_id:286) 
          (Token id:Id.Lit_Chars val:'\t\tp4 add text+x &&\n' span_id:287) (Token id:Id.Lit_Chars val:'\t\tp4 submit -d "populate p4"\n' span_id:288) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:289)
        )
      }
    )
    (command.ShFunction
      name: setup_conflict
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(test_when_finished)} {(cleanup_git)})
                (C {(git)} {(p4)} {(clone)} 
                  {(--dest) (Id.Lit_Equals '=') (DQ ($ Id.VSub_DollarName '$git'))} {(//depot)}
                )
                (C {(test_tick)})
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
                          children: [
                            (C {(cd)} {(DQ ($ Id.VSub_DollarName '$cli'))})
                            (C {(p4)} {(open)} {(file1)})
                            (command.Simple
                              words: [{(echo)} {($ Id.VSub_DollarName '$test_tick')}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:362)
                                  fd: -1
                                  arg_word: {(file1)}
                                )
                              ]
                            )
                            (C {(p4)} {(submit)} {(-d)} 
                              {(DQ ($ Id.VSub_DollarName '$test_tick') (' in file1'))}
                            )
                          ]
                        )
                      ]
                    )
                )
                (C {(test_tick)})
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
                          children: [
                            (C {(cd)} {(DQ ($ Id.VSub_DollarName '$git'))})
                            (C {(git)} {(config)} {(git-p4.skipSubmitEdit)} {(true)})
                            (command.Simple
                              words: [{(echo)} {($ Id.VSub_DollarName '$test_tick')}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:421)
                                  fd: -1
                                  arg_word: {(file1)}
                                )
                              ]
                            )
                            (C {(git)} {(add)} {(file1)})
                          ]
                        )
                      ]
                    )
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cleanup edit after submit fail' span_id:446))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:450) 
          (Token id:Id.Lit_Chars val:'\tsetup_conflict &&\n' span_id:451) (Token id:Id.Lit_Chars val:'\t(\n' span_id:452) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:453) (Token id:Id.Lit_Chars val:'\t\techo another line >>text &&\n' span_id:454) 
          (Token id:Id.Lit_Chars val:'\t\tgit add text &&\n' span_id:455) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "conflict" &&\n' span_id:456) 
          (Token id:Id.Lit_Chars val:'\t\ttest_expect_code 1 git p4 submit\n' span_id:457) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:458) (Token id:Id.Lit_Chars val:'\t(\n' span_id:459) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:460) (Token id:Id.Lit_Chars val:'\t\t# make sure it is not open\n' span_id:461) 
          (Token id:Id.Lit_Chars val:'\t\t! p4 fstat -T action text\n' span_id:462) (Token id:Id.Lit_Chars val:'\t)\n' span_id:463)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cleanup add after submit fail' span_id:470))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:474) 
          (Token id:Id.Lit_Chars val:'\tsetup_conflict &&\n' span_id:475) (Token id:Id.Lit_Chars val:'\t(\n' span_id:476) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:477) (Token id:Id.Lit_Chars val:'\t\techo new file >textnew &&\n' span_id:478) 
          (Token id:Id.Lit_Chars val:'\t\tgit add textnew &&\n' span_id:479) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "conflict" &&\n' span_id:480) 
          (Token id:Id.Lit_Chars val:'\t\ttest_expect_code 1 git p4 submit\n' span_id:481) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:482) (Token id:Id.Lit_Chars val:'\t(\n' span_id:483) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:484) (Token id:Id.Lit_Chars val:'\t\t# make sure it is not there\n' span_id:485) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# and that p4 thinks it is not added\n'
            span_id: 486
          ) (Token id:Id.Lit_Chars val:'\t\t#   P4 returns 0 both for "not there but added" and\n' span_id:487) 
          (Token id:Id.Lit_Chars val:'\t\t#   "not there", so grep.\n' span_id:488) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing textnew &&\n' span_id:489) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tp4 fstat -T action textnew 2>&1 | grep "no such file"\n'
            span_id: 490
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:491)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cleanup delete after submit fail' span_id:498))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:502) 
          (Token id:Id.Lit_Chars val:'\tsetup_conflict &&\n' span_id:503) (Token id:Id.Lit_Chars val:'\t(\n' span_id:504) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:505) (Token id:Id.Lit_Chars val:'\t\tgit rm text+x &&\n' span_id:506) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m "conflict" &&\n' span_id:507) (Token id:Id.Lit_Chars val:'\t\ttest_expect_code 1 git p4 submit\n' span_id:508) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:509) (Token id:Id.Lit_Chars val:'\t(\n' span_id:510) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:511) (Token id:Id.Lit_Chars val:'\t\t# make sure it is there\n' span_id:512) 
          (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file text+x &&\n' span_id:513) (Token id:Id.Lit_Chars val:'\t\t! p4 fstat -T action text+x\n' span_id:514) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:515)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cleanup copy after submit fail' span_id:522))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:526) 
          (Token id:Id.Lit_Chars val:'\tsetup_conflict &&\n' span_id:527) (Token id:Id.Lit_Chars val:'\t(\n' span_id:528) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:529) (Token id:Id.Lit_Chars val:'\t\tcp text text2 &&\n' span_id:530) 
          (Token id:Id.Lit_Chars val:'\t\tgit add text2 &&\n' span_id:531) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "conflict" &&\n' span_id:532) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config git-p4.detectCopies true &&\n'
            span_id: 533
          ) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.detectCopiesHarder true &&\n' span_id:534) 
          (Token id:Id.Lit_Chars val:'\t\t# make sure setup is okay\n' span_id:535) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit diff-tree -r -C --find-copies-harder HEAD | grep text2 | grep C100 &&\n'
            span_id: 536
          ) (Token id:Id.Lit_Chars val:'\t\ttest_expect_code 1 git p4 submit\n' span_id:537) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:538) (Token id:Id.Lit_Chars val:'\t(\n' span_id:539) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:540) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing text2 &&\n' span_id:541) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tp4 fstat -T action text2 2>&1 | grep "no such file"\n'
            span_id: 542
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:543)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cleanup rename after submit fail' span_id:550))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:554) 
          (Token id:Id.Lit_Chars val:'\tsetup_conflict &&\n' span_id:555) (Token id:Id.Lit_Chars val:'\t(\n' span_id:556) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:557) (Token id:Id.Lit_Chars val:'\t\tgit mv text text2 &&\n' span_id:558) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m "conflict" &&\n' span_id:559) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.detectRenames true &&\n' span_id:560) 
          (Token id:Id.Lit_Chars val:'\t\t# make sure setup is okay\n' span_id:561) (Token id:Id.Lit_Chars val:'\t\tgit diff-tree -r -M HEAD | grep text2 | grep R100 &&\n' span_id:562) 
          (Token id:Id.Lit_Chars val:'\t\ttest_expect_code 1 git p4 submit\n' span_id:563) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:564) (Token id:Id.Lit_Chars val:'\t(\n' span_id:565) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:566) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing text2 &&\n' span_id:567) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tp4 fstat -T action text2 2>&1 | grep "no such file"\n'
            span_id: 568
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:569)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cleanup edit after submit cancel' span_id:592))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:596) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:597) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:598) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:599) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:600) 
          (Token id:Id.Lit_Chars val:'\t\techo line >>text &&\n' span_id:601) (Token id:Id.Lit_Chars val:'\t\tgit add text &&\n' span_id:602) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m text &&\n' span_id:603) (Token id:Id.Lit_Chars val:'\t\techo n | test_expect_code 1 git p4 submit &&\n' span_id:604) 
          (Token id:Id.Lit_Chars val:'\t\tgit reset --hard HEAD^\n' span_id:605) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:606) (Token id:Id.Lit_Chars val:'\t(\n' span_id:607) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:608) (Token id:Id.Lit_Chars val:'\t\t! p4 fstat -T action text &&\n' span_id:609) 
          (Token id:Id.Lit_Chars val:'\t\ttest_cmp "$git"/text text\n' span_id:610) (Token id:Id.Lit_Chars val:'\t)\n' span_id:611)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cleanup add after submit cancel' span_id:618))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:622) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:623) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:624) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:625) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:626) 
          (Token id:Id.Lit_Chars val:'\t\techo line >textnew &&\n' span_id:627) (Token id:Id.Lit_Chars val:'\t\tgit add textnew &&\n' span_id:628) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m textnew &&\n' span_id:629) (Token id:Id.Lit_Chars val:'\t\techo n | test_expect_code 1 git p4 submit\n' span_id:630) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:631) (Token id:Id.Lit_Chars val:'\t(\n' span_id:632) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:633) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing textnew &&\n' span_id:634) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tp4 fstat -T action textnew 2>&1 | grep "no such file"\n'
            span_id: 635
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:636)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cleanup delete after submit cancel' span_id:643))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:647) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:648) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:649) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:650) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:651) 
          (Token id:Id.Lit_Chars val:'\t\tgit rm text &&\n' span_id:652) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "rm text" &&\n' span_id:653) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo n | test_expect_code 1 git p4 submit\n'
            span_id: 654
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:655) (Token id:Id.Lit_Chars val:'\t(\n' span_id:656) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:657) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file text &&\n' span_id:658) 
          (Token id:Id.Lit_Chars val:'\t\t! p4 fstat -T action text\n' span_id:659) (Token id:Id.Lit_Chars val:'\t)\n' span_id:660)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cleanup copy after submit cancel' span_id:667))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:671) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:672) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:673) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:674) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:675) 
          (Token id:Id.Lit_Chars val:'\t\tcp text text2 &&\n' span_id:676) (Token id:Id.Lit_Chars val:'\t\tgit add text2 &&\n' span_id:677) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m text2 &&\n' span_id:678) (Token id:Id.Lit_Chars val:'\t\tgit config git-p4.detectCopies true &&\n' span_id:679) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config git-p4.detectCopiesHarder true &&\n'
            span_id: 680
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit diff-tree -r -C --find-copies-harder HEAD | grep text2 | grep C100 &&\n'
            span_id: 681
          ) (Token id:Id.Lit_Chars val:'\t\techo n | test_expect_code 1 git p4 submit\n' span_id:682) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:683) (Token id:Id.Lit_Chars val:'\t(\n' span_id:684) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:685) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing text2 &&\n' span_id:686) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tp4 fstat -T action text2 2>&1 | grep "no such file"\n'
            span_id: 687
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:688)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cleanup rename after submit cancel' span_id:695))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:699) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:700) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:701) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:702) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:703) 
          (Token id:Id.Lit_Chars val:'\t\tgit mv text text2 &&\n' span_id:704) (Token id:Id.Lit_Chars val:'\t\tgit commit -m text2 &&\n' span_id:705) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config git-p4.detectRenames true &&\n'
            span_id: 706
          ) (Token id:Id.Lit_Chars val:'\t\tgit diff-tree -r -M HEAD | grep text2 | grep R100 &&\n' span_id:707) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo n | test_expect_code 1 git p4 submit\n'
            span_id: 708
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:709) (Token id:Id.Lit_Chars val:'\t(\n' span_id:710) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:711) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_missing text2 &&\n' span_id:712) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tp4 fstat -T action text2 2>&1 | grep "no such file"\n'
            span_id: 713
          ) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file text &&\n' span_id:714) 
          (Token id:Id.Lit_Chars val:'\t\t! p4 fstat -T action text\n' span_id:715) (Token id:Id.Lit_Chars val:'\t)\n' span_id:716)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cleanup chmod after submit cancel' span_id:723))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:727) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished cleanup_git &&\n' span_id:728) (Token id:Id.Lit_Chars val:'\tgit p4 clone --dest="$git" //depot &&\n' span_id:729) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:730) (Token id:Id.Lit_Chars val:'\t\tcd "$git" &&\n' span_id:731) 
          (Token id:Id.Lit_Chars val:'\t\ttest_chmod +x text &&\n' span_id:732) (Token id:Id.Lit_Chars val:'\t\ttest_chmod -x text+x &&\n' span_id:733) 
          (Token id:Id.Lit_Chars val:'\t\tgit add text text+x &&\n' span_id:734) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "chmod texts" &&\n' span_id:735) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo n | test_expect_code 1 git p4 submit\n'
            span_id: 736
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:737) (Token id:Id.Lit_Chars val:'\t(\n' span_id:738) 
          (Token id:Id.Lit_Chars val:'\t\tcd "$cli" &&\n' span_id:739) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file text &&\n' span_id:740) 
          (Token id:Id.Lit_Chars val:'\t\t! p4 fstat -T action text &&\n' span_id:741) (Token id:Id.Lit_Chars val:'\t\ttest_path_is_file text+x &&\n' span_id:742) 
          (Token id:Id.Lit_Chars val:'\t\t! p4 fstat -T action text+x &&\n' span_id:743) (Token id:Id.Lit_Chars val:'\t\tls -l text | egrep ^-r-- &&\n' span_id:744) 
          (Token id:Id.Lit_Chars val:'\t\tls -l text+x | egrep ^-r-x\n' span_id:745) (Token id:Id.Lit_Chars val:'\t)\n' span_id:746)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'kill p4d' span_id:753))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:757) 
          (Token id:Id.Lit_Chars val:'\tkill_p4d\n' span_id:758)
        )
      }
    )
    (C {(test_done)})
  ]
)