aboutsummaryrefslogtreecommitdiff
path: root/git-rebase--interactive.sh
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2012-09-29 22:28:12 -0700
committerJunio C Hamano <gitster@pobox.com>2012-09-29 22:28:12 -0700
commit68a31b7d956e958f1b51e80f6cb91858e416c95d (patch)
tree8b260e1da7ef80c08a1535c2f719d15bfc7f9178 /git-rebase--interactive.sh
parentf5fd2a7d179a8bb843ec44d2a594e6ccf50dfb3a (diff)
parent9c8e1011b9f6979777946ff87aae7b5846ed20a7 (diff)
downloadgit-68a31b7d956e958f1b51e80f6cb91858e416c95d.tar.gz
git-68a31b7d956e958f1b51e80f6cb91858e416c95d.tar.xz
Merge branch 'aw/rebase-i-edit-todo'
Teach an option to edit the insn sheet to "git rebase -i". * aw/rebase-i-edit-todo: rebase -i: suggest using --edit-todo to fix an unknown instruction rebase -i: Add tests for "--edit-todo" rebase -i: Teach "--edit-todo" action rebase -i: Refactor help messages for todo file rebase usage: subcommands can not be combined with -i
Diffstat (limited to 'git-rebase--interactive.sh')
-rw-r--r--git-rebase--interactive.sh53
1 files changed, 40 insertions, 13 deletions
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 56707d7a2..44901d53c 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -115,6 +115,23 @@ mark_action_done () {
fi
}
+append_todo_help () {
+ cat >> "$todo" << EOF
+#
+# Commands:
+# p, pick = use commit
+# r, reword = use commit, but edit the commit message
+# e, edit = use commit, but stop for amending
+# s, squash = use commit, but meld into previous commit
+# f, fixup = like "squash", but discard this commit's log message
+# x, exec = run command (the rest of the line) using shell
+#
+# These lines can be re-ordered; they are executed from top to bottom.
+#
+# If you remove a line here THAT COMMIT WILL BE LOST.
+EOF
+}
+
make_patch () {
sha1_and_parents="$(git rev-list --parents -1 "$1")"
case "$sha1_and_parents" in
@@ -562,11 +579,12 @@ do_next () {
;;
*)
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 "Please fix this in the file $todo."
+ die_with_patch $sha1 "$fixtodo"
else
- die "Please fix this in the file $todo."
+ die "$fixtodo"
fi
;;
esac
@@ -779,6 +797,23 @@ skip)
do_rest
;;
+edit-todo)
+ sed -e '/^#/d' < "$todo" > "$todo".new
+ mv -f "$todo".new "$todo"
+ append_todo_help
+ cat >> "$todo" << EOF
+#
+# You are editing the todo file of an ongoing interactive rebase.
+# To continue rebase after editing, run:
+# git rebase --continue
+#
+EOF
+
+ git_sequence_editor "$todo" ||
+ die "Could not execute editor"
+
+ exit
+ ;;
esac
git var GIT_COMMITTER_IDENT >/dev/null ||
@@ -905,18 +940,10 @@ test -n "$cmd" && add_exec_commands "$todo"
cat >> "$todo" << EOF
# Rebase $shortrevisions onto $shortonto
+EOF
+append_todo_help
+cat >> "$todo" << EOF
#
-# Commands:
-# p, pick = use commit
-# r, reword = use commit, but edit the commit message
-# e, edit = use commit, but stop for amending
-# s, squash = use commit, but meld into previous commit
-# f, fixup = like "squash", but discard this commit's log message
-# x, exec = run command (the rest of the line) using shell
-#
-# These lines can be re-ordered; they are executed from top to bottom.
-#
-# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
EOF