From: Junio C Hamano Date: Fri, 30 Oct 2015 20:07:06 +0000 (-0700) Subject: Merge branch 'gr/rebase-i-drop-warn' X-Git-Tag: v2.7.0-rc0~52 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/f60b5dc68cdb7a75e148c5b98238a880363cf870?hp=7fd4181c661260f10bf8cb3e80489c230205d774 Merge branch 'gr/rebase-i-drop-warn' Recent update to "rebase -i" that tries to sanity check the edited insn sheet before it uses it has become too picky on Windows where CRLF left by the editor is turned into a trailing CR on the line read via the "read" built-in command. * gr/rebase-i-drop-warn: rebase-i: work around Windows CRLF line endings t3404: "rebase -i" gets broken when insn sheet uses CR/LF line endings --- diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index d65c06eff3..30edb17925 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -77,6 +77,10 @@ amend="$state_dir"/amend rewritten_list="$state_dir"/rewritten-list rewritten_pending="$state_dir"/rewritten-pending +# Work around Git for Windows' Bash whose "read" does not strip CRLF +# and leaves CR at the end instead. +cr=$(printf "\015") + strategy_args= if test -n "$do_merge" then @@ -518,6 +522,10 @@ do_next () { "$comment_char"*|''|noop|drop|d) mark_action_done ;; + "$cr") + # Work around CR left by "read" (e.g. with Git for Windows' Bash). + mark_action_done + ;; pick|p) comment_for_reflog pick @@ -896,6 +904,10 @@ check_bad_cmd_and_sha () { "$comment_char"*|''|noop|x|exec) # Doesn't expect a SHA-1 ;; + "$cr") + # Work around CR left by "read" (e.g. with Git for + # Windows' Bash). + ;; pick|p|drop|d|reword|r|edit|e|squash|s|fixup|f) if ! check_commit_sha "${rest%%[ ]*}" "$lineno" "$1" then diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh index 3de0b1dcfd..98eb49ac23 100755 --- a/t/t3404-rebase-interactive.sh +++ b/t/t3404-rebase-interactive.sh @@ -1261,4 +1261,16 @@ test_expect_success 'static check of bad SHA-1' ' test E = $(git cat-file commit HEAD | sed -ne \$p) ' +test_expect_success 'editor saves as CR/LF' ' + git checkout -b with-crlf && + write_script add-crs.sh <<-\EOF && + sed -e "s/\$/Q/" <"$1" | tr Q "\\015" >"$1".new && + mv -f "$1".new "$1" + EOF + ( + test_set_editor "$(pwd)/add-crs.sh" && + git rebase -i HEAD^ + ) +' + test_done