about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2017-12-14 00:05:08 +0000
committerEric Wong <e@80x24.org>2017-12-14 00:09:38 +0000
commit95450bbbaaacaf2d603a4fbded25d55243dfb291 (patch)
tree5cfb5660c8363eb15cf8b09837fd67f6419dd88f
parent95ec6b1b3393eb6e26da40c565520a8db9796e9f (diff)
downloadgit-svn-svn-crlf.tar.gz
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>
-rwxr-xr-xgit-svn.perl1
-rwxr-xr-xt/t9169-git-svn-dcommit-crlf.sh27
2 files changed, 28 insertions, 0 deletions
diff --git a/git-svn.perl b/git-svn.perl
index d2404184ba..aa242d4f4f 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -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
index 0000000000..54b1f61a2a
--- /dev/null
+++ b/t/t9169-git-svn-dcommit-crlf.sh
@@ -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