From: Ramkumar Ramachandra <artagnon@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: Git List <git@vger.kernel.org>,
Jonathan Nieder <jrnieder@gmail.com>,
Christian Couder <chriscool@tuxfamily.org>,
Daniel Barkalow <barkalow@iabervon.org>,
Jeff King <peff@peff.net>
Subject: [PATCH 15/18] revert: Remove sequencer state when no commits are pending
Date: Thu, 4 Aug 2011 16:09:13 +0530 [thread overview]
Message-ID: <1312454356-3070-16-git-send-email-artagnon@gmail.com> (raw)
In-Reply-To: <1312454356-3070-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 no-op
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.
A better way to implement this feature is to get the last "git commit"
to remove the sequencer state. However, that requires tighter
coupling between "git commit" and the sequencer, a goal that can be
pursued once the sequencer is made more general.
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Acked-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
builtin/revert.c | 12 +++++++++++-
t/t3510-cherry-pick-sequence.sh | 24 ++++++++++++++++++++++++
2 files changed, 35 insertions(+), 1 deletions(-)
diff --git a/builtin/revert.c b/builtin/revert.c
index a8accd6..000806c 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -763,8 +763,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(0);
return res;
+ }
}
/*
diff --git a/t/t3510-cherry-pick-sequence.sh b/t/t3510-cherry-pick-sequence.sh
index fd69865..a414086 100755
--- a/t/t3510-cherry-pick-sequence.sh
+++ b/t/t3510-cherry-pick-sequence.sh
@@ -82,4 +82,28 @@ test_expect_success '--reset cleans up sequencer state' '
test_path_is_missing .git/sequencer
'
+test_expect_success 'cherry-pick cleans up sequencer state when one commit is left' '
+ pristine_detach initial &&
+ 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/$_x40/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.6.351.gb35ac.dirty
next prev parent reply other threads:[~2011-08-04 10:43 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-04 10:38 [PATCH 00/18] Sequencer for inclusion v6 Ramkumar Ramachandra
2011-08-04 10:38 ` [PATCH 01/18] advice: Introduce error_resolve_conflict Ramkumar Ramachandra
2011-08-04 10:39 ` [PATCH 02/18] config: Introduce functions to write non-standard file Ramkumar Ramachandra
2011-08-04 10:39 ` [PATCH 03/18] revert: Simplify and inline add_message_to_msg Ramkumar Ramachandra
2011-08-04 10:39 ` [PATCH 04/18] revert: Don't check lone argument in get_encoding Ramkumar Ramachandra
2011-08-04 10:39 ` [PATCH 05/18] revert: Rename no_replay to record_origin Ramkumar Ramachandra
2011-08-04 10:39 ` [PATCH 06/18] revert: Eliminate global "commit" variable Ramkumar Ramachandra
2011-08-04 10:39 ` [PATCH 07/18] revert: Introduce struct to keep command-line options Ramkumar Ramachandra
2011-08-04 10:39 ` [PATCH 08/18] revert: Separate cmdline parsing from functional code Ramkumar Ramachandra
2011-08-04 10:39 ` [PATCH 09/18] revert: Don't create invalid replay_opts in parse_args Ramkumar Ramachandra
2011-08-04 10:39 ` [PATCH 10/18] revert: Save data for continuing after conflict resolution Ramkumar Ramachandra
2011-08-04 10:39 ` [PATCH 11/18] revert: Save command-line options for continuing operation Ramkumar Ramachandra
2011-08-04 10:39 ` [PATCH 12/18] revert: Make pick_commits functionally act on a commit list Ramkumar Ramachandra
2011-08-04 10:39 ` [PATCH 13/18] revert: Introduce --reset to remove sequencer state Ramkumar Ramachandra
2011-08-04 10:39 ` [PATCH 14/18] reset: Make reset remove the " Ramkumar Ramachandra
2011-08-08 7:27 ` Christian Couder
2011-08-08 8:20 ` Ramkumar Ramachandra
2011-08-04 10:39 ` Ramkumar Ramachandra [this message]
2011-08-04 10:39 ` [PATCH 16/18] revert: Don't implicitly stomp pending sequencer operation Ramkumar Ramachandra
2011-08-04 10:39 ` [PATCH 17/18] revert: Introduce --continue to continue the operation Ramkumar Ramachandra
2011-08-08 7:31 ` Christian Couder
2011-08-08 8:24 ` Ramkumar Ramachandra
2011-08-08 16:28 ` Junio C Hamano
2011-08-09 5:26 ` Ramkumar Ramachandra
2011-08-04 10:39 ` [PATCH 18/18] revert: Propagate errors upwards from do_pick_commit Ramkumar Ramachandra
-- strict thread matches above, loose matches on Subject: below --
2011-08-01 18:06 [PATCH v5 00/18] Sequencer for inclusion Ramkumar Ramachandra
2011-08-01 18:07 ` [PATCH 15/18] revert: Remove sequencer state when no commits are pending Ramkumar Ramachandra
2011-07-28 16:52 [PATCH 00/18] Sequencer for inclusion v4 Ramkumar Ramachandra
2011-07-28 16:52 ` [PATCH 15/18] revert: Remove sequencer state when no commits are pending Ramkumar Ramachandra
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=1312454356-3070-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 \
--cc=peff@peff.net \
/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).