rebase -i: respect core.commentchar
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 command list.
Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
			
			
				maint
			
			
		
							parent
							
								
									eff80a9fd9
								
							
						
					
					
						commit
						180bad3d10
					
				|  | @ -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=$(git stripspace --strip-comments <"$done" | wc -l) | ||||
| 	total=$(($new_count + $(git stripspace --strip-comments <"$todo" | wc -l))) | ||||
| 	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. | ||||
| 	git stripspace --comment-lines >>"$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 | ||||
| 	test -n "$(git stripspace --strip-comments <"$1")" | ||||
| } | ||||
|  | ||||
| is_empty_commit() { | ||||
|  | @ -358,10 +361,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." | ||||
| 			printf '%s\n' "$comment_char This is a combination of $count commits." | ||||
| 			sed -e 1d -e '2,/^./{ | ||||
| 				/^$/d | ||||
| 			}' <"$squash_msg".bak | ||||
|  | @ -370,8 +373,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:" | ||||
| 			printf '%s\n' "$comment_char This is a combination of 2 commits." | ||||
| 			printf '%s\n' "$comment_char The first commit's message is:" | ||||
| 			echo | ||||
| 			cat "$fixup_msg" | ||||
| 		} >"$squash_msg" | ||||
|  | @ -380,21 +383,22 @@ update_squash_messages () { | |||
| 	squash) | ||||
| 		rm -f "$fixup_msg" | ||||
| 		echo | ||||
| 		echo "# This is the $(nth_string $count) commit message:" | ||||
| 		printf '%s\n' "$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:" | ||||
| 		printf '%s\n' "$comment_char The $(nth_string $count) commit message will be skipped:" | ||||
| 		echo | ||||
| 		commit_message $2 | sed -e 's/^/#	/' | ||||
| 		# Change the space after the comment character to TAB: | ||||
| 		commit_message $2 | git stripspace --comment-lines | sed -e 's/ /	/' | ||||
| 		;; | ||||
| 	esac >>"$squash_msg" | ||||
| } | ||||
|  | ||||
| peek_next_command () { | ||||
| 	sed -n -e "/^#/d" -e '/^$/d' -e "s/ .*//p" -e "q" < "$todo" | ||||
| 	git stripspace --strip-comments <"$todo" | sed -n -e 's/ .*//p' -e q | ||||
| } | ||||
|  | ||||
| # A squash/fixup has failed.  Prepare the long version of the squash | ||||
|  | @ -459,7 +463,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) | ||||
|  | @ -798,15 +802,15 @@ skip) | |||
| 	do_rest | ||||
| 	;; | ||||
| edit-todo) | ||||
| 	sed -e '/^#/d' < "$todo" > "$todo".new | ||||
| 	git stripspace --strip-comments <"$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 | ||||
| # | ||||
| 	git stripspace --comment-lines >>"$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" || | ||||
|  | @ -876,7 +880,7 @@ do | |||
|  | ||||
| 	if test -z "$keep_empty" && is_empty_commit $shortsha1 | ||||
| 	then | ||||
| 		comment_out="# " | ||||
| 		comment_out="$comment_char " | ||||
| 	else | ||||
| 		comment_out= | ||||
| 	fi | ||||
|  | @ -937,20 +941,20 @@ test -s "$todo" || echo noop >> "$todo" | |||
| test -n "$autosquash" && rearrange_squash "$todo" | ||||
| test -n "$cmd" && add_exec_commands "$todo" | ||||
|  | ||||
| cat >> "$todo" << EOF | ||||
| cat >>"$todo" <<EOF | ||||
|  | ||||
| # Rebase $shortrevisions onto $shortonto | ||||
| $comment_char Rebase $shortrevisions onto $shortonto | ||||
| EOF | ||||
| append_todo_help | ||||
| cat >> "$todo" << EOF | ||||
| # | ||||
| # However, if you remove everything, the rebase will be aborted. | ||||
| # | ||||
| git stripspace --comment-lines >>"$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" | ||||
| 	printf '%s\n' "$comment_char Note that empty commits are commented out" >>"$todo" | ||||
| fi | ||||
|  | ||||
|  | ||||
|  |  | |||
|  | @ -940,4 +940,18 @@ 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" && | ||||
| 	write_script remove-all-but-first.sh <<-\EOF && | ||||
| 	sed -e "2,\$s/^/\\\\/" "$1" >"$1.tmp" && | ||||
| 	mv "$1.tmp" "$1" | ||||
| 	EOF | ||||
| 	test_set_editor "$(pwd)/remove-all-but-first.sh" && | ||||
| 	git rebase -i B && | ||||
| 	test B = $(git cat-file commit HEAD^ | sed -ne \$p) | ||||
| ' | ||||
|  | ||||
| test_done | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 John Keeping
						John Keeping