git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ramkumar Ramachandra <artagnon@gmail.com>
To: Git List <git@vger.kernel.org>
Cc: Jonathan Nieder <jrnieder@gmail.com>,
	Junio C Hamano <gitster@pobox.com>,
	Christian Couder <chriscool@tuxfamily.org>,
	Daniel Barkalow <barkalow@iabervon.org>
Subject: [PATCH 15/17] revert: Remove sequencer state when no commits are pending
Date: Mon, 11 Jul 2011 14:54:06 +0000	[thread overview]
Message-ID: <1310396048-24925-16-git-send-email-artagnon@gmail.com> (raw)
In-Reply-To: <1310396048-24925-1-git-send-email-artagnon@gmail.com>

When cherry-pick or revert is called on a list of commits, and a
conflict encountered somewhere in the middle, the data in
".git/sequencer" is required to continue the operation.  However, when
a conflict is encountered in the very last commit, the user will have
to "continue" after resolving the conflict and committing just so that
the sequencer state is removed.  This is how the current "rebase -i"
script works as well.

$ git cherry-pick foo..bar
... conflict encountered while picking "bar" ...
$ echo "resolved" >problematicfile
$ git add problematicfile
$ git commit
$ git cherry-pick --continue # This would be a noop

Change this so that the sequencer state is cleared when a conflict is
encountered in the last commit.  Incidentally, this patch makes sure
that some existing tests don't break when features like "--reset" and
"--continue" are implemented later in the series.

Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
---
 builtin/revert.c                |   12 +++++++++++-
 t/t3510-cherry-pick-sequence.sh |   25 +++++++++++++++++++++++++
 2 files changed, 36 insertions(+), 1 deletions(-)

diff --git a/builtin/revert.c b/builtin/revert.c
index f9f5e3a..3936516 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -990,8 +990,18 @@ static int pick_commits(struct commit_list *todo_list, struct replay_opts *opts)
 	for (cur = todo_list; cur; cur = cur->next) {
 		save_todo(cur, opts);
 		res = do_pick_commit(cur->item, opts);
-		if (res)
+		if (res) {
+			if (!cur->next)
+				/*
+				 * An error was encountered while
+				 * picking the last commit; the
+				 * sequencer state is useless now --
+				 * the user simply needs to resolve
+				 * the conflict and commit
+				 */
+				remove_sequencer_state();
 			return res;
+		}
 	}
 
 	/*
diff --git a/t/t3510-cherry-pick-sequence.sh b/t/t3510-cherry-pick-sequence.sh
index 100cbb1..0a8b093 100755
--- a/t/t3510-cherry-pick-sequence.sh
+++ b/t/t3510-cherry-pick-sequence.sh
@@ -63,4 +63,29 @@ test_expect_success 'cherry-pick cleans up sequencer state upon success' '
 	test_path_is_missing .git/sequencer
 '
 
+test_expect_success 'cherry-pick cleans up sequencer state when one commit is left' '
+	pristine_detach initial &&
+	head=$(git rev-parse HEAD) &&
+	test_must_fail git cherry-pick base..picked &&
+	test_path_is_missing .git/sequencer &&
+	echo "resolved" >foo &&
+	git add foo &&
+	git commit &&
+	{
+		git rev-list HEAD |
+		git diff-tree --root --stdin |
+		sed "s/[0-9a-f]\{40\}/OBJID/g"
+	} >actual &&
+	cat >expect <<-\EOF &&
+	OBJID
+	:100644 100644 OBJID OBJID M	foo
+	OBJID
+	:100644 100644 OBJID OBJID M	unrelated
+	OBJID
+	:000000 100644 OBJID OBJID A	foo
+	:000000 100644 OBJID OBJID A	unrelated
+	EOF
+	test_cmp expect actual
+'
+
 test_done
-- 
1.7.5.GIT

  parent reply	other threads:[~2011-07-11 14:55 UTC|newest]

Thread overview: 99+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-11 14:53 [GSoC update] Sequencer for inclusion Ramkumar Ramachandra
2011-07-11 14:53 ` [PATCH 01/17] advice: Introduce error_resolve_conflict Ramkumar Ramachandra
2011-07-11 14:53 ` [PATCH 02/17] revert: Inline add_message_to_msg function Ramkumar Ramachandra
2011-07-12 16:53   ` Jonathan Nieder
2011-07-13  6:00     ` Ramkumar Ramachandra
2011-07-13  6:42       ` Jonathan Nieder
2011-07-19 16:36         ` Ramkumar Ramachandra
2011-07-19 16:52           ` Junio C Hamano
2011-07-19 17:08             ` Ramkumar Ramachandra
2011-07-19 19:36           ` Jonathan Nieder
2011-07-20  5:32             ` Ramkumar Ramachandra
2011-07-11 14:53 ` [PATCH 03/17] revert: Don't check lone argument in get_encoding Ramkumar Ramachandra
2011-07-12 16:59   ` Jonathan Nieder
2011-07-13  6:14     ` Ramkumar Ramachandra
2011-07-13  6:30       ` Jonathan Nieder
2011-07-11 14:53 ` [PATCH 04/17] revert: Rename no_replay to record_origin Ramkumar Ramachandra
2011-07-12 17:02   ` Jonathan Nieder
2011-07-13  7:35     ` Ramkumar Ramachandra
2011-07-17 19:36       ` Jonathan Nieder
2011-07-11 14:53 ` [PATCH 05/17] revert: Propogate errors upwards from do_pick_commit Ramkumar Ramachandra
2011-07-12 17:32   ` Jonathan Nieder
2011-07-17 10:46     ` Ramkumar Ramachandra
2011-07-17 16:59       ` Jonathan Nieder
2011-07-19 10:09         ` Ramkumar Ramachandra
2011-07-11 14:53 ` [PATCH 06/17] revert: Eliminate global "commit" variable Ramkumar Ramachandra
2011-07-12 17:45   ` Jonathan Nieder
2011-07-13  6:57     ` Ramkumar Ramachandra
2011-07-13  7:10       ` Jonathan Nieder
2011-07-13  8:33         ` Ramkumar Ramachandra
2011-07-13 16:40           ` Jonathan Nieder
2011-07-11 14:53 ` [PATCH 07/17] revert: Introduce struct to keep command-line options Ramkumar Ramachandra
2011-07-12 18:05   ` Jonathan Nieder
2011-07-13  7:56     ` Ramkumar Ramachandra
2011-07-11 14:53 ` [PATCH 08/17] revert: Separate cmdline parsing from functional code Ramkumar Ramachandra
2011-07-12 18:20   ` Jonathan Nieder
2011-07-18 20:53     ` Ramkumar Ramachandra
2011-07-18 21:03       ` Jonathan Nieder
2011-07-11 14:54 ` [PATCH 09/17] revert: Don't create invalid replay_opts in parse_args Ramkumar Ramachandra
2011-07-11 20:44   ` Junio C Hamano
2011-07-12  5:57     ` Ramkumar Ramachandra
2011-07-12 18:29   ` Jonathan Nieder
2011-07-17 11:56     ` Ramkumar Ramachandra
2011-07-17 18:43       ` Jonathan Nieder
2011-07-11 14:54 ` [PATCH 10/17] sequencer: Announce sequencer state location Ramkumar Ramachandra
2011-07-12 18:56   ` Jonathan Nieder
2011-07-13 12:10     ` Sverre Rabbelier
2011-07-17 16:23       ` Ramkumar Ramachandra
2011-07-17 19:19         ` Jonathan Nieder
2011-07-18 19:44           ` Ramkumar Ramachandra
2011-07-11 14:54 ` [PATCH 11/17] revert: Save data for continuing after conflict resolution Ramkumar Ramachandra
2011-07-11 21:01   ` Junio C Hamano
2011-07-11 21:31     ` Junio C Hamano
2011-07-12  5:43     ` Ramkumar Ramachandra
2011-07-12 19:37   ` Jonathan Nieder
2011-07-17 11:48     ` Ramkumar Ramachandra
2011-07-17 18:40       ` Jonathan Nieder
2011-07-18 19:31         ` Ramkumar Ramachandra
2011-07-19 12:21           ` Jonathan Nieder
2011-07-19 12:34             ` Ramkumar Ramachandra
2011-07-11 14:54 ` [PATCH 12/17] revert: Save command-line options for continuing operation Ramkumar Ramachandra
2011-07-11 21:15   ` Junio C Hamano
2011-07-12  5:56     ` Ramkumar Ramachandra
2011-07-12 19:52   ` Jonathan Nieder
2011-07-18 20:18     ` Ramkumar Ramachandra
2011-07-11 14:54 ` [PATCH 13/17] revert: Introduce a layer of indirection over pick_commits Ramkumar Ramachandra
2011-07-12 20:03   ` Jonathan Nieder
2011-07-18 21:24     ` Ramkumar Ramachandra
2011-07-11 14:54 ` [PATCH 14/17] reset: Make hard reset remove the sequencer state Ramkumar Ramachandra
2011-07-12 20:15   ` Jonathan Nieder
2011-07-17 16:40     ` Ramkumar Ramachandra
2011-07-11 14:54 ` Ramkumar Ramachandra [this message]
2011-07-11 19:58   ` [PATCH 15/17] revert: Remove sequencer state when no commits are pending Junio C Hamano
2011-07-12  6:26     ` Ramkumar Ramachandra
2011-07-11 14:54 ` [PATCH 16/17] revert: Introduce --reset to remove sequencer state Ramkumar Ramachandra
2011-07-12 20:30   ` Jonathan Nieder
2011-07-17 17:10     ` Ramkumar Ramachandra
2011-07-17 19:25       ` Jonathan Nieder
2011-07-11 14:54 ` [PATCH 17/17] revert: Introduce --continue to continue the operation Ramkumar Ramachandra
2011-07-12 20:46   ` Jonathan Nieder
2011-07-17 16:11     ` Ramkumar Ramachandra
2011-07-17 18:32       ` Jonathan Nieder
2011-07-18 20:00         ` Ramkumar Ramachandra
2011-07-18 20:09           ` Jonathan Nieder
2011-07-11 17:17 ` [GSoC update] Sequencer for inclusion Jonathan Nieder
2011-07-11 17:57   ` Ramkumar Ramachandra
2011-07-11 20:05     ` Ramkumar Ramachandra
2011-07-11 20:11     ` Jonathan Nieder
2011-07-12  7:05     ` Ramkumar Ramachandra
2011-07-11 20:07   ` Junio C Hamano
2011-07-11 22:14     ` Jeff King
2011-07-12  6:41       ` Ramkumar Ramachandra
2011-07-12  6:47         ` Jeff King
2011-07-13  9:41           ` Ramkumar Ramachandra
2011-07-13 19:07             ` Jeff King
2011-07-18 21:37               ` [RFC PATCH] config: Introduce functions to write non-standard file Ramkumar Ramachandra
2011-07-18 23:54                 ` Junio C Hamano
2011-07-19  8:52                   ` Ramkumar Ramachandra
2011-07-12  5:58     ` [GSoC update] Sequencer for inclusion Jonathan Nieder
2011-07-12  6:28   ` Miles Bader

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1310396048-24925-16-git-send-email-artagnon@gmail.com \
    --to=artagnon@gmail.com \
    --cc=barkalow@iabervon.org \
    --cc=chriscool@tuxfamily.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jrnieder@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).