Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package perl-Carton for openSUSE:Factory checked in at 2021-01-21 21:54:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-Carton (Old) and /work/SRC/openSUSE:Factory/.perl-Carton.new.28504 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Carton" Thu Jan 21 21:54:05 2021 rev:11 rq:842810 version:1.0.34 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-Carton/perl-Carton.changes 2016-05-30 09:57:43.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.perl-Carton.new.28504/perl-Carton.changes 2021-01-21 21:54:05.881766692 +0100 @@ -1,0 +2,26 @@ +Wed Apr 3 06:46:17 UTC 2019 - Stephan Kulow <[email protected]> + +- updated to 1.0.34 + see /usr/share/doc/packages/perl-Carton/Changes + + v1.0.34 2018-06-28 10:38:01 PDT + - workaround carton fatpack by explicitly loading Menlo::Index::Mirror + + v1.0.33 2018-05-04 11:22:45 PDT + - bundle: support environment where IO::Compress::Gzip is not available + + v1.0.32 2018-05-04 11:01:36 PDT + - Write out 02packages.details.txt.gz in carton bundle so that you can use + plain cpanm to install them + + v1.0.31 2018-04-28 08:31:27 PDT + - Fix carton fatpack to include runtime dependencies for Menlo #571 + + v1.0.30 2018-04-25 02:42:18 PDT + - depend on Menlo::CLI::Compat for Menlo-Legacy + + v1.0.29 2018-04-21 19:27:13 CEST + - switched from JSON to JSON::PP + - use Menlo to install modules rather than App::cpanminus::fatscript + +------------------------------------------------------------------- Old: ---- Carton-v1.0.28.tar.gz New: ---- Carton-v1.0.34.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Carton.spec ++++++ --- /var/tmp/diff_new_pack.WSwala/_old 2021-01-21 21:54:06.477766748 +0100 +++ /var/tmp/diff_new_pack.WSwala/_new 2021-01-21 21:54:06.477766748 +0100 @@ -1,7 +1,7 @@ # # spec file for package perl-Carton # -# Copyright (c) 2016 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,48 +12,44 @@ # 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-Carton -Version: 1.0.28 +Version: 1.0.34 Release: 0 %define cpan_name Carton Summary: Perl module dependency manager (aka Bundler for Perl) -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/Carton/ -Source0: http://www.cpan.org/authors/id/M/MI/MIYAGAWA/%{cpan_name}-v%{version}.tar.gz +Url: https://metacpan.org/release/%{cpan_name} +Source0: https://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/%{cpan_name}-v%{version}.tar.gz Source1: cpanspec.yml BuildArch: noarch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: perl BuildRequires: perl-macros -BuildRequires: perl(App::cpanminus) >= 1.703 BuildRequires: perl(CPAN::Meta) >= 2.120921 BuildRequires: perl(CPAN::Meta::Requirements) >= 2.121000 BuildRequires: perl(Class::Tiny) >= 1.001 BuildRequires: perl(Getopt::Long) >= 2.39 -BuildRequires: perl(JSON) >= 2.53 +BuildRequires: perl(JSON::PP) >= 2.27300 +BuildRequires: perl(Menlo::CLI::Compat) >= 1.9018 BuildRequires: perl(Module::CPANfile) >= 0.9031 BuildRequires: perl(Module::CoreList) -BuildRequires: perl(Module::Metadata) >= 1.000003 -BuildRequires: perl(Module::Reader) >= 0.002 BuildRequires: perl(Path::Tiny) >= 0.033 BuildRequires: perl(Try::Tiny) >= 0.09 BuildRequires: perl(parent) >= 0.223 BuildRequires: perl(version) >= 0.77 -Requires: perl(App::cpanminus) >= 1.703 Requires: perl(CPAN::Meta) >= 2.120921 Requires: perl(CPAN::Meta::Requirements) >= 2.121000 Requires: perl(Class::Tiny) >= 1.001 Requires: perl(Getopt::Long) >= 2.39 -Requires: perl(JSON) >= 2.53 +Requires: perl(JSON::PP) >= 2.27300 +Requires: perl(Menlo::CLI::Compat) >= 1.9018 Requires: perl(Module::CPANfile) >= 0.9031 Requires: perl(Module::CoreList) -Requires: perl(Module::Metadata) >= 1.000003 -Requires: perl(Module::Reader) >= 0.002 Requires: perl(Path::Tiny) >= 0.033 Requires: perl(Try::Tiny) >= 0.09 Requires: perl(parent) >= 0.223 @@ -76,11 +72,11 @@ find . -type f ! -name \*.pl -print0 | xargs -0 chmod 644 %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 @@ -89,6 +85,7 @@ %files -f %{name}.files %defattr(-,root,root,755) -%doc Changes LICENSE README +%doc Changes README +%license LICENSE %changelog ++++++ Carton-v1.0.28.tar.gz -> Carton-v1.0.34.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/Changes new/Carton-v1.0.34/Changes --- old/Carton-v1.0.28/Changes 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/Changes 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,25 @@ Revision history for carton +v1.0.34 2018-06-28 10:38:01 PDT + - workaround carton fatpack by explicitly loading Menlo::Index::Mirror + +v1.0.33 2018-05-04 11:22:45 PDT + - bundle: support environment where IO::Compress::Gzip is not available + +v1.0.32 2018-05-04 11:01:36 PDT + - Write out 02packages.details.txt.gz in carton bundle so that you can use + plain cpanm to install them + +v1.0.31 2018-04-28 08:31:27 PDT + - Fix carton fatpack to include runtime dependencies for Menlo #571 + +v1.0.30 2018-04-25 02:42:18 PDT + - depend on Menlo::CLI::Compat for Menlo-Legacy + +v1.0.29 2018-04-21 19:27:13 CEST + - switched from JSON to JSON::PP + - use Menlo to instlal modules rather than App::cpanminus::fatscript + v1.0.28 2016-05-23 22:30:48 PDT - Emit the line when parser error happened diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/MANIFEST new/Carton-v1.0.34/MANIFEST --- old/Carton-v1.0.28/MANIFEST 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/MANIFEST 2018-06-28 19:38:04.000000000 +0200 @@ -1,4 +1,4 @@ -# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.005. +# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.012. Changes LICENSE MANIFEST @@ -46,6 +46,7 @@ xt/cli/cpanfile.t xt/cli/deployment.t xt/cli/deps_phase.t +xt/cli/dist.t xt/cli/exec.t xt/cli/freeze.t xt/cli/help.t diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/META.json new/Carton-v1.0.34/META.json --- old/Carton-v1.0.28/META.json 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/META.json 2018-06-28 19:38:04.000000000 +0200 @@ -4,7 +4,7 @@ "Tatsuhiko Miyagawa" ], "dynamic_config" : 0, - "generated_by" : "Dist::Zilla version 6.005, Dist::Milla version v1.0.16, CPAN::Meta::Converter version 2.150005", + "generated_by" : "Dist::Milla version v1.0.20, Dist::Zilla version 6.012, CPAN::Meta::Converter version 2.150010", "license" : [ "perl_5" ], @@ -33,7 +33,7 @@ "develop" : { "requires" : { "Capture::Tiny" : "0", - "Dist::Milla" : "v1.0.16", + "Dist::Milla" : "v1.0.20", "Test::More" : "0.9", "Test::Pod" : "1.41", "Test::Requires" : "0" @@ -45,16 +45,14 @@ "File::pushd" : "0" }, "requires" : { - "App::cpanminus" : "1.703", "CPAN::Meta" : "2.120921", "CPAN::Meta::Requirements" : "2.121", "Class::Tiny" : "1.001", "Getopt::Long" : "2.39", - "JSON" : "2.53", + "JSON::PP" : "2.27300", + "Menlo::CLI::Compat" : "1.9018", "Module::CPANfile" : "0.9031", "Module::CoreList" : "0", - "Module::Metadata" : "1.000003", - "Module::Reader" : "0.002", "Path::Tiny" : "0.033", "Try::Tiny" : "0.09", "parent" : "0.223", @@ -74,15 +72,18 @@ "web" : "https://github.com/perl-carton/carton" } }, - "version" : "v1.0.28", + "version" : "v1.0.34", "x_contributors" : [ "Christian Walde <[email protected]>", + "Dan Book <[email protected]>", "David Golden <[email protected]>", "David Steinbrunner <[email protected]>", "Jonathan Steinert <[email protected]>", "Jose Luis Martinez <[email protected]>", "Kan Fushihara <[email protected]>", + "Karen Etheridge <[email protected]>", "Masahiro Chiba <[email protected]>", + "Michael Schout <[email protected]>", "NAKAGAWA Masaki <[email protected]>", "Olaf Alders <[email protected]>", "Pedro Figueiredo <[email protected]>", @@ -93,6 +94,9 @@ "Tatsuhiko Miyagawa <[email protected]>", "WATANABE Hiroaki <[email protected]>", "Yanick Champoux <[email protected]>" - ] + ], + "x_generated_by_perl" : "v5.20.1", + "x_serialization_backend" : "Cpanel::JSON::XS version 4.02", + "x_static_install" : 0 } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/META.yml new/Carton-v1.0.34/META.yml --- old/Carton-v1.0.28/META.yml 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/META.yml 2018-06-28 19:38:04.000000000 +0200 @@ -7,7 +7,7 @@ ExtUtils::MakeMaker: '0' version: '0.77' dynamic_config: 0 -generated_by: 'Dist::Zilla version 6.005, Dist::Milla version v1.0.16, CPAN::Meta::Converter version 2.150005' +generated_by: 'Dist::Milla version v1.0.20, Dist::Zilla version 6.012, CPAN::Meta::Converter version 2.150010' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html @@ -25,16 +25,14 @@ App::FatPacker: '0.009018' File::pushd: '0' requires: - App::cpanminus: '1.703' CPAN::Meta: '2.120921' CPAN::Meta::Requirements: '2.121' Class::Tiny: '1.001' Getopt::Long: '2.39' - JSON: '2.53' + JSON::PP: '2.27300' + Menlo::CLI::Compat: '1.9018' Module::CPANfile: '0.9031' Module::CoreList: '0' - Module::Metadata: '1.000003' - Module::Reader: '0.002' Path::Tiny: '0.033' Try::Tiny: '0.09' parent: '0.223' @@ -43,15 +41,18 @@ bugtracker: https://github.com/perl-carton/carton/issues homepage: https://github.com/perl-carton/carton repository: https://github.com/perl-carton/carton.git -version: v1.0.28 +version: v1.0.34 x_contributors: - 'Christian Walde <[email protected]>' + - 'Dan Book <[email protected]>' - 'David Golden <[email protected]>' - 'David Steinbrunner <[email protected]>' - 'Jonathan Steinert <[email protected]>' - 'Jose Luis Martinez <[email protected]>' - 'Kan Fushihara <[email protected]>' + - 'Karen Etheridge <[email protected]>' - 'Masahiro Chiba <[email protected]>' + - 'Michael Schout <[email protected]>' - 'NAKAGAWA Masaki <[email protected]>' - 'Olaf Alders <[email protected]>' - 'Pedro Figueiredo <[email protected]>' @@ -62,3 +63,6 @@ - 'Tatsuhiko Miyagawa <[email protected]>' - 'WATANABE Hiroaki <[email protected]>' - 'Yanick Champoux <[email protected]>' +x_generated_by_perl: v5.20.1 +x_serialization_backend: 'YAML::Tiny version 1.73' +x_static_install: 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/Makefile.PL new/Carton-v1.0.34/Makefile.PL --- old/Carton-v1.0.28/Makefile.PL 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/Makefile.PL 2018-06-28 19:38:04.000000000 +0200 @@ -1,4 +1,4 @@ -# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.005. +# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.012. use strict; use warnings; @@ -21,21 +21,19 @@ "MIN_PERL_VERSION" => "5.008005", "NAME" => "Carton", "PREREQ_PM" => { - "App::cpanminus" => "1.703", "CPAN::Meta" => "2.120921", "CPAN::Meta::Requirements" => "2.121", "Class::Tiny" => "1.001", "Getopt::Long" => "2.39", - "JSON" => "2.53", + "JSON::PP" => "2.27300", + "Menlo::CLI::Compat" => "1.9018", "Module::CPANfile" => "0.9031", "Module::CoreList" => 0, - "Module::Metadata" => "1.000003", - "Module::Reader" => "0.002", "Path::Tiny" => "0.033", "Try::Tiny" => "0.09", "parent" => "0.223" }, - "VERSION" => "v1.0.28", + "VERSION" => "v1.0.34", "test" => { "TESTS" => "t/*.t" } @@ -43,16 +41,14 @@ my %FallbackPrereqs = ( - "App::cpanminus" => "1.703", "CPAN::Meta" => "2.120921", "CPAN::Meta::Requirements" => "2.121", "Class::Tiny" => "1.001", "Getopt::Long" => "2.39", - "JSON" => "2.53", + "JSON::PP" => "2.27300", + "Menlo::CLI::Compat" => "1.9018", "Module::CPANfile" => "0.9031", "Module::CoreList" => 0, - "Module::Metadata" => "1.000003", - "Module::Reader" => "0.002", "Path::Tiny" => "0.033", "Try::Tiny" => "0.09", "parent" => "0.223" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/README new/Carton-v1.0.34/README --- old/Carton-v1.0.28/README 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/README 2018-06-28 19:38:04.000000000 +0200 @@ -16,6 +16,10 @@ # Other developer's machine, or on a deployment box > carton install > carton exec starman -p 8080 myapp.psgi + + # carton exec is optional + > perl -Ilocal/lib/perl5 local/bin/starman -p 8080 myapp.psgi + > PERL5LIB=/path/to/local/lib/perl5 /path/to/local/bin/starman -p 8080 myapp.psgi AVAILABILITY @@ -24,8 +28,8 @@ stripped from core, Carton is not expected to work correctly. Also, Carton requires you to run your command/application with carton - exec command, which means it's difficult or impossible to run in an - embedded perl use case such as mod_perl. + exec command or to include the local/lib/perl5 directory in your Perl + library search path (using PERL5LIB, -I, or lib). DESCRIPTION @@ -75,6 +79,24 @@ > git add cpanfile cpanfile.snapshot > git commit -m "Added Plack and Starman" + Specifying a CPAN distribution + + You can pin a module resolution to a specific distribution using a + combination of dist, mirror and url options in cpanfile. + + # specific distribution on PAUSE + requires 'Plack', '== 0.9980', + dist => 'MIYAGAWA/Plack-0.9980.tar.gz'; + + # local mirror (darkpan) + requires 'Plack', '== 0.9981', + dist => 'MYCOMPANY/Plack-0.9981-p1.tar.gz', + mirror => 'https://pause.local/'; + + # URL + requires 'Plack', '== 1.1000', + url => 'https://pause.local/authors/id/M/MY/MYCOMPANY/Plack-1.1000.tar.gz'; + Deploying your application Once you've done installing all the dependencies, you can push your @@ -107,6 +129,12 @@ option, you can avoid querying for a database like CPAN Meta DB or downloading files from CPAN mirrors upon deployment time. + As of Carton v1.0.32, the bundle also includes a package index allowing + you to simply use cpanm (which has a standalone version) instead of + installing Carton on a remote machine. + + > cpanm -L local --from "$PWD/vendor/cache" --installdeps --notest --quiet . + PERL VERSIONS When you take a snapshot in one perl version and deploy on another diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/cpanfile new/Carton-v1.0.34/cpanfile --- old/Carton-v1.0.28/cpanfile 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/cpanfile 2018-06-28 19:38:04.000000000 +0200 @@ -4,8 +4,7 @@ requires 'perl', '5.8.5'; -requires 'JSON', 2.53; -requires 'Module::Metadata', 1.000003; +requires 'JSON::PP', '2.27300'; requires 'Module::CPANfile', 0.9031; requires 'Try::Tiny', 0.09; @@ -14,14 +13,13 @@ requires 'Class::Tiny', 1.001; requires 'Path::Tiny', 0.033; -requires 'App::cpanminus', 1.7030; +requires 'Menlo::CLI::Compat', '1.9018'; requires 'CPAN::Meta', 2.120921; requires 'CPAN::Meta::Requirements', 2.121; requires 'Module::CoreList'; # for fatpack -requires 'Module::Reader', 0.002; recommends 'File::pushd'; recommends 'App::FatPacker', 0.009018; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/lib/Carton/Builder.pm new/Carton-v1.0.34/lib/Carton/Builder.pm --- old/Carton-v1.0.28/lib/Carton/Builder.pm 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/lib/Carton/Builder.pm 2018-06-28 19:38:04.000000000 +0200 @@ -6,7 +6,6 @@ cascade => sub { 1 }, without => sub { [] }, cpanfile => undef, - fatscript => sub { $_[0]->_build_fatscript }, }; sub effective_mirrors { @@ -42,12 +41,35 @@ warn "Couldn't find @{[ $dist->pathname ]}\n"; } } + + my $has_io_gzip = eval { require IO::Compress::Gzip; 1 }; + + my $ext = $has_io_gzip ? ".txt.gz" : ".txt"; + my $index = $cache_path->child("modules/02packages.details$ext"); + $index->parent->mkpath; + + warn "Writing $index\n"; + + my $out = $index->openw; + if ($has_io_gzip) { + $out = IO::Compress::Gzip->new($out) + or die "gzip failed: $IO::Compress::Gzip::GzipError"; + } + + $snapshot->index->write($out); + close $out; + + unless ($has_io_gzip) { + unlink "$index.gz"; + !system 'gzip', $index + or die "Running gzip command failed: $!"; + } } sub install { my($self, $path) = @_; - $self->run_cpanm( + $self->run_install( "-L", $path, (map { ("--mirror", $_->url) } $self->effective_mirrors), ( $self->index ? ("--mirror-index", $self->index) : () ), @@ -77,7 +99,7 @@ sub update { my($self, $path, @modules) = @_; - $self->run_cpanm( + $self->run_install( "-L", $path, (map { ("--mirror", $_->url) } $self->effective_mirrors), ( $self->custom_mirror ? "--mirror-only" : () ), @@ -86,29 +108,17 @@ ) or die "Updating modules failed\n"; } -sub _build_fatscript { - my $self = shift; +sub run_install { + my($self, @args) = @_; - my $fatscript; - if ($Carton::Fatpacked) { - require Module::Reader; - my $content = Module::Reader::module_content('App::cpanminus::fatscript') - or die "Can't locate App::cpanminus::fatscript"; - $fatscript = Path::Tiny->tempfile; - $fatscript->spew($content); - } else { - require Module::Metadata; - $fatscript = Module::Metadata->find_module_by_name("App::cpanminus::fatscript") - or die "Can't locate App::cpanminus::fatscript"; - } + require Menlo::CLI::Compat; + local $ENV{PERL_CPANM_OPT}; - return $fatscript; -} + my $cli = Menlo::CLI::Compat->new; + $cli->parse_options("--quiet", "--notest", @args); + $cli->run; -sub run_cpanm { - my($self, @args) = @_; - local $ENV{PERL_CPANM_OPT}; - !system $^X, $self->fatscript, "--quiet", "--notest", @args; + !$cli->status; } 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/lib/Carton/Doc/Bundle.pod new/Carton-v1.0.34/lib/Carton/Doc/Bundle.pod --- old/Carton-v1.0.28/lib/Carton/Doc/Bundle.pod 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/lib/Carton/Doc/Bundle.pod 2018-06-28 19:38:04.000000000 +0200 @@ -13,8 +13,8 @@ resolving dependencies in the snapshot file.snapshot. Bundled modules can be committed to a version control system, or -transferred to another host with scp/rsync etc. to use with C<carton -install --cached>. +transferred to another host with scp/rsync etc. to install with either +C<carton install --cached>, or a plain cpanm command with: + + cpanm --from file://$PWD/vendor/cache -L local --installdeps . -See also C<carton fatpack> that generates C<carton> executable in -C<vendor/bin>. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/lib/Carton/Doc/Fatpack.pod new/Carton-v1.0.34/lib/Carton/Doc/Fatpack.pod --- old/Carton-v1.0.28/lib/Carton/Doc/Fatpack.pod 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/lib/Carton/Doc/Fatpack.pod 2018-06-28 19:38:04.000000000 +0200 @@ -8,6 +8,12 @@ =head1 DESCRIPTION +B<WARNING>: It is known for this command to create an executable that +is not sufficient to run standalone in some environments, especially +when L<local::lib> is enabled. It is recommended to use the standard +C<cpanm> command to install bundle created by C<carton bundle> +command. See C<carton -h bundle> for more details. + This command creates a fatpack executable of C<carton> in C<vendor/bin> directory, so that it can be used to bootstrap deployment process, combined with C<carton bundle> and C<carton diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/lib/Carton/Packer.pm new/Carton-v1.0.34/lib/Carton/Packer.pm --- old/Carton-v1.0.28/lib/Carton/Packer.pm 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/lib/Carton/Packer.pm 2018-06-28 19:38:04.000000000 +0200 @@ -56,10 +56,24 @@ } sub required_modules { - my($self, $packer) = @_; + my $self = shift; - my $meta = $self->installed_meta('Carton') - or die "Couldn't find install metadata for Carton"; + my %requirements; + for my $dist (qw( Carton Menlo-Legacy Menlo )) { + $requirements{$_} = 1 for $self->required_modules_for($dist); + } + + # these modules are needed, but lazy-loaded, so FatPacker wont bundle them by default. + my @extra = qw(Menlo::Index::Mirror); + + [ keys %requirements, @extra ]; +} + +sub required_modules_for { + my($self, $dist) = @_; + + my $meta = $self->installed_meta($dist) + or die "Couldn't find install metadata for $dist"; my %excludes = ( perl => 1, @@ -67,10 +81,8 @@ 'Module::Build' => 1, ); - my @requirements = grep !$excludes{$_}, + grep !$excludes{$_}, $meta->effective_prereqs->requirements_for('runtime', 'requires')->required_modules; - - return \@requirements; } sub installed_meta { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/lib/Carton/Util.pm new/Carton-v1.0.34/lib/Carton/Util.pm --- old/Carton-v1.0.28/lib/Carton/Util.pm 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/lib/Carton/Util.pm 2018-06-28 19:38:04.000000000 +0200 @@ -18,14 +18,14 @@ } sub from_json { - require JSON; - JSON::decode_json(@_); + require JSON::PP; + JSON::PP->new->utf8->decode($_[0]) } sub to_json { my($data) = @_; - require JSON; - JSON->new->utf8->pretty->canonical->encode($data); + require JSON::PP; + JSON::PP->new->utf8->pretty->canonical->encode($data); } 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/lib/Carton.pm new/Carton-v1.0.34/lib/Carton.pm --- old/Carton-v1.0.28/lib/Carton.pm 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/lib/Carton.pm 2018-06-28 19:38:04.000000000 +0200 @@ -1,7 +1,7 @@ package Carton; use strict; use 5.008_005; -use version; our $VERSION = version->declare("v1.0.28"); +use version; our $VERSION = version->declare("v1.0.34"); 1; __END__ @@ -25,6 +25,10 @@ > carton install > carton exec starman -p 8080 myapp.psgi + # carton exec is optional + > perl -Ilocal/lib/perl5 local/bin/starman -p 8080 myapp.psgi + > PERL5LIB=/path/to/local/lib/perl5 /path/to/local/bin/starman -p 8080 myapp.psgi + =head1 AVAILABILITY Carton only works with perl installation with the complete set of core @@ -32,8 +36,9 @@ stripped from core, Carton is not expected to work correctly. Also, Carton requires you to run your command/application with -C<carton exec> command, which means it's difficult or impossible to -run in an embedded perl use case such as mod_perl. +C<carton exec> command or to include the I<local/lib/perl5> directory +in your Perl library search path (using C<PERL5LIB>, C<-I>, or +L<lib>). =head1 DESCRIPTION @@ -83,6 +88,24 @@ > git add cpanfile cpanfile.snapshot > git commit -m "Added Plack and Starman" +=head2 Specifying a CPAN distribution + +You can pin a module resolution to a specific distribution using a +combination of C<dist>, C<mirror> and C<url> options in C<cpanfile>. + + # specific distribution on PAUSE + requires 'Plack', '== 0.9980', + dist => 'MIYAGAWA/Plack-0.9980.tar.gz'; + + # local mirror (darkpan) + requires 'Plack', '== 0.9981', + dist => 'MYCOMPANY/Plack-0.9981-p1.tar.gz', + mirror => 'https://pause.local/'; + + # URL + requires 'Plack', '== 1.1000', + url => 'https://pause.local/authors/id/M/MY/MYCOMPANY/Plack-1.1000.tar.gz'; + =head2 Deploying your application Once you've done installing all the dependencies, you can push your @@ -116,6 +139,13 @@ CPAN Meta DB or downloading files from CPAN mirrors upon deployment time. +As of Carton v1.0.32, the bundle also includes a package index +allowing you to simply use L<cpanm> (which has a +L<standalone version|App::cpanminus/"Downloading the standalone executable">) +instead of installing Carton on a remote machine. + + > cpanm -L local --from "$PWD/vendor/cache" --installdeps --notest --quiet . + =head1 PERL VERSIONS When you take a snapshot in one perl version and deploy on another diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/t/author-pod-syntax.t new/Carton-v1.0.34/t/author-pod-syntax.t --- old/Carton-v1.0.28/t/author-pod-syntax.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/t/author-pod-syntax.t 2018-06-28 19:38:04.000000000 +0200 @@ -2,8 +2,8 @@ BEGIN { unless ($ENV{AUTHOR_TESTING}) { - require Test::More; - Test::More::plan(skip_all => 'these tests are for testing by the author'); + print qq{1..0 # SKIP these tests are for testing by the author\n}; + exit } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/bundle.t new/Carton-v1.0.34/xt/cli/bundle.t --- old/Carton-v1.0.28/xt/cli/bundle.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/bundle.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/check.t new/Carton-v1.0.34/xt/cli/check.t --- old/Carton-v1.0.28/xt/cli/check.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/check.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; subtest 'carton check fails when there is no lock' => sub { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/cpanfile.t new/Carton-v1.0.34/xt/cli/cpanfile.t --- old/Carton-v1.0.28/xt/cli/cpanfile.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/cpanfile.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; subtest 'carton install --cpanfile' => sub { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/deployment.t new/Carton-v1.0.34/xt/cli/deployment.t --- old/Carton-v1.0.28/xt/cli/deployment.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/deployment.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/deps_phase.t new/Carton-v1.0.34/xt/cli/deps_phase.t --- old/Carton-v1.0.28/xt/cli/deps_phase.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/deps_phase.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/dist.t new/Carton-v1.0.34/xt/cli/dist.t --- old/Carton-v1.0.28/xt/cli/dist.t 1970-01-01 01:00:00.000000000 +0100 +++ new/Carton-v1.0.34/xt/cli/dist.t 2018-06-28 19:38:04.000000000 +0200 @@ -0,0 +1,24 @@ +use strict; +use Test::More; +use lib "."; +use xt::CLI; + +subtest 'with pinned dist' => sub { + my $app = cli(); + $app->write_file('cpanfile', <<EOF); +requires 'Try::Tiny', '0.29', + dist => 'ETHER/Try-Tiny-0.29.tar.gz'; +EOF + $app->run("install"); + + $app->run("list"); + like $app->stdout, qr/Try-Tiny-0\.29/; + + $app->run("exec", "perl", "-e", "use Try::Tiny\ 1"); + like $app->stderr, qr/Try::Tiny .* 0\.29/; + + my $content = $app->dir->child('cpanfile.snapshot')->slurp; + like $content, qr/ETHER\/Try-Tiny-0\.29/; +}; + +done_testing; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/exec.t new/Carton-v1.0.34/xt/cli/exec.t --- old/Carton-v1.0.28/xt/cli/exec.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/exec.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; subtest 'carton exec without a command', sub { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/freeze.t new/Carton-v1.0.34/xt/cli/freeze.t --- old/Carton-v1.0.28/xt/cli/freeze.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/freeze.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/help.t new/Carton-v1.0.34/xt/cli/help.t --- old/Carton-v1.0.28/xt/cli/help.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/help.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/install.t new/Carton-v1.0.34/xt/cli/install.t --- old/Carton-v1.0.28/xt/cli/install.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/install.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; subtest 'carton install with version range' => sub { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/json_pp.t new/Carton-v1.0.34/xt/cli/json_pp.t --- old/Carton-v1.0.28/xt/cli/json_pp.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/json_pp.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; plan skip_all => "perl <= 5.14" if $] >= 5.015; @@ -8,7 +9,7 @@ my $app = cli(); $app->write_cpanfile(<<EOF); -requires 'JSON'; +requires 'JSON::PP'; requires 'CPAN::Meta', '2.12'; EOF diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/mirror.t new/Carton-v1.0.34/xt/cli/mirror.t --- old/Carton-v1.0.28/xt/cli/mirror.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/mirror.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; my $cwd = Path::Tiny->cwd; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/mismatch.t new/Carton-v1.0.34/xt/cli/mismatch.t --- old/Carton-v1.0.28/xt/cli/mismatch.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/mismatch.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/no_cpanfile.t new/Carton-v1.0.34/xt/cli/no_cpanfile.t --- old/Carton-v1.0.28/xt/cli/no_cpanfile.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/no_cpanfile.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/perl.t new/Carton-v1.0.34/xt/cli/perl.t --- old/Carton-v1.0.28/xt/cli/perl.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/perl.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/snapshot.t new/Carton-v1.0.34/xt/cli/snapshot.t --- old/Carton-v1.0.28/xt/cli/snapshot.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/snapshot.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; subtest 'snapshot file has canonical representation' => sub { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/subdir.t new/Carton-v1.0.34/xt/cli/subdir.t --- old/Carton-v1.0.28/xt/cli/subdir.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/subdir.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; subtest 'carton exec in subdir', sub { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/tree.t new/Carton-v1.0.34/xt/cli/tree.t --- old/Carton-v1.0.28/xt/cli/tree.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/tree.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/update.t new/Carton-v1.0.34/xt/cli/update.t --- old/Carton-v1.0.28/xt/cli/update.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/update.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; subtest 'carton update NonExistentModule' => sub { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/version.t new/Carton-v1.0.34/xt/cli/version.t --- old/Carton-v1.0.28/xt/cli/version.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/version.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,6 +1,7 @@ use strict; use Test::More; +use lib "."; use xt::CLI; my $app = cli(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Carton-v1.0.28/xt/cli/without.t new/Carton-v1.0.34/xt/cli/without.t --- old/Carton-v1.0.28/xt/cli/without.t 2016-05-24 07:30:51.000000000 +0200 +++ new/Carton-v1.0.34/xt/cli/without.t 2018-06-28 19:38:04.000000000 +0200 @@ -1,5 +1,6 @@ use strict; use Test::More; +use lib "."; use xt::CLI; subtest 'carton install --without develop' => sub {
