Ensure schema files are generated as binary files on Windows
Christian Walde [Tue, 5 May 2015 01:34:47 +0000 (03:34 +0200)]
Otherwise they'll be generated with \r newlines in them, which breaks
checksumming and portability of schemas to other OSes.

Changes
lib/DBIx/Class/Schema/Loader/Base.pm
t/lib/dbixcsl_dumper_tests.pm

diff --git a/Changes b/Changes
index f8363ac..d5ccd94 100644 (file)
--- a/Changes
+++ b/Changes
@@ -5,6 +5,7 @@ Revision history for Perl extension DBIx::Class::Schema::Loader
         - Document how to add perltidy markers via filter_generated_code
         - Fix DB2 foreign-key introspection
         - Remove dependency on List::MoreUtils and Sub::Name
+        - Ensure schema files are generated as binary files on Windows
 
 0.07042  2014-08-20
         - Fix unescaped left braces in regexes in tests
index 3cd33f1..da4f91b 100644 (file)
@@ -2187,7 +2187,7 @@ sub _write_classfile {
       $self->omit_timestamp ? undef : POSIX::strftime('%Y-%m-%d %H:%M:%S', localtime)
     );
 
-    open(my $fh, '>:encoding(UTF-8)', $filename)
+    open(my $fh, '>:raw:encoding(UTF-8)', $filename)
         or croak "Cannot open '$filename' for writing: $!";
 
     # Write the top half and its MD5 sum
index d16a3bb..0382c0c 100644 (file)
@@ -210,19 +210,21 @@ sub _test_dumps {
     }
 }
 
-sub _dump_file_like {
+sub _slurp {
     my $path = shift;
-    open(my $dumpfh, '<', $path) or die "Failed to open '$path': $!";
+    open(my $dumpfh, '<:raw', $path) or die "Failed to open '$path': $!";
     my $contents = do { local $/; <$dumpfh>; };
     close($dumpfh);
+    return ($path, $contents);
+}
+
+sub _dump_file_like {
+    my ($path, $contents) = _slurp shift;
     like($contents, $_, "$path matches $_") for @_;
 }
 
 sub _dump_file_not_like {
-    my $path = shift;
-    open(my $dumpfh, '<', $path) or die "Failed to open '$path': $!";
-    my $contents = do { local $/; <$dumpfh>; };
-    close($dumpfh);
+    my ($path, $contents) = _slurp shift;
     unlike($contents, $_, "$path does not match $_") for @_;
 }