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>
This commit is contained in:
parent
eff80a9fd9
commit
180bad3d10
@ -80,6 +80,9 @@ rewritten_pending="$state_dir"/rewritten-pending
|
|||||||
GIT_CHERRY_PICK_HELP="$resolvemsg"
|
GIT_CHERRY_PICK_HELP="$resolvemsg"
|
||||||
export GIT_CHERRY_PICK_HELP
|
export GIT_CHERRY_PICK_HELP
|
||||||
|
|
||||||
|
comment_char=$(git config --get core.commentchar 2>/dev/null | cut -c1)
|
||||||
|
: ${comment_char:=#}
|
||||||
|
|
||||||
warn () {
|
warn () {
|
||||||
printf '%s\n' "$*" >&2
|
printf '%s\n' "$*" >&2
|
||||||
}
|
}
|
||||||
@ -105,8 +108,8 @@ mark_action_done () {
|
|||||||
sed -e 1q < "$todo" >> "$done"
|
sed -e 1q < "$todo" >> "$done"
|
||||||
sed -e 1d < "$todo" >> "$todo".new
|
sed -e 1d < "$todo" >> "$todo".new
|
||||||
mv -f "$todo".new "$todo"
|
mv -f "$todo".new "$todo"
|
||||||
new_count=$(sane_grep -c '^[^#]' < "$done")
|
new_count=$(git stripspace --strip-comments <"$done" | wc -l)
|
||||||
total=$(($new_count+$(sane_grep -c '^[^#]' < "$todo")))
|
total=$(($new_count + $(git stripspace --strip-comments <"$todo" | wc -l)))
|
||||||
if test "$last_count" != "$new_count"
|
if test "$last_count" != "$new_count"
|
||||||
then
|
then
|
||||||
last_count=$new_count
|
last_count=$new_count
|
||||||
@ -116,19 +119,19 @@ mark_action_done () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
append_todo_help () {
|
append_todo_help () {
|
||||||
cat >> "$todo" << EOF
|
git stripspace --comment-lines >>"$todo" <<\EOF
|
||||||
#
|
|
||||||
# Commands:
|
Commands:
|
||||||
# p, pick = use commit
|
p, pick = use commit
|
||||||
# r, reword = use commit, but edit the commit message
|
r, reword = use commit, but edit the commit message
|
||||||
# e, edit = use commit, but stop for amending
|
e, edit = use commit, but stop for amending
|
||||||
# s, squash = use commit, but meld into previous commit
|
s, squash = use commit, but meld into previous commit
|
||||||
# f, fixup = like "squash", but discard this commit's log message
|
f, fixup = like "squash", but discard this commit's log message
|
||||||
# x, exec = run command (the rest of the line) using shell
|
x, exec = run command (the rest of the line) using shell
|
||||||
#
|
|
||||||
# These lines can be re-ordered; they are executed from top to bottom.
|
These lines can be re-ordered; they are executed from top to bottom.
|
||||||
#
|
|
||||||
# If you remove a line here THAT COMMIT WILL BE LOST.
|
If you remove a line here THAT COMMIT WILL BE LOST.
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,7 +182,7 @@ die_abort () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
has_action () {
|
has_action () {
|
||||||
sane_grep '^[^#]' "$1" >/dev/null
|
test -n "$(git stripspace --strip-comments <"$1")"
|
||||||
}
|
}
|
||||||
|
|
||||||
is_empty_commit() {
|
is_empty_commit() {
|
||||||
@ -358,10 +361,10 @@ update_squash_messages () {
|
|||||||
if test -f "$squash_msg"; then
|
if test -f "$squash_msg"; then
|
||||||
mv "$squash_msg" "$squash_msg".bak || exit
|
mv "$squash_msg" "$squash_msg".bak || exit
|
||||||
count=$(($(sed -n \
|
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))
|
-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,/^./{
|
sed -e 1d -e '2,/^./{
|
||||||
/^$/d
|
/^$/d
|
||||||
}' <"$squash_msg".bak
|
}' <"$squash_msg".bak
|
||||||
@ -370,8 +373,8 @@ update_squash_messages () {
|
|||||||
commit_message HEAD > "$fixup_msg" || die "Cannot write $fixup_msg"
|
commit_message HEAD > "$fixup_msg" || die "Cannot write $fixup_msg"
|
||||||
count=2
|
count=2
|
||||||
{
|
{
|
||||||
echo "# This is a combination of 2 commits."
|
printf '%s\n' "$comment_char This is a combination of 2 commits."
|
||||||
echo "# The first commit's message is:"
|
printf '%s\n' "$comment_char The first commit's message is:"
|
||||||
echo
|
echo
|
||||||
cat "$fixup_msg"
|
cat "$fixup_msg"
|
||||||
} >"$squash_msg"
|
} >"$squash_msg"
|
||||||
@ -380,21 +383,22 @@ update_squash_messages () {
|
|||||||
squash)
|
squash)
|
||||||
rm -f "$fixup_msg"
|
rm -f "$fixup_msg"
|
||||||
echo
|
echo
|
||||||
echo "# This is the $(nth_string $count) commit message:"
|
printf '%s\n' "$comment_char This is the $(nth_string $count) commit message:"
|
||||||
echo
|
echo
|
||||||
commit_message $2
|
commit_message $2
|
||||||
;;
|
;;
|
||||||
fixup)
|
fixup)
|
||||||
echo
|
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
|
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"
|
esac >>"$squash_msg"
|
||||||
}
|
}
|
||||||
|
|
||||||
peek_next_command () {
|
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
|
# 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
|
rm -f "$msg" "$author_script" "$amend" || exit
|
||||||
read -r command sha1 rest < "$todo"
|
read -r command sha1 rest < "$todo"
|
||||||
case "$command" in
|
case "$command" in
|
||||||
'#'*|''|noop)
|
"$comment_char"*|''|noop)
|
||||||
mark_action_done
|
mark_action_done
|
||||||
;;
|
;;
|
||||||
pick|p)
|
pick|p)
|
||||||
@ -798,15 +802,15 @@ skip)
|
|||||||
do_rest
|
do_rest
|
||||||
;;
|
;;
|
||||||
edit-todo)
|
edit-todo)
|
||||||
sed -e '/^#/d' < "$todo" > "$todo".new
|
git stripspace --strip-comments <"$todo" >"$todo".new
|
||||||
mv -f "$todo".new "$todo"
|
mv -f "$todo".new "$todo"
|
||||||
append_todo_help
|
append_todo_help
|
||||||
cat >> "$todo" << EOF
|
git stripspace --comment-lines >>"$todo" <<\EOF
|
||||||
#
|
|
||||||
# You are editing the todo file of an ongoing interactive rebase.
|
You are editing the todo file of an ongoing interactive rebase.
|
||||||
# To continue rebase after editing, run:
|
To continue rebase after editing, run:
|
||||||
# git rebase --continue
|
git rebase --continue
|
||||||
#
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
git_sequence_editor "$todo" ||
|
git_sequence_editor "$todo" ||
|
||||||
@ -876,7 +880,7 @@ do
|
|||||||
|
|
||||||
if test -z "$keep_empty" && is_empty_commit $shortsha1
|
if test -z "$keep_empty" && is_empty_commit $shortsha1
|
||||||
then
|
then
|
||||||
comment_out="# "
|
comment_out="$comment_char "
|
||||||
else
|
else
|
||||||
comment_out=
|
comment_out=
|
||||||
fi
|
fi
|
||||||
@ -937,20 +941,20 @@ test -s "$todo" || echo noop >> "$todo"
|
|||||||
test -n "$autosquash" && rearrange_squash "$todo"
|
test -n "$autosquash" && rearrange_squash "$todo"
|
||||||
test -n "$cmd" && add_exec_commands "$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
|
EOF
|
||||||
append_todo_help
|
append_todo_help
|
||||||
cat >> "$todo" << EOF
|
git stripspace --comment-lines >>"$todo" <<\EOF
|
||||||
#
|
|
||||||
# However, if you remove everything, the rebase will be aborted.
|
However, if you remove everything, the rebase will be aborted.
|
||||||
#
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
if test -z "$keep_empty"
|
if test -z "$keep_empty"
|
||||||
then
|
then
|
||||||
echo "# Note that empty commits are commented out" >>"$todo"
|
printf '%s\n' "$comment_char Note that empty commits are commented out" >>"$todo"
|
||||||
fi
|
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 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
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user