Add built local::lib
[catagits/Gitalist.git] / local-lib5 / lib / perl5 / Module / Install / Admin / Bundle.pm
CommitLineData
3fea05b9 1package Module::Install::Admin::Bundle;
2
3use strict;
4use Module::Install::Base;
5
6use vars qw{$VERSION @ISA};
7BEGIN {
8 $VERSION = '0.91';;
9 @ISA = qw{Module::Install::Base};
10}
11
12sub bundle {
13 my $self = shift;
14 my $bundle_dir = $self->_top->{bundle};
15
16 require Cwd;
17 require CPANPLUS::Backend;
18
19 my $cwd = Cwd::getcwd();
20
21 # This code is what we _should_ be doing, but CPANPLUS doesn't
22 # let you have multiple Backends in one program.
23 # my $cp = CPANPLUS::Backend->new;
24 #
25 # Jos Boumans tells us that this is the best way to do what we want
26 # It still scares me.
27 my $cp = CPANPLUS::Internals->_retrieve_id( CPANPLUS::Internals->_last_id )
28 || CPANPLUS::Backend->new;
29 my $conf = $cp->configure_object;
30 my $modtree = $cp->module_tree;
31
32 $conf->set_conf( verbose => 1 );
33 $conf->set_conf( signature => 0 );
34 $conf->set_conf( md5 => 0 );
35
36 mkdir $bundle_dir;
37
38 my %bundles;
39
40 while ( my ( $name, $version ) = splice( @_, 0, 2 ) ) {
41 my $mod = $cp->module_tree($name);
42 next unless $mod;
43 if ( $mod->package_is_perl_core or $self->{already_bundled}{$mod->package} ) {
44 next;
45 }
46
47 my $where = $mod->fetch( fetchdir => $bundle_dir, );
48 next unless ($where);
49 my $file = Cwd::abs_path($where);
50
51 my $extract_result = $mod->extract(
52 files => [ $file ],
53 extractdir => $bundle_dir,
54 );
55
56 unlink $file;
57 next unless ($extract_result);
58 $bundles{$name} = $extract_result;
59 $self->{already_bundled}{ $mod->package }++;
60
61 }
62
63 chdir $cwd;
64
65 local *FH;
66 open FH, ">> $bundle_dir.yml" or die "Cannot write to $bundle_dir.yml: $!";
67 foreach my $name ( sort keys %bundles ) {
68 print FH "$name: '$bundles{$name}'\n";
69 }
70 close FH;
71}
72
731;