Skip Menu |

This queue is for tickets about the Devel-REPL CPAN distribution.

Report information
The Basics
Id: 89531
Status: open
Worked: 1 hour (60 min)
Priority: 0/
Queue: Devel-REPL

People
Owner: Nobody in particular
Requestors: zefram [...] fysh.org
Cc: gortan [...] cpan.org
AdminCc:

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: (no value)



Subject: optional deps not so optional
Date: Tue, 15 Oct 2013 14:57:43 +0100
To: bug-Devel-REPL [...] rt.cpan.org
From: Zefram <zefram [...] fysh.org>
Devel-REPL declares (in META.{json,yml}) some `optional' dependencies for plugins. In fact some of them (Lexical::Persistence, Data::Dump::Streamer, PPI) are not really optional: their absence causes an error even if the plugins are not explicitly invoked. For example: $ /opt/perl-5.18.1/bin/re.pl Failed to load role: Devel::REPL::Plugin::LexEnv Can't locate Lexical/Persistence.pm in @INC (you may need to install the Lexical::Persistence module) (@INC contains: /opt/perl-5.18.1/lib/site_perl/5.18.1/x86_64-linux-ld /opt/perl-5.18.1/lib/site_perl/5.18.1 /opt/perl-5.18.1/vendor/lib/vendor_perl/5.18.1/x86_64-linux-ld /opt/perl-5.18.1/vendor/lib/vendor_perl/5.18.1 /opt/perl-5.18.1/lib/5.18.1/x86_64-linux-ld /opt/perl-5.18.1/lib/5.18.1 .) at /opt/perl-5.18.1/lib/site_perl/5.18.1/Devel/REPL/Plugin/LexEnv.pm line 13. BEGIN failed--compilation aborted at /opt/perl-5.18.1/lib/site_perl/5.18.1/Devel/REPL/Plugin/LexEnv.pm line 13. Compilation failed in require at /opt/perl-5.18.1/lib/site_perl/5.18.1/Devel/REPL/Script.pm line 48. at /opt/perl-5.18.1/lib/site_perl/5.18.1/MooseX/Object/Pluggable.pm line 235. MooseX::Object::Pluggable::_load_and_apply_role(Moose::Meta::Class::__ANON__::SERIAL::5=HASH(0x2df7c00), "Devel::REPL::Plugin::LexEnv") called at /opt/perl-5.18.1/lib/site_perl/5.18.1/MooseX/Object/Pluggable.pm line 170 MooseX::Object::Pluggable::load_plugins(Moose::Meta::Class::__ANON__::SERIAL::5=HASH(0x2df7c00), "LexEnv") called at /opt/perl-5.18.1/lib/site_perl/5.18.1/MooseX/Object/Pluggable.pm line 181 MooseX::Object::Pluggable::load_plugin(Moose::Meta::Class::__ANON__::SERIAL::5=HASH(0x2df7c00), "LexEnv") called at /opt/perl-5.18.1/lib/site_perl/5.18.1/Devel/REPL/Profile/Minimal.pm line 20 Devel::REPL::Profile::Minimal::apply_profile(Devel::REPL::Profile::Minimal=HASH(0x2df5a48), Moose::Meta::Class::__ANON__::SERIAL::5=HASH(0x2df7c00)) called at /opt/perl-5.18.1/lib/site_perl/5.18.1/Devel/REPL/Script.pm line 48 Devel::REPL::Script::load_profile(Devel::REPL::Script=HASH(0x1ab0078), "Minimal") called at /opt/perl-5.18.1/lib/site_perl/5.18.1/Devel/REPL/Script.pm line 38 Devel::REPL::Script::BUILD(Devel::REPL::Script=HASH(0x1ab0078), HASH(0x283c7b0)) called at /opt/perl-5.18.1/lib/site_perl/5.18.1/x86_64-linux-ld/Class/MOP/Method.pm line 125 Class::MOP::Method::execute(Moose::Meta::Method=HASH(0x1ad9418), Devel::REPL::Script=HASH(0x1ab0078), HASH(0x283c7b0)) called at /opt/perl-5.18.1/lib/site_perl/5.18.1/x86_64-linux-ld/Moose/Object.pm line 59 Moose::Object::BUILDALL(Devel::REPL::Script=HASH(0x1ab0078), HASH(0x283c7b0)) called at /opt/perl-5.18.1/lib/site_perl/5.18.1/x86_64-linux-ld/Moose/Meta/Class.pm line 288 Moose::Meta::Class::new_object(Moose::Meta::Class=HASH(0x26eb028), HASH(0x283c7b0)) called at /opt/perl-5.18.1/lib/site_perl/5.18.1/x86_64-linux-ld/Moose/Object.pm line 28 Moose::Object::new("Devel::REPL::Script", "ARGV", ARRAY(0x26f4278), "extra_argv", ARRAY(0x26f4218), "usage", Getopt::Long::Descriptive::Usage=HASH(0x2cb4100)) called at /opt/perl-5.18.1/lib/site_perl/5.18.1/MooseX/Getopt/Basic.pm line 112 MooseX::Getopt::Basic::new_with_options("Devel::REPL::Script") called at /opt/perl-5.18.1/lib/site_perl/5.18.1/Devel/REPL/Script.pm line 96 Devel::REPL::Script::import("Devel::REPL::Script", "run") called at /opt/perl/bin/re.pl line 4 These dependencies should be either genuinely optional or declared as hard deps. -zefram
On 2013-10-15 06:58:14, zefram@fysh.org wrote: Show quoted text
> Devel-REPL declares (in META.{json,yml}) some `optional' > dependencies for plugins. In fact some of them (Lexical::Persistence, > Data::Dump::Streamer, PPI) are not really optional: their absence > causes > an error even if the plugins are not explicitly invoked. For example:
Please confirm you're using the latest release, as I believe this was fixed by #88615 by adjusting what plugins are used in the various profiles.
Subject: Re: [rt.cpan.org #89531] optional deps not so optional
Date: Tue, 15 Oct 2013 17:24:40 +0100
To: Karen Etheridge via RT <bug-Devel-REPL [...] rt.cpan.org>
From: Zefram <zefram [...] fysh.org>
Karen Etheridge via RT wrote: Show quoted text
>Please confirm you're using the latest release, as I believe this was fixed by #88615 by adjusting what plugins are used in the various profiles.
My tests were with Devel-REPL-1.003025. I have no ~/.re.pl. Some of my tests were with a perl freshly built this morning, so all the CPAN modules involved are up to date. -zefram
On Tue Oct 15 11:59:32 2013, ETHER wrote: Show quoted text
> On 2013-10-15 06:58:14, zefram@fysh.org wrote:
> > Devel-REPL declares (in META.{json,yml}) some `optional' > > dependencies for plugins. In fact some of them > > (Lexical::Persistence, > > Data::Dump::Streamer, PPI) are not really optional: their absence > > causes > > an error even if the plugins are not explicitly invoked. For > > example:
> > Please confirm you're using the latest release, as I believe this was > fixed by #88615 by adjusting what plugins are used in the various > profiles.
I believe I have the same problem. I just installed Devel::REPL 1.003025 and I get this: % ~/usr/local/script/re.pl Failed to load role: Devel::REPL::Plugin::LexEnv Can't locate Lexical/Persistence.pm in @INC (you may need to install the Lexical::Persistence module) (@INC contains: /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/i686-linux /home/mauke/usr/local/lib/perl5/site_perl/5.18.1 /home/mauke/usr/local/lib/perl5/5.18.1/i686-linux /home/mauke/usr/local/lib/perl5/5.18.1 .) at /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/Devel/REPL/Plugin/LexEnv.pm line 13. BEGIN failed--compilation aborted at /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/Devel/REPL/Plugin/LexEnv.pm line 13. Compilation failed in require at /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/Devel/REPL/Script.pm line 48. at /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/MooseX/Object/Pluggable.pm line 117. MooseX::Object::Pluggable::_load_and_apply_role(Moose::Meta::Class::__ANON__::SERIAL::5=HASH(0xa42a580), "Devel::REPL::Plugin::LexEnv") called at /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/MooseX/Object/Pluggable.pm line 75 MooseX::Object::Pluggable::load_plugins(Moose::Meta::Class::__ANON__::SERIAL::5=HASH(0xa42a580), "LexEnv") called at /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/MooseX/Object/Pluggable.pm line 86 MooseX::Object::Pluggable::load_plugin(Moose::Meta::Class::__ANON__::SERIAL::5=HASH(0xa42a580), "LexEnv") called at /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/Devel/REPL/Profile/Minimal.pm line 20 Devel::REPL::Profile::Minimal::apply_profile(Devel::REPL::Profile::Minimal=HASH(0xa426bf0), Moose::Meta::Class::__ANON__::SERIAL::5=HASH(0xa42a580)) called at /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/Devel/REPL/Script.pm line 48 Devel::REPL::Script::load_profile(Devel::REPL::Script=HASH(0x99551f8), "Minimal") called at /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/Devel/REPL/Script.pm line 38 Devel::REPL::Script::BUILD(Devel::REPL::Script=HASH(0x99551f8), HASH(0xa408a48)) called at /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/i686-linux/Class/MOP/Method.pm line 125 Class::MOP::Method::execute(Moose::Meta::Method=HASH(0xa27bf38), Devel::REPL::Script=HASH(0x99551f8), HASH(0xa408a48)) called at /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/i686-linux/Moose/Object.pm line 59 Moose::Object::BUILDALL(Devel::REPL::Script=HASH(0x99551f8), HASH(0xa408a48)) called at /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/i686-linux/Moose/Meta/Class.pm line 288 Moose::Meta::Class::new_object(Moose::Meta::Class=HASH(0x9fec730), HASH(0xa408a48)) called at /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/i686-linux/Moose/Object.pm line 28 Moose::Object::new("Devel::REPL::Script", "ARGV", ARRAY(0xa0a6840), "extra_argv", ARRAY(0xa0a6800), "usage", Getopt::Long::Descriptive::Usage=HASH(0xa381d50)) called at /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/MooseX/Getopt/Basic.pm line 112 MooseX::Getopt::Basic::new_with_options("Devel::REPL::Script") called at /home/mauke/usr/local/lib/perl5/site_perl/5.18.1/Devel/REPL/Script.pm line 96 Devel::REPL::Script::import("Devel::REPL::Script", "run") called at /home/mauke/usr/local/script/re.pl line 4
On Tue Oct 15 09:58:14 2013, zefram@fysh.org wrote: Show quoted text
> Devel-REPL declares (in META.{json,yml}) some `optional' > dependencies for plugins. In fact some of them (Lexical::Persistence, > Data::Dump::Streamer, PPI) are not really optional: their absence > causes > an error even if the plugins are not explicitly invoked.
My guess is that the issue here is caused by a mismatch of what is declared optional in dist.ini, as opposed to what is contained in ./lib/Devel/REPL/Profile/Minimal.pm Minimal imports these pluggins: LexEnv (depends on Lexical::Persistence) DDS (depends on Data::Dump::Streamer) MultiLine::PPI (depends on PPI) While dist.ini specifies all these features as "always_recommend" and "default", cpanm does not install them. Probably the minimal profile should only contain plugins with no non-core dependencies, and the three mentioned plugins should be removed from "Minimal"...
Patch created that removes plugins from minimal which have optional, non-core dependencies.
Subject: minimal-reduced.patch
9c0c1fb4794674a51f4123d36ade8d69a635a151 diff --git a/lib/Devel/REPL/Overview.pod b/lib/Devel/REPL/Overview.pod index a71fd23..bbc8ae8 100644 --- a/lib/Devel/REPL/Overview.pod +++ b/lib/Devel/REPL/Overview.pod @@ -238,7 +238,7 @@ For example, the Minimal profile, `Devel::REPL::Profile::Minimal`: with 'Devel::REPL::Profile'; ## seem perldoc Muse sub plugins { ### plugins we want to be loaded - qw(History LexEnv DDS Packages Commands MultiLine::PPI); + qw(History Packages Commands); } ### the only required sub for profile, diff --git a/lib/Devel/REPL/Profile/Minimal.pm b/lib/Devel/REPL/Profile/Minimal.pm index 6740fbe..529dcae 100644 --- a/lib/Devel/REPL/Profile/Minimal.pm +++ b/lib/Devel/REPL/Profile/Minimal.pm @@ -6,7 +6,7 @@ use namespace::autoclean; with 'Devel::REPL::Profile'; sub plugins { - qw(History LexEnv DDS Packages Commands MultiLine::PPI); + qw(History Packages Commands); } sub apply_profile {