mirror of
https://github.com/git/git.git
synced 2024-11-24 18:33:43 +08:00
Merge branch 'gr/rebase-i-drop-warn' into maint
"git rebase -i" had a minor regression recently, which stopped considering a line that begins with an indented '#' in its insn sheet not a comment, which is now fixed. * gr/rebase-i-drop-warn: rebase-i: loosen over-eager check_bad_cmd check rebase-i: explicitly accept tab as separator in commands
This commit is contained in:
commit
19d11d43fd
@ -729,8 +729,8 @@ transform_todo_ids () {
|
||||
# that do not have a SHA-1 at the beginning of $rest.
|
||||
;;
|
||||
*)
|
||||
sha1=$(git rev-parse --verify --quiet "$@" ${rest%% *}) &&
|
||||
rest="$sha1 ${rest#* }"
|
||||
sha1=$(git rev-parse --verify --quiet "$@" ${rest%%[ ]*}) &&
|
||||
rest="$sha1 ${rest#*[ ]}"
|
||||
;;
|
||||
esac
|
||||
printf '%s\n' "$command${rest:+ }$rest"
|
||||
@ -857,7 +857,8 @@ add_exec_commands () {
|
||||
# Check if the SHA-1 passed as an argument is a
|
||||
# correct one, if not then print $2 in "$todo".badsha
|
||||
# $1: the SHA-1 to test
|
||||
# $2: the line to display if incorrect SHA-1
|
||||
# $2: the line number of the input
|
||||
# $3: the input filename
|
||||
check_commit_sha () {
|
||||
badsha=0
|
||||
if test -z $1
|
||||
@ -873,9 +874,10 @@ check_commit_sha () {
|
||||
|
||||
if test $badsha -ne 0
|
||||
then
|
||||
line="$(sed -n -e "${2}p" "$3")"
|
||||
warn "Warning: the SHA-1 is missing or isn't" \
|
||||
"a commit in the following line:"
|
||||
warn " - $2"
|
||||
warn " - $line"
|
||||
warn
|
||||
fi
|
||||
|
||||
@ -886,37 +888,31 @@ check_commit_sha () {
|
||||
# from the todolist in stdin
|
||||
check_bad_cmd_and_sha () {
|
||||
retval=0
|
||||
git stripspace --strip-comments |
|
||||
(
|
||||
while read -r line
|
||||
do
|
||||
IFS=' '
|
||||
set -- $line
|
||||
command=$1
|
||||
sha1=$2
|
||||
|
||||
case $command in
|
||||
''|noop|x|"exec")
|
||||
# Doesn't expect a SHA-1
|
||||
;;
|
||||
pick|p|drop|d|reword|r|edit|e|squash|s|fixup|f)
|
||||
if ! check_commit_sha $sha1 "$line"
|
||||
then
|
||||
retval=1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
warn "Warning: the command isn't recognized" \
|
||||
"in the following line:"
|
||||
warn " - $line"
|
||||
warn
|
||||
lineno=0
|
||||
while read -r command rest
|
||||
do
|
||||
lineno=$(( $lineno + 1 ))
|
||||
case $command in
|
||||
"$comment_char"*|''|noop|x|exec)
|
||||
# Doesn't expect a SHA-1
|
||||
;;
|
||||
pick|p|drop|d|reword|r|edit|e|squash|s|fixup|f)
|
||||
if ! check_commit_sha "${rest%%[ ]*}" "$lineno" "$1"
|
||||
then
|
||||
retval=1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
return $retval
|
||||
)
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
line="$(sed -n -e "${lineno}p" "$1")"
|
||||
warn "Warning: the command isn't recognized" \
|
||||
"in the following line:"
|
||||
warn " - $line"
|
||||
warn
|
||||
retval=1
|
||||
;;
|
||||
esac
|
||||
done <"$1"
|
||||
return $retval
|
||||
}
|
||||
|
||||
# Print the list of the SHA-1 of the commits
|
||||
@ -1010,7 +1006,7 @@ check_todo_list () {
|
||||
;;
|
||||
esac
|
||||
|
||||
if ! check_bad_cmd_and_sha <"$todo"
|
||||
if ! check_bad_cmd_and_sha "$todo"
|
||||
then
|
||||
raise_error=t
|
||||
fi
|
||||
|
@ -1227,6 +1227,21 @@ test_expect_success 'static check of bad command' '
|
||||
test C = $(git cat-file commit HEAD^ | sed -ne \$p)
|
||||
'
|
||||
|
||||
test_expect_success 'tabs and spaces are accepted in the todolist' '
|
||||
rebase_setup_and_clean indented-comment &&
|
||||
write_script add-indent.sh <<-\EOF &&
|
||||
(
|
||||
# Turn single spaces into space/tab mix
|
||||
sed "1s/ / /g; 2s/ / /g; 3s/ / /g" "$1"
|
||||
printf "\n\t# comment\n #more\n\t # comment\n"
|
||||
) >$1.new
|
||||
mv "$1.new" "$1"
|
||||
EOF
|
||||
test_set_editor "$(pwd)/add-indent.sh" &&
|
||||
git rebase -i HEAD^^^ &&
|
||||
test E = $(git cat-file commit HEAD | sed -ne \$p)
|
||||
'
|
||||
|
||||
cat >expect <<EOF
|
||||
Warning: the SHA-1 is missing or isn't a commit in the following line:
|
||||
- edit XXXXXXX False commit
|
||||
|
Loading…
Reference in New Issue
Block a user