git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Fabian Ruch <bafain@gmail.com>
To: git@vger.kernel.org
Cc: Michael Haggerty <mhagger@alum.mit.edu>,
	Thomas Rast <tr@thomasrast.ch>, Jeff King <peff@peff.net>
Subject: [PATCH RFC v2 15/19] rebase -i: Explicitly distinguish replay commands and exec tasks
Date: Wed,  2 Jul 2014 19:48:07 +0200	[thread overview]
Message-ID: <07e5f295c0042e78ba83ffb66925e3f09988ae3c.1404323078.git.bafain@gmail.com> (raw)
In-Reply-To: <cover.1404323078.git.bafain@gmail.com>

There are two kinds of to-do list commands available. One kind
replays a commit (`pick`, `reword`, `edit`, `squash` and `fixup` that
is) and the other executes a shell command (`exec`). We will call the
first kind replay commands.

The two kinds of tasks are scheduled using different line formats.
Replay commands expect a commit hash argument following the command
name and exec concatenates all arguments to assemble a command line.

Adhere to the distinction of formats by not trying to parse the
`sha1` field unless we are dealing with a replay command. Move the
replay command handling code to a new function `do_replay` which
assumes the first argument to be a commit hash and make no more such
assumptions in `do_next`.

Signed-off-by: Fabian Ruch <bafain@gmail.com>
---
 git-rebase--interactive.sh | 42 ++++++++++++++++++++++++++++--------------
 1 file changed, 28 insertions(+), 14 deletions(-)

diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 008f3a0..9de7441 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -585,13 +585,12 @@ do_pick () {
 	fi
 }
 
-do_next () {
-	rm -f "$msg" "$author_script" "$amend" || exit
-	read -r command sha1 rest < "$todo"
+do_replay () {
+	command=$1
+	sha1=$2
+	rest=$3
+
 	case "$command" in
-	"$comment_char"*|''|noop)
-		mark_action_done
-		;;
 	pick|p)
 		comment_for_reflog pick
 
@@ -656,6 +655,28 @@ do_next () {
 		esac
 		record_in_rewritten $sha1
 		;;
+	*)
+		read -r command <"$todo"
+		warn "Unknown command: $command"
+		fixtodo="Please fix this using 'git rebase --edit-todo'."
+		if git rev-parse --verify -q "$sha1" >/dev/null
+		then
+			die_with_patch $sha1 "$fixtodo"
+		else
+			die "$fixtodo"
+		fi
+		;;
+	esac
+}
+
+do_next () {
+	rm -f "$msg" "$author_script" "$amend" || exit
+	read -r command sha1 rest <"$todo"
+
+	case "$command" in
+	"$comment_char"*|''|noop)
+		mark_action_done
+		;;
 	x|"exec")
 		read -r command rest < "$todo"
 		mark_action_done
@@ -695,14 +716,7 @@ do_next () {
 		fi
 		;;
 	*)
-		warn "Unknown command: $command $sha1 $rest"
-		fixtodo="Please fix this using 'git rebase --edit-todo'."
-		if git rev-parse --verify -q "$sha1" >/dev/null
-		then
-			die_with_patch $sha1 "$fixtodo"
-		else
-			die "$fixtodo"
-		fi
+		do_replay $command $sha1 "$rest"
 		;;
 	esac
 	test -s "$todo" && return
-- 
2.0.0

  parent reply	other threads:[~2014-07-02 17:50 UTC|newest]

Thread overview: 148+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-19  3:28 [RFC PATCH 0/7] rebase -i: Implement `reword` and `squash` in terms of `do_pick` Fabian Ruch
2014-07-02 17:47 ` [PATCH RFC v2 00/19] Enable options --signoff, --reset-author for pick, reword Fabian Ruch
2014-07-02 17:47   ` [PATCH RFC v2 01/19] rebase -i: Failed reword prints redundant error message Fabian Ruch
2014-07-08 20:31     ` Junio C Hamano
2014-07-10 14:30       ` Andrew Wong
2014-07-10 16:35         ` Fabian Ruch
2014-07-10 17:04           ` Andrew Wong
2014-07-02 17:47   ` [PATCH RFC v2 02/19] rebase -i: reword complains about empty commit despite --keep-empty Fabian Ruch
2014-07-08 20:37     ` Junio C Hamano
2014-07-09 18:02       ` Fabian Ruch
2014-07-02 17:47   ` [PATCH RFC v2 03/19] rebase -i: reword executes pre-commit hook on interim commit Fabian Ruch
2014-07-08 20:43     ` Junio C Hamano
2014-07-13 11:00       ` Fabian Ruch
2014-07-02 17:47   ` [PATCH RFC v2 04/19] rebase -i: Teach do_pick the option --edit Fabian Ruch
2014-07-02 17:47   ` [PATCH RFC v2 05/19] rebase -i: Implement reword in terms of do_pick Fabian Ruch
2014-08-04 15:16     ` Matthieu Moy
2014-08-04 15:45       ` Fabian Ruch
2014-07-02 17:47   ` [PATCH RFC v2 06/19] rebase -i: Stop on root commits with empty log messages Fabian Ruch
2014-07-08 22:26     ` Junio C Hamano
2014-07-10  9:29       ` Fabian Ruch
2014-07-10 16:57         ` Junio C Hamano
2014-07-10 17:33         ` Junio C Hamano
2014-07-02 17:47   ` [PATCH RFC v2 07/19] rebase -i: The replay of root commits is not shown with --verbose Fabian Ruch
2014-07-08 22:29     ` Junio C Hamano
2014-07-11 13:46     ` Fabian Ruch
2014-07-15  9:29       ` Chris Webb
2014-07-02 17:48   ` [PATCH RFC v2 08/19] rebase -i: Root commits are replayed with an unnecessary option Fabian Ruch
2014-07-08 22:32     ` Junio C Hamano
2014-07-18  9:16       ` Fabian Ruch
2014-07-18 16:52         ` Junio C Hamano
2014-07-19 18:14           ` Fabian Ruch
2014-07-02 17:48   ` [PATCH RFC v2 09/19] rebase -i: Commit only once when rewriting picks Fabian Ruch
2014-07-02 17:48   ` [PATCH RFC v2 10/19] rebase -i: Do not die in do_pick Fabian Ruch
2014-07-02 17:48   ` [PATCH RFC v2 11/19] rebase -i: Teach do_pick the option --amend Fabian Ruch
2014-07-02 17:48   ` [PATCH RFC v2 12/19] rebase -i: Teach do_pick the option --file Fabian Ruch
2014-07-02 17:48   ` [PATCH RFC v2 13/19] rebase -i: Prepare for squash in terms of do_pick --amend Fabian Ruch
2014-07-02 17:48   ` [PATCH RFC v2 14/19] rebase -i: Implement squash in terms of do_pick Fabian Ruch
2014-07-02 17:48   ` Fabian Ruch [this message]
2014-07-10 20:03     ` [PATCH RFC v2 15/19] rebase -i: Explicitly distinguish replay commands and exec tasks Junio C Hamano
2014-07-02 17:48   ` [PATCH RFC v2 16/19] rebase -i: Parse to-do list command line options Fabian Ruch
2014-07-02 17:48   ` [PATCH RFC v2 17/19] rebase -i: Teach do_pick the option --reset-author Fabian Ruch
2014-07-02 17:48   ` [PATCH RFC v2 18/19] rebase -i: Teach do_pick the option --signoff Fabian Ruch
2014-07-02 17:48   ` [PATCH RFC v2 19/19] rebase -i: Enable options --signoff, --reset-author for pick, reword Fabian Ruch
2014-07-03 10:33   ` [PATCH RFC v2 00/19] " Michael Haggerty
2014-07-08 20:45   ` Junio C Hamano
2014-07-09 16:08     ` Fabian Ruch
2014-07-18 12:10       ` Thomas Rast
2014-07-28 23:18 ` [PATCH v1 " Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 01/19] rebase -i: failed reword prints redundant error message Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 02/19] rebase -i: allow rewording an empty commit without complaints Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 03/19] rebase -i: reword executes pre-commit hook on interim commit Fabian Ruch
2014-08-01 23:47     ` Jeff King
2014-08-04 18:51       ` Fabian Ruch
2014-08-06 21:46         ` Jeff King
2014-07-28 23:18   ` [PATCH v1 04/19] rebase -i: teach do_pick the option --edit Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 05/19] rebase -i: implement reword in terms of do_pick Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 06/19] rebase -i: allow replaying commits with empty log messages Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 07/19] rebase -i: log the replay of root commits Fabian Ruch
2014-08-02  0:04     ` Jeff King
2014-08-04 21:21       ` Fabian Ruch
2014-08-06 22:01         ` Jeff King
2014-07-28 23:18   ` [PATCH v1 08/19] rebase -i: root commits are replayed with an unnecessary option Fabian Ruch
2014-08-02  0:13     ` Jeff King
2014-08-04 21:31       ` Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 09/19] rebase -i: commit only once when rewriting picks Fabian Ruch
2014-08-02  0:22     ` Jeff King
2014-08-07  0:24       ` Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 10/19] rebase -i: do not die in do_pick Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 11/19] rebase -i: teach do_pick the option --amend Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 12/19] rebase -i: teach do_pick the option --file Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 13/19] rebase -i: prepare for squash in terms of do_pick --amend Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 14/19] rebase -i: implement squash in terms of do_pick Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 15/19] rebase -i: explicitly distinguish replay commands and exec tasks Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 16/19] rebase -i: parse to-do list command line options Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 17/19] rebase -i: teach do_pick the option --reset-author Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 18/19] rebase -i: teach do_pick the option --signoff Fabian Ruch
2014-07-28 23:18   ` [PATCH v1 19/19] rebase -i: enable options --signoff, --reset-author for pick, reword Fabian Ruch
2014-08-02 13:52   ` [PATCH v1 00/19] Enable " Jeff King
2014-08-04  8:37     ` Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 00/23] " Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 01/23] rebase -i: allow replaying commits with empty log messages Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 02/23] rebase -i: allow squashing empty commits without complaints Fabian Ruch
2014-08-07  7:16     ` Peter Krefting
2014-08-07 22:03     ` Eric Sunshine
2014-08-11  7:01       ` Fabian Ruch
2014-08-13 19:24     ` Phil Hord
2014-08-06 23:59   ` [PATCH v2 03/23] rebase -i: allow rewording " Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 04/23] rebase -i: hide interactive command messages in verbose mode Fabian Ruch
2014-08-08 19:09     ` Thomas Rast
2014-08-11  8:26       ` Fabian Ruch
2014-08-11 18:22         ` Thomas Rast
2014-08-06 23:59   ` [PATCH v2 05/23] rebase -i: failed reword prints redundant error message Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 06/23] commit: allow disabling pre-commit and commit-msg separately Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 07/23] rebase -i: squash skips commit-msg hook Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 08/23] rebase -i: reword executes pre-commit hook on interim commit Fabian Ruch
2014-08-08 19:09     ` Thomas Rast
2014-08-11  8:45       ` Fabian Ruch
2014-08-11 18:22         ` Thomas Rast
2014-08-06 23:59   ` [PATCH v2 09/23] rebase -i: teach do_pick the option --edit Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 10/23] rebase -i: implement reword in terms of do_pick Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 11/23] rebase -i: log the replay of root commits Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 12/23] rebase -i: root commits are replayed with an unnecessary option Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 13/23] rebase -i: commit only once when rewriting picks Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 14/23] rebase -i: do not die in do_pick Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 15/23] rebase -i: teach do_pick the option --amend Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 16/23] rebase -i: teach do_pick the option --file Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 17/23] rebase -i: prepare for squash in terms of do_pick --amend Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 18/23] rebase -i: implement squash in terms of do_pick Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 19/23] rebase -i: explicitly distinguish replay commands and exec tasks Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 20/23] rebase -i: parse to-do list command line options Fabian Ruch
2014-08-08 19:10     ` Thomas Rast
2014-08-11 20:56       ` Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 21/23] rebase -i: teach do_pick the option --reset-author Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 22/23] rebase -i: teach do_pick the option --signoff Fabian Ruch
2014-08-06 23:59   ` [PATCH v2 23/23] rebase -i: enable options --signoff, --reset-author for pick, reword Fabian Ruch
2014-08-08 19:10     ` Thomas Rast
2014-08-12 21:04       ` Fabian Ruch
2014-08-13 12:47     ` Michael Haggerty
2014-08-14 17:24       ` Fabian Ruch
2014-09-21 16:59       ` Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 00/27] Enable options --signoff, --reset-author for pick, reword, edit Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 01/27] rebase -i: allow replaying commits with empty log messages Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 02/27] rebase -i: allow squashing empty commits without complaints Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 03/27] rebase -i: allow rewording " Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 04/27] fake_editor: leave standard output unchanged Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 05/27] rebase -i: hide interactive command messages in verbose mode Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 06/27] rebase -i: discard redundant message when rewording fails Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 07/27] commit: allow disabling pre-commit and commit-msg separately Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 08/27] rebase -i: verify squash messages using commit-msg Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 09/27] rebase -i: do not verify reworded patches using pre-commit Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 10/27] rebase -i: teach do_pick the option --edit Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 11/27] rebase -i: implement reword in terms of do_pick Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 12/27] rebase -i: log the replay of root commits Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 13/27] rebase -i: do not use -C when --no-edit is sufficient Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 14/27] rebase -i: commit only once when rewriting picks Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 15/27] rebase -i: do not die in do_pick Fabian Ruch
2014-08-18 21:22   ` [PATCH v3 16/27] rebase -i: teach do_pick the option --amend Fabian Ruch
2014-08-18 21:23   ` [PATCH v3 17/27] rebase -i: teach do_pick the option --file Fabian Ruch
2014-08-18 21:23   ` [PATCH v3 18/27] rebase -i: remove no-op do_with_author git commit --amend Fabian Ruch
2014-08-18 21:23   ` [PATCH v3 19/27] rebase -i: prepare for squash in terms of do_pick --amend Fabian Ruch
2014-08-18 21:23   ` [PATCH v3 20/27] rebase -i: implement squash in terms of do_pick Fabian Ruch
2014-08-18 21:23   ` [PATCH v3 21/27] rebase -i: explicitly distinguish replay commands and exec tasks Fabian Ruch
2014-08-18 21:23   ` [PATCH v3 22/27] rebase -i: parse to-do list command line options Fabian Ruch
2014-08-18 21:23   ` [PATCH v3 23/27] rebase -i: teach do_pick the option --reset-author Fabian Ruch
2014-08-18 21:23   ` [PATCH v3 24/27] rebase -i: teach do_pick the option --signoff Fabian Ruch
2014-08-18 21:23   ` [PATCH v3 25/27] rebase -i: do not overwrite user author information Fabian Ruch
2014-08-18 21:23   ` [PATCH v3 26/27] rebase -i: refuse to commit when resuming with updated head Fabian Ruch
2014-08-18 21:23   ` [PATCH v3 27/27] rebase -i: enable --signoff, --reset-author for pick, reword, edit Fabian Ruch

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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=07e5f295c0042e78ba83ffb66925e3f09988ae3c.1404323078.git.bafain@gmail.com \
    --to=bafain@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=mhagger@alum.mit.edu \
    --cc=peff@peff.net \
    --cc=tr@thomasrast.ch \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).