OSDN Git Service

git-svn: convert CRLF to LF in commit message to SVN
authorEric Wong <e@80x24.org>
Thu, 14 Dec 2017 00:05:08 +0000 (00:05 +0000)
committerEric Wong <e@80x24.org>
Thu, 14 Dec 2017 00:09:38 +0000 (00:09 +0000)
Subversion since 1.6 does not accept CR characters in the commit
message, so filter it out on our end before 'git svn dcommit' sets
the svn:log property.

Reported-by: Brian Bennett <Brian.Bennett@Transamerica.com>
Signed-off-by: Eric Wong <e@80x24.org>
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