Hello community, here is the log from the commit of package perl-DBIx-Class-DeploymentHandler for openSUSE:Factory checked in at 2019-05-24 11:29:26 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-DBIx-Class-DeploymentHandler (Old) and /work/SRC/openSUSE:Factory/.perl-DBIx-Class-DeploymentHandler.new.5148 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "perl-DBIx-Class-DeploymentHandler" Fri May 24 11:29:26 2019 rev:10 rq:702485 version:0.002231 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-DBIx-Class-DeploymentHandler/perl-DBIx-Class-DeploymentHandler.changes 2018-01-24 15:29:51.000198499 +0100 +++ /work/SRC/openSUSE:Factory/.perl-DBIx-Class-DeploymentHandler.new.5148/perl-DBIx-Class-DeploymentHandler.changes 2019-05-24 11:29:31.289435266 +0200 @@ -1,0 +2,55 @@ +Sat May 11 05:06:17 UTC 2019 - Stephan Kulow <coolo@suse.com> + +- updated to 0.002231 + see /usr/share/doc/packages/perl-DBIx-Class-DeploymentHandler/Changes + + 0.002231 2019-05-10 09:28:36-04:00 America/New_York + - Revert conversion to Moo; this code is now identical to v0.002224, with one + small fix from 0.002225, having to do with Pg chunk-splitting when there + is no semicolon + +------------------------------------------------------------------- +Wed Apr 3 06:50:44 UTC 2019 - Stephan Kulow <coolo@suse.com> + +- updated to 0.002230 + see /usr/share/doc/packages/perl-DBIx-Class-DeploymentHandler/Changes + + 0.002230 2019-03-14 18:31:07+00:00 Europe/London + - MooX::Role::Parameterized forces min perl 5.010 + + 0.002229 2019-03-14 18:13:25+00:00 Europe/London + - convert from Package::Variant to MooX::Role::Parameterized - fix #67 + + 0.002228 2019-03-14 07:13:33+00:00 Europe/London + - IO::All dep to 0.87 in case causing Win32 problem + +------------------------------------------------------------------- +Wed Mar 13 15:28:17 UTC 2019 - Stephan Kulow <coolo@suse.com> + +- updated to 0.002227 + see /usr/share/doc/packages/perl-DBIx-Class-DeploymentHandler/Changes + + 0.002227 2019-03-11 05:58:07+00:00 Europe/London + - test version-objects in 5.8-10 compatible way + + 0.002226 2019-03-11 03:14:04+00:00 Europe/London + - relax the Pg chunk-splitting when no ";" + - better test of version-object on schema + + 0.002225 2019-03-11 01:56:47+00:00 Europe/London + - convert to Type::Tiny + - Port to Moo + - convert parameterised role to Package::Variant + - convert file-handling to IO::All + + 0.002224 2019-03-09 05:16:47+00:00 Europe/London + - binmode on all filehandles so lines always end LF - thanks @wchristian + - more sophisticated SQL parsing handles Pg $$ stuff - thanks @mrenvoize + for report + + 0.002223 2019-03-07 01:36:36+00:00 Europe/London + - handle "package NAME VERSION" in a DBIx::Class::Schema - $VERSION + will be object + - add needed dep - thanks @wheinze + +------------------------------------------------------------------- Old: ---- DBIx-Class-DeploymentHandler-0.002222.tar.gz New: ---- DBIx-Class-DeploymentHandler-0.002231.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-DBIx-Class-DeploymentHandler.spec ++++++ --- /var/tmp/diff_new_pack.9q6ofL/_old 2019-05-24 11:29:32.273435012 +0200 +++ /var/tmp/diff_new_pack.9q6ofL/_new 2019-05-24 11:29:32.277435011 +0200 @@ -1,7 +1,7 @@ # # spec file for package perl-DBIx-Class-DeploymentHandler # -# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,19 +12,19 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # Name: perl-DBIx-Class-DeploymentHandler -Version: 0.002222 +Version: 0.002231 Release: 0 %define cpan_name DBIx-Class-DeploymentHandler Summary: Extensible DBIx::Class deployment -License: Artistic-1.0 or GPL-1.0+ +License: Artistic-1.0 OR GPL-1.0-or-later Group: Development/Libraries/Perl -Url: http://search.cpan.org/dist/DBIx-Class-DeploymentHandler/ -Source0: https://cpan.metacpan.org/authors/id/F/FR/FREW/%{cpan_name}-%{version}.tar.gz +Url: https://metacpan.org/release/%{cpan_name} +Source0: https://cpan.metacpan.org/authors/id/M/MM/MMCCLIMON/%{cpan_name}-%{version}.tar.gz Source1: cpanspec.yml BuildArch: noarch BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -35,6 +35,7 @@ BuildRequires: perl(DBD::SQLite) >= 1.35 BuildRequires: perl(DBIx::Class) >= 0.08121 BuildRequires: perl(Log::Contextual) >= 0.005005 +BuildRequires: perl(Module::Runtime) >= 0.001 BuildRequires: perl(Moo) >= 1.003 BuildRequires: perl(Moose) >= 1 BuildRequires: perl(MooseX::Role::Parameterized) >= 0.18 @@ -54,6 +55,7 @@ Requires: perl(Context::Preserve) >= 0.01 Requires: perl(DBIx::Class) >= 0.08121 Requires: perl(Log::Contextual) >= 0.005005 +Requires: perl(Module::Runtime) >= 0.001 Requires: perl(Moo) >= 1.003 Requires: perl(Moose) >= 1 Requires: perl(MooseX::Role::Parameterized) >= 0.18 @@ -102,11 +104,11 @@ %setup -q -n %{cpan_name}-%{version} %build -%{__perl} Makefile.PL INSTALLDIRS=vendor -%{__make} %{?_smp_mflags} +perl Makefile.PL INSTALLDIRS=vendor +make %{?_smp_mflags} %check -%{__make} test +make test %install %perl_make_install ++++++ DBIx-Class-DeploymentHandler-0.002222.tar.gz -> DBIx-Class-DeploymentHandler-0.002231.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/Changes new/DBIx-Class-DeploymentHandler-0.002231/Changes --- old/DBIx-Class-DeploymentHandler-0.002222/Changes 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/Changes 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,42 @@ Revision history for DBIx-Class-DeploymentHandler +0.002231 2019-05-10 09:28:36-04:00 America/New_York + - Revert conversion to Moo; this code is now identical to v0.002224, with one + small fix from 0.002225, having to do with Pg chunk-splitting when there + is no semicolon + +0.002230 2019-03-14 18:31:07+00:00 Europe/London + - MooX::Role::Parameterized forces min perl 5.010 + +0.002229 2019-03-14 18:13:25+00:00 Europe/London + - convert from Package::Variant to MooX::Role::Parameterized - fix #67 + +0.002228 2019-03-14 07:13:33+00:00 Europe/London + - IO::All dep to 0.87 in case causing Win32 problem + +0.002227 2019-03-11 05:58:07+00:00 Europe/London + - test version-objects in 5.8-10 compatible way + +0.002226 2019-03-11 03:14:04+00:00 Europe/London + - relax the Pg chunk-splitting when no ";" + - better test of version-object on schema + +0.002225 2019-03-11 01:56:47+00:00 Europe/London + - convert to Type::Tiny + - Port to Moo + - convert parameterised role to Package::Variant + - convert file-handling to IO::All + +0.002224 2019-03-09 05:16:47+00:00 Europe/London + - binmode on all filehandles so lines always end LF - thanks @wchristian + - more sophisticated SQL parsing handles Pg $$ stuff - thanks @mrenvoize + for report + +0.002223 2019-03-07 01:36:36+00:00 Europe/London + - handle "package NAME VERSION" in a DBIx::Class::Schema - $VERSION + will be object + - add needed dep - thanks @wheinze + 0.002222 2018-01-06 10:25:42-08:00 America/Los_Angeles - Stop defaulting to include DROP TABLE, introduced by fix in prior release (Fixes GH#59, thanks for the report Eugen Konkov!) @@ -7,6 +44,7 @@ 0.002221 2017-09-27 21:19:42-04:00 America/New_York - Allow easy changing the version storage table name, which makes subclassing much less painful (Thanks Andrew Gregory!) + - Above change renamed database_version => initial_version - Fix args passed to SQL::Translator::Diff - Add Michael McClimon as comaint diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/LICENSE new/DBIx-Class-DeploymentHandler-0.002231/LICENSE --- old/DBIx-Class-DeploymentHandler-0.002222/LICENSE 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/LICENSE 2019-05-10 15:28:52.000000000 +0200 @@ -1,4 +1,4 @@ -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. @@ -12,7 +12,7 @@ --- The GNU General Public License, Version 1, February 1989 --- -This software is Copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is Copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software, licensed under: @@ -272,7 +272,7 @@ --- The Artistic License 1.0 --- -This software is Copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is Copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software, licensed under: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/MANIFEST new/DBIx-Class-DeploymentHandler-0.002231/MANIFEST --- old/DBIx-Class-DeploymentHandler-0.002222/MANIFEST 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/MANIFEST 2019-05-10 15:28:52.000000000 +0200 @@ -1,4 +1,4 @@ -# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.009. +# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.010. Changes LICENSE MANIFEST @@ -37,6 +37,7 @@ lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard/VersionResultSet.pm lib/DBIx/Class/DeploymentHandler/WithApplicatorDumple.pm lib/DBIx/Class/DeploymentHandler/WithReasonableDefaults.pm +t/00-report-prereqs.t t/02-instantiation-alt-result-class.t t/02-instantiation-no-ddl.t t/02-instantiation-wo-component.t @@ -53,6 +54,7 @@ t/alt-result-class-lib/DBICVersionAlt_v4.pm t/author-pod-syntax.t t/bugs/01-emailed-bug-01.t +t/customised.t t/deploy_methods/coderef-leakage.t t/deploy_methods/script-helpers.t t/deploy_methods/sql_translator.t diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/META.json new/DBIx-Class-DeploymentHandler-0.002231/META.json --- old/DBIx-Class-DeploymentHandler-0.002222/META.json 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/META.json 2019-05-10 15:28:52.000000000 +0200 @@ -4,7 +4,7 @@ "Arthur Axel \"fREW\" Schmidt <frioux+cpan@gmail.com>" ], "dynamic_config" : 0, - "generated_by" : "Dist::Zilla version 6.009, CPAN::Meta::Converter version 2.150010", + "generated_by" : "Dist::Zilla version 6.010, CPAN::Meta::Converter version 2.150010", "license" : [ "perl_5" ], @@ -31,6 +31,7 @@ "Context::Preserve" : "0.01", "DBIx::Class" : "0.08121", "Log::Contextual" : "0.005005", + "Module::Runtime" : "0.001", "Moo" : "1.003", "Moose" : "1", "MooseX::Role::Parameterized" : "0.18", @@ -45,6 +46,9 @@ } }, "test" : { + "recommends" : { + "DBIx::Class::Schema::Loader" : "0" + }, "requires" : { "DBD::SQLite" : "1.35", "File::Temp" : "0", @@ -67,7 +71,7 @@ "web" : "https://github.com/frioux/DBIx-Class-DeploymentHandler" } }, - "version" : "0.002222", - "x_serialization_backend" : "Cpanel::JSON::XS version 3.023" + "version" : "0.002231", + "x_serialization_backend" : "Cpanel::JSON::XS version 3.0239" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/META.yml new/DBIx-Class-DeploymentHandler-0.002231/META.yml --- old/DBIx-Class-DeploymentHandler-0.002222/META.yml 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/META.yml 2019-05-10 15:28:52.000000000 +0200 @@ -12,7 +12,7 @@ configure_requires: ExtUtils::MakeMaker: '0' dynamic_config: 0 -generated_by: 'Dist::Zilla version 6.009, CPAN::Meta::Converter version 2.150010' +generated_by: 'Dist::Zilla version 6.010, CPAN::Meta::Converter version 2.150010' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html @@ -24,6 +24,7 @@ Context::Preserve: '0.01' DBIx::Class: '0.08121' Log::Contextual: '0.005005' + Module::Runtime: '0.001' Moo: '1.003' Moose: '1' MooseX::Role::Parameterized: '0.18' @@ -39,5 +40,5 @@ bugtracker: https://github.com/frioux/DBIx-Class-DeploymentHandler/issues homepage: https://github.com/frioux/DBIx-Class-DeploymentHandler repository: https://github.com/frioux/DBIx-Class-DeploymentHandler.git -version: '0.002222' +version: '0.002231' x_serialization_backend: 'YAML::Tiny version 1.70' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/Makefile.PL new/DBIx-Class-DeploymentHandler-0.002231/Makefile.PL --- old/DBIx-Class-DeploymentHandler-0.002222/Makefile.PL 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/Makefile.PL 2019-05-10 15:28:52.000000000 +0200 @@ -1,4 +1,4 @@ -# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.009. +# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.010. use strict; use warnings; @@ -21,6 +21,7 @@ "Context::Preserve" => "0.01", "DBIx::Class" => "0.08121", "Log::Contextual" => "0.005005", + "Module::Runtime" => "0.001", "Moo" => "1.003", "Moose" => 1, "MooseX::Role::Parameterized" => "0.18", @@ -41,7 +42,7 @@ "Test::Requires" => "0.06", "aliased" => 0 }, - "VERSION" => "0.002222", + "VERSION" => "0.002231", "test" => { "TESTS" => "t/*.t t/bugs/*.t t/deploy_methods/*.t t/version_handlers/*.t t/version_storages/*.t" } @@ -56,6 +57,7 @@ "DBIx::Class" => "0.08121", "File::Temp" => 0, "Log::Contextual" => "0.005005", + "Module::Runtime" => "0.001", "Moo" => "1.003", "Moose" => 1, "MooseX::Role::Parameterized" => "0.18", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/README new/DBIx-Class-DeploymentHandler-0.002231/README --- old/DBIx-Class-DeploymentHandler-0.002222/README 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/README 2019-05-10 15:28:52.000000000 +0200 @@ -176,6 +176,25 @@ > METHODS + This is just a "stub" section to make clear that the bulk of + implementation is documented in DBIx::Class::DeploymentHandler::Dad. + Since that is implemented using Moose class, see "ATTRIBUTES" in + DBIx::Class::DeploymentHandler::Dad and "ORTHODOX METHODS" in + DBIx::Class::DeploymentHandler::Dad for available attributes to pass to + "new", and methods callable on the resulting object. + + new + my $s = My::Schema->connect(...); + my $dh = DBIx::Class::DeploymentHandler->new({ + schema => $s, + databases => 'SQLite', + sql_translator_args => { add_drop_table => 0 }, + }); + + See "ATTRIBUTES" in DBIx::Class::DeploymentHandler::Dad and "ORTHODOX + METHODS" in DBIx::Class::DeploymentHandler::Dad for available attributes + to pass to "new". + prepare_version_storage_install $dh->prepare_version_storage_install @@ -197,7 +216,7 @@ Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com> COPYRIGHT AND LICENSE - This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. + This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/cpanfile new/DBIx-Class-DeploymentHandler-0.002231/cpanfile --- old/DBIx-Class-DeploymentHandler-0.002222/cpanfile 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/cpanfile 2019-05-10 15:28:52.000000000 +0200 @@ -4,6 +4,7 @@ requires 'Log::Contextual' => 0.005005; requires 'Path::Class' => 0.26; requires 'DBIx::Class' => 0.08121; +requires 'Module::Runtime' => 0.001; requires 'Moose' => 1.0; requires 'Moo' => 1.003000; requires 'MooseX::Role::Parameterized' => 0.18; @@ -22,4 +23,5 @@ requires 'aliased' => 0; requires 'Test::Requires' => 0.06; requires 'File::Temp' => 0; + recommends 'DBIx::Class::Schema::Loader' => 0; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/dist.ini new/DBIx-Class-DeploymentHandler-0.002231/dist.ini --- old/DBIx-Class-DeploymentHandler-0.002222/dist.ini 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/dist.ini 2019-05-10 15:28:52.000000000 +0200 @@ -2,7 +2,7 @@ author = Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com> license = Perl_5 copyright_holder = Arthur Axel "fREW" Schmidt -version = 0.002222 +version = 0.002231 ; authordep Pod::Weaver::Plugin::Ditaa diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/Dad.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/Dad.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/Dad.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/Dad.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::Dad; -$DBIx::Class::DeploymentHandler::Dad::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::Dad::VERSION = '0.002231'; # ABSTRACT: Parent class for DeploymentHandlers use Moose; @@ -25,7 +25,10 @@ lazy_build => 1, ); -sub _build_to_version { $_[0]->schema_version } +sub _build_to_version { + my $version = $_[0]->schema_version; + ref($version) ? $version->numify : $version; +} has schema_version => ( is => 'ro', @@ -262,7 +265,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator/Deprecated.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator/Deprecated.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator/Deprecated.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator/Deprecated.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::Deprecated; -$DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::Deprecated::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::Deprecated::VERSION = '0.002231'; use Moose; # ABSTRACT: (DEPRECATED) Use this if you are stuck in the past @@ -125,7 +125,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator/ScriptHelpers.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator/ScriptHelpers.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator/ScriptHelpers.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator/ScriptHelpers.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::ScriptHelpers; -$DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::ScriptHelpers::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::ScriptHelpers::VERSION = '0.002231'; # ABSTRACT: CodeRef Transforms for common use-cases in DBICDH Migrations use strict; @@ -211,7 +211,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator; -$DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::VERSION = '0.002231'; use Moose; # ABSTRACT: Manage your SQL and Perl migrations in nicely laid out directories @@ -235,7 +235,7 @@ my ($self, $sql) = @_; my $storage = $self->storage; - $sql = [ _split_sql_chunk( @$sql ) ]; + $sql = [ $self->_split_sql_chunk( @$sql ) ]; Dlog_trace { "Running SQL $_" } $sql; foreach my $line (@{$sql}) { @@ -252,29 +252,122 @@ return join "\n", @$sql } +my %STORAGE2FEATURE = ( + SQLServer => { + txn => qr/begin\s+transaction\b/i, + comment => { + DD => 1, # -- + HASH => 1, + SSTAR => 1, # /* */ + DS => 1, # // + PERCENT => 1, + }, + }, + Sybase => { + txn => qr/begin\s+transaction\b/i, + comment => { + DD => 1, + SSTAR => 1, + DS => 1, + PERCENT => 1, + }, + }, + SQLite => { + txn => qr/begin\b/i, + comment => { + DD => 1, + HASH => 1, + }, + }, + MySQL => { + txn => qr/(begin\b|start\s+transaction\b)/i, + comment => { + DD => 1, + HASH => 1, + SS => 1, + }, + }, + Oracle => { + comment => { + DD => 1, + HASH => 1, + SS => 1, + }, + }, + Pg => { + txn => qr/begin\b/i, + chunk => sub { + my ($c) = @_; + my @ret; + my $accumulator = ''; + while (length $c) { + if ($c =~ s/\A([^\$]*?);//s) { + $accumulator .= $1; + push @ret, $accumulator; + $accumulator = ''; + } elsif ( + $c =~ s/\A( + .*? + ( \$ [^\$]* \$ ) + )//xs + ) { + # got a $...$ .. $...$ chunk + $accumulator .= $1; + my $anchor = $2; + $c =~ s/\A( + .*? + \Q$anchor\E + )//xs; + $accumulator .= $1; + } elsif ($c =~ s/\A\s*\z//s) { + push @ret, $accumulator; + $accumulator = ''; + } else { + push @ret, $accumulator.$c; + $accumulator = ''; + last; + } + } + @ret; + }, + comment => { + DD => 1, + HASH => 1, + }, + }, +); + # split a chunk o' SQL into statements sub _split_sql_chunk { - my @sql = map { split /;\n/, $_ } @_; - - for ( @sql ) { - # strip transactions - s/^(?:BEGIN|BEGIN TRANSACTION|COMMIT).*//mgi; - - # trim whitespaces - s/^\s+//gm; - s/\s+$//gm; - - # remove comments - s/^--.*//gm; - - # remove blank lines - s/^\n//gm; - - # put on single line - s/\n/ /g; - } - - return grep $_, @sql; + my $self = shift; + my @sql = map { $_.'' } @_; # copy + my $storage_class = ref $self->storage; + $storage_class =~ s/.*://; + my $feature = $STORAGE2FEATURE{$storage_class} || $STORAGE2FEATURE{MySQL}; + for ( @sql ) { + # strip transactions + my $txn = $feature->{txn}; + s/^\s*($txn|COMMIT\b).*//mgi if $txn; + # remove comments + my $comment = $feature->{comment}; + s{--.*}{}gm if $comment->{DD}; + s{/\* .*? \*/}{}xs if $comment->{SS}; + s{//.*}{}gm if $comment->{DS}; + s{#.*}{}gm if $comment->{HASH}; + s{%.*}{}gm if $comment->{PERCENT}; + } + my $chunk = $feature->{chunk} || sub { split /;\n/, $_[0] }; + @sql = map $chunk->($_), @sql; + for ( @sql ) { + # trim whitespace + s/^\s+//gm; + s/\s+$//gm; + # remove blank lines + s/^\n//gm; + # put on single line + s/\n/ /g; + } + return grep $_, @sql; } sub _run_sql { @@ -553,6 +646,7 @@ } } open my $file, q(>), $filename; + binmode $file; print {$file} join ";\n", @$sql, ''; close $file; } @@ -674,6 +768,7 @@ } open my $file, q(>), $diff_file; + binmode $file; print {$file} join ";\n", @{$self->_sqldiff_from_yaml($from_version, $to_version, $db, $direction)}; close $file; } @@ -686,7 +781,7 @@ local $/ = undef; #sluuuuuurp open my $fh, '<', $file; - return [ _split_sql_chunk( <$fh> ) ]; + return [ $self->_split_sql_chunk( <$fh> ) ]; } sub downgrade_single_step { @@ -758,6 +853,7 @@ } open my $file, q(>), $filename; + binmode $file; print {$file} $yml; close $file; } @@ -1086,7 +1182,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/Deprecated.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/Deprecated.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/Deprecated.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/Deprecated.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::Deprecated; -$DBIx::Class::DeploymentHandler::Deprecated::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::Deprecated::VERSION = '0.002231'; # ABSTRACT: (DEPRECATED) Use this if you are stuck in the past use Moose; @@ -133,7 +133,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/HandlesDeploy.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/HandlesDeploy.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/HandlesDeploy.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/HandlesDeploy.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::HandlesDeploy; -$DBIx::Class::DeploymentHandler::HandlesDeploy::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::HandlesDeploy::VERSION = '0.002231'; use Moose::Role; # ABSTRACT: Interface for deploy methods @@ -145,7 +145,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/HandlesVersionStorage.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/HandlesVersionStorage.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/HandlesVersionStorage.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/HandlesVersionStorage.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::HandlesVersionStorage; -$DBIx::Class::DeploymentHandler::HandlesVersionStorage::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::HandlesVersionStorage::VERSION = '0.002231'; use Moose::Role; # ABSTRACT: Interface for version storage methods @@ -79,7 +79,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/HandlesVersioning.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/HandlesVersioning.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/HandlesVersioning.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/HandlesVersioning.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::HandlesVersioning; -$DBIx::Class::DeploymentHandler::HandlesVersioning::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::HandlesVersioning::VERSION = '0.002231'; use Moose::Role; # ABSTRACT: Interface for version methods @@ -145,7 +145,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/LogImporter.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/LogImporter.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/LogImporter.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/LogImporter.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::LogImporter; -$DBIx::Class::DeploymentHandler::LogImporter::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::LogImporter::VERSION = '0.002231'; use warnings; use strict; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/LogRouter.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/LogRouter.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/LogRouter.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/LogRouter.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::LogRouter; -$DBIx::Class::DeploymentHandler::LogRouter::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::LogRouter::VERSION = '0.002231'; use Moo; use DBIx::Class::DeploymentHandler::Logger; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/Logger.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/Logger.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/Logger.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/Logger.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::Logger; -$DBIx::Class::DeploymentHandler::Logger::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::Logger::VERSION = '0.002231'; use warnings; use strict; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/Manual/CatalystIntro.pod new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/Manual/CatalystIntro.pod --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/Manual/CatalystIntro.pod 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/Manual/CatalystIntro.pod 2019-05-10 15:28:52.000000000 +0200 @@ -249,7 +249,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/Manual/Intro.pod new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/Manual/Intro.pod --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/Manual/Intro.pod 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/Manual/Intro.pod 2019-05-10 15:28:52.000000000 +0200 @@ -204,7 +204,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/Types.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/Types.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/Types.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/Types.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::Types; -$DBIx::Class::DeploymentHandler::Types::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::Types::VERSION = '0.002231'; use strict; use warnings; @@ -13,6 +13,13 @@ => from 'Str' => via { [$_] }; +subtype 'DBIx::Class::DeploymentHandler::VersionNonObj' + => as 'Str'; + +coerce 'DBIx::Class::DeploymentHandler::VersionNonObj' + => from 'Object' + => via { $_->numify }; + no Moose::Util::TypeConstraints; 1; @@ -32,7 +39,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionHandler/DatabaseToSchemaVersions.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionHandler/DatabaseToSchemaVersions.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionHandler/DatabaseToSchemaVersions.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionHandler/DatabaseToSchemaVersions.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::VersionHandler::DatabaseToSchemaVersions; -$DBIx::Class::DeploymentHandler::VersionHandler::DatabaseToSchemaVersions::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::VersionHandler::DatabaseToSchemaVersions::VERSION = '0.002231'; use Moose; # ABSTRACT: Go straight from Database to Schema version @@ -91,7 +91,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionHandler/ExplicitVersions.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionHandler/ExplicitVersions.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionHandler/ExplicitVersions.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionHandler/ExplicitVersions.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::VersionHandler::ExplicitVersions; -$DBIx::Class::DeploymentHandler::VersionHandler::ExplicitVersions::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::VersionHandler::ExplicitVersions::VERSION = '0.002231'; use Moose; # ABSTRACT: Define your own list of versions to use for migrations @@ -136,7 +136,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionHandler/Monotonic.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionHandler/Monotonic.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionHandler/Monotonic.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionHandler/Monotonic.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,6 +1,7 @@ package DBIx::Class::DeploymentHandler::VersionHandler::Monotonic; -$DBIx::Class::DeploymentHandler::VersionHandler::Monotonic::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::VersionHandler::Monotonic::VERSION = '0.002231'; use Moose; +use DBIx::Class::DeploymentHandler::Types; # ABSTRACT: Obvious version progressions @@ -9,7 +10,8 @@ with 'DBIx::Class::DeploymentHandler::HandlesVersioning'; has schema_version => ( - isa => 'Int', + isa => 'DBIx::Class::DeploymentHandler::VersionNonObj', + coerce => 1, is => 'ro', required => 1, ); @@ -21,12 +23,16 @@ ); has to_version => ( - isa => 'Int', + isa => 'DBIx::Class::DeploymentHandler::VersionNonObj', + coerce => 1, is => 'ro', lazy_build => 1, ); -sub _build_to_version { $_[0]->schema_version } +sub _build_to_version { + my $version = $_[0]->schema_version; + ref($version) ? $version->numify : $version; +} has _version => ( is => 'rw', @@ -104,7 +110,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated/Component.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated/Component.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated/Component.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated/Component.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::VersionStorage::Deprecated::Component; -$DBIx::Class::DeploymentHandler::VersionStorage::Deprecated::Component::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::VersionStorage::Deprecated::Component::VERSION = '0.002231'; # ABSTRACT: (DEPRECATED) Attach this component to your schema to ensure you stay up to date use strict; @@ -61,7 +61,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated/VersionResult.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated/VersionResult.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated/VersionResult.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated/VersionResult.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::VersionStorage::Deprecated::VersionResult; -$DBIx::Class::DeploymentHandler::VersionStorage::Deprecated::VersionResult::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::VersionStorage::Deprecated::VersionResult::VERSION = '0.002231'; # ABSTRACT: (DEPRECATED) The old way to store versions in the database use strict; @@ -51,7 +51,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated/VersionResultSet.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated/VersionResultSet.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated/VersionResultSet.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated/VersionResultSet.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::VersionStorage::Deprecated::VersionResultSet; -$DBIx::Class::DeploymentHandler::VersionStorage::Deprecated::VersionResultSet::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::VersionStorage::Deprecated::VersionResultSet::VERSION = '0.002231'; # ABSTRACT: (DEPRECATED) Predefined searches to find what you want from the version storage use strict; @@ -84,7 +84,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Deprecated.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::VersionStorage::Deprecated; -$DBIx::Class::DeploymentHandler::VersionStorage::Deprecated::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::VersionStorage::Deprecated::VERSION = '0.002231'; use Moose; use DBIx::Class::DeploymentHandler::LogImporter ':log'; @@ -98,7 +98,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard/Component.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard/Component.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard/Component.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard/Component.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::VersionStorage::Standard::Component; -$DBIx::Class::DeploymentHandler::VersionStorage::Standard::Component::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::VersionStorage::Standard::Component::VERSION = '0.002231'; # ABSTRACT: Attach this component to your schema to ensure you stay up to date use strict; @@ -54,7 +54,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard/VersionResult.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard/VersionResult.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard/VersionResult.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard/VersionResult.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult; -$DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult::VERSION = '0.002231'; # ABSTRACT: The typical way to store versions in the database use strict; @@ -65,7 +65,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard/VersionResultSet.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard/VersionResultSet.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard/VersionResultSet.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard/VersionResultSet.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResultSet; -$DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResultSet::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResultSet::VERSION = '0.002231'; # ABSTRACT: Predefined searches to find what you want from the version storage use strict; @@ -50,7 +50,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/VersionStorage/Standard.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::VersionStorage::Standard; -$DBIx::Class::DeploymentHandler::VersionStorage::Standard::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::VersionStorage::Standard::VERSION = '0.002231'; use Moose; use DBIx::Class::DeploymentHandler::LogImporter ':log'; @@ -76,7 +76,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/WithApplicatorDumple.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/WithApplicatorDumple.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/WithApplicatorDumple.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/WithApplicatorDumple.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::WithApplicatorDumple; -$DBIx::Class::DeploymentHandler::WithApplicatorDumple::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::WithApplicatorDumple::VERSION = '0.002231'; use MooseX::Role::Parameterized; use Module::Runtime 'use_module'; use namespace::autoclean; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/WithReasonableDefaults.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/WithReasonableDefaults.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler/WithReasonableDefaults.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler/WithReasonableDefaults.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler::WithReasonableDefaults; -$DBIx::Class::DeploymentHandler::WithReasonableDefaults::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::WithReasonableDefaults::VERSION = '0.002231'; use Moose::Role; # ABSTRACT: Make default arguments to a few methods sensible @@ -84,7 +84,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler.pm new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler.pm --- old/DBIx-Class-DeploymentHandler-0.002222/lib/DBIx/Class/DeploymentHandler.pm 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/lib/DBIx/Class/DeploymentHandler.pm 2019-05-10 15:28:52.000000000 +0200 @@ -1,5 +1,5 @@ package DBIx::Class::DeploymentHandler; -$DBIx::Class::DeploymentHandler::VERSION = '0.002222'; +$DBIx::Class::DeploymentHandler::VERSION = '0.002231'; # ABSTRACT: Extensible DBIx::Class deployment use Moose; @@ -211,7 +211,7 @@ =end text -=for html <p><i>Figure 1</i><img src="data:image/png;base64,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"></img></p> +=for html <p><i>Figure 1</i><img src="data:image/png;base64,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"></img></p> The nice thing about this is that we have well defined interfaces for the objects that comprise the C<DeploymentHandler>, the smaller objects can be @@ -274,6 +274,27 @@ =head1 METHODS +This is just a "stub" section to make clear +that the bulk of implementation is documented in +L<DBIx::Class::DeploymentHandler::Dad>. Since that is implemented using +L<Moose> class, see L<DBIx::Class::DeploymentHandler::Dad/ATTRIBUTES> +and L<DBIx::Class::DeploymentHandler::Dad/"ORTHODOX METHODS"> for +available attributes to pass to C<new>, and methods callable on the +resulting object. + +=head2 new + + my $s = My::Schema->connect(...); + my $dh = DBIx::Class::DeploymentHandler->new({ + schema => $s, + databases => 'SQLite', + sql_translator_args => { add_drop_table => 0 }, + }); + +See L<DBIx::Class::DeploymentHandler::Dad/ATTRIBUTES> and +L<DBIx::Class::DeploymentHandler::Dad/"ORTHODOX METHODS"> for available +attributes to pass to C<new>. + =head2 prepare_version_storage_install $dh->prepare_version_storage_install @@ -300,7 +321,7 @@ =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Arthur Axel "fREW" Schmidt. +This software is copyright (c) 2019 by Arthur Axel "fREW" Schmidt. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/t/00-report-prereqs.t new/DBIx-Class-DeploymentHandler-0.002231/t/00-report-prereqs.t --- old/DBIx-Class-DeploymentHandler-0.002222/t/00-report-prereqs.t 1970-01-01 01:00:00.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/t/00-report-prereqs.t 2019-05-10 15:28:52.000000000 +0200 @@ -0,0 +1,187 @@ +#!perl + +use strict; +use warnings; + +# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.020 +# THEN modified with more info by Ed J for PDL project + +use Test::More tests => 1; + +use ExtUtils::MakeMaker; +use File::Spec; + +# from $version::LAX +my $lax_version_re = + qr/(?: undef | (?: (?:[0-9]+) (?: \. | (?:\.[0-9]+) (?:_[0-9]+)? )? + | + (?:\.[0-9]+) (?:_[0-9]+)? + ) | (?: + v (?:[0-9]+) (?: (?:\.[0-9]+)+ (?:_[0-9]+)? )? + | + (?:[0-9]+)? (?:\.[0-9]+){2,} (?:_[0-9]+)? + ) + )/x; + +# hide optional CPAN::Meta modules from prereq scanner +# and check if they are available +my $cpan_meta = "CPAN::Meta"; +my $cpan_meta_pre = "CPAN::Meta::Prereqs"; +my $HAS_CPAN_META = eval "require $cpan_meta; $cpan_meta->VERSION('2.120900')" && eval "require $cpan_meta_pre"; ## no critic + +# Verify requirements? +my $DO_VERIFY_PREREQS = 1; + +sub _max { + my $max = shift; + $max = ( $_ > $max ) ? $_ : $max for @_; + return $max; +} + +sub _merge_prereqs { + my ($collector, $prereqs) = @_; + + # CPAN::Meta::Prereqs object + if (ref $collector eq $cpan_meta_pre) { + return $collector->with_merged_prereqs( + CPAN::Meta::Prereqs->new( $prereqs ) + ); + } + + # Raw hashrefs + for my $phase ( keys %$prereqs ) { + for my $type ( keys %{ $prereqs->{$phase} } ) { + for my $module ( keys %{ $prereqs->{$phase}{$type} } ) { + $collector->{$phase}{$type}{$module} = $prereqs->{$phase}{$type}{$module}; + } + } + } + + return $collector; +} + +my @include = qw( + +); + +my @exclude = qw( + +); + +# Add static prereqs to the included modules list +my $static_prereqs = do 't/00-report-prereqs.dd'; + +# Merge all prereqs (either with ::Prereqs or a hashref) +my $full_prereqs = _merge_prereqs( + ( $HAS_CPAN_META ? $cpan_meta_pre->new : {} ), + $static_prereqs +); + +# Add dynamic prereqs to the included modules list (if we can) +my ($source) = grep { -f } 'MYMETA.json', 'MYMETA.yml'; +if ( $source && $HAS_CPAN_META ) { + if ( my $meta = eval { CPAN::Meta->load_file($source) } ) { + $full_prereqs = _merge_prereqs($full_prereqs, $meta->prereqs); + } +} +else { + $source = 'static metadata'; +} + +my @full_reports; +my @dep_errors; +my $req_hash = $HAS_CPAN_META ? $full_prereqs->as_string_hash : $full_prereqs; + +# Add static includes into a fake section +for my $mod (@include) { + $req_hash->{other}{modules}{$mod} = 0; +} + +for my $phase ( qw(configure build test runtime develop other) ) { + next unless $req_hash->{$phase}; + next if ($phase eq 'develop' and not $ENV{AUTHOR_TESTING}); + + for my $type ( qw(requires recommends suggests conflicts modules) ) { + next unless $req_hash->{$phase}{$type}; + + my $title = ucfirst($phase).' '.ucfirst($type); + my @reports = [qw/Module Want Have Where Howbig/]; + + for my $mod ( sort keys %{ $req_hash->{$phase}{$type} } ) { + next if $mod eq 'perl'; + next if grep { $_ eq $mod } @exclude; + + my $file = $mod; + $file =~ s{::}{/}g; + $file .= ".pm"; + my ($prefix) = grep { -e File::Spec->catfile($_, $file) } @INC; + + my $want = $req_hash->{$phase}{$type}{$mod}; + $want = "undef" unless defined $want; + $want = "any" if !$want && $want == 0; + + my $req_string = $want eq 'any' ? 'any version required' : "version '$want' required"; + + if ($prefix) { + my $filename = File::Spec->catfile($prefix, $file); + my $have = MM->parse_version( $filename ); + $have = "undef" unless defined $have; + push @reports, [$mod, $want, $have, $prefix, (-s $filename)]; + + if ( $DO_VERIFY_PREREQS && $HAS_CPAN_META && $type eq 'requires' ) { + if ( $have !~ /\A$lax_version_re\z/ ) { + push @dep_errors, "$mod version '$have' cannot be parsed ($req_string)"; + } + elsif ( ! $full_prereqs->requirements_for( $phase, $type )->accepts_module( $mod => $have ) ) { + push @dep_errors, "$mod version '$have' is not in required range '$want'"; + } + } + } + else { + push @reports, [$mod, $want, "missing", '', 0]; + + if ( $DO_VERIFY_PREREQS && $type eq 'requires' ) { + push @dep_errors, "$mod is not installed ($req_string)"; + } + } + } + + if ( @reports ) { + push @full_reports, "=== $title ===\n\n"; + + my $ml = _max( map { length $_->[0] } @reports ); + my $wl = _max( map { length $_->[1] } @reports ); + my $hl = _max( map { length $_->[2] } @reports ); + my $ll = _max( map { length $_->[3] } @reports ); # location + my $sl = _max( map { length $_->[4] } @reports ); # size + + if ($type eq 'modules') { + splice @reports, 1, 0, ["-" x $ml, "", "-" x $hl, "-" x $ll, "-" x $sl]; + push @full_reports, map { sprintf(" %*s %*s\n", -$ml, $_->[0], $hl, $_->[2]) } @reports; + } + else { + splice @reports, 1, 0, ["-" x $ml, "-" x $wl, "-" x $hl, "-" x $ll, "-" x $sl]; + push @full_reports, map { sprintf(" %*s %*s %*s %*s %*s\n", -$ml, $_->[0], $wl, $_->[1], $hl, $_->[2], -$ll, $_->[3], $sl, $_->[4]) } @reports; + } + + push @full_reports, "\n"; + } + } +} + +if ( @full_reports ) { + diag "\nVersions for all modules listed in $source (including optional ones):\n\n", @full_reports; +} + +if ( @dep_errors ) { + diag join("\n", + "\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ***\n", + "The following REQUIRED prerequisites were not satisfied:\n", + @dep_errors, + "\n" + ); +} + +pass; + +# vim: ts=4 sts=4 sw=4 et: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/t/10-split-sql-chunk.t new/DBIx-Class-DeploymentHandler-0.002231/t/10-split-sql-chunk.t --- old/DBIx-Class-DeploymentHandler-0.002222/t/10-split-sql-chunk.t 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/t/10-split-sql-chunk.t 2019-05-10 15:28:52.000000000 +0200 @@ -5,16 +5,45 @@ use DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator; -*split_sql_chunk = -*DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::_split_sql_chunk; +sub make_dm { + my ($storage_class) = @_; + bless { + storage => bless({}, 'DBIx::Class::Storage::DBI::'.$storage_class), + }, 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator'; +} -is_deeply [ split_sql_chunk( <<'END' ) ], [ 'SELECT * FROM YADAH END' ]; +my $dm = make_dm('MySQL'); + +is_deeply [ $dm->_split_sql_chunk( <<'END' ) ], [ 'SELECT * FROM YADAH END' ]; BEGIN -- stuff SELECT * FROM YADAH END; END -is_deeply [ split_sql_chunk( 'foo', ' ', 'bar' ) ], [qw( foo bar)]; +is_deeply [ $dm->_split_sql_chunk( 'foo', ' ', 'bar' ) ], [qw(foo bar)]; + +$dm = make_dm('Pg'); +is_deeply [ $dm->_split_sql_chunk( <<'END' ) ], +-- Add triggers to maintain sync between list_material_ratings table and list_materials table:; +CREATE FUNCTION add_rating() RETURNS trigger AS $add_rating$ + BEGIN + IF NEW."type" = 'like' THEN + UPDATE "list_materials" SET "likes" = (SELECT COUNT(*) FROM "list_material_ratings" WHERE "list" = NEW."list" AND "material" = NEW."material" AND "type" = 'like') WHERE "list" = NEW."list" AND "material" = NEW."material"; + END IF; + IF NEW."type" = 'dislike' THEN + UPDATE "list_materials" SET "dislikes" = (SELECT COUNT(*) FROM "list_material_ratings" WHERE "list" = NEW."list" AND "material" = NEW."material" AND "type" = 'dislike') WHERE "list" = NEW."list" AND "material" = NEW."material"; + END IF; + RETURN NULL; + END; +$add_rating$ LANGUAGE plpgsql; +END + [ q{CREATE FUNCTION add_rating() RETURNS trigger AS $add_rating$ IF NEW."type" = 'like' THEN UPDATE "list_materials" SET "likes" = (SELECT COUNT(*) FROM "list_material_ratings" WHERE "list" = NEW."list" AND "material" = NEW."material" AND "type" = 'like') WHERE "list" = NEW."list" AND "material" = NEW."material"; END IF; IF NEW."type" = 'dislike' THEN UPDATE "list_materials" SET "dislikes" = (SELECT COUNT(*) FROM "list_material_ratings" WHERE "list" = NEW."list" AND "material" = NEW."material" AND "type" = 'dislike') WHERE "list" = NEW."list" AND "material" = NEW."material"; END IF; RETURN NULL; END; $add_rating$ LANGUAGE plpgsql} ]; + +$dm = make_dm('Pg'); +is_deeply [ $dm->_split_sql_chunk( <<'END' ) ], +CREATE TABLE "dbix_class_deploymenthandler_versions" ( "id" serial NOT NULL, "version" character varying(50) NOT NULL, "ddl" text, "upgrade_sql" text, PRIMARY KEY ("id"), CONSTRAINT "dbix_class_deploymenthandler_versions_version" UNIQUE ("version") ) +END + [ q{CREATE TABLE "dbix_class_deploymenthandler_versions" ( "id" serial NOT NULL, "version" character varying(50) NOT NULL, "ddl" text, "upgrade_sql" text, PRIMARY KEY ("id"), CONSTRAINT "dbix_class_deploymenthandler_versions_version" UNIQUE ("version") )} ]; done_testing; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/t/customised.t new/DBIx-Class-DeploymentHandler-0.002231/t/customised.t --- old/DBIx-Class-DeploymentHandler-0.002222/t/customised.t 1970-01-01 01:00:00.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/t/customised.t 2019-05-10 15:28:52.000000000 +0200 @@ -0,0 +1,230 @@ +# This test represents darkpan code that subclasses DH using the recommended +# method. Updates should make sure this doesn't break, since it breaks +# real-world code! + +use strict; +use warnings; + +use lib 't/lib'; +use DBICDHTest; +use DBIx::Class::DeploymentHandler; +{ +package DH; + +use Moose; + +has initial_version => ( + is => 'ro', + lazy => 1, + builder => '_build_initial_version', +); +sub _build_initial_version { $_[0]->database_version } + +extends 'DBIx::Class::DeploymentHandler::Dad'; +# a single with would be better, but we can't do that +# see: http://rt.cpan.org/Public/Bug/Display.html?id=46347 +with 'DBIx::Class::DeploymentHandler::WithApplicatorDumple' => { + interface_role => 'DBIx::Class::DeploymentHandler::HandlesDeploy', + class_name => 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator', + delegate_name => 'deploy_method', + attributes_to_assume => [qw(schema schema_version version_source)], + attributes_to_copy => [qw( + ignore_ddl databases script_directory sql_translator_args force_overwrite + )], + }, + 'DBIx::Class::DeploymentHandler::WithApplicatorDumple' => { + interface_role => 'DBIx::Class::DeploymentHandler::HandlesVersioning', + class_name => 'DBIx::Class::DeploymentHandler::VersionHandler::Monotonic', + delegate_name => 'version_handler', + attributes_to_assume => [qw( initial_version schema_version to_version )], + }, + 'DBIx::Class::DeploymentHandler::WithApplicatorDumple' => { + interface_role => 'DBIx::Class::DeploymentHandler::HandlesVersionStorage', + class_name => 'DBIx::Class::DeploymentHandler::VersionStorage::Standard', + delegate_name => 'version_storage', + attributes_to_assume => ['schema'], + attributes_to_copy => [qw(version_source version_class)], + }; +with 'DBIx::Class::DeploymentHandler::WithReasonableDefaults'; + +sub prepare_version_storage_install { + my $self = shift; + + $self->prepare_resultsource_install({ + result_source => $self->version_storage->version_rs->result_source + }); +} + +sub install_version_storage { + my $self = shift; + + my $version = (shift||{})->{version} || $self->schema_version; + + $self->install_resultsource({ + result_source => $self->version_storage->version_rs->result_source, + version => $version, + }); +} + +sub prepare_install { + $_[0]->prepare_deploy; + $_[0]->prepare_version_storage_install; +} + +# the following is just a hack so that ->version_storage +# won't be lazy +sub BUILD { $_[0]->version_storage } +__PACKAGE__->meta->make_immutable; + +} + +use Test::More; +use File::Temp 'tempdir'; +use Test::Fatal qw(lives_ok dies_ok); + +my $dbh = DBICDHTest::dbh(); +my @connection = (sub { $dbh }, { ignore_version => 1 }); +my $sql_dir = tempdir( CLEANUP => 1 ); + +VERSION1: { + use_ok 'DBICVersion_v1'; + my $s = DBICVersion::Schema->connect(@connection); + $DBICVersion::Schema::VERSION = 1; + ok($s, 'DBICVersion::Schema 1 instantiates correctly'); + my $handler = DH->new({ + script_directory => $sql_dir, + schema => $s, + databases => 'SQLite', + sql_translator_args => { add_drop_table => 0 }, + }); + + ok($handler, 'DBIx::Class::DeploymentHandler w/1 instantiates correctly'); + + my $version = $s->schema_version; + $handler->prepare_install; + + dies_ok { + $s->resultset('Foo')->create({ + bar => 'frew', + }) + } 'schema not deployed'; + $handler->install; + dies_ok { + $handler->install; + } 'cannot install twice'; + lives_ok { + $s->resultset('Foo')->create({ + bar => 'frew', + }) + } 'schema is deployed'; +} + +VERSION2: { + use_ok 'DBICVersion_v2'; + my $s = DBICVersion::Schema->connect(@connection); + $DBICVersion::Schema::VERSION = 2; + ok($s, 'DBICVersion::Schema 2 instantiates correctly'); + my $handler = DH->new({ + script_directory => $sql_dir, + schema => $s, + databases => 'SQLite', + }); + + ok($handler, 'DBIx::Class::DeploymentHandler w/2 instantiates correctly'); + + my $version = $s->schema_version(); + $handler->prepare_install; + $handler->prepare_upgrade({ from_version => 1, to_version => $version} ); + dies_ok { + $s->resultset('Foo')->create({ + bar => 'frew', + baz => 'frew', + }) + } 'schema not deployed'; + dies_ok { + $s->resultset('Foo')->create({ + bar => 'frew', + baz => 'frew', + }) + } 'schema not uppgrayyed'; + $handler->upgrade; + lives_ok { + $s->resultset('Foo')->create({ + bar => 'frew', + baz => 'frew', + }) + } 'schema is deployed'; +} + +VERSION3: { + use_ok 'DBICVersion_v3'; + my $s = DBICVersion::Schema->connect(@connection); + $DBICVersion::Schema::VERSION = 3; + ok($s, 'DBICVersion::Schema 3 instantiates correctly'); + my $handler = DH->new({ + script_directory => $sql_dir, + schema => $s, + databases => 'SQLite', + }); + + ok($handler, 'DBIx::Class::DeploymentHandler w/3 instantiates correctly'); + + my $version = $s->schema_version(); + $handler->prepare_install; + $handler->prepare_upgrade({ from_version => 2, to_version => $version }); + dies_ok { + $s->resultset('Foo')->create({ + bar => 'frew', + baz => 'frew', + biff => 'frew', + }) + } 'schema not deployed'; + $handler->upgrade; + lives_ok { + $s->resultset('Foo')->create({ + bar => 'frew', + baz => 'frew', + biff => 'frew', + }) + } 'schema is deployed'; +} + +DOWN2: { + use_ok 'DBICVersion_v4'; + my $s = DBICVersion::Schema->connect(@connection); + $DBICVersion::Schema::VERSION = 2; + ok($s, 'DBICVersion::Schema 2 instantiates correctly'); + my $handler = DH->new({ + script_directory => $sql_dir, + schema => $s, + databases => 'SQLite', + }); + + ok($handler, 'DBIx::Class::DeploymentHandler w/2 instantiates correctly'); + + my $version = $s->schema_version(); + $handler->prepare_downgrade({ from_version => 3, to_version => $version }); + lives_ok { + $s->resultset('Foo')->create({ + bar => 'frew', + baz => 'frew', + biff => 'frew', + }) + } 'schema at version 3'; + $handler->downgrade; + dies_ok { + $s->resultset('Foo')->create({ + bar => 'frew', + baz => 'frew', + biff => 'frew', + }) + } 'schema not at version 3'; + lives_ok { + $s->resultset('Foo')->create({ + bar => 'frew', + baz => 'frew', + }) + } 'schema is at version 2'; +} + +done_testing; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/t/version_handlers/monotonic.t new/DBIx-Class-DeploymentHandler-0.002231/t/version_handlers/monotonic.t --- old/DBIx-Class-DeploymentHandler-0.002222/t/version_handlers/monotonic.t 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/t/version_handlers/monotonic.t 2019-05-10 15:28:52.000000000 +0200 @@ -10,6 +10,14 @@ use aliased 'DBIx::Class::DeploymentHandler::VersionHandler::Monotonic'; +SKIP: { + skip 'no "version" installed', 1 if !eval { require version; 1 }; + lives_ok { Monotonic->new({ + schema_version => version->declare("2.0"), + database_version => 1, + }) } 'version-obj Ok'; +} + { my $vh = Monotonic->new({ schema_version => 2, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/DBIx-Class-DeploymentHandler-0.002222/t/version_storages/standard.t new/DBIx-Class-DeploymentHandler-0.002231/t/version_storages/standard.t --- old/DBIx-Class-DeploymentHandler-0.002222/t/version_storages/standard.t 2018-01-06 19:25:45.000000000 +0100 +++ new/DBIx-Class-DeploymentHandler-0.002231/t/version_storages/standard.t 2019-05-10 15:28:52.000000000 +0200 @@ -10,6 +10,7 @@ use aliased 'DBIx::Class::DeploymentHandler::VersionStorage::Standard'; use aliased 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator'; use File::Temp 'tempdir'; +use File::Find; use DBICVersion_v1; use DBIx::Class::DeploymentHandler; @@ -88,4 +89,17 @@ $vs->version_rs->delete; ok( $vs->version_storage_is_installed, 'VersionStorage is still installed even if all versions are deleted' ); + +my @resulting_files; +find(sub { -f and push @resulting_files, $File::Find::name }, $sql_dir); +for (@resulting_files) { + my $contents = do { + local $/; + open my $fh, $_ or die; + binmode $fh, ':raw'; + <$fh> + }; + is index($contents, "\015\012"), -1, "$_ no CRLF"; +} + done_testing;