Merge branch 'ew/svn-crlf'
authorJunio C Hamano <gitster@pobox.com>
Thu, 28 Dec 2017 22:08:46 +0000 (14:08 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 28 Dec 2017 22:08:46 +0000 (14:08 -0800)
"git svn" has been updated to strip CRs in the commit messages, as
recent versions of Subversion rejects them.

* ew/svn-crlf:
  git-svn: convert CRLF to LF in commit message to SVN

git-svn.perl
t/t9169-git-svn-dcommit-crlf.sh [new file with mode: 0755]

index d240418..aa242d4 100755 (executable)
@@ -1865,6 +1865,7 @@ sub get_commit_entry {
                        }
                }
                $msgbuf =~ s/\s+$//s;
+               $msgbuf =~ s/\r\n/\n/sg; # SVN 1.6+ disallows CRLF
                if ($Git::SVN::_add_author_from && defined($author)
                    && !$saw_from) {
                        $msgbuf .= "\n\nFrom: $author";
diff --git a/t/t9169-git-svn-dcommit-crlf.sh b/t/t9169-git-svn-dcommit-crlf.sh
new file mode 100755 (executable)
index 0000000..54b1f61
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+test_description='git svn dcommit CRLF'
+. ./lib-git-svn.sh
+
+test_expect_success 'setup commit repository' '
+       svn_cmd mkdir -m "$test_description" "$svnrepo/dir" &&
+       git svn clone "$svnrepo" work &&
+       (
+               cd work &&
+               echo foo >>foo &&
+               git update-index --add foo &&
+               printf "a\\r\\n\\r\\nb\\r\\nc\\r\\n" >cmt &&
+               p=$(git rev-parse HEAD) &&
+               t=$(git write-tree) &&
+               cmt=$(git commit-tree -p $p $t <cmt) &&
+               git update-ref refs/heads/master $cmt &&
+               git cat-file commit HEAD | tail -n4 >out &&
+               test_cmp cmt out &&
+               git svn dcommit &&
+               printf "a\\n\\nb\\nc\\n" >exp &&
+               git cat-file commit HEAD | sed -ne 6,9p >out &&
+               test_cmp exp out
+       )
+'
+
+test_done