Commit eff80a9 (Allow custom "comment char") introduced a custom comment character for commit messages but did not teach git-rebase--interactive to use it. Change git-rebase--interactive to read core.commentchar and use its value when generating commit messages and for the todo list. Signed-off-by: John Keeping <john@xxxxxxxxxxxxx> --- git-rebase--interactive.sh | 85 ++++++++++++++++++++++--------------------- t/t3404-rebase-interactive.sh | 16 ++++++++ 2 files changed, 60 insertions(+), 41 deletions(-) diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 8ed7fcc..8a37bc1 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -80,6 +80,9 @@ rewritten_pending="$state_dir"/rewritten-pending GIT_CHERRY_PICK_HELP="$resolvemsg" export GIT_CHERRY_PICK_HELP +comment_char=$(git config --get core.commentchar 2>/dev/null | cut -c1) +: ${comment_char:=#} + warn () { printf '%s\n' "$*" >&2 } @@ -105,8 +108,8 @@ mark_action_done () { sed -e 1q < "$todo" >> "$done" sed -e 1d < "$todo" >> "$todo".new mv -f "$todo".new "$todo" - new_count=$(sane_grep -c '^[^#]' < "$done") - total=$(($new_count+$(sane_grep -c '^[^#]' < "$todo"))) + new_count=$(sane_grep -c "^[^${comment_char}]" < "$done") + total=$(($new_count+$(sane_grep -c "^[^${comment_char}]" < "$todo"))) if test "$last_count" != "$new_count" then last_count=$new_count @@ -116,19 +119,19 @@ mark_action_done () { } 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. + sed -e "s/^/$comment_char /" >>"$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 } @@ -179,7 +182,7 @@ die_abort () { } has_action () { - sane_grep '^[^#]' "$1" >/dev/null + sane_grep "^[^${comment_char}]" "$1" >/dev/null } is_empty_commit() { @@ -363,10 +366,10 @@ update_squash_messages () { if test -f "$squash_msg"; then mv "$squash_msg" "$squash_msg".bak || exit count=$(($(sed -n \ - -e "1s/^# This is a combination of \(.*\) commits\./\1/p" \ + -e "1s/^. This is a combination of \(.*\) commits\./\1/p" \ -e "q" < "$squash_msg".bak)+1)) { - echo "# This is a combination of $count commits." + echo "$comment_char This is a combination of $count commits." sed -e 1d -e '2,/^./{ /^$/d }' <"$squash_msg".bak @@ -375,8 +378,8 @@ update_squash_messages () { commit_message HEAD > "$fixup_msg" || die "Cannot write $fixup_msg" count=2 { - echo "# This is a combination of 2 commits." - echo "# The first commit's message is:" + echo "$comment_char This is a combination of 2 commits." + echo "$comment_char The first commit's message is:" echo cat "$fixup_msg" } >"$squash_msg" @@ -385,21 +388,21 @@ update_squash_messages () { squash) rm -f "$fixup_msg" echo - echo "# This is the $(nth_string $count) commit message:" + echo "$comment_char This is the $(nth_string $count) commit message:" echo commit_message $2 ;; fixup) echo - echo "# The $(nth_string $count) commit message will be skipped:" + echo "$comment_char The $(nth_string $count) commit message will be skipped:" echo - commit_message $2 | sed -e 's/^/# /' + commit_message $2 | sed -e "s/^/$comment_char /" ;; esac >>"$squash_msg" } peek_next_command () { - sed -n -e "/^#/d" -e '/^$/d' -e "s/ .*//p" -e "q" < "$todo" + sed -n -e "/^$comment_char/d" -e '/^$/d' -e "s/ .*//p" -e "q" < "$todo" } # A squash/fixup has failed. Prepare the long version of the squash @@ -464,7 +467,7 @@ do_next () { rm -f "$msg" "$author_script" "$amend" || exit read -r command sha1 rest < "$todo" case "$command" in - '#'*|''|noop) + $comment_char*|''|noop) mark_action_done ;; pick|p) @@ -803,15 +806,15 @@ skip) do_rest ;; edit-todo) - sed -e '/^#/d' < "$todo" > "$todo".new + sed -e "/^$comment_char/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 -# + sed -e "s/^/$comment_char /" >>"$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" || @@ -881,7 +884,7 @@ do if test -z "$keep_empty" && is_empty_commit $shortsha1 && ! is_merge_commit $shortsha1 then - comment_out="# " + comment_out="$comment_char " else comment_out= fi @@ -942,20 +945,20 @@ test -s "$todo" || echo noop >> "$todo" test -n "$autosquash" && rearrange_squash "$todo" test -n "$cmd" && add_exec_commands "$todo" -cat >> "$todo" << EOF - -# Rebase $shortrevisions onto $shortonto +echo >>"$todo" +sed -e "s/^/$comment_char /" >> "$todo" << EOF +Rebase $shortrevisions onto $shortonto EOF append_todo_help -cat >> "$todo" << EOF -# -# However, if you remove everything, the rebase will be aborted. -# +sed -e "s/^/$comment_char /" >> "$todo" << EOF + +However, if you remove everything, the rebase will be aborted. + EOF if test -z "$keep_empty" then - echo "# Note that empty commits are commented out" >>"$todo" + echo "$comment_char Note that empty commits are commented out" >>"$todo" fi diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh index 8462be1..1043cdc 100755 --- a/t/t3404-rebase-interactive.sh +++ b/t/t3404-rebase-interactive.sh @@ -934,4 +934,20 @@ test_expect_success 'rebase --edit-todo can be used to modify todo' ' test L = $(git cat-file commit HEAD | sed -ne \$p) ' +test_expect_success 'rebase -i respects core.commentchar' ' + git reset --hard && + git checkout E^0 && + git config core.commentchar \; && + test_when_finished "git config --unset core.commentchar" && + cat >comment-lines.sh <<EOF && +#!$SHELL_PATH +sed -e "2,\$ s/^/;/" "\$1" >"\$1".tmp +mv "\$1".tmp "\$1" +EOF + chmod a+x comment-lines.sh && + test_set_editor "$(pwd)/comment-lines.sh" && + git rebase -i B && + test B = $(git cat-file commit HEAD^ | sed -ne \$p) +' + test_done -- 1.8.1.2 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html