(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'git p4 submit failure handling'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./lib-git-p4.sh)})
    (C {(test_expect_success)} {(SQ <'start p4d'>)} {(SQ <'\n'> <'\tstart_p4d\n'>)})
    (C {(test_expect_success)} {(SQ <'init depot'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> 
          <'\t\tp4 client -o | sed "/LineEnd/s/:.*/:unix/" | p4 client -i &&\n'> <'\t\techo line1 >file1 &&\n'> <'\t\tp4 add file1 &&\n'> <'\t\tp4 submit -d "line1 in file1"\n'> 
          <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'conflict on one commit'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished cleanup_git &&\n'> 
          <'\tgit p4 clone --dest="$git" //depot &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> <'\t\tp4 open file1 &&\n'> <'\t\techo line2 >>file1 &&\n'> 
          <'\t\tp4 submit -d "line2 in file1"\n'> <'\t) &&\n'> <'\t(\n'> <'\t\t# now this commit should cause a conflict\n'> <'\t\tcd "$git" &&\n'> 
          <'\t\tgit config git-p4.skipSubmitEdit true &&\n'> <'\t\techo line3 >>file1 &&\n'> <'\t\tgit add file1 &&\n'> 
          <'\t\tgit commit -m "line3 in file1 will conflict" &&\n'> <'\t\ttest_expect_code 1 git p4 submit >out &&\n'> <'\t\ttest_i18ngrep "No commits applied" out\n'> 
          <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'conflict on second of two commits'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished cleanup_git &&\n'> 
          <'\tgit p4 clone --dest="$git" //depot &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> <'\t\tp4 open file1 &&\n'> <'\t\techo line3 >>file1 &&\n'> 
          <'\t\tp4 submit -d "line3 in file1"\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> <'\t\tgit config git-p4.skipSubmitEdit true &&\n'> 
          <'\t\t# this commit is okay\n'> <'\t\ttest_commit "first_commit_okay" &&\n'> <'\t\t# now this submit should cause a conflict\n'> 
          <'\t\techo line4 >>file1 &&\n'> <'\t\tgit add file1 &&\n'> <'\t\tgit commit -m "line4 in file1 will conflict" &&\n'> 
          <'\t\ttest_expect_code 1 git p4 submit >out &&\n'> <'\t\ttest_i18ngrep "Applied only the commits" out\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'conflict on first of two commits, skip'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished cleanup_git &&\n'> 
          <'\tgit p4 clone --dest="$git" //depot &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> <'\t\tp4 open file1 &&\n'> <'\t\techo line4 >>file1 &&\n'> 
          <'\t\tp4 submit -d "line4 in file1"\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> <'\t\tgit config git-p4.skipSubmitEdit true &&\n'> 
          <'\t\t# this submit should cause a conflict\n'> <'\t\techo line5 >>file1 &&\n'> <'\t\tgit add file1 &&\n'> 
          <'\t\tgit commit -m "line5 in file1 will conflict" &&\n'> <'\t\t# but this commit is okay\n'> <'\t\ttest_commit "okay_commit_after_skip" &&\n'> 
          <'\t\techo s | test_expect_code 1 git p4 submit >out &&\n'> <'\t\ttest_i18ngrep "Applied only the commits" out\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'conflict on first of two commits, quit'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished cleanup_git &&\n'> 
          <'\tgit p4 clone --dest="$git" //depot &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> <'\t\tp4 open file1 &&\n'> <'\t\techo line7 >>file1 &&\n'> 
          <'\t\tp4 submit -d "line7 in file1"\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> <'\t\tgit config git-p4.skipSubmitEdit true &&\n'> 
          <'\t\t# this submit should cause a conflict\n'> <'\t\techo line8 >>file1 &&\n'> <'\t\tgit add file1 &&\n'> 
          <'\t\tgit commit -m "line8 in file1 will conflict" &&\n'> <'\t\t# but this commit is okay\n'> <'\t\ttest_commit "okay_commit_after_quit" &&\n'> 
          <'\t\techo q | test_expect_code 1 git p4 submit >out &&\n'> <'\t\ttest_i18ngrep "No commits applied" out\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'conflict cli and config options'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished cleanup_git &&\n'> 
          <'\tgit p4 clone --dest="$git" //depot &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> <'\t\tgit p4 submit --conflict=ask &&\n'> 
          <'\t\tgit p4 submit --conflict=skip &&\n'> <'\t\tgit p4 submit --conflict=quit &&\n'> 
          <'\t\ttest_expect_code 2 git p4 submit --conflict=foo &&\n'> <'\t\ttest_expect_code 2 git p4 submit --conflict &&\n'> <'\t\tgit config git-p4.conflict foo &&\n'> 
          <'\t\ttest_expect_code 1 git p4 submit &&\n'> <'\t\tgit config --unset git-p4.conflict &&\n'> <'\t\tgit p4 submit\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'conflict on first of two commits, --conflict=skip'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished cleanup_git &&\n'> 
          <'\tgit p4 clone --dest="$git" //depot &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> <'\t\tp4 open file1 &&\n'> <'\t\techo line9 >>file1 &&\n'> 
          <'\t\tp4 submit -d "line9 in file1"\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> <'\t\tgit config git-p4.skipSubmitEdit true &&\n'> 
          <'\t\t# this submit should cause a conflict\n'> <'\t\techo line10 >>file1 &&\n'> <'\t\tgit add file1 &&\n'> 
          <'\t\tgit commit -m "line10 in file1 will conflict" &&\n'> <'\t\t# but this commit is okay\n'> <'\t\ttest_commit "okay_commit_after_auto_skip" &&\n'> 
          <'\t\ttest_expect_code 1 git p4 submit --conflict=skip >out &&\n'> <'\t\ttest_i18ngrep "Applied only the commits" out\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'conflict on first of two commits, --conflict=quit'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished cleanup_git &&\n'> 
          <'\tgit p4 clone --dest="$git" //depot &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> <'\t\tp4 open file1 &&\n'> <'\t\techo line11 >>file1 &&\n'> 
          <'\t\tp4 submit -d "line11 in file1"\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> <'\t\tgit config git-p4.skipSubmitEdit true &&\n'> 
          <'\t\t# this submit should cause a conflict\n'> <'\t\techo line12 >>file1 &&\n'> <'\t\tgit add file1 &&\n'> 
          <'\t\tgit commit -m "line12 in file1 will conflict" &&\n'> <'\t\t# but this commit is okay\n'> <'\t\ttest_commit "okay_commit_after_auto_quit" &&\n'> 
          <'\t\ttest_expect_code 1 git p4 submit --conflict=quit >out &&\n'> <'\t\ttest_i18ngrep "No commits applied" out\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cleanup edit p4 populate'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> <'\t\techo text file >text &&\n'> 
          <'\t\tp4 add text &&\n'> <'\t\techo text+x file >text+x &&\n'> <'\t\tchmod 755 text+x &&\n'> <'\t\tp4 add text+x &&\n'> 
          <'\t\tp4 submit -d "populate p4"\n'> <'\t)\n'>
        )
      }
    )
    (FuncDef
      name: setup_conflict
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {(test_when_finished)} {(cleanup_git)})
                (AndOr
                  children: [
                    (C {(git)} {(p4)} {(clone)} {(--dest) (Lit_Other '=') (DQ ($ VSub_Name '$git'))} 
                      {(//depot)}
                    )
                    (AndOr
                      children: [
                        (C {(test_tick)})
                        (AndOr
                          children: [
                            (Subshell
                              child: 
                                (AndOr
                                  children: [
                                    (C {(cd)} {(DQ ($ VSub_Name '$cli'))})
                                    (AndOr
                                      children: [
                                        (C {(p4)} {(open)} {(file1)})
                                        (AndOr
                                          children: [
                                            (SimpleCommand
                                              words: [{(echo)} {($ VSub_Name '$test_tick')}]
                                              redirects: [
                                                (Redir
                                                  op_id: Redir_DGreat
                                                  fd: -1
                                                  arg_word: {(file1)}
                                                  spids: [362]
                                                )
                                              ]
                                            )
                                            (C {(p4)} {(submit)} {(-d)} 
                                              {(DQ ($ VSub_Name '$test_tick') (' in file1'))}
                                            )
                                          ]
                                          op_id: Op_DAmp
                                        )
                                      ]
                                      op_id: Op_DAmp
                                    )
                                  ]
                                  op_id: Op_DAmp
                                )
                              spids: [337 380]
                            )
                            (AndOr
                              children: [
                                (C {(test_tick)})
                                (Subshell
                                  child: 
                                    (AndOr
                                      children: [
                                        (C {(cd)} {(DQ ($ VSub_Name '$git'))})
                                        (AndOr
                                          children: [
                                            (C {(git)} {(config)} {(git-p4.skipSubmitEdit)} {(true)})
                                            (AndOr
                                              children: [
                                                (SimpleCommand
                                                  words: [{(echo)} {($ VSub_Name '$test_tick')}]
                                                  redirects: [
                                                    (Redir
                                                      op_id: Redir_DGreat
                                                      fd: -1
                                                      arg_word: {(file1)}
                                                      spids: [421]
                                                    )
                                                  ]
                                                )
                                                (C {(git)} {(add)} {(file1)})
                                              ]
                                              op_id: Op_DAmp
                                            )
                                          ]
                                          op_id: Op_DAmp
                                        )
                                      ]
                                      op_id: Op_DAmp
                                    )
                                  spids: [390 438]
                                )
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [297]
        )
      spids: [293 296]
    )
    (C {(test_expect_success)} {(SQ <'cleanup edit after submit fail'>)} 
      {
        (SQ <'\n'> <'\tsetup_conflict &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> 
          <'\t\techo another line >>text &&\n'> <'\t\tgit add text &&\n'> <'\t\tgit commit -m "conflict" &&\n'> 
          <'\t\ttest_expect_code 1 git p4 submit\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> <'\t\t# make sure it is not open\n'> 
          <'\t\t! p4 fstat -T action text\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cleanup add after submit fail'>)} 
      {
        (SQ <'\n'> <'\tsetup_conflict &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> 
          <'\t\techo new file >textnew &&\n'> <'\t\tgit add textnew &&\n'> <'\t\tgit commit -m "conflict" &&\n'> 
          <'\t\ttest_expect_code 1 git p4 submit\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> <'\t\t# make sure it is not there\n'> 
          <'\t\t# and that p4 thinks it is not added\n'> <'\t\t#   P4 returns 0 both for "not there but added" and\n'> <'\t\t#   "not there", so grep.\n'> 
          <'\t\ttest_path_is_missing textnew &&\n'> <'\t\tp4 fstat -T action textnew 2>&1 | grep "no such file"\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cleanup delete after submit fail'>)} 
      {
        (SQ <'\n'> <'\tsetup_conflict &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> <'\t\tgit rm text+x &&\n'> 
          <'\t\tgit commit -m "conflict" &&\n'> <'\t\ttest_expect_code 1 git p4 submit\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> 
          <'\t\t# make sure it is there\n'> <'\t\ttest_path_is_file text+x &&\n'> <'\t\t! p4 fstat -T action text+x\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cleanup copy after submit fail'>)} 
      {
        (SQ <'\n'> <'\tsetup_conflict &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> <'\t\tcp text text2 &&\n'> 
          <'\t\tgit add text2 &&\n'> <'\t\tgit commit -m "conflict" &&\n'> <'\t\tgit config git-p4.detectCopies true &&\n'> 
          <'\t\tgit config git-p4.detectCopiesHarder true &&\n'> <'\t\t# make sure setup is okay\n'> 
          <'\t\tgit diff-tree -r -C --find-copies-harder HEAD | grep text2 | grep C100 &&\n'> <'\t\ttest_expect_code 1 git p4 submit\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> 
          <'\t\ttest_path_is_missing text2 &&\n'> <'\t\tp4 fstat -T action text2 2>&1 | grep "no such file"\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cleanup rename after submit fail'>)} 
      {
        (SQ <'\n'> <'\tsetup_conflict &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> 
          <'\t\tgit mv text text2 &&\n'> <'\t\tgit commit -m "conflict" &&\n'> <'\t\tgit config git-p4.detectRenames true &&\n'> 
          <'\t\t# make sure setup is okay\n'> <'\t\tgit diff-tree -r -M HEAD | grep text2 | grep R100 &&\n'> 
          <'\t\ttest_expect_code 1 git p4 submit\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> <'\t\ttest_path_is_missing text2 &&\n'> 
          <'\t\tp4 fstat -T action text2 2>&1 | grep "no such file"\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cleanup edit after submit cancel'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished cleanup_git &&\n'> 
          <'\tgit p4 clone --dest="$git" //depot &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> <'\t\techo line >>text &&\n'> <'\t\tgit add text &&\n'> 
          <'\t\tgit commit -m text &&\n'> <'\t\techo n | test_expect_code 1 git p4 submit &&\n'> <'\t\tgit reset --hard HEAD^\n'> <'\t) &&\n'> 
          <'\t(\n'> <'\t\tcd "$cli" &&\n'> <'\t\t! p4 fstat -T action text &&\n'> <'\t\ttest_cmp "$git"/text text\n'> 
          <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cleanup add after submit cancel'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished cleanup_git &&\n'> 
          <'\tgit p4 clone --dest="$git" //depot &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> <'\t\techo line >textnew &&\n'> <'\t\tgit add textnew &&\n'> 
          <'\t\tgit commit -m textnew &&\n'> <'\t\techo n | test_expect_code 1 git p4 submit\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> 
          <'\t\ttest_path_is_missing textnew &&\n'> <'\t\tp4 fstat -T action textnew 2>&1 | grep "no such file"\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cleanup delete after submit cancel'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished cleanup_git &&\n'> 
          <'\tgit p4 clone --dest="$git" //depot &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> <'\t\tgit rm text &&\n'> <'\t\tgit commit -m "rm text" &&\n'> 
          <'\t\techo n | test_expect_code 1 git p4 submit\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> <'\t\ttest_path_is_file text &&\n'> 
          <'\t\t! p4 fstat -T action text\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cleanup copy after submit cancel'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished cleanup_git &&\n'> 
          <'\tgit p4 clone --dest="$git" //depot &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> <'\t\tcp text text2 &&\n'> <'\t\tgit add text2 &&\n'> 
          <'\t\tgit commit -m text2 &&\n'> <'\t\tgit config git-p4.detectCopies true &&\n'> 
          <'\t\tgit config git-p4.detectCopiesHarder true &&\n'> <'\t\tgit diff-tree -r -C --find-copies-harder HEAD | grep text2 | grep C100 &&\n'> 
          <'\t\techo n | test_expect_code 1 git p4 submit\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> <'\t\ttest_path_is_missing text2 &&\n'> 
          <'\t\tp4 fstat -T action text2 2>&1 | grep "no such file"\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cleanup rename after submit cancel'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished cleanup_git &&\n'> 
          <'\tgit p4 clone --dest="$git" //depot &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> <'\t\tgit mv text text2 &&\n'> <'\t\tgit commit -m text2 &&\n'> 
          <'\t\tgit config git-p4.detectRenames true &&\n'> <'\t\tgit diff-tree -r -M HEAD | grep text2 | grep R100 &&\n'> 
          <'\t\techo n | test_expect_code 1 git p4 submit\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> <'\t\ttest_path_is_missing text2 &&\n'> 
          <'\t\tp4 fstat -T action text2 2>&1 | grep "no such file"\n'> <'\t\ttest_path_is_file text &&\n'> <'\t\t! p4 fstat -T action text\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'cleanup chmod after submit cancel'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished cleanup_git &&\n'> 
          <'\tgit p4 clone --dest="$git" //depot &&\n'> <'\t(\n'> <'\t\tcd "$git" &&\n'> <'\t\ttest_chmod +x text &&\n'> <'\t\ttest_chmod -x text+x &&\n'> 
          <'\t\tgit add text text+x &&\n'> <'\t\tgit commit -m "chmod texts" &&\n'> <'\t\techo n | test_expect_code 1 git p4 submit\n'> 
          <'\t) &&\n'> <'\t(\n'> <'\t\tcd "$cli" &&\n'> <'\t\ttest_path_is_file text &&\n'> 
          <'\t\t! p4 fstat -T action text &&\n'> <'\t\ttest_path_is_file text+x &&\n'> <'\t\t! p4 fstat -T action text+x &&\n'> 
          <'\t\tls -l text | egrep ^-r-- &&\n'> <'\t\tls -l text+x | egrep ^-r-x\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'kill p4d'>)} {(SQ <'\n'> <'\tkill_p4d\n'>)})
    (C {(test_done)})
  ]
)