Re: [PATCHv2 04/12] git p4: move conflict prompt into run, add [q]uit input
- From
Luke Diamand <luke@diamand.org>
- Date
- Sep 15, 2012, 21:56 UTC
- Message-ID
- <5054F975.6090608@diamand.org>
- In-Reply-To
- <1347221773-12773-5-git-send-email-pw@padd.com>
I'll need to supply a followup patch to ensure that a config option can override the prompt.
Ack.
On 09/09/12 21:16, Pete Wyckoff wrote:
Show 145 quoted lines
> When applying a commit to the p4 workspace fails, a prompt
> asks what to do next. This belongs up in run() instead
> of in applyCommit(), where run() can notice, for instance,
> that the prompt is unnecessary because this is the last commit.
>
> Offer two options about how to continue at conflict: [s]kip or
> [q]uit. Having an explicit "quit" option gives git p4 a chance
> to clean up, show the applied-commit summary, and do tag export.
>
> Signed-off-by: Pete Wyckoff<pw@padd.com>
> ---
> git-p4.py | 41 +++++++++++++++++++++++++++++------------
> t/t9815-git-p4-submit-fail.sh | 31 +++++++++++++++++++++++++++----
> 2 files changed, 56 insertions(+), 16 deletions(-)
>
> diff --git a/git-p4.py b/git-p4.py
> index e08fea1..479f1fc 100755
> --- a/git-p4.py
> +++ b/git-p4.py
> @@ -1198,17 +1198,11 @@ class P4Submit(Command, P4UserMap):
> patch_succeeded = True
>
> if not patch_succeeded:
> - print "What do you want to do?"
> - response = "x"
> - while response != "s":
> - response = raw_input("[s]kip this patch ")
> - if response == "s":
> - print "Skipping! Good luck with the next patches..."
> - for f in editedFiles:
> - p4_revert(f)
> - for f in filesToAdd:
> - os.remove(f)
> - return False
> + for f in editedFiles:
> + p4_revert(f)
> + for f in filesToAdd:
> + os.remove(f)
> + return False
>
> system(applyPatchCmd)
>
> @@ -1475,11 +1469,34 @@ class P4Submit(Command, P4UserMap):
> if gitConfig("git-p4.detectCopiesHarder", "--bool") == "true":
> self.diffOpts += " --find-copies-harder"
>
> + #
> + # Apply the commits, one at a time. On failure, ask if should
> + # continue to try the rest of the patches, or quit.
> + #
> applied = []
> - for commit in commits:
> + last = len(commits) - 1
> + for i, commit in enumerate(commits):
> ok = self.applyCommit(commit)
> if ok:
> applied.append(commit)
> + else:
> + if i< last:
> + quit = False
> + while True:
> + print "What do you want to do?"
> + response = raw_input("[s]kip this commit but apply"
> + " the rest, or [q]uit? ")
> + if not response:
> + continue
> + if response[0] == "s":
> + print "Skipping this commit, but applying the rest"
> + break
> + if response[0] == "q":
> + print "Quitting"
> + quit = True
> + break
> + if quit:
> + break
>
> chdir(self.oldWorkingDirectory)
>
> diff --git a/t/t9815-git-p4-submit-fail.sh b/t/t9815-git-p4-submit-fail.sh
> index 5c36714..397b3e8 100755
> --- a/t/t9815-git-p4-submit-fail.sh
> +++ b/t/t9815-git-p4-submit-fail.sh
> @@ -18,7 +18,7 @@ test_expect_success 'init depot' '
> )
> '
>
> -test_expect_success 'conflict on one commit, skip' '
> +test_expect_success 'conflict on one commit' '
> test_when_finished cleanup_git&&
> git p4 clone --dest="$git" //depot&&
> (
> @@ -34,12 +34,12 @@ test_expect_success 'conflict on one commit, skip' '
> echo line3>>file1&&
> git add file1&&
> git commit -m "line3 in file1 will conflict"&&
> - echo s | test_expect_code 1 git p4 submit>out&&
> + test_expect_code 1 git p4 submit>out&&
> test_i18ngrep "No commits applied" out
> )
> '
>
> -test_expect_success 'conflict on second of two commits, skip' '
> +test_expect_success 'conflict on second of two commits' '
> test_when_finished cleanup_git&&
> git p4 clone --dest="$git" //depot&&
> (
> @@ -57,7 +57,7 @@ test_expect_success 'conflict on second of two commits, skip' '
> echo line4>>file1&&
> git add file1&&
> git commit -m "line4 in file1 will conflict"&&
> - echo s | test_expect_code 1 git p4 submit>out&&
> + test_expect_code 1 git p4 submit>out&&
> test_i18ngrep "Applied only the commits" out
> )
> '
> @@ -85,6 +85,29 @@ test_expect_success 'conflict on first of two commits, skip' '
> )
> '
>
> +test_expect_success 'conflict on first of two commits, quit' '
> + test_when_finished cleanup_git&&
> + git p4 clone --dest="$git" //depot&&
> + (
> + cd "$cli"&&
> + p4 open file1&&
> + echo line7>>file1&&
> + p4 submit -d "line7 in file1"
> + )&&
> + (
> + cd "$git"&&
> + git config git-p4.skipSubmitEdit true&&
> + # this submit should cause a conflict
> + echo line8>>file1&&
> + git add file1&&
> + git commit -m "line8 in file1 will conflict"&&
> + # but this commit is okay
> + test_commit "okay_commit_after_quit"&&
> + echo q | test_expect_code 1 git p4 submit>out&&
> + test_i18ngrep "No commits applied" out
> + )
> +'
> +
> test_expect_success 'kill p4d' '
> kill_p4d
> '