Skip to content

Commit

Permalink
Implemented --list-plugins
Browse files Browse the repository at this point in the history
Added 'name', 'description', 'synopsis', 'version', 'api_version' DSL to plugins
  • Loading branch information
miyagawa committed Feb 23, 2010
1 parent 4cb6fbd commit 72c0457
Show file tree
Hide file tree
Showing 15 changed files with 89 additions and 32 deletions.
20 changes: 19 additions & 1 deletion cpanm
Expand Up @@ -42,6 +42,7 @@ sub new {
perl => $^X,
argv => undef,
hooks => {},
plugins => [],
@_,
}, $class;
}
Expand All @@ -61,6 +62,7 @@ sub parse_options {
'V|version' => sub { $self->{action} = 'version' },
'perl' => \$self->{perl},
'recent' => sub { $self->{action} = 'show_recent' },
'list-plugins' => sub { $self->{action} = 'list_plugins' },
'installdeps' => \$self->{installdeps},
'interactive' => \$self->{interactive},
'i|install' => sub { $self->{cmd} = 'install' },
Expand Down Expand Up @@ -201,13 +203,19 @@ sub load_plugin {

$self->chat("Loading plugin $file\n");

my $plugin = { name => $name, file => $file };
my @attr = qw( name description author version api_version synopsis );
my $dsl = join "\n", map "sub $_ { \$plugin->{$_} = shift }", @attr;

(my $package = $file) =~ s/[^a-zA-Z0-9_]/_/g;
my $code = do { open my $io, "<$file"; local $/; <$io> };
eval "package App::cpanplus::plugin::$package;\n".
"use strict;\n" .
"use strict;\n$dsl\n" .
"sub hook { \$self->hook('$name', \@_) };\n$code";

$self->diag("! Loading plugin $file faield: $@") if $@;

push @{$self->{plugins}}, $plugin;
}

sub hook {
Expand Down Expand Up @@ -376,6 +384,16 @@ sub show_recent {
return 1;
}

sub list_plugins {
my $self = shift;

for my $plugin (@{$self->{plugins}}) {
print "$plugin->{name} - $plugin->{description}\n";
}

return 1;
}

sub self_upgrade {
my $self = shift;
$self->{argv} = [ 'App::cpanminus' ];
Expand Down
7 changes: 5 additions & 2 deletions plugins/bundle
@@ -1,5 +1,8 @@
# NAME: bundle - grab dependencies from Bundle::
# AUTHOR: Tatsuhiko Miyagawa
name 'bundle';
description 'dependencies from Bundle::';
author 'Tatsuhiko Miyagawa';

api_version 0.1;

hook find_deps => sub {
my $args = shift;
Expand Down
8 changes: 5 additions & 3 deletions plugins/cp562an
@@ -1,6 +1,8 @@
# XXX This does not work
# NAME: cp562an - Use CP5.6.2AN (or other similar) mirrors
# AUTHOR: Tatsuhiko Miyagawa
name 'cp562an';
description 'Use CP5.6.2AN (or other similar) mirrors';
author 'Tatsuhiko Miyagawa';

api_version 0.1;

my $mirror_base = 'http://cp__WHAT__an.barnyard.co.uk/';

Expand Down
7 changes: 5 additions & 2 deletions plugins/cpandb
@@ -1,5 +1,8 @@
# NAME: cpandb - query CPAN DB rather than scraping search.cpan.org
# AUTHOR: Tatsuhiko Miyagawa
name 'cpandb';
description 'query CPAN DB rather than scraping search.cpan.org';
author 'Tatsuhiko Miyagawa';

api_version 0.1;

# This is a proof-of-concept plugin:
# DO NOT USE THIS PLUGIN - the server hardcoded here is not frequently updated
Expand Down
7 changes: 5 additions & 2 deletions plugins/cpanfresh
@@ -1,5 +1,8 @@
# NAME: cpanfresh - Fetch the latest release from http://friendfeed.com/cpan
# AUTHOR: Tatsuhiko Miyagawa
name 'cpanfresh';
description 'Fetch the latest release from http://friendfeed.com/cpan';
author 'Tatsuhiko Miyagawa';

api_version 0.1;

my $entries;

Expand Down
7 changes: 5 additions & 2 deletions plugins/dist_ini
@@ -1,5 +1,8 @@
# NAME: dist_ini - Find depdencies and extract META info from dist.ini
# AUTHOR: Tatsuhiko Miyagawa
name 'dist_ini';
description 'Find depdencies and extract META info from dist.ini';
author 'Tatsuhiko Miyagawa';

api_version 0.1;

# This is a proof of concept and not really useful since most
# distributions heavily use Dist::Zilla's feature to mangle docs,
Expand Down
7 changes: 5 additions & 2 deletions plugins/fast_syncing_mirrors
@@ -1,5 +1,8 @@
# NAME: fast_syncing_mirrors - Use fast-syncing PAUSE mirrors
# AUTHOR: Tatsuhiko Miyagawa
name 'fast_syncing_mirrors';
description 'Use fast-syncing PAUSE mirrors';
author 'Tatsuhiko Miyagawa';

api_version 0.1;

hook configure_mirrors => sub {
my $args = shift;
Expand Down
5 changes: 3 additions & 2 deletions plugins/git_site_perl
@@ -1,5 +1,6 @@
# NAME: git_site_perl - Hooks to keep site_perl in git
# AUTHOR: Tatsuhiko Miyagawa
name 'git_site_perl';
description 'Hooks to keep site_perl in git';
author 'Tatsuhiko Miyagawa';

use Config;
use Cwd;
Expand Down
9 changes: 6 additions & 3 deletions plugins/github
@@ -1,6 +1,9 @@
# NAME: github - Install distributions from github
# AUTHOR: Tatsuhiko Miyagawa
# SYNOPSIS: cpanm github:miyagawa/Plack
name 'github';
description 'Install distributions from github';
synopsis 'cpanm github:miyagawa/Plack';
author 'Tatsuhiko Miyagawa';

api_version 0.1;

hook locate_dist => sub {
my $args = shift;
Expand Down
9 changes: 6 additions & 3 deletions plugins/gitpan
@@ -1,6 +1,9 @@
# NAME: gitpan - Install modules from gitpan
# AUTHOR: Tatsuhiko Miyagawa
# SYNOPSIS: cpanm gitpan:CGI-1.22
name 'gitpan';
description 'Install modules from gitpan';
synopsis 'cpanm gitpan:CGI-1.22';
author 'Tatsuhiko Miyagawa';

api_version 0.1;

hook locate_dist => sub {
my $args = shift;
Expand Down
7 changes: 5 additions & 2 deletions plugins/growl
@@ -1,5 +1,8 @@
# NAME: growl - Growl notifications
# AUTHOR: Tatsuhiko Miyagawa
name 'growl';
description 'Growl notifications';
author 'Tatsuhiko Miyagawa';

api_version 0.1;

my $growlnotify;

Expand Down
7 changes: 5 additions & 2 deletions plugins/minicpan
@@ -1,5 +1,8 @@
# NAME: minicpan - fallback to local minicpan when a dist is not found
# AUTHOR: Tatsuhiko Miyagawa
name 'minicpan';
description 'fallback to local minicpan when a dist is not found';
author 'Tatsuhiko Miyagawa';

api_version 0.1;

my $minicpan_rc = File::Spec->catfile($ENV{HOME}, ".minicpanrc");
my $minicpan_home = find_home($minicpan_rc) || File::Spec->catfile($ENV{HOME}, "minicpan");
Expand Down
7 changes: 5 additions & 2 deletions plugins/p5i
@@ -1,5 +1,8 @@
# NAME: p5i - Support .p5i file
# AUTHOR: Tatsuhiko Miyagawa
name 'p5i';
description 'Support .p5i file';
author 'Tatsuhiko Miyagawa';

api_version 0.1;

hook locate_dist => sub {
my $args = shift;
Expand Down
7 changes: 5 additions & 2 deletions plugins/query_mirror
@@ -1,5 +1,8 @@
# NAME: query_mirror - mst's hack to get redirects by module name on CPAN mirrors
# AUTHOR: Tatsuhiko Miyagawa
name 'query_mirror';
description "mst's hack to get redirects by module name on CPAN mirrors"
author 'Tatsuhiko Miyagawa';

api_version 0.1;

my $mirror = "http://cpan.shadowcatprojects.net";

Expand Down
7 changes: 5 additions & 2 deletions plugins/verify_signature
@@ -1,5 +1,8 @@
# NAME: verify_signature - Verify SIGNATURE before installing
# AUTHOR: Tatsuhiko Miyagawa
name 'verify_signature';
description 'Verify SIGNATURE before installing';
author 'Tatsuhiko Miyagawa';

api_version 0.1;

my $cpansign;

Expand Down

0 comments on commit 72c0457

Please sign in to comment.