From: Rafael Kitover Date: Fri, 22 Jan 2010 11:53:13 +0000 (+0000) Subject: fixes for Win32 X-Git-Tag: 0.05000~12 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=281d0f3e72ad8c7c44e99496bc6b559af7aaa6fa;p=dbsrgits%2FDBIx-Class-Schema-Loader.git fixes for Win32 --- diff --git a/Makefile.PL b/Makefile.PL index ff027be..df136e1 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -26,6 +26,7 @@ requires 'Carp::Clan' => 0; requires 'Class::Inspector' => 0; requires 'DBIx::Class' => '0.08114'; requires 'Class::Unload' => 0; +requires 'File::Slurp' => '9999.13'; install_script 'script/dbicdump'; diff --git a/lib/DBIx/Class/Schema/Loader/Base.pm b/lib/DBIx/Class/Schema/Loader/Base.pm index 75b1459..4786c84 100644 --- a/lib/DBIx/Class/Schema/Loader/Base.pm +++ b/lib/DBIx/Class/Schema/Loader/Base.pm @@ -602,8 +602,9 @@ sub _find_file_in_inc { foreach my $prefix (@INC) { my $fullpath = File::Spec->catfile($prefix, $file); return $fullpath if -f $fullpath - and Cwd::abs_path($fullpath) ne - (Cwd::abs_path(File::Spec->catfile($self->dump_directory, $file)) || ''); + # abs_path throws on Windows for nonexistant files + and eval { Cwd::abs_path($fullpath) } ne + (eval { Cwd::abs_path(File::Spec->catfile($self->dump_directory, $file)) } || ''); } return; diff --git a/t/23dumpmore.t b/t/23dumpmore.t index dd67831..29fee07 100644 --- a/t/23dumpmore.t +++ b/t/23dumpmore.t @@ -6,10 +6,6 @@ use IPC::Open3; use make_dbictest_db; require DBIx::Class::Schema::Loader; -$^O eq 'MSWin32' && plan(skip_all => -"ActiveState perl produces additional warnings, and this test uses unix paths" -); - my $DUMP_PATH = './t/_dump'; sub dump_directly { @@ -48,7 +44,9 @@ sub dump_dbicdump { push @cmd, $tdata{classname}, $make_dbictest_db::dsn; # make sure our current @INC gets used by dbicdump - local $ENV{PERL5LIB} = join ":", @INC, $ENV{PERL5LIB}; + foreach my $inc ($ENV{PERL5LIB}, reverse @INC) { + splice @cmd, 1, 0, '-I', $inc; + } my ($in, $out, $err); my $pid = open3($in, $out, $err, @cmd); diff --git a/t/25backcompat_v4.t b/t/25backcompat_v4.t index 8b62986..beb245d 100644 --- a/t/25backcompat_v4.t +++ b/t/25backcompat_v4.t @@ -6,6 +6,7 @@ use File::Path qw/rmtree make_path/; use Class::Unload; use File::Temp qw/tempfile tempdir/; use IO::File; +use File::Slurp 'slurp'; use DBIx::Class::Schema::Loader (); use lib qw(t/lib); use make_dbictest_db2; @@ -46,7 +47,7 @@ my $SCHEMA_CLASS = 'DBIXCSL_Test::Schema'; # test upgraded dynamic schema with external content loaded { - my $temp_dir = tempdir; + my $temp_dir = tempdir(CLEANUP => 1); push @INC, $temp_dir; my $external_result_dir = join '/', $temp_dir, split /::/, $SCHEMA_CLASS; @@ -99,13 +100,12 @@ EOF run_v5_tests($res); - rmtree $temp_dir; pop @INC; } # test upgraded dynamic schema with use_namespaces with external content loaded { - my $temp_dir = tempdir; + my $temp_dir = tempdir(CLEANUP => 1); push @INC, $temp_dir; my $external_result_dir = join '/', $temp_dir, split /::/, $SCHEMA_CLASS; @@ -158,14 +158,13 @@ EOF run_v5_tests($res); - rmtree $temp_dir; pop @INC; } # test upgraded static schema with external content loaded { - my $temp_dir = tempdir; + my $temp_dir = tempdir(CLEANUP => 1); push @INC, $temp_dir; my $external_result_dir = join '/', $temp_dir, split /::/, $SCHEMA_CLASS; @@ -213,7 +212,7 @@ EOF 'names are translated in static schema'; my $file = $schema->_loader->_get_dump_filename($res->{classes}{quuxs}); - my $code = do { local ($/, @ARGV) = (undef, $file); <> }; + my $code = slurp $file; like $code, qr/package ${SCHEMA_CLASS}::Quux;/, 'package line translated correctly from external custom content in static dump'; @@ -221,7 +220,6 @@ EOF like $code, qr/sub a_method { 'dongs' }/, 'external custom content loaded into static dump correctly'; - rmtree $temp_dir; pop @INC; } @@ -248,7 +246,7 @@ EOF my $quuxs_pm = $schema->_loader ->_get_dump_filename($res->{classes}{quuxs}); { - local ($^I, @ARGV) = ('', $quuxs_pm); + local ($^I, @ARGV) = ('.bak', $quuxs_pm); while (<>) { if (/DO NOT MODIFY THIS OR ANYTHING ABOVE/) { print; @@ -263,6 +261,8 @@ EOF print; } } + close ARGV; + unlink "${quuxs_pm}.bak" or die $^E; } # Rerun the loader in backcompat mode to make sure it's still in backcompat @@ -305,7 +305,7 @@ EOF 'unsingularized class names in custom content are translated'; my $file = $schema->_loader->_get_dump_filename($res->{classes}{quuxs}); - my $code = do { local ($/, @ARGV) = (undef, $file); <> }; + my $code = slurp $file; like $code, qr/sub a_method { 'mtfnpy' }/, 'custom content from unsingularized Result loaded into static dump correctly'; @@ -335,7 +335,7 @@ EOF my $quuxs_pm = $schema->_loader ->_get_dump_filename($res->{classes}{quuxs}); { - local ($^I, @ARGV) = ('', $quuxs_pm); + local ($^I, @ARGV) = ('.bak', $quuxs_pm); while (<>) { if (/DO NOT MODIFY THIS OR ANYTHING ABOVE/) { print; @@ -350,6 +350,8 @@ EOF print; } } + close ARGV; + unlink "${quuxs_pm}.bak" or die $^E; } # now upgrade the schema @@ -392,7 +394,7 @@ EOF 'unsingularized class names in custom content are translated'; my $file = $schema->_loader->_get_dump_filename($res->{classes}{quuxs}); - my $code = do { local ($/, @ARGV) = (undef, $file); <> }; + my $code = slurp $file; like $code, qr/sub a_method { 'mtfnpy' }/, 'custom content from unsingularized Result loaded into static dump correctly'; @@ -401,7 +403,7 @@ EOF # test running against v4 schema with load_namespaces, upgrade to v5 but # downgrade to load_classes, with external content { - my $temp_dir = tempdir; + my $temp_dir = tempdir(CLEANUP => 1); push @INC, $temp_dir; my $external_result_dir = join '/', $temp_dir, split /::/, @@ -455,7 +457,7 @@ EOF my $quuxs_pm = $schema->_loader ->_get_dump_filename($res->{classes}{quuxs}); { - local ($^I, @ARGV) = ('', $quuxs_pm); + local ($^I, @ARGV) = ('.bak', $quuxs_pm); while (<>) { if (/DO NOT MODIFY THIS OR ANYTHING ABOVE/) { print; @@ -470,6 +472,8 @@ EOF print; } } + close ARGV; + unlink "${quuxs_pm}.bak" or die $^E; } # now upgrade the schema to v5 but downgrade to load_classes @@ -527,7 +531,7 @@ EOF 'names are translated in static schema'; my $file = $schema->_loader->_get_dump_filename($res->{classes}{quuxs}); - my $code = do { local ($/, @ARGV) = (undef, $file); <> }; + my $code = slurp $file; like $code, qr/sub a_method { 'mtfnpy' }/, 'custom content from unsingularized Result loaded into static dump correctly'; @@ -535,7 +539,6 @@ EOF like $code, qr/sub b_method { 'dongs' }/, 'external content from unsingularized Result loaded into static dump correctly'; - rmtree $temp_dir; pop @INC; } @@ -567,7 +570,7 @@ EOF my $quuxs_pm = $schema->_loader ->_get_dump_filename($res->{classes}{quuxs}); { - local ($^I, @ARGV) = ('', $quuxs_pm); + local ($^I, @ARGV) = ('.bak', $quuxs_pm); while (<>) { if (/DO NOT MODIFY THIS OR ANYTHING ABOVE/) { print; @@ -582,6 +585,8 @@ EOF print; } } + close ARGV; + unlink "${quuxs_pm}.bak" or die $^E; } # test that with no use_namespaces option, there is a warning and @@ -643,7 +648,7 @@ EOF 'un-namespaced class names in custom content are translated'; my $file = $schema->_loader->_get_dump_filename($res->{classes}{quuxs}); - my $code = do { local ($/, @ARGV) = (undef, $file); <> }; + my $code = slurp $file; like $code, qr/sub a_method { 'mtfnpy' }/, 'custom content from un-namespaced Result loaded into static dump correctly'; @@ -677,7 +682,7 @@ EOF my $quuxs_pm = $schema->_loader ->_get_dump_filename($res->{classes}{quuxs}); { - local ($^I, @ARGV) = ('', $quuxs_pm); + local ($^I, @ARGV) = ('.bak', $quuxs_pm); while (<>) { if (/DO NOT MODIFY THIS OR ANYTHING ABOVE/) { print; @@ -692,6 +697,8 @@ EOF print; } } + close ARGV; + unlink "${quuxs_pm}.bak" or die $^E; } # test that with no use_namespaces option, use_namespaces is preserved @@ -753,7 +760,7 @@ EOF 'downgrade'; my $file = $schema->_loader->_get_dump_filename($res->{classes}{quuxs}); - my $code = do { local ($/, @ARGV) = (undef, $file); <> }; + my $code = slurp $file; like $code, qr/sub a_method { 'mtfnpy' }/, 'custom content from namespaced Result loaded into static dump correctly '. @@ -791,7 +798,7 @@ EOF my $quuxs_pm = $schema->_loader ->_get_dump_filename($res->{classes}{quuxs}); { - local ($^I, @ARGV) = ('', $quuxs_pm); + local ($^I, @ARGV) = ('.bak', $quuxs_pm); while (<>) { if (/DO NOT MODIFY THIS OR ANYTHING ABOVE/) { print; @@ -806,6 +813,8 @@ EOF print; } } + close ARGV; + unlink "${quuxs_pm}.bak" or die $^E; } # test that with no use_namespaces option, use_namespaces is preserved, and @@ -868,7 +877,7 @@ EOF 'downgrade'; my $file = $schema->_loader->_get_dump_filename($res->{classes}{quuxs}); - my $code = do { local ($/, @ARGV) = (undef, $file); <> }; + my $code = slurp $file; like $code, qr/sub a_method { 'mtfnpy' }/, 'custom content from namespaced Result loaded into static dump correctly '. @@ -879,7 +888,7 @@ EOF { rmtree $DUMP_DIR; mkdir $DUMP_DIR; - my $temp_dir = tempdir; + my $temp_dir = tempdir(CLEANUP => 1); push @INC, $temp_dir; my $external_result_dir = join '/', $temp_dir, split /::/, @@ -913,7 +922,7 @@ EOF my $quuxs_pm = $schema->_loader ->_get_dump_filename($res->{classes}{quuxs}); { - local ($^I, @ARGV) = ('', $quuxs_pm); + local ($^I, @ARGV) = ('.bak', $quuxs_pm); while (<>) { if (/DO NOT MODIFY THIS OR ANYTHING ABOVE/) { print; @@ -928,6 +937,8 @@ EOF print; } } + close ARGV; + unlink "${quuxs_pm}.bak" or die $^E; } # Rewrite implicit 'Result' to 'MyResult' @@ -959,7 +970,7 @@ EOF 'class names in custom content are translated when rewriting result_namespace'; my $file = $schema->_loader->_get_dump_filename($res->{classes}{quuxs}); - my $code = do { local ($/, @ARGV) = (undef, $file); <> }; + my $code = slurp $file; like $code, qr/sub a_method { 'mtfnpy' }/, 'custom content from namespaced Result loaded into static dump correctly '. @@ -1007,7 +1018,7 @@ EOF 'result_namespace'; $file = $schema->_loader->_get_dump_filename($res->{classes}{quuxs}); - $code = do { local ($/, @ARGV) = (undef, $file); <> }; + $code = slurp $file; like $code, qr/sub a_method { 'mtfnpy' }/, 'custom content from namespaced Result loaded into static dump correctly '. @@ -1016,7 +1027,6 @@ EOF like $code, qr/sub c_method { 'dongs' }/, 'external content from unsingularized Result loaded into static dump correctly'; - rmtree $temp_dir; pop @INC; } @@ -1028,7 +1038,7 @@ EOF my $schema = $res->{schema}; my $file = $schema->_loader->_get_dump_filename($SCHEMA_CLASS); - my $code = do { local ($/, @ARGV) = (undef, $file); <> }; + my $code = slurp $file; my ($dumped_ver) = $code =~ /^# Created by DBIx::Class::Schema::Loader v(\S+)/m; @@ -1049,7 +1059,7 @@ EOF my $bar_pm = $schema->_loader ->_get_dump_filename($res->{classes}{bar}); { - local ($^I, @ARGV) = ('', $bar_pm); + local ($^I, @ARGV) = ('.bak', $bar_pm); while (<>) { if (/DO NOT MODIFY THIS OR ANYTHING ABOVE/) { print; @@ -1064,6 +1074,8 @@ EOF print; } } + close ARGV; + unlink "${bar_pm}.bak" or die $^E; } # now upgrade the schema @@ -1081,7 +1093,7 @@ EOF 'name are translated'; my $file = $schema->_loader->_get_dump_filename($res->{classes}{bar}); - my $code = do { local ($/, @ARGV) = (undef, $file); <> }; + my $code = slurp $file; like $code, qr/sub a_method { 'lalala' }/, 'custom content from Result with unchanged name loaded into static dump ' . diff --git a/t/backcompat/0.04006/23dumpmore.t b/t/backcompat/0.04006/23dumpmore.t index 72b08be..d513de7 100644 --- a/t/backcompat/0.04006/23dumpmore.t +++ b/t/backcompat/0.04006/23dumpmore.t @@ -8,9 +8,6 @@ require DBIx::Class::Schema::Loader; plan skip_all => 'set SCHEMA_LOADER_TESTS_BACKCOMPAT to enable these tests' unless $ENV{SCHEMA_LOADER_TESTS_BACKCOMPAT}; -$^O eq 'MSWin32' && plan skip_all => -"Win32 perl produces additional warnings, and this test uses unix paths"; - my $DUMP_PATH = './t/_dump'; sub do_dump_test {