summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris 'BinGOs' Williams <chris@bingosnet.co.uk>2013-05-18 01:01:42 +0100
committerRicardo Signes <rjbs@cpan.org>2013-05-18 15:24:51 -0400
commitfb598ba5e55920eb59105c932df653f4fea6966c (patch)
treee6e09698d237c93f2c0b38d09b65750b66393edc
parent664ba38731e2f5920049156e3bbc1d432b9ef080 (diff)
downloadperl-fb598ba5e55920eb59105c932df653f4fea6966c.tar.gz
Remove cpan/CPANPLUS and associated utilities
-rw-r--r--INSTALL3
-rw-r--r--MANIFEST87
-rwxr-xr-xMakefile.SH3
-rwxr-xr-xPorting/Maintainers.pl23
-rw-r--r--Porting/release_managers_guide.pod13
-rw-r--r--README.cygwin11
-rw-r--r--configure.com4
-rw-r--r--cpan/CPANPLUS/Makefile.PL11
-rw-r--r--cpan/CPANPLUS/bin/cpan2dist673
-rw-r--r--cpan/CPANPLUS/bin/cpanp104
-rw-r--r--cpan/CPANPLUS/bin/cpanp-run-perl11
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS.pm272
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Backend.pm1344
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Backend/RV.pm145
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Config.pm834
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Config/HomeEnv.pm63
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Configure.pm637
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Configure/Setup.pm1654
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Dist.pm808
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Dist/Autobundle.pm120
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Dist/Base.pm261
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Dist/MM.pm1044
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Dist/Sample.pm20
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Error.pm210
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/FAQ.pod34
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Hacking.pod135
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Internals.pm556
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Internals/Constants.pm391
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Internals/Constants/Report.pm426
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Internals/Extract.pm247
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Internals/Fetch.pm476
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Internals/Report.pm696
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Internals/Search.pm367
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Internals/Source.pm1470
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Internals/Source/Memory.pm381
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Internals/Source/SQLite.pm383
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Internals/Source/SQLite/Tie.pm143
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Internals/Utils.pm680
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Internals/Utils/Autoflush.pm9
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Module.pm1839
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Module/Author.pm235
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Module/Author/Fake.pm83
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Module/Checksums.pm260
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Module/Fake.pm88
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Module/Signature.pm66
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Selfupdate.pm554
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Shell.pm343
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Shell/Classic.pm1269
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Shell/Default.pm1978
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/CustomSource.pm205
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/HOWTO.pod136
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/Remote.pm190
-rw-r--r--cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/Source.pm111
-rw-r--r--cpan/CPANPLUS/t/00_CPANPLUS-Internals-Utils.t185
-rw-r--r--cpan/CPANPLUS/t/01_CPANPLUS-Configure.t136
-rw-r--r--cpan/CPANPLUS/t/02_CPANPLUS-Internals.t147
-rw-r--r--cpan/CPANPLUS/t/03_CPANPLUS-Internals-Source.t262
-rw-r--r--cpan/CPANPLUS/t/04_CPANPLUS-Module.t360
-rw-r--r--cpan/CPANPLUS/t/05_CPANPLUS-Internals-Fetch.t110
-rw-r--r--cpan/CPANPLUS/t/06_CPANPLUS-Internals-Constants.t73
-rw-r--r--cpan/CPANPLUS/t/07_CPANPLUS-Internals-Extract.t36
-rw-r--r--cpan/CPANPLUS/t/08_CPANPLUS-Backend.t375
-rw-r--r--cpan/CPANPLUS/t/09_CPANPLUS-Internals-Search.t83
-rw-r--r--cpan/CPANPLUS/t/10_CPANPLUS-Error.t114
-rw-r--r--cpan/CPANPLUS/t/15_CPANPLUS-Shell.t152
-rw-r--r--cpan/CPANPLUS/t/19_CPANPLUS-Dist.t441
-rw-r--r--cpan/CPANPLUS/t/20_CPANPLUS-Dist-MM.t430
-rw-r--r--cpan/CPANPLUS/t/21_CPANPLUS-Dist-No-Build.t119
-rw-r--r--cpan/CPANPLUS/t/25_CPANPLUS.t90
-rw-r--r--cpan/CPANPLUS/t/30_CPANPLUS-Internals-Selfupdate.t181
-rw-r--r--cpan/CPANPLUS/t/40_CPANPLUS-Internals-Report.t503
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/01mailrc.txt.gzbin137 -> 0 bytes
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Bundle-Foo-Bar-0.01.tar.gzbin850 -> 0 bytes
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/CHECKSUMS35
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Foo-Bar-0.01.meta13
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Foo-Bar-0.01.readme2
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Foo-Bar-0.01.tar.gzbin1118 -> 0 bytes
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/perl5.005_03.tar.gzbin119 -> 0 bytes
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUXS/CHECKSUMS20
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUXS/Foo-Bar-0.01.readme2
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUXS/Foo-Bar-0.01.tar.gzbin1589 -> 0 bytes
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBNOXS/CHECKSUMS20
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBNOXS/Foo-Bar-0.01.readme2
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBNOXS/Foo-Bar-0.01.tar.gzbin867 -> 0 bytes
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBXS/CHECKSUMS20
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBXS/Foo-Bar-0.01.readme2
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBXS/Foo-Bar-0.01.tar.gzbin1541 -> 0 bytes
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/autobundle/Snapshot.pm19
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/modules/02packages.details.txt.gzbin437 -> 0 bytes
-rw-r--r--cpan/CPANPLUS/t/dummy-CPAN/modules/03modlist.data.gzbin583 -> 0 bytes
-rw-r--r--cpan/CPANPLUS/t/inc/conf.pl304
-rwxr-xr-xinstallperl2
-rw-r--r--lib/.gitignore50
-rw-r--r--pod/perlutil.pod14
-rw-r--r--t/harness1
-rw-r--r--t/porting/customized.dat1
-rw-r--r--t/porting/known_pod_issues.dat6
-rw-r--r--t/porting/utils.t5
-rw-r--r--utils.lst3
-rw-r--r--utils/Makefile12
-rw-r--r--utils/Makefile.SH12
-rw-r--r--utils/cpan2dist.PL51
-rw-r--r--utils/cpanp-run-perl.PL51
-rw-r--r--utils/cpanp.PL51
-rw-r--r--vms/descrip_mms.template11
-rw-r--r--win32/Makefile6
-rw-r--r--win32/makefile.mk6
107 files changed, 17 insertions, 26607 deletions
diff --git a/INSTALL b/INSTALL
index a2a0bf22d6..6c862b5445 100644
--- a/INSTALL
+++ b/INSTALL
@@ -2137,9 +2137,6 @@ make install will install the following:
different
versions of perl.
cpan The CPAN shell.
- cpan2dist The CPANPLUS distribution creator.
- cpanp The CPANPLUS shell.
- cpanp-run-perl A helper for cpanp.
enc2xs Encoding module generator.
find2perl find-to-perl translator.
h2ph Extract constants and simple macros from C
diff --git a/MANIFEST b/MANIFEST
index 8220e57775..32ebc04e75 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -425,90 +425,6 @@ cpan/CPAN/PAUSE2005.pub CPAN public key
cpan/CPAN/PAUSE2007.pub CPAN public key
cpan/CPAN/PAUSE2009.pub CPAN public key
cpan/CPAN/PAUSE2011.pub
-cpan/CPANPLUS/bin/cpan2dist the cpan2dist utility
-cpan/CPANPLUS/bin/cpanp the cpanp utility
-cpan/CPANPLUS/bin/cpanp-run-perl the cpanp-run-perl utility
-cpan/CPANPLUS/lib/CPANPLUS/Backend.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Backend/RV.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Config/HomeEnv.pm
-cpan/CPANPLUS/lib/CPANPLUS/Config.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Configure.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Configure/Setup.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Dist/Autobundle.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Dist/Base.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Dist/MM.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Dist.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Dist/Sample.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Error.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/FAQ.pod CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Hacking.pod CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Internals/Constants.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Internals/Constants/Report.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Internals/Extract.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Internals/Fetch.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Internals.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Internals/Report.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Internals/Search.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Internals/Source/Memory.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Internals/Source.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Internals/Source/SQLite.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Internals/Source/SQLite/Tie.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Internals/Utils/Autoflush.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Internals/Utils.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Module/Author/Fake.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Module/Author.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Module/Checksums.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Module/Fake.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Module.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Module/Signature.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Selfupdate.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Shell/Classic.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/CustomSource.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/HOWTO.pod CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/Remote.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/Source.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Shell/Default.pm CPANPLUS
-cpan/CPANPLUS/lib/CPANPLUS/Shell.pm CPANPLUS
-cpan/CPANPLUS/Makefile.PL
-cpan/CPANPLUS/t/00_CPANPLUS-Internals-Utils.t CPANPLUS tests
-cpan/CPANPLUS/t/01_CPANPLUS-Configure.t CPANPLUS tests
-cpan/CPANPLUS/t/02_CPANPLUS-Internals.t CPANPLUS tests
-cpan/CPANPLUS/t/03_CPANPLUS-Internals-Source.t CPANPLUS tests
-cpan/CPANPLUS/t/04_CPANPLUS-Module.t CPANPLUS tests
-cpan/CPANPLUS/t/05_CPANPLUS-Internals-Fetch.t CPANPLUS tests
-cpan/CPANPLUS/t/06_CPANPLUS-Internals-Constants.t CPANPLUS tests
-cpan/CPANPLUS/t/07_CPANPLUS-Internals-Extract.t CPANPLUS tests
-cpan/CPANPLUS/t/08_CPANPLUS-Backend.t CPANPLUS tests
-cpan/CPANPLUS/t/09_CPANPLUS-Internals-Search.t CPANPLUS tests
-cpan/CPANPLUS/t/10_CPANPLUS-Error.t CPANPLUS tests
-cpan/CPANPLUS/t/15_CPANPLUS-Shell.t CPANPLUS tests
-cpan/CPANPLUS/t/19_CPANPLUS-Dist.t CPANPLUS tests
-cpan/CPANPLUS/t/20_CPANPLUS-Dist-MM.t CPANPLUS tests
-cpan/CPANPLUS/t/21_CPANPLUS-Dist-No-Build.t CPANPLUS tests
-cpan/CPANPLUS/t/25_CPANPLUS.t CPANPLUS tests
-cpan/CPANPLUS/t/30_CPANPLUS-Internals-Selfupdate.t CPANPLUS tests
-cpan/CPANPLUS/t/40_CPANPLUS-Internals-Report.t CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/01mailrc.txt.gz CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Bundle-Foo-Bar-0.01.tar.gz CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/CHECKSUMS CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Foo-Bar-0.01.meta CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Foo-Bar-0.01.readme CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Foo-Bar-0.01.tar.gz CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/perl5.005_03.tar.gz CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUXS/CHECKSUMS CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUXS/Foo-Bar-0.01.readme CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUXS/Foo-Bar-0.01.tar.gz CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBNOXS/CHECKSUMS CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBNOXS/Foo-Bar-0.01.readme CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBNOXS/Foo-Bar-0.01.tar.gz CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBXS/CHECKSUMS CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBXS/Foo-Bar-0.01.readme CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBXS/Foo-Bar-0.01.tar.gz CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/autobundle/Snapshot.pm CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/modules/02packages.details.txt.gz CPANPLUS tests
-cpan/CPANPLUS/t/dummy-CPAN/modules/03modlist.data.gz CPANPLUS tests
-cpan/CPANPLUS/t/inc/conf.pl CPANPLUS tests
cpan/CPAN/scripts/cpan easily interact with CPAN from the command line
cpan/CPAN/t/01loadme.t See if CPAN the module works
cpan/CPAN/t/02nox.t See if CPAN::Nox works
@@ -5616,10 +5532,7 @@ util.h Dummy header
utils/c2ph.PL program to translate dbx stabs to perl
utils/config_data.PL Module::Build tool
utils/corelist.PL Module::CoreList
-utils/cpan2dist.PL the cpan2dist utility
utils/cpan.PL easily interact with CPAN from the command line
-utils/cpanp.PL the cpanp utility
-utils/cpanp-run-perl.PL the cpanp-run-perl utility
utils/enc2xs.PL Encode module generator
utils/h2ph.PL A thing to turn C .h files into perl .ph files
utils/h2xs.PL Program to make .xs files from C header files
diff --git a/Makefile.SH b/Makefile.SH
index 10bc742bfc..ad92da6750 100755
--- a/Makefile.SH
+++ b/Makefile.SH
@@ -1331,11 +1331,10 @@ _cleaner2:
rm -f lib/ExtUtils/ParseXS/t/XSTest$(OBJ_EXT)
rm -f lib/ExtUtils/ParseXS/t/XSTest$(DLSUFFIX)
rm -fr lib/B
- rm -fr lib/CPAN lib/CPANPLUS
+ rm -fr lib/CPAN
rm -fr lib/ExtUtils/CBuilder
rm -f pod2htmd.tmp
rm -rf pod/perlfunc pod/perlipc
- -rmdir cpan/CPANPLUS/t/dummy-cpanplus cpan/CPANPLUS/t/dummy-localmirror
-rmdir ext/B/lib
-rmdir lib/Archive/Tar lib/Archive lib/Attribute
-rmdir lib/CGI lib/Carp
diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl
index 2e4a6373be..cc920e3e90 100755
--- a/Porting/Maintainers.pl
+++ b/Porting/Maintainers.pl
@@ -461,29 +461,6 @@ use File::Glob qw(:case);
'UPSTREAM' => 'cpan',
},
- 'CPANPLUS' => {
- 'MAINTAINER' => 'kane',
- 'DISTRIBUTION' => 'BINGOS/CPANPLUS-0.9134.tar.gz',
- 'FILES' => q[cpan/CPANPLUS],
- 'EXCLUDED' => [
- qr{^inc/},
- qr{^t/dummy-.*\.hidden$},
- qr{^t/dummy-(cpanplus|perl|localmirror)/},
- 'bin/cpanp-boxed',
-
- # SQLite tests would be skipped in core, and
- # the filenames are too long for VMS!
- qw( t/031_CPANPLUS-Internals-Source-SQLite.t
- t/032_CPANPLUS-Internals-Source-via-sqlite.t
- ),
- 'Makefile.PL',
- ],
- 'CUSTOMIZED' => ['Makefile.PL'],
- 'UPSTREAM' => 'cpan',
- 'BUGS' => 'bug-cpanplus@rt.cpan.org',
- 'DEPRECATED' => '5.017009',
- },
-
'CPAN::Meta' => {
'MAINTAINER' => 'dagolden',
'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-2.120921.tar.gz',
diff --git a/Porting/release_managers_guide.pod b/Porting/release_managers_guide.pod
index 466a5c7613..7f03b69f07 100644
--- a/Porting/release_managers_guide.pod
+++ b/Porting/release_managers_guide.pod
@@ -930,19 +930,6 @@ Check that your perl can run this:
42
$
-=head4 Bootstrap the CPANPLUS client
-
-Bootstrap the CPANPLUS client on the clean install:
-
- $ bin/cpanp
-
-=head4 Install the DBI module with CPANPLUS
-
- CPAN Terminal> i DBI
- CPAN Terminal> quit
- $ bin/perl -MDBI -e 1
- $
-
=head4 Make sure that perlbug works
Test L<perlbug> with the following:
diff --git a/README.cygwin b/README.cygwin
index b2ea7bd713..0ad627fa91 100644
--- a/README.cygwin
+++ b/README.cygwin
@@ -664,15 +664,6 @@ be kept as clean as possible.
ext/Win32CORE/Win32CORE.pm
- History of Win32CORE under Cygwin
lib/CGI.pm - binmode and path separator
- lib/CPANPLUS/Dist/MM.pm - Commented out code that fails under Win32/Cygwin
- lib/CPANPLUS/Internals/Constants/Report.pm
- - OS classifications
- lib/CPANPLUS/Internals/Constants.pm
- - Constants for Cygwin
- lib/CPANPLUS/Internals/Report.pm
- - Example of Cygwin report
- lib/CPANPLUS/Module.pm
- - Abort if running on old Cygwin version
lib/Cwd.pm - hook to internal Cwd::cwd
lib/ExtUtils/CBuilder/Platform/cygwin.pm
- use gcc for ld, and link to libperl.dll.a
@@ -728,8 +719,6 @@ be kept as clean as possible.
lib/AnyDBM_File.t
lib/Archive/Extract/t/01_Archive-Extract.t
lib/Archive/Tar/t/02_methods.t
- lib/CPANPLUS/t/05_CPANPLUS-Internals-Fetch.t
- lib/CPANPLUS/t/20_CPANPLUS-Dist-MM.t
lib/ExtUtils/t/Embed.t
lib/ExtUtils/t/eu_command.t
lib/ExtUtils/t/MM_Cygwin.t
diff --git a/configure.com b/configure.com
index f3535f9cb3..259c567517 100644
--- a/configure.com
+++ b/configure.com
@@ -7281,10 +7281,6 @@ $ WRITE CONFIG "$ c2ph == """ + perl_setup_perl + " ''vms_prefix':[utils]c
$ WRITE CONFIG "$ config_data== """ + perl_setup_perl + " ''vms_prefix':[utils]config_data.com"""
$ WRITE CONFIG "$ corelist == """ + perl_setup_perl + " ''vms_prefix':[utils]corelist.com"""
$ WRITE CONFIG "$ cpan == """ + perl_setup_perl + " ''vms_prefix':[utils]cpan.com"""
-$ WRITE CONFIG "$ cpan2dist == """ + perl_setup_perl + " ''vms_prefix':[utils]cpan2dist.com"""
-$! FIXME: "-" is an operator and illegal in a symbol name -- cpanp-run-perl can't work
-$!$ WRITE CONFIG "$ cpanp-run-perl == """ + perl_setup_perl + " ''vms_prefix':[utils]cpanp-run-perl.com"""
-$ WRITE CONFIG "$ cpanp == """ + perl_setup_perl + " ''vms_prefix':[utils]cpanp.com"""
$ WRITE CONFIG "$ enc2xs == """ + perl_setup_perl + " ''vms_prefix':[utils]enc2xs.com"""
$ WRITE CONFIG "$ find2perl == """ + perl_setup_perl + " ''vms_prefix':[utils]find2perl.com"""
$ WRITE CONFIG "$ h2ph == """ + perl_setup_perl + " ''vms_prefix':[utils]h2ph.com"""
diff --git a/cpan/CPANPLUS/Makefile.PL b/cpan/CPANPLUS/Makefile.PL
deleted file mode 100644
index d69b40d9a0..0000000000
--- a/cpan/CPANPLUS/Makefile.PL
+++ /dev/null
@@ -1,11 +0,0 @@
-use strict;
-use ExtUtils::MakeMaker;
-
-WriteMakefile (
- NAME => 'CPANPLUS',
- VERSION_FROM => 'lib/CPANPLUS/Internals.pm', # finds $VERSION
- EXE_FILES => ['bin/cpan2dist','bin/cpanp','bin/cpanp-run-perl'],
- INSTALLDIRS => ( $] >= 5.009005 ? 'perl' : 'site' ),
- AUTHOR => 'Jos Boumans <kane[at]cpan.org>',
- ABSTRACT => 'Ameliorated interface to the CPAN'
-);
diff --git a/cpan/CPANPLUS/bin/cpan2dist b/cpan/CPANPLUS/bin/cpan2dist
deleted file mode 100644
index b4fadf552b..0000000000
--- a/cpan/CPANPLUS/bin/cpan2dist
+++ /dev/null
@@ -1,673 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-use CPANPLUS::Backend;
-use CPANPLUS::Dist;
-use CPANPLUS::Internals::Constants;
-use Data::Dumper;
-use Getopt::Long;
-use File::Spec;
-use File::Temp qw|tempfile|;
-use File::Basename;
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-local $Data::Dumper::Indent = 1;
-
-use constant PREREQ_SKIP_CLASS => 'CPANPLUS::To::Dist::PREREQ_SKIP';
-use constant ALARM_CLASS => 'CPANPLUS::To::Dist::ALARM';
-
-### print when you can
-$|++;
-
-my $cb = CPANPLUS::Backend->new
- or die loc("Could not create new CPANPLUS::Backend object");
-my $conf = $cb->configure_object;
-
-my %formats = map { $_ => $_ } CPANPLUS::Dist->dist_types;
-
-my $opts = {};
-GetOptions( $opts,
- 'format=s', 'archive',
- 'verbose!', 'force!',
- 'skiptest!', 'keepsource!',
- 'makefile!', 'buildprereq!',
- 'help', 'flushcache',
- 'ban=s@', 'banlist=s@',
- 'ignore=s@', 'ignorelist=s@',
- 'defaults', 'modulelist=s@',
- 'logfile=s', 'timeout=s',
- 'dist-opts=s%', 'set-config=s%',
- 'default-banlist!', 'set-program=s%',
- 'default-ignorelist!', 'edit-metafile!',
- 'install!'
- );
-
-die usage() if exists $opts->{'help'};
-
-### parse options
-my $tarball = $opts->{'archive'} || 0;
-my $keep = $opts->{'keepsource'} ? 1 : 0;
-my $prereqbuild = exists $opts->{'buildprereq'}
- ? $opts->{'buildprereq'}
- : 0;
-my $timeout = exists $opts->{'timeout'}
- ? $opts->{'timeout'}
- : 300;
-
-### use default answers?
-unless ( $ENV{'PERL_MM_USE_DEFAULT'} ) {
- $ENV{'PERL_MM_USE_DEFAULT'} = $opts->{'defaults'} ? 1 : 0;
-}
-
-my $format;
-### if provided, we go with the command line option, fall back to conf setting
-{ $format = $opts->{'format'} || $conf->get_conf('dist_type');
- $conf->set_conf( dist_type => $format );
-
- ### is this a valid format??
- die loc("Invalid format: " . ($format || "[NONE]") ) . usage()
- unless $formats{$format};
-
- ### any options to fix config entries
- { my $set_conf = $opts->{'set-config'} || {};
- while( my($key,$val) = each %$set_conf ) {
- $conf->set_conf( $key => $val );
- }
- }
-
- ### any options to fix program entries
- { my $set_prog = $opts->{'set-program'} || {};
- while( my($key,$val) = each %$set_prog ) {
- $conf->set_program( $key => $val );
- }
- }
-
- ### any other options passed
- { my %map = ( verbose => 'verbose',
- force => 'force',
- skiptest => 'skiptest',
- makefile => 'prefer_makefile'
- );
-
- ### set config options from arguments
- while (my($key,$val) = each %map) {
- my $bool = exists $opts->{$key}
- ? $opts->{$key}
- : $conf->get_conf($val);
- $conf->set_conf( $val => $bool );
- }
- }
-}
-
-my @modules = @ARGV;
-if( exists $opts->{'modulelist'} ) {
- push @modules, map { parse_file( $_ ) } @{ $opts->{'modulelist'} };
-}
-
-die usage() unless @modules;
-
-### set up munge callback if requested
-{ if( $opts->{'edit-metafile'} ) {
- my $editor = $conf->get_program('editor');
-
- if( $editor ) {
-
- ### register install callback ###
- $cb->_register_callback(
- name => 'munge_dist_metafile',
- code => sub {
- my $self = shift;
- my $text = shift or return;
-
- my($fh,$file) = tempfile( UNLINK => 1 );
-
- unless( print $fh $text ) {
- warn "Could not print metafile information: $!";
- return;
- }
-
- close $fh;
-
- system( $editor => $file );
-
- my $cont = $cb->_get_file_contents( file => $file );
-
- return $cont;
- },
- );
-
- } else {
- warn "No editor configured. Can not edit metafiles!\n";
- }
- }
-}
-
-my $fh;
-LOGFILE: {
- if( my $file = $opts->{logfile} ) {
- open $fh, ">$file" or (
- warn loc("Could not open '%1' for writing: %2", $file,$!),
- last LOGFILE
- );
-
- warn "Logging to '$file'\n";
-
- *STDERR = $fh;
- *STDOUT = $fh;
- }
-}
-
-### reload indices if so desired
-$cb->reload_indices() if $opts->{'flushcache'};
-
-{ my @ban = exists $opts->{'ban'}
- ? map { qr/$_/ } @{ $opts->{'ban'} }
- : ();
-
-
- if( exists $opts->{'banlist'} ) {
- push @ban, map { parse_file( $_, 1 ) } @{ $opts->{'banlist'} };
- }
-
- push @ban, map { s/\s+//; $_ }
- map { [split /\s*#\s*/]->[0] }
- grep { /#/ }
- map { split /\n/ } _default_ban_list()
- if $opts->{'default-banlist'};
-
- ### use our prereq install callback
- $conf->set_conf( prereqs => PREREQ_ASK );
-
- ### register install callback ###
- $cb->_register_callback(
- name => 'install_prerequisite',
- code => \&__ask_about_install,
- );
-
-
- ### check for ban patterns when handling prereqs
- sub __ask_about_install {
-
- my $mod = shift or return;
- my $prereq = shift or return;
-
-
- ### die with an error object, so we can verify that
- ### the die came from this location, and that it's an
- ### 'acceptable' death
- my $pat = ban_me( $prereq );
- die bless sub { loc("Module '%1' requires '%2' to be installed " .
- "but found in your ban list (%3) -- skipping",
- $mod->module, $prereq->module, $pat )
- }, PREREQ_SKIP_CLASS if $pat;
- return 1;
- }
-
- ### should we skip this module?
- sub ban_me {
- my $mod = shift;
-
- for my $pat ( @ban ) {
- return $pat if $mod->module =~ /$pat/i;
- }
- return;
- }
-}
-
-### patterns to strip from prereq lists
-{ my @ignore = exists $opts->{'ignore'}
- ? map { qr/$_/ } @{ $opts->{'ignore'} }
- : ();
-
- if( exists $opts->{'ignorelist'} ) {
- push @ignore, map { parse_file( $_, 1 ) } @{ $opts->{'ignorelist'} };
- }
-
- push @ignore, map { s/\s+//; $_ }
- map { [split /\s*#\s*/]->[0] }
- grep { /#/ }
- map { split /\n/ } _default_ignore_list()
- if $opts->{'default-ignorelist'};
-
-
- ### register install callback ###
- $cb->_register_callback(
- name => 'filter_prereqs',
- code => \&__filter_prereqs,
- );
-
- sub __filter_prereqs {
- my $cb = shift;
- my $href = shift;
-
- for my $name ( keys %$href ) {
- my $obj = $cb->parse_module( module => $name ) or (
- warn "Cannot make a module object out of ".
- "'$name' -- skipping\n",
- next );
-
- if( my $pat = ignore_me( $obj ) ) {
- warn loc("'%1' found in your ignore list (%2) ".
- "-- filtering it out\n", $name, $pat);
-
- delete $href->{ $name };
- }
- }
-
- return $href;
- }
-
- ### should we skip this module?
- sub ignore_me {
- my $mod = shift;
-
- for my $pat ( @ignore ) {
- return $pat if $mod->module =~ /$pat/i;
- return $pat if $mod->package_name =~ /$pat/i;
- }
- return;
- }
-}
-
-
-my %done;
-for my $name (@modules) {
-
- my $obj;
-
- ### is it a tarball? then we get it locally and transform it
- ### and its dependencies into .debs
- if( $tarball ) {
- ### make sure we use an absolute path, so chdirs() dont
- ### mess things up
- $name = File::Spec->rel2abs( $name );
-
- ### ENOTARBALL?
- unless( -e $name ) {
- warn loc("Archive '$name' does not exist");
- next;
- }
-
- $obj = CPANPLUS::Module::Fake->new(
- module => basename($name),
- path => dirname($name),
- package => basename($name),
- );
-
- ### if it's a traditional CPAN package, we can tidy
- ### up the module name some
- $obj->module( $obj->package_name ) if $obj->package_name;
-
- ### get the version from the package name
- $obj->version( $obj->package_version || 0 );
-
- ### set the location of the tarball
- $obj->status->fetch($name);
-
- ### plain old cpan module?
- } else {
-
- ### find the corresponding module object ###
- $obj = $cb->parse_module( module => $name ) or (
- warn "Cannot make a module object out of ".
- "'$name' -- skipping\n",
- next );
- }
-
- ### you banned it?
- if( my $pat = ban_me( $obj ) ) {
- warn loc("'%1' found in your ban list (%2) -- skipping\n",
- $obj->module, $pat );
- next;
- }
-
- ### or just ignored it?
- if( my $pat = ignore_me( $obj ) ) {
- warn loc("'%1' found in your ignore list (%2) -- skipping\n",
- $obj->module, $pat );
- next;
- }
-
-
- my $target = $opts->{'install'} ? 'install' : 'create';
- my $dist = eval {
- local $SIG{ALRM} = sub { die bless {}, ALARM_CLASS }
- if $timeout;
-
- alarm $timeout || 0;
-
- my $dist_opts = $opts->{'dist-opts'} || {};
-
- my $rv = $obj->install(
- prereq_target => $target,
- target => $target,
- keep_source => $keep,
- prereq_build => $prereqbuild,
-
- ### any passed arbitrary options
- %$dist_opts,
- );
-
- alarm 0;
-
- $rv;
- };
-
- ### set here again, in case the install dies
- alarm 0;
-
- ### install failed due to a 'die' in our prereq skipper?
- if( $@ and ref $@ and $@->isa( PREREQ_SKIP_CLASS ) ) {
- warn loc("Dist creation of '%1' skipped: '%2'",
- $obj->module, $@->() );
- next;
-
- } elsif ( $@ and ref $@ and $@->isa( ALARM_CLASS ) ) {
- warn loc("\nDist creation of '%1' skipped, build time exceeded: ".
- "%2 seconds\n", $obj->module, $timeout );
- next;
-
- ### died for some other reason? just report and skip
- } elsif ( $@ ) {
- warn loc("Dist creation of '%1' failed: '%2'",
- $obj->module, $@ );
- next;
- }
-
- ### we didn't get a dist object back?
- unless ($dist and $obj->status->dist) {
- warn loc("Unable to create '%1' dist of '%2'", $format, $obj->module);
- next
- }
-
- print "Created '$format' distribution for ", $obj->module,
- " to:\n\t", $obj->status->dist->status->dist, "\n";
-}
-
-
-sub parse_file {
- my $file = shift or return;
- my $qr = shift() ? 1 : 0;
-
- my $fh = OPEN_FILE->( $file ) or return;
-
- my @rv;
- while( <$fh> ) {
- chomp;
- next if /^#/; # skip comments
- next unless /\S/; # skip empty lines
- s/^(\S+).*/$1/; # skip extra info
- push @rv, $qr ? qr/$_/ : $_; # add pattern to the list
- }
-
- return @rv;
-}
-
-=head1 NAME
-
-cpan2dist - The CPANPLUS distribution creator
-
-=head1 DESCRIPTION
-
-This script will create distributions of C<CPAN> modules of the format
-you specify, including its prerequisites. These packages can then be
-installed using the corresponding package manager for the format.
-
-Note, you can also do this interactively from the default shell,
-C<CPANPLUS::Shell::Default>. See the C<CPANPLUS::Dist> documentation,
-as well as the documentation of your format of choice for any format
-specific documentation.
-
-=head1 USAGE
-
-=cut
-
-sub usage {
- my $me = basename($0);
- my $formats = join "\n", map { "\t\t$_" } sort keys %formats;
-
- my $usage = << '=cut';
-=pod
-
- Usage: cpan2dist [--format FMT] [OPTS] Mod::Name [Mod::Name, ...]
- cpan2dist [--format FMT] [OPTS] --modulelist /tmp/mods.list
- cpan2dist [--format FMT] [OPTS] --archive /tmp/dist [/tmp/dist2]
-
- Will create a distribution of type FMT of the modules
- specified on the command line, and all their prerequisites.
-
- Can also create a distribution of type FMT from a local
- archive and all of its prerequisites.
-
-=cut
-
- $usage .= qq[
- Possible formats are:
-$formats
-
- You can install more formats from CPAN!
- \n];
-
- $usage .= << '=cut';
-=pod
-
-Options:
-
- ### take no argument:
- --help Show this help message
- --install Install this package (and any prerequisites you built)
- after building it.
- --skiptest Skip tests. Can be negated using --noskiptest
- --force Force operation. Can be negated using --noforce
- --verbose Be verbose. Can be negated using --noverbose
- --keepsource Keep sources after building distribution. Can be
- negated by --nokeepsource. May not be supported
- by all formats
- --makefile Prefer Makefile.PL over Build.PL. Can be negated
- using --nomakefile. Defaults to your config setting
- --buildprereq Build packages of any prerequisites, even if they are
- already uptodate on the local system. Can be negated
- using --nobuildprereq. Defaults to false.
- --archive Indicate that all modules listed are actually archives
- --flushcache Update CPANPLUS' cache before commencing any operation
- --defaults Instruct ExtUtils::MakeMaker and Module::Build to use
- default answers during 'perl Makefile.PL' or 'perl
- Build.PL' calls where possible
- --edit-metafile Edit the distributions metafile(s) before the distribution
- is built. Requires a configured editor.
-
- ### take argument:
- --format Installer format to use (defaults to config setting)
- --ban Patterns of module names to skip during installation,
- case-insensitive (affects prerequisites too)
- May be given multiple times
- --banlist File containing patterns that could be given to --ban
- Are appended to the ban list built up by --ban
- May be given multiple times.
- --ignore Patterns of modules to exclude from prereq list. Useful
- for when a prereq listed by a CPAN module is resolved
- in another way than from its corresponding CPAN package
- (Match is done on both module name, and package name of
- the package the module is in, case-insensitive)
- --ignorelist File containing patterns that may be given to --ignore.
- Are appended to the ban list built up by --ignore.
- May be given multiple times.
- --modulelist File containing a list of modules that should be built.
- Are appended to the list of command line modules.
- May be given multiple times.
- --logfile File to log all output to. By default, all output goes
- to the console.
- --timeout The allowed time for buliding a distribution before
- aborting. This is useful to terminate any build that
- hang or happen to be interactive despite being told not
- to be. Defaults to 300 seconds. To turn off, you can
- set it to 0.
- --set-config Change any options as specified in your config for this
- invocation only. See CPANPLUS::Config for a list of
- supported options.
- --set-program Change any programs as specified in your config for this
- invocation only. See CPANPLUS::Config for a list of
- supported programs.
- --dist-opts Arbitrary options passed along to the chosen installer
- format's prepare()/create() routine. Please see the
- documentation of the installer of your choice for
- options it accepts.
-
- ### builtin lists
- --default-banlist Use our builtin banlist. Works just like --ban
- and --banlist, but with pre-set lists. See the
- "Builtin Lists" section for details.
- --default-ignorelist Use our builtin ignorelist. Works just like
- --ignore and --ignorelist but with pre-set lists.
- See the "Builtin Lists" section for details.
-
-Examples:
-
- ### build a debian package of DBI and its prerequisites,
- ### don't bother running tests
- cpan2dist --format CPANPLUS::Dist::Deb --buildprereq --skiptest DBI
-
- ### build a debian package of DBI and its prerequisites and install them
- cpan2dist --format CPANPLUS::Dist::Deb --buildprereq --install DBI
-
- ### Build a package, whose format is determined by your config, of
- ### the local tarball, reloading cpanplus' indices first and using
- ### the tarballs Makefile.PL if it has one.
- cpan2dist --makefile --flushcache --archive /path/to/Cwd-1.0.tgz
-
- ### build a package from Net::FTP, but dont build any packages or
- ### dependencies whose name match 'Foo', 'Bar' or any of the
- ### patterns mentioned in /tmp/ban
- cpan2dist --ban Foo --ban Bar --banlist /tmp/ban Net::FTP
-
- ### build a package from Net::FTP, but ignore its listed dependency
- ### on IO::Socket, as it's shipped per default with the OS we're on
- cpan2dist --ignore IO::Socket Net::FTP
-
- ### building all modules listed, plus their prerequisites
- cpan2dist --ignorelist /tmp/modules.ignore --banlist /tmp/modules.ban
- --modulelist /tmp/modules.list --buildprereq --flushcache
- --makefile --defaults
-
- ### pass arbitrary options to the format's prepare()/create() routine
- cpan2dist --dist-opts deb_version=3 --dist-opts prefix=corp
-
-=cut
-
- $usage .= qq[
-Builtin Lists:
-
- Ignore list:] . _default_ignore_list() . qq[
- Ban list:] . _default_ban_list();
-
- ### strip the pod directives
- $usage =~ s/=pod\n//g;
-
- return $usage;
-}
-
-=pod
-
-=head1 Built-In Filter Lists
-
-Some modules you'd rather not package. Some because they
-are part of core-perl and you dont want a new package.
-Some because they won't build on your system. Some because
-your package manager of choice already packages them for you.
-
-There may be a myriad of reasons. You can use the C<--ignore>
-and C<--ban> options for this, but we provide some built-in
-lists that catch common cases. You can use these built-in lists
-if you like, or supply your own if need be.
-
-=head2 Built-In Ignore List
-
-=pod
-
-You can use this list of regexes to ignore modules matching
-to be listed as prerequisites of a package. Particularly useful
-if they are bundled with core-perl anyway and they have known
-issues building.
-
-Toggle it by supplying the C<--default-ignorelist> option.
-
-=cut
-
-sub _default_ignore_list {
-
- my $list = << '=cut';
-=pod
-
- ^IO$ # Provided with core anyway
- ^Cwd$ # Provided with core anyway
- ^File::Spec # Provided with core anyway
- ^Config$ # Perl's own config, not shipped separately
- ^ExtUtils::MakeMaker$ # Shipped with perl, recent versions
- # have bug 14721 (see rt.cpan.org)
- ^ExtUtils::Install$ # Part of of EU::MM, same reason
-
-=cut
-
- return $list;
-}
-
-=head2 Built-In Ban list
-
-You can use this list of regexes to disable building of these
-modules altogether.
-
-Toggle it by supplying the C<--default-banlist> option.
-
-=cut
-
-sub _default_ban_list {
-
- my $list = << '=cut';
-=pod
-
- ^GD$ # Needs c libaries
- ^Berk.*DB # DB packages require specific options & linking
- ^DBD:: # DBD drivers require database files/headers
- ^XML:: # XML modules usually require expat libraries
- Apache # These usually require apache libraries
- SSL # These usually require SSL certificates & libs
- Image::Magick # Needs ImageMagick C libraries
- Mail::ClamAV # Needs ClamAV C Libraries
- ^Verilog # Needs Verilog C Libraries
- ^Authen::PAM$ # Needs PAM C libraries & Headers
-
-=cut
-
- return $list;
-}
-
-__END__
-
-=head1 SEE ALSO
-
-L<CPANPLUS::Dist>, L<CPANPLUS::Module>, L<CPANPLUS::Shell::Default>,
-C<cpanp>
-
-=head1 BUG REPORTS
-
-Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>.
-
-=head1 AUTHOR
-
-This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
-
-=head1 COPYRIGHT
-
-The CPAN++ interface (of which this module is a part of) is copyright (c)
-2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved.
-
-This library is free software; you may redistribute and/or modify it
-under the same terms as Perl itself.
-
-=cut
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/bin/cpanp b/cpan/CPANPLUS/bin/cpanp
deleted file mode 100644
index a493322cc2..0000000000
--- a/cpan/CPANPLUS/bin/cpanp
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/perl
-# $File: //depot/cpanplus/dist/bin/cpanp $
-# $Revision: #8 $ $Change: 8345 $ $DateTime: 2003/10/05 19:25:48 $
-
-use strict;
-use vars '$VERSION';
-
-use CPANPLUS;
-$VERSION = CPANPLUS->VERSION;
-
-use CPANPLUS::Shell qw[Default];
-my $shell = CPANPLUS::Shell->new;
-
-### if we're given a command, run it; otherwise, open a shell.
-if (@ARGV) {
- ### take the command line arguments as a command
- my $input = "@ARGV";
- ### if they said "--help", fix it up to work.
- $input = 'h' if $input =~ /^\s*--?h(?:elp)?\s*$/i;
- ### strip the leading dash
- $input =~ s/^\s*-//;
- ### pass the command line to the shell
- ### exit with a useful return value on return
- exit not $shell->dispatch_on_input(input => $input, noninteractive => 1);
-} else {
- ### open a shell for the user
- $shell->shell();
-}
-
-=head1 NAME
-
-cpanp - The CPANPLUS launcher
-
-=head1 SYNOPSIS
-
-B<cpanp>
-
-B<cpanp> S<[-]B<a>> S<[ --[B<no>-]I<option>... ]> S< I<author>... >
-
-B<cpanp> S<[-]B<mfitulrcz>> S<[ --[B<no>-]I<option>... ]> S< I<module>... >
-
-B<cpanp> S<[-]B<d>> S<[ --[B<no>-]I<option>... ]> S<[ --B<fetchdir>=... ]> S< I<module>... >
-
-B<cpanp> S<[-]B<xb>> S<[ --[B<no>-]I<option>... ]>
-
-B<cpanp> S<[-]B<o>> S<[ --[B<no>-]I<option>... ]> S<[ I<module>... ]>
-
-=head1 DESCRIPTION
-
-This script launches the B<CPANPLUS> utility to perform various operations
-from the command line. If it's invoked without arguments, an interactive
-shell is executed by default.
-
-Optionally, it can take a single-letter switch and one or more argument,
-to perform the associated action on each arguments. A summary of the
-available commands is listed below; C<cpanp -h> provides a detailed list.
-
- h # help information
- v # version information
-
- a AUTHOR ... # search by author(s)
- m MODULE ... # search by module(s)
- f MODULE ... # list all releases of a module
-
- i MODULE ... # install module(s)
- t MODULE ... # test module(s)
- u MODULE ... # uninstall module(s)
- d MODULE ... # download module(s)
- l MODULE ... # display detailed information about module(s)
- r MODULE ... # display README files of module(s)
- c MODULE ... # check for module report(s) from cpan-testers
- z MODULE ... # extract module(s) and open command prompt in it
-
- x # reload CPAN indices
-
- o [ MODULE ... ] # list installed module(s) that aren't up to date
- b # write a bundle file for your configuration
-
-Each command may be followed by one or more I<options>. If preceded by C<no>,
-the corresponding option will be set to C<0>, otherwise it's set to C<1>.
-
-Example: To skip a module's tests,
-
- cpanp -i --skiptest MODULE ...
-
-Valid options for most commands are C<cpantest>, C<debug>, C<flush>, C<force>,
-C<prereqs>, C<storable>, C<verbose>, C<md5>, C<signature>, and C<skiptest>; the
-'d' command also accepts C<fetchdir>. Please consult L<CPANPLUS::Configure>
-for an explanation to their meanings.
-
-Example: To download a module's tarball to the current directory,
-
- cpanp -d --fetchdir=. MODULE ...
-
-=cut
-
-1;
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/bin/cpanp-run-perl b/cpan/CPANPLUS/bin/cpanp-run-perl
deleted file mode 100644
index b6b4dc6920..0000000000
--- a/cpan/CPANPLUS/bin/cpanp-run-perl
+++ /dev/null
@@ -1,11 +0,0 @@
-use strict;
-BEGIN {
-my $old = select STDERR; $|++; # turn on autoflush
-select $old; $|++; # turn on autoflush
-$0 = shift(@ARGV); # rename the script
-my $rv = do($0); # execute the file
-die $@ if $@; # die on parse/execute error
-}
-### XXX 'do' returns last statement evaluated, which may be
-### undef as well. So don't die in that case.
-#die $! if not defined $rv; # die on execute error
diff --git a/cpan/CPANPLUS/lib/CPANPLUS.pm b/cpan/CPANPLUS/lib/CPANPLUS.pm
deleted file mode 100644
index e0ff071b34..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS.pm
+++ /dev/null
@@ -1,272 +0,0 @@
-package CPANPLUS;
-use deprecate;
-
-use strict;
-use Carp;
-
-use CPANPLUS::Error;
-use CPANPLUS::Backend;
-
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-BEGIN {
- use Exporter ();
- use vars qw( @EXPORT @ISA $VERSION );
- @EXPORT = qw( shell fetch get install );
- @ISA = qw( Exporter );
- $VERSION = "0.9135"; #have to hardcode or cpan.org gets unhappy
-}
-
-### purely for backward compatibility, so we can call it from the commandline:
-### perl -MCPANPLUS -e 'install Net::SMTP'
-sub install {
- my $cpan = CPANPLUS::Backend->new;
- my $mod = shift or (
- error(loc("No module specified!")), return
- );
-
- if ( ref $mod ) {
- error( loc( "You passed an object. Use %1 for OO style interaction",
- 'CPANPLUS::Backend' ));
- return;
-
- } else {
- my $obj = $cpan->module_tree($mod) or (
- error(loc("No such module '%1'", $mod)),
- return
- );
-
- my $ok = $obj->install;
-
- $ok
- ? msg(loc("Installing of %1 successful", $mod),1)
- : msg(loc("Installing of %1 failed", $mod),1);
-
- return $ok;
- }
-}
-
-### simply downloads a module and stores it
-sub fetch {
- my $cpan = CPANPLUS::Backend->new;
-
- my $mod = shift or (
- error(loc("No module specified!")), return
- );
-
- if ( ref $mod ) {
- error( loc( "You passed an object. Use %1 for OO style interaction",
- 'CPANPLUS::Backend' ));
- return;
-
- } else {
- my $obj = $cpan->module_tree($mod) or (
- error(loc("No such module '%1'", $mod)),
- return
- );
-
- my $ok = $obj->fetch( fetchdir => '.' );
-
- $ok
- ? msg(loc("Fetching of %1 successful", $mod),1)
- : msg(loc("Fetching of %1 failed", $mod),1);
-
- return $ok;
- }
-}
-
-### alias to fetch() due to compatibility with cpan.pm ###
-sub get { fetch(@_) }
-
-
-### purely for backwards compatibility, so we can call it from the commandline:
-### perl -MCPANPLUS -e 'shell'
-sub shell {
- my $option = shift;
-
- ### since the user can specify the type of shell they wish to start
- ### when they call the shell() function, we have to eval the usage
- ### of CPANPLUS::Shell so we can set up all the checks properly
- eval { require CPANPLUS::Shell; CPANPLUS::Shell->import($option) };
- die $@ if $@;
-
- my $cpan = CPANPLUS::Shell->new();
-
- $cpan->shell();
-}
-
-1;
-
-__END__
-
-=pod
-
-=head1 NAME
-
-CPANPLUS - API & CLI access to the CPAN mirrors
-
-=head1 SYNOPSIS
-
- ### standard invocation from the command line
- $ cpanp
- $ cpanp -i Some::Module
-
- $ perl -MCPANPLUS -eshell
- $ perl -MCPANPLUS -e'fetch Some::Module'
-
-
-=head1 DESCRIPTION
-
-The C<CPANPLUS> library is an API to the C<CPAN> mirrors and a
-collection of interactive shells, commandline programs, etc,
-that use this API.
-
-=head1 GUIDE TO DOCUMENTATION
-
-=head2 GENERAL USAGE
-
-This is the document you are currently reading. It describes
-basic usage and background information. Its main purpose is to
-assist the user who wants to learn how to invoke CPANPLUS
-and install modules from the commandline and to point you
-to more indepth reading if required.
-
-=head2 API REFERENCE
-
-The C<CPANPLUS> API is meant to let you programmatically
-interact with the C<CPAN> mirrors. The documentation in
-L<CPANPLUS::Backend> shows you how to create an object
-capable of interacting with those mirrors, letting you
-create & retrieve module objects.
-L<CPANPLUS::Module> shows you how you can use these module
-objects to perform actions like installing and testing.
-
-The default shell, documented in L<CPANPLUS::Shell::Default>
-is also scriptable. You can use its API to dispatch calls
-from your script to the CPANPLUS Shell.
-
-=cut
-
-=head1 COMMANDLINE TOOLS
-
-=head2 STARTING AN INTERACTIVE SHELL
-
-You can start an interactive shell by running either of
-the two following commands:
-
- $ cpanp
-
- $ perl -MCPANPLUS -eshell
-
-All commands available are listed in the interactive shells
-help menu. See C<cpanp -h> or L<CPANPLUS::Shell::Default>
-for instructions on using the default shell.
-
-=head2 CHOOSE A SHELL
-
-By running C<cpanp> without arguments, you will start up
-the shell specified in your config, which defaults to
-L<CPANPLUS::Shell::Default>. There are more shells available.
-C<CPANPLUS> itself ships with an emulation shell called
-L<CPANPLUS::Shell::Classic> that looks and feels just like
-the old C<CPAN.pm> shell.
-
-You can start this shell by typing:
-
- $ perl -MCPANPLUS -e'shell Classic'
-
-Even more shells may be available from C<CPAN>.
-
-Note that if you have changed your default shell in your
-configuration, that shell will be used instead. If for
-some reason there was an error with your specified shell,
-you will be given the default shell.
-
-=head2 BUILDING PACKAGES
-
-C<cpan2dist> is a commandline tool to convert any distribution
-from C<CPAN> into a package in the format of your choice, like
-for example C<.deb> or C<FreeBSD ports>.
-
-See C<cpan2dist -h> for details.
-
-
-=head1 FUNCTIONS
-
-For quick access to common commands, you may use this module,
-C<CPANPLUS> rather than the full programmatic API situated in
-C<CPANPLUS::Backend>. This module offers the following functions:
-
-=head2 $bool = install( Module::Name | /A/AU/AUTHOR/Module-Name-1.tgz )
-
-This function requires the full name of the module, which is case
-sensitive. The module name can also be provided as a fully
-qualified file name, beginning with a I</>, relative to
-the /authors/id directory on a CPAN mirror.
-
-It will download, extract and install the module.
-
-=head2 $where = fetch( Module::Name | /A/AU/AUTHOR/Module-Name-1.tgz )
-
-Like install, fetch needs the full name of a module or the fully
-qualified file name, and is case sensitive.
-
-It will download the specified module to the current directory.
-
-=head2 $where = get( Module::Name | /A/AU/AUTHOR/Module-Name-1.tgz )
-
-Get is provided as an alias for fetch for compatibility with
-CPAN.pm.
-
-=head2 shell()
-
-Shell starts the default CPAN shell. You can also start the shell
-by using the C<cpanp> command, which will be installed in your
-perl bin.
-
-=head1 FAQ
-
-For frequently asked questions and answers, please consult the
-C<CPANPLUS::FAQ> manual.
-
-=head1 BUG REPORTS
-
-Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>.
-
-=head1 AUTHOR
-
-This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
-
-=head1 COPYRIGHT
-
-The CPAN++ interface (of which this module is a part of) is copyright (c)
-2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved.
-
-This library is free software; you may redistribute and/or modify it
-under the same terms as Perl itself.
-
-=head1 SEE ALSO
-
-L<CPANPLUS::Shell::Default>, L<CPANPLUS::FAQ>, L<CPANPLUS::Backend>, L<CPANPLUS::Module>, L<cpanp>, L<cpan2dist>
-
-=head1 CONTACT INFORMATION
-
-=over 4
-
-=item * Bug reporting:
-I<bug-cpanplus@rt.cpan.org>
-
-=item * Questions & suggestions:
-I<bug-cpanplus@rt.cpan.org>
-
-=back
-
-
-=cut
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Backend.pm b/cpan/CPANPLUS/lib/CPANPLUS/Backend.pm
deleted file mode 100644
index 85559dc04f..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Backend.pm
+++ /dev/null
@@ -1,1344 +0,0 @@
-package CPANPLUS::Backend;
-use deprecate;
-
-use strict;
-
-
-use CPANPLUS::Error;
-use CPANPLUS::Configure;
-use CPANPLUS::Internals;
-use CPANPLUS::Internals::Constants;
-use CPANPLUS::Module;
-use CPANPLUS::Module::Author;
-use CPANPLUS::Backend::RV;
-
-use FileHandle;
-use File::Spec ();
-use File::Spec::Unix ();
-use File::Basename ();
-use Params::Check qw[check];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-$Params::Check::VERBOSE = 1;
-
-use vars qw[@ISA $VERSION];
-
-@ISA = qw[CPANPLUS::Internals];
-$VERSION = "0.9135";
-
-### mark that we're running under CPANPLUS to spawned processes
-$ENV{'PERL5_CPANPLUS_IS_RUNNING'} = $$;
-
-### XXX version.pm MAY format this version, if it's in use... :(
-### so for consistency, just call ->VERSION ourselves as well.
-$ENV{'PERL5_CPANPLUS_IS_VERSION'} = __PACKAGE__->VERSION;
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Backend - programmer's interface to CPANPLUS
-
-=head1 SYNOPSIS
-
- my $cb = CPANPLUS::Backend->new;
- my $conf = $cb->configure_object;
-
- my $author = $cb->author_tree('KANE');
- my $mod = $cb->module_tree('Some::Module');
- my $mod = $cb->parse_module( module => 'Some::Module' );
-
- my @objs = $cb->search( type => TYPE,
- allow => [...] );
-
- $cb->flush('all');
- $cb->reload_indices;
- $cb->local_mirror;
-
-
-=head1 DESCRIPTION
-
-This module provides the programmer's interface to the C<CPANPLUS>
-libraries.
-
-=head1 ENVIRONMENT
-
-When C<CPANPLUS::Backend> is loaded, which is necessary for just
-about every <CPANPLUS> operation, the environment variable
-C<PERL5_CPANPLUS_IS_RUNNING> is set to the current process id.
-
-Additionally, the environment variable C<PERL5_CPANPLUS_IS_VERSION>
-will be set to the version of C<CPANPLUS::Backend>.
-
-This information might be useful somehow to spawned processes.
-
-=head1 METHODS
-
-=head2 $cb = CPANPLUS::Backend->new( [CONFIGURE_OBJ] )
-
-This method returns a new C<CPANPLUS::Backend> object.
-This also initialises the config corresponding to this object.
-You have two choices in this:
-
-=over 4
-
-=item Provide a valid C<CPANPLUS::Configure> object
-
-This will be used verbatim.
-
-=item No arguments
-
-Your default config will be loaded and used.
-
-=back
-
-New will return a C<CPANPLUS::Backend> object on success and die on
-failure.
-
-=cut
-
-sub new {
- my $class = shift;
- my $conf;
-
- if( $_[0] && IS_CONFOBJ->( conf => $_[0] ) ) {
- $conf = shift;
- } else {
- $conf = CPANPLUS::Configure->new() or return;
- }
-
- my $self = $class->SUPER::_init( _conf => $conf );
-
- return $self;
-}
-
-=pod
-
-=head2 $href = $cb->module_tree( [@modules_names_list] )
-
-Returns a reference to the CPANPLUS module tree.
-
-If you give it any arguments, they will be treated as module names
-and C<module_tree> will try to look up these module names and
-return the corresponding module objects instead.
-
-See L<CPANPLUS::Module> for the operations you can perform on a
-module object.
-
-=cut
-
-sub module_tree {
- my $self = shift;
- my $modtree = $self->_module_tree;
-
- if( @_ ) {
- my @rv;
- for my $name ( grep { defined } @_) {
-
- ### From John Malmberg: This is failing on VMS
- ### because ODS-2 does not retain the case of
- ### filenames that are created.
- ### The problem is the filename is being converted
- ### to a module name and then looked up in the
- ### %$modtree hash.
- ###
- ### As a fix, we do a search on VMS instead --
- ### more cpu cycles, but it gets around the case
- ### problem --kane
- my ($modobj) = do {
- ON_VMS
- ? $self->search(
- type => 'module',
- allow => [qr/^$name$/i],
- )
- : $modtree->{$name}
- };
-
- push @rv, $modobj || '';
- }
- return @rv == 1 ? $rv[0] : @rv;
- } else {
- return $modtree;
- }
-}
-
-=pod
-
-=head2 $href = $cb->author_tree( [@author_names_list] )
-
-Returns a reference to the CPANPLUS author tree.
-
-If you give it any arguments, they will be treated as author names
-and C<author_tree> will try to look up these author names and
-return the corresponding author objects instead.
-
-See L<CPANPLUS::Module::Author> for the operations you can perform on
-an author object.
-
-=cut
-
-sub author_tree {
- my $self = shift;
- my $authtree = $self->_author_tree;
-
- if( @_ ) {
- my @rv;
- for my $name (@_) {
- push @rv, $authtree->{$name} || '';
- }
- return @rv == 1 ? $rv[0] : @rv;
- } else {
- return $authtree;
- }
-}
-
-=pod
-
-=head2 $conf = $cb->configure_object;
-
-Returns a copy of the C<CPANPLUS::Configure> object.
-
-See L<CPANPLUS::Configure> for operations you can perform on a
-configure object.
-
-=cut
-
-sub configure_object { return shift->_conf() };
-
-=head2 $su = $cb->selfupdate_object;
-
-Returns a copy of the C<CPANPLUS::Selfupdate> object.
-
-See the L<CPANPLUS::Selfupdate> manpage for the operations
-you can perform on the selfupdate object.
-
-=cut
-
-sub selfupdate_object { return shift->_selfupdate() };
-
-=pod
-
-=head2 @mods = $cb->search( type => TYPE, allow => AREF, [data => AREF, verbose => BOOL] )
-
-C<search> enables you to search for either module or author objects,
-based on their data. The C<type> you can specify is any of the
-accessors specified in C<CPANPLUS::Module::Author> or
-C<CPANPLUS::Module>. C<search> will determine by the C<type> you
-specified whether to search by author object or module object.
-
-You have to specify an array reference of regular expressions or
-strings to match against. The rules used for this array ref are the
-same as in C<Params::Check>, so read that manpage for details.
-
-The search is an C<or> search, meaning that if C<any> of the criteria
-match, the search is considered to be successful.
-
-You can specify the result of a previous search as C<data> to limit
-the new search to these module or author objects, rather than the
-entire module or author tree. This is how you do C<and> searches.
-
-Returns a list of module or author objects on success and false
-on failure.
-
-See L<CPANPLUS::Module> for the operations you can perform on a
-module object.
-See L<CPANPLUS::Module::Author> for the operations you can perform on
-an author object.
-
-=cut
-
-sub search {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my ($type);
- my $args = do {
- local $Params::Check::NO_DUPLICATES = 0;
- local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- type => { required => 1, allow => [CPANPLUS::Module->accessors(),
- CPANPLUS::Module::Author->accessors()], store => \$type },
- allow => { required => 1, default => [ ], strict_type => 1 },
- };
-
- check( $tmpl, \%hash )
- } or return;
-
- ### figure out whether it was an author or a module search
- ### when ambiguous, it'll be an author search.
- my $aref;
- if( grep { $type eq $_ } CPANPLUS::Module::Author->accessors() ) {
- $aref = $self->_search_author_tree( %$args );
- } else {
- $aref = $self->_search_module_tree( %$args );
- }
-
- return @$aref if $aref;
- return;
-}
-
-=pod
-
-=head2 $backend_rv = $cb->fetch( modules => \@mods )
-
-Fetches a list of modules. C<@mods> can be a list of distribution
-names, module names or module objects--basically anything that
-L<parse_module> can understand.
-
-See the equivalent method in C<CPANPLUS::Module> for details on
-other options you can pass.
-
-Since this is a multi-module method call, the return value is
-implemented as a C<CPANPLUS::Backend::RV> object. Please consult
-that module's documentation on how to interpret the return value.
-
-=head2 $backend_rv = $cb->extract( modules => \@mods )
-
-Extracts a list of modules. C<@mods> can be a list of distribution
-names, module names or module objects--basically anything that
-L<parse_module> can understand.
-
-See the equivalent method in C<CPANPLUS::Module> for details on
-other options you can pass.
-
-Since this is a multi-module method call, the return value is
-implemented as a C<CPANPLUS::Backend::RV> object. Please consult
-that module's documentation on how to interpret the return value.
-
-=head2 $backend_rv = $cb->install( modules => \@mods )
-
-Installs a list of modules. C<@mods> can be a list of distribution
-names, module names or module objects--basically anything that
-L<parse_module> can understand.
-
-See the equivalent method in C<CPANPLUS::Module> for details on
-other options you can pass.
-
-Since this is a multi-module method call, the return value is
-implemented as a C<CPANPLUS::Backend::RV> object. Please consult
-that module's documentation on how to interpret the return value.
-
-=head2 $backend_rv = $cb->readme( modules => \@mods )
-
-Fetches the readme for a list of modules. C<@mods> can be a list of
-distribution names, module names or module objects--basically
-anything that L<parse_module> can understand.
-
-See the equivalent method in C<CPANPLUS::Module> for details on
-other options you can pass.
-
-Since this is a multi-module method call, the return value is
-implemented as a C<CPANPLUS::Backend::RV> object. Please consult
-that module's documentation on how to interpret the return value.
-
-=head2 $backend_rv = $cb->files( modules => \@mods )
-
-Returns a list of files used by these modules if they are installed.
-C<@mods> can be a list of distribution names, module names or module
-objects--basically anything that L<parse_module> can understand.
-
-See the equivalent method in C<CPANPLUS::Module> for details on
-other options you can pass.
-
-Since this is a multi-module method call, the return value is
-implemented as a C<CPANPLUS::Backend::RV> object. Please consult
-that module's documentation on how to interpret the return value.
-
-=head2 $backend_rv = $cb->distributions( modules => \@mods )
-
-Returns a list of module objects representing all releases for this
-module on success.
-C<@mods> can be a list of distribution names, module names or module
-objects, basically anything that L<parse_module> can understand.
-
-See the equivalent method in C<CPANPLUS::Module> for details on
-other options you can pass.
-
-Since this is a multi-module method call, the return value is
-implemented as a C<CPANPLUS::Backend::RV> object. Please consult
-that module's documentation on how to interpret the return value.
-
-=cut
-
-### XXX add direcotry_tree, packlist etc? or maybe remove files? ###
-for my $func (qw[fetch extract install readme files distributions]) {
- no strict 'refs';
-
- *$func = sub {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my ($mods);
- my $args = do {
- local $Params::Check::NO_DUPLICATES = 1;
- local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- modules => { default => [], strict_type => 1,
- required => 1, store => \$mods },
- };
-
- check( $tmpl, \%hash );
- } or return;
-
- ### make them all into module objects ###
- my %mods = map { $_ => $self->parse_module(module => $_) || '' } @$mods;
-
- my $flag; my $href;
- while( my($name,$obj) = each %mods ) {
- $href->{$name} = IS_MODOBJ->( mod => $obj )
- ? $obj->$func( %$args )
- : undef;
-
- $flag++ unless $href->{$name};
- }
-
- return CPANPLUS::Backend::RV->new(
- function => $func,
- ok => ( !$flag ? 1 : 0 ),
- rv => $href,
- args => \%hash,
- );
- }
-}
-
-=pod
-
-=head2 $mod_obj = $cb->parse_module( module => $modname|$distname|$modobj|URI|PATH )
-
-C<parse_module> tries to find a C<CPANPLUS::Module> object that
-matches your query. Here's a list of examples you could give to
-C<parse_module>;
-
-=over 4
-
-=item Text::Bastardize
-
-=item Text-Bastardize
-
-=item Text/Bastardize.pm
-
-=item Text-Bastardize-1.06
-
-=item AYRNIEU/Text-Bastardize
-
-=item AYRNIEU/Text-Bastardize-1.06
-
-=item AYRNIEU/Text-Bastardize-1.06.tar.gz
-
-=item http://example.com/Text-Bastardize-1.06.tar.gz
-
-=item file:///tmp/Text-Bastardize-1.06.tar.gz
-
-=item /tmp/Text-Bastardize-1.06
-
-=item ./Text-Bastardize-1.06
-
-=item .
-
-=back
-
-These items would all come up with a C<CPANPLUS::Module> object for
-C<Text::Bastardize>. The ones marked explicitly as being version 1.06
-would give back a C<CPANPLUS::Module> object of that version.
-Even if the version on CPAN is currently higher.
-
-The last three are examples of PATH resolution. In the first, we supply
-an absolute path to the unwrapped distribution. In the second the
-distribution is relative to the current working directory.
-In the third, we will use the current working directory.
-
-If C<parse_module> is unable to actually find the module you are looking
-for in its module tree, but you supplied it with an author, module
-and version part in a distribution name or URI, it will create a fake
-C<CPANPLUS::Module> object for you, that you can use just like the
-real thing.
-
-See L<CPANPLUS::Module> for the operations you can perform on a
-module object.
-
-If even this fancy guessing doesn't enable C<parse_module> to create
-a fake module object for you to use, it will warn about an error and
-return false.
-
-=cut
-
-sub parse_module {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my $mod;
- my $tmpl = {
- module => { required => 1, store => \$mod },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- return $mod if IS_MODOBJ->( module => $mod );
-
- ### ok, so it's not a module object, but a ref nonetheless?
- ### what are you smoking?
- if( ref $mod ) {
- error(loc("Can not parse module string from reference '%1'", $mod ));
- return;
- }
-
- ### check only for allowed characters in a module name
- unless( $mod =~ /[^\w:]/ ) {
-
- ### perhaps we can find it in the module tree?
- my $maybe = $self->module_tree($mod);
- return $maybe if IS_MODOBJ->( module => $maybe );
- }
-
- ### Special case arbitrary file paths such as '.' etc.
- if ( $mod and -d File::Spec->rel2abs($mod) ) {
- my $dir = File::Spec->rel2abs($mod);
- my $parent = File::Spec->rel2abs( File::Spec->catdir( $dir, '..' ) );
-
- ### fix paths on VMS
- if (ON_VMS) {
- $dir = VMS::Filespec::unixify($dir);
- $parent = VMS::Filespec::unixify($parent);
- }
-
- my $dist = $mod = File::Basename::basename($dir);
- $dist .= '-0' unless $dist =~ /\-[0-9._]+$/;
- $dist .= '.tar.gz' unless $dist =~ /\.[A-Za-z]+$/;
-
- my $modobj = CPANPLUS::Module::Fake->new(
- module => $mod,
- version => 0,
- package => $dist,
- path => $parent,
- author => CPANPLUS::Module::Author::Fake->new
- );
-
- ### better guess for the version
- $modobj->version( $modobj->package_version )
- if defined $modobj->package_version;
-
- ### better guess at module name, if possible
- if ( my $pkgname = $modobj->package_name ) {
- $pkgname =~ s/-/::/g;
-
- ### no sense replacing it unless we changed something
- $modobj->module( $pkgname )
- if ($pkgname ne $modobj->package_name) || $pkgname !~ /-/;
- }
-
- $modobj->status->fetch( $parent );
- $modobj->status->extract( $dir );
- $modobj->get_installer_type;
- return $modobj;
- }
-
- ### ok, so it looks like a distribution then?
- my @parts = split '/', $mod;
- my $dist = pop @parts;
-
- ### ah, it's a URL
- if( $mod =~ m|\w+://.+| ) {
- my $modobj = CPANPLUS::Module::Fake->new(
- module => $dist,
- version => 0,
- package => $dist,
- path => File::Spec::Unix->catdir(
- $conf->_get_mirror('base'),
- UNKNOWN_DL_LOCATION ),
- author => CPANPLUS::Module::Author::Fake->new
- );
-
- ### set the fetch_from accessor so we know to by pass the
- ### usual mirrors
- $modobj->status->_fetch_from( $mod );
-
- ### better guess for the version
- $modobj->version( $modobj->package_version )
- if defined $modobj->package_version;
-
- ### better guess at module name, if possible
- if ( my $pkgname = $modobj->package_name ) {
- $pkgname =~ s/-/::/g;
-
- ### no sense replacing it unless we changed something
- $modobj->module( $pkgname )
- if ($pkgname ne $modobj->package_name) || $pkgname !~ /-/;
- }
-
- return $modobj;
- }
-
- # Stolen from cpanminus to support 'Module/Install.pm'
- # type input
- if ( ( my $tmpmod = $mod ) =~ s/\.pm$//i ) {
- my ($volume, $dirs, $file) = File::Spec->splitpath( $tmpmod );
- $tmpmod = join '::', grep { $_ } File::Spec->splitdir( $dirs ), $file;
- ### perhaps we can find it in the module tree?
- my $maybe = $self->module_tree( $tmpmod );
- return $maybe if IS_MODOBJ->( module => $maybe );
- }
-
- ### perhaps we can find it's a third party module?
- { my $modobj = CPANPLUS::Module::Fake->new(
- module => $mod,
- version => 0,
- package => $dist,
- path => File::Spec::Unix->catdir(
- $conf->_get_mirror('base'),
- UNKNOWN_DL_LOCATION ),
- author => CPANPLUS::Module::Author::Fake->new
- );
- if( $modobj->is_third_party ) {
- my $info = $modobj->third_party_information;
-
- $modobj->author->author( $info->{author} );
- $modobj->author->email( $info->{author_url} );
- $modobj->description( $info->{url} );
-
- return $modobj;
- }
- }
-
- unless( $dist ) {
- error( loc("%1 is not a proper distribution name!", $mod) );
- return;
- }
-
- ### there's wonky uris out there, like this:
- ### E/EY/EYCK/Net/Lite/Net-Lite-FTP-0.091
- ### compensate for that
- my $author;
- ### you probably have an A/AB/ABC/....../Dist.tgz type uri
- if( (defined $parts[0] and length $parts[0] == 1) and
- (defined $parts[1] and length $parts[1] == 2) and
- $parts[2] =~ /^$parts[0]/i and $parts[2] =~ /^$parts[1]/i
- ) {
- splice @parts, 0, 2; # remove the first 2 entries from the list
- $author = shift @parts; # this is the actual author name then
-
- ### we''ll assume a ABC/..../Dist.tgz
- } else {
- $author = shift @parts || '';
- }
-
- my($pkg, $version, $ext, $full) =
- $self->_split_package_string( package => $dist );
-
- ### translate a distribution into a module name ###
- my $guess = $pkg;
- $guess =~ s/-/::/g if $guess;
-
- my $maybe = $self->module_tree( $guess );
- if( IS_MODOBJ->( module => $maybe ) ) {
-
- ### maybe you asked for a package instead
- if ( $maybe->package eq $mod ) {
- return $maybe;
-
- ### perhaps an outdated version instead?
- } elsif ( $version ) {
- my $auth_obj; my $path;
-
- ### did you give us an author part? ###
- if( $author ) {
- $auth_obj = CPANPLUS::Module::Author::Fake->new(
- _id => $maybe->_id,
- cpanid => uc $author,
- author => uc $author,
- );
- $path = File::Spec::Unix->catdir(
- $conf->_get_mirror('base'),
- substr(uc $author, 0, 1),
- substr(uc $author, 0, 2),
- uc $author,
- @parts, #possible sub dirs
- );
- } else {
- $auth_obj = $maybe->author;
- $path = $maybe->path;
- }
-
- if( $maybe->package_name eq $pkg ) {
-
- my $modobj = CPANPLUS::Module::Fake->new(
- module => $maybe->module,
- version => $version,
- ### no extension? use the extension the original package
- ### had instead
- package => do { $ext
- ? $full
- : $full .'.'. $maybe->package_extension
- },
- path => $path,
- author => $auth_obj,
- _id => $maybe->_id
- );
- return $modobj;
-
- ### you asked for a specific version?
- ### assume our $maybe is the one you wanted,
- ### and fix up the version..
- } else {
-
- my $modobj = $maybe->clone;
- $modobj->version( $version );
- $modobj->package(
- $maybe->package_name .'-'.
- $version .'.'.
- $maybe->package_extension
- );
-
- ### you wanted a specific author, but it's not the one
- ### from the module tree? we'll fix it up
- if( $author and $author ne $modobj->author->cpanid ) {
- $modobj->author( $auth_obj );
- $modobj->path( $path );
- }
-
- return $modobj;
- }
-
- ### you didn't care about a version, so just return the object then
- } elsif ( !$version ) {
- return $maybe;
- }
-
- ### ok, so we can't find it, and it's not an outdated dist either
- ### perhaps we can fake one based on the author name and so on
- } elsif ( $author and $version ) {
-
- ### be extra friendly and pad the .tar.gz suffix where needed
- ### it's just a guess of course, but most dists are .tar.gz
- $dist .= '.tar.gz' unless $dist =~ /\.[A-Za-z]+$/;
-
- ### XXX duplication from above for generating author obj + path...
- my $modobj = CPANPLUS::Module::Fake->new(
- module => $guess,
- version => $version,
- package => $dist,
- author => CPANPLUS::Module::Author::Fake->new(
- author => uc $author,
- cpanid => uc $author,
- _id => $self->_id,
- ),
- path => File::Spec::Unix->catdir(
- $conf->_get_mirror('base'),
- substr(uc $author, 0, 1),
- substr(uc $author, 0, 2),
- uc $author,
- @parts, #possible subdirs
- ),
- _id => $self->_id,
- );
-
- return $modobj;
-
- ### face it, we have /no/ idea what he or she wants...
- ### let's start putting the blame somewhere
- } else {
-
- # Lets not give up too easily. There is one last chance
- # http://perlmonks.org/?node_id=805957
- # This should catch edge-cases where the package name
- # is unrelated to the modules it contains.
-
- my ($modobj) = grep { $_->package_name eq $mod }
- $self->search( type => 'package', allow => [ qr/^\Q$mod\E/ ], );
- return $modobj if IS_MODOBJ->( module => $modobj );
-
- unless( $author ) {
- error( loc( "'%1' does not contain an author part", $mod ) );
- }
-
- error( loc( "Cannot find '%1' in the module tree", $mod ) );
- }
-
- return;
-}
-
-=pod
-
-=head2 $bool = $cb->reload_indices( [update_source => BOOL, verbose => BOOL] );
-
-This method reloads the source files.
-
-If C<update_source> is set to true, this will fetch new source files
-from your CPAN mirror. Otherwise, C<reload_indices> will do its
-usual cache checking and only update them if they are out of date.
-
-By default, C<update_source> will be false.
-
-The verbose setting defaults to what you have specified in your
-config file.
-
-Returns true on success and false on failure.
-
-=cut
-
-sub reload_indices {
- my $self = shift;
- my %hash = @_;
- my $conf = $self->configure_object;
-
- my $tmpl = {
- update_source => { default => 0, allow => [qr/^\d$/] },
- verbose => { default => $conf->get_conf('verbose') },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- ### make a call to the internal _module_tree, so it triggers cache
- ### file age
- my $uptodate = $self->_check_trees( %$args );
-
-
- return 1 if $self->_build_trees(
- uptodate => $uptodate,
- use_stored => 0,
- verbose => $conf->get_conf('verbose'),
- );
-
- error( loc( "Error rebuilding source trees!" ) );
-
- return;
-}
-
-=pod
-
-=head2 $bool = $cb->flush(CACHE_NAME)
-
-This method allows flushing of caches.
-There are several things which can be flushed:
-
-=over 4
-
-=item * C<methods>
-
-The return status of methods which have been attempted, such as
-different ways of fetching files. It is recommended that automatic
-flushing be used instead.
-
-=item * C<hosts>
-
-The return status of URIs which have been attempted, such as
-different hosts of fetching files. It is recommended that automatic
-flushing be used instead.
-
-=item * C<modules>
-
-Information about modules such as prerequisites and whether
-installation succeeded, failed, or was not attempted.
-
-=item * C<lib>
-
-This resets PERL5LIB, which is changed to ensure that while installing
-modules they are in our @INC.
-
-=item * C<load>
-
-This resets the cache of modules we've attempted to load, but failed.
-This enables you to load them again after a failed load, if they
-somehow have become available.
-
-=item * C<all>
-
-Flush all of the aforementioned caches.
-
-=back
-
-Returns true on success and false on failure.
-
-=cut
-
-sub flush {
- my $self = shift;
- my $type = shift or return;
-
- my $cache = {
- methods => [ qw( methods load ) ],
- hosts => [ qw( hosts ) ],
- modules => [ qw( modules lib) ],
- lib => [ qw( lib ) ],
- load => [ qw( load ) ],
- all => [ qw( hosts lib modules methods load ) ],
- };
-
- my $aref = $cache->{$type}
- or (
- error( loc("No such cache '%1'", $type) ),
- return
- );
-
- return $self->_flush( list => $aref );
-}
-
-=pod
-
-=head2 @mods = $cb->installed()
-
-Returns a list of module objects of all your installed modules.
-If an error occurs, it will return false.
-
-See L<CPANPLUS::Module> for the operations you can perform on a
-module object.
-
-=cut
-
-sub installed {
- my $self = shift;
- my $aref = $self->_all_installed;
-
- return @$aref if $aref;
- return;
-}
-
-=pod
-
-=head2 $bool = $cb->local_mirror([path => '/dir/to/save/to', index_files => BOOL, force => BOOL, verbose => BOOL] )
-
-Creates a local mirror of CPAN, of only the most recent sources in a
-location you specify. If you set this location equal to a custom host
-in your C<CPANPLUS::Config> you can use your local mirror to install
-from.
-
-It takes the following arguments:
-
-=over 4
-
-=item path
-
-The location where to create the local mirror.
-
-=item index_files
-
-Enable/disable fetching of index files. You can disable fetching of the
-index files if you don't plan to use the local mirror as your primary
-site, or if you'd like up-to-date index files be fetched from elsewhere.
-
-Defaults to true.
-
-=item force
-
-Forces refetching of packages, even if they are there already.
-
-Defaults to whatever setting you have in your C<CPANPLUS::Config>.
-
-=item verbose
-
-Prints more messages about what its doing.
-
-Defaults to whatever setting you have in your C<CPANPLUS::Config>.
-
-=back
-
-Returns true on success and false on error.
-
-=cut
-
-sub local_mirror {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my($path, $index, $force, $verbose);
- my $tmpl = {
- path => { default => $conf->get_conf('base'),
- store => \$path },
- index_files => { default => 1, store => \$index },
- force => { default => $conf->get_conf('force'),
- store => \$force },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- };
-
- check( $tmpl, \%hash ) or return;
-
- unless( -d $path ) {
- $self->_mkdir( dir => $path )
- or( error( loc( "Could not create '%1', giving up", $path ) ),
- return
- );
- } elsif ( ! -w _ ) {
- error( loc( "Could not write to '%1', giving up", $path ) );
- return;
- }
-
- my $flag;
- AUTHOR: {
- for my $auth ( sort { $a->cpanid cmp $b->cpanid }
- values %{$self->author_tree}
- ) {
-
- MODULE: {
- my $i;
- for my $mod ( $auth->modules ) {
- my $fetchdir = File::Spec->catdir( $path, $mod->path );
-
- my %opts = (
- verbose => $verbose,
- force => $force,
- fetchdir => $fetchdir,
- );
-
- ### only do this the for the first module ###
- unless( $i++ ) {
- $mod->_get_checksums_file(
- %opts
- ) or (
- error( loc( "Could not fetch %1 file, " .
- "skipping author '%2'",
- CHECKSUMS, $auth->cpanid ) ),
- $flag++, next AUTHOR
- );
- }
-
- $mod->fetch( %opts )
- or( error( loc( "Could not fetch '%1'", $mod->module ) ),
- $flag++, next MODULE
- );
- } }
- } }
-
- if( $index ) {
- for my $name (qw[auth dslip mod]) {
- $self->_update_source(
- name => $name,
- verbose => $verbose,
- path => $path,
- ) or ( $flag++, next );
- }
- }
-
- return !$flag;
-}
-
-=pod
-
-=head2 $file = $cb->autobundle([path => OUTPUT_PATH, force => BOOL, verbose => BOOL])
-
-Writes out a snapshot of your current installation in C<CPAN> bundle
-style. This can then be used to install the same modules for a
-different or on a different machine by issuing the following commands:
-
- ### using the default shell:
- CPAN Terminal> i file://path/to/Snapshot_XXYY.pm
-
- ### using the API
- $modobj = $cb->parse_module( module => 'file://path/to/Snapshot_XXYY.pm' );
- $modobj->install;
-
-It will, by default, write to an 'autobundle' directory under your
-cpanplus homedirectory, but you can override that by supplying a
-C<path> argument.
-
-It will return the location of the output file on success and false on
-failure.
-
-=cut
-
-sub autobundle {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my($path,$force,$verbose);
- my $tmpl = {
- force => { default => $conf->get_conf('force'), store => \$force },
- verbose => { default => $conf->get_conf('verbose'), store => \$verbose },
- path => { default => File::Spec->catdir(
- $conf->get_conf('base'),
- $self->_perl_version( perl => $^X ),
- $conf->_get_build('distdir'),
- $conf->_get_build('autobundle') ),
- store => \$path },
- };
-
- check($tmpl, \%hash) or return;
-
- unless( -d $path ) {
- $self->_mkdir( dir => $path )
- or( error(loc("Could not create directory '%1'", $path ) ),
- return
- );
- }
-
- my $name; my $file;
- { ### default filename for the bundle ###
- my($year,$month,$day) = (localtime)[5,4,3];
- $year += 1900; $month++;
-
- my $ext = 0;
-
- my $prefix = $conf->_get_build('autobundle_prefix');
- my $format = "${prefix}_%04d_%02d_%02d_%02d";
-
- BLOCK: {
- $name = sprintf( $format, $year, $month, $day, $ext);
-
- $file = File::Spec->catfile( $path, $name . '.pm' );
-
- -f $file ? ++$ext && redo BLOCK : last BLOCK;
- }
- }
- my $fh;
- unless( $fh = FileHandle->new( ">$file" ) ) {
- error( loc( "Could not open '%1' for writing: %2", $file, $! ) );
- return;
- }
-
- ### make sure we load the module tree *before* doing this, as it
- ### starts to chdir all over the place
- $self->module_tree;
-
- my $string = join "\n\n",
- map {
- join ' ',
- $_->module,
- ($_->installed_version(verbose => 0) || 'undef')
- } sort {
- $a->module cmp $b->module
- } $self->installed;
-
- my $now = scalar localtime;
- my $head = '=head1';
- my $pkg = __PACKAGE__;
- my $version = $self->VERSION;
- my $perl_v = join '', `$^X -V`;
-
- print $fh <<EOF;
-package $name;
-
-\$VERSION = '0.01';
-
-1;
-
-__END__
-
-$head NAME
-
-$name - Snapshot of your installation at $now
-
-$head SYNOPSIS
-
-To install the modules from this snapshot, run:
-
- cpanp -i file://full/path/to/${name}.pm
-
-$head CONTENTS
-
-$string
-
-$head CONFIGURATION
-
-$perl_v
-
-$head AUTHOR
-
-This bundle has been generated autotomatically by
- $pkg $version
-
-EOF
-
- close $fh;
-
- return $file;
-}
-
-=head2 $bool = $cb->save_state
-
-Explicit command to save memory state to disk. This can be used to save
-information to disk about where a module was extracted, the result of
-C<make test>, etc. This will then be re-loaded into memory when a new
-session starts.
-
-The capability of saving state to disk depends on the source engine
-being used (See C<CPANPLUS::Config> for the option to choose your
-source engine). The default storage engine supports this option.
-
-Most users will not need this command, but it can handy for automated
-systems like setting up CPAN smoke testers.
-
-The method will return true if it managed to save the state to disk,
-or false if it did not.
-
-=cut
-
-sub save_state {
- my $self = shift;
- return $self->_save_state( @_ );
-}
-
-
-### XXX these wrappers are not individually tested! only the underlying
-### code through source.t and indirectly through he CustomSource plugin.
-
-=pod
-
-=head1 CUSTOM MODULE SOURCES
-
-Besides the sources as provided by the general C<CPAN> mirrors, it's
-possible to add your own sources list to your C<CPANPLUS> index.
-
-The methodology behind this works much like C<Debian's apt-sources>.
-
-The methods below show you how to make use of this functionality. Also
-note that most of these methods are available through the default shell
-plugin command C</cs>, making them available as shortcuts through the
-shell and via the commandline.
-
-=head2 %files = $cb->list_custom_sources
-
-Returns a mapping of registered custom sources and their local indices
-as follows:
-
- /full/path/to/local/index => http://remote/source
-
-Note that any file starting with an C<#> is being ignored.
-
-=cut
-
-sub list_custom_sources {
- return shift->__list_custom_module_sources( @_ );
-}
-
-=head2 $local_index = $cb->add_custom_source( uri => URI, [verbose => BOOL] );
-
-Adds an C<URI> to your own sources list and mirrors its index. See the
-documentation on C<< $cb->update_custom_source >> on how this is done.
-
-Returns the full path to the local index on success, or false on failure.
-
-Note that when adding a new C<URI>, the change to the in-memory tree is
-not saved until you rebuild or save the tree to disk again. You can do
-this using the C<< $cb->reload_indices >> method.
-
-=cut
-
-sub add_custom_source {
- return shift->_add_custom_module_source( @_ );
-}
-
-=head2 $local_index = $cb->remove_custom_source( uri => URI, [verbose => BOOL] );
-
-Removes an C<URI> from your own sources list and removes its index.
-
-To find out what C<URI>s you have as part of your own sources list, use
-the C<< $cb->list_custom_sources >> method.
-
-Returns the full path to the deleted local index file on success, or false
-on failure.
-
-=cut
-
-### XXX do clever dispatching based on arg number?
-sub remove_custom_source {
- return shift->_remove_custom_module_source( @_ );
-}
-
-=head2 $bool = $cb->update_custom_source( [remote => URI] );
-
-Updates the indexes for all your custom sources. It does this by fetching
-a file called C<packages.txt> in the root of the custom sources's C<URI>.
-If you provide the C<remote> argument, it will only update the index for
-that specific C<URI>.
-
-Here's an example of how custom sources would resolve into index files:
-
- file:///path/to/sources => file:///path/to/sources/packages.txt
- http://example.com/sources => http://example.com/sources/packages.txt
- ftp://example.com/sources => ftp://example.com/sources/packages.txt
-
-The file C<packages.txt> simply holds a list of packages that can be found
-under the root of the C<URI>. This file can be automatically generated for
-you when the remote source is a C<file:// URI>. For C<http://>, C<ftp://>,
-and similar, the administrator of that repository should run the method
-C<< $cb->write_custom_source_index >> on the repository to allow remote
-users to index it.
-
-For details, see the C<< $cb->write_custom_source_index >> method below.
-
-All packages that are added via this mechanism will be attributed to the
-author with C<CPANID> C<LOCAL>. You can use this id to search for all
-added packages.
-
-=cut
-
-sub update_custom_source {
- my $self = shift;
-
- ### if it mentions /remote/, the request is to update a single uri,
- ### not all the ones we have, so dispatch appropriately
- my $rv = grep( /remote/i, @_)
- ? $self->__update_custom_module_source( @_ )
- : $self->__update_custom_module_sources( @_ );
-
- return $rv;
-}
-
-=head2 $file = $cb->write_custom_source_index( path => /path/to/package/root, [to => /path/to/index/file, verbose => BOOL] );
-
-Writes the index for a custom repository root. Most users will not have to
-worry about this, but administrators of a repository will need to make sure
-their indexes are up to date.
-
-The index will be written to a file called C<packages.txt> in your repository
-root, which you can specify with the C<path> argument. You can override this
-location by specifying the C<to> argument, but in normal operation, that should
-not be required.
-
-Once the index file is written, users can then add the C<URI> pointing to
-the repository to their custom list of sources and start using it right away. See the C<< $cb->add_custom_source >> method for user details.
-
-=cut
-
-sub write_custom_source_index {
- return shift->__write_custom_module_index( @_ );
-}
-
-1;
-
-=pod
-
-=head1 BUG REPORTS
-
-Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>.
-
-=head1 AUTHOR
-
-This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
-
-=head1 COPYRIGHT
-
-The CPAN++ interface (of which this module is a part of) is copyright (c)
-2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved.
-
-This library is free software; you may redistribute and/or modify it
-under the same terms as Perl itself.
-
-=head1 SEE ALSO
-
-L<CPANPLUS::Configure>, L<CPANPLUS::Module>, L<CPANPLUS::Module::Author>,
-L<CPANPLUS::Selfupdate>
-
-=cut
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
-
-__END__
-
-todo:
-sub dist { # not sure about this one -- probably already done
- enough in Module.pm
-sub reports { # in Module.pm, wrapper here
-
-
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Backend/RV.pm b/cpan/CPANPLUS/lib/CPANPLUS/Backend/RV.pm
deleted file mode 100644
index e7310ee418..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Backend/RV.pm
+++ /dev/null
@@ -1,145 +0,0 @@
-package CPANPLUS::Backend::RV;
-use deprecate;
-
-use strict;
-use vars qw[$STRUCT $VERSION];
-$VERSION = "0.9135";
-
-use CPANPLUS::Error;
-use CPANPLUS::Internals::Constants;
-
-use IPC::Cmd qw[can_run run];
-use Params::Check qw[check];
-
-use base 'Object::Accessor';
-
-local $Params::Check::VERBOSE = 1;
-
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Backend::RV - return value objects
-
-=head1 SYNOPSIS
-
- ### create a CPANPLUS::Backend::RV object
- $backend_rv = CPANPLUS::Backend::RV->new(
- ok => $boolean,
- args => $args,
- rv => $return_value
- function => $calling_function );
-
- ### if you have a CPANPLUS::Backend::RV object
- $passed_args = $backend_rv->args; # args passed to function
- $ok = $backend_rv->ok; # boolean indication overall
- # result of the call
- $function = $backend_rv->function # name of the calling
- # function
- $rv = $backend_rv->rv # the actual return value
- # of the calling function
-
-=head1 DESCRIPTION
-
-This module provides return value objects for multi-module
-calls to CPANPLUS::Backend. In boolean context, it returns the status
-of the overall result (ie, the same as the C<ok> method would).
-
-=head1 METHODS
-
-=head2 new( ok => BOOL, args => DATA, rv => DATA, [function => $method_name] )
-
-Creates a new CPANPLUS::Backend::RV object from the data provided.
-This method should only be called by CPANPLUS::Backend functions.
-The accessors may be used by users inspecting an RV object.
-
-All the argument names can be used as accessors later to retrieve the
-data.
-
-Arguments:
-
-=over 4
-
-=item ok
-
-Boolean indicating overall success
-
-=item args
-
-The arguments provided to the function that returned this rv object.
-Useful to inspect later to see what was actually passed to the function
-in case of an error.
-
-=item rv
-
-An arbitrary data structure that has the detailed return values of each
-of your multi-module calls.
-
-=item function
-
-The name of the function that created this rv object.
-Can be explicitly passed. If not, C<new()> will try to deduce the name
-from C<caller()> information.
-
-=back
-
-=cut
-
-sub new {
- my $class = shift;
- my %hash = @_;
-
- my $tmpl = {
- ok => { required => 1, allow => BOOLEANS },
- args => { required => 1 },
- rv => { required => 1 },
- function => { default => CALLING_FUNCTION->() },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
- my $self = bless {}, $class;
-
-# $self->mk_accessors( qw[ok args function rv] );
- $self->mk_accessors( keys %$tmpl );
-
- ### set the values passed in the struct ###
- while( my($key,$val) = each %$args ) {
- $self->$key( $val );
- }
-
- return $self;
-}
-
-sub _ok { return shift->ok }
-#sub _stringify { Carp::carp( "stringifying!" ); overload::StrVal( shift ) }
-
-### make it easier to check if($rv) { foo() }
-### this allows people to not have to explicitly say
-### if( $rv->ok ) { foo() }
-### XXX add an explicit stringify, so it doesn't fall back to "bool"? :(
-use overload bool => \&_ok,
-# '""' => \&_stringify,
- fallback => 1;
-
-=pod
-
-=head1 BUG REPORTS
-
-Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>.
-
-=head1 AUTHOR
-
-This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
-
-=head1 COPYRIGHT
-
-The CPAN++ interface (of which this module is a part of) is copyright (c)
-2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved.
-
-This library is free software; you may redistribute and/or modify it
-under the same terms as Perl itself.
-
-=cut
-
-1;
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Config.pm b/cpan/CPANPLUS/lib/CPANPLUS/Config.pm
deleted file mode 100644
index 26a056fe03..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Config.pm
+++ /dev/null
@@ -1,834 +0,0 @@
-package CPANPLUS::Config;
-use deprecate;
-
-use strict;
-use warnings;
-
-use base 'Object::Accessor';
-use base 'CPANPLUS::Internals::Utils';
-
-use Config;
-use File::Spec;
-use Module::Load;
-use CPANPLUS;
-use CPANPLUS::Error;
-use CPANPLUS::Internals::Constants;
-
-use File::Basename qw[dirname];
-use IPC::Cmd qw[can_run];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-use Module::Load::Conditional qw[check_install];
-use version;
-
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Config - configuration defaults and heuristics for CPANPLUS
-
-=head1 SYNOPSIS
-
- ### conf object via CPANPLUS::Backend;
- $cb = CPANPLUS::Backend->new;
- $conf = $cb->configure_object;
-
- ### or as a standalone object
- $conf = CPANPLUS::Configure->new;
-
- ### values in 'conf' section
- $verbose = $conf->get_conf( 'verbose' );
- $conf->set_conf( verbose => 1 );
-
- ### values in 'program' section
- $editor = $conf->get_program( 'editor' );
- $conf->set_program( editor => '/bin/vi' );
-
-=head1 DESCRIPTION
-
-This module contains defaults and heuristics for configuration
-information for CPANPLUS. To change any of these values, please
-see the documentation in C<CPANPLUS::Configure>.
-
-Below you'll find a list of configuration types and keys, and
-their meaning.
-
-=head1 CONFIGURATION
-
-=cut
-
-### BAH! you can't have POD interleaved with a hash
-### declaration.. so declare every entry separately :(
-my $Conf = {
- '_fetch' => {
- 'blacklist' => [ 'ftp' ],
- },
-
- ### _source, _build and _mirror are supposed to be static
- ### no changes should be needed unless pause/cpan changes
- '_source' => {
- 'hosts' => 'MIRRORED.BY',
- 'auth' => '01mailrc.txt.gz',
- 'stored' => 'sourcefiles',
- 'dslip' => '03modlist.data.gz',
- 'update' => '86400',
- 'mod' => '02packages.details.txt.gz',
- 'custom_index' => 'packages.txt',
- },
- '_build' => {
- 'plugins' => 'plugins',
- 'moddir' => 'build',
- 'startdir' => '',
- 'distdir' => 'dist',
- 'autobundle' => 'autobundle',
- 'autobundle_prefix' => 'Snapshot',
- 'autdir' => 'authors',
- 'install_log_dir' => 'install-logs',
- 'custom_sources' => 'custom-sources',
- 'sanity_check' => 1,
- },
- '_mirror' => {
- 'base' => 'authors/id/',
- 'auth' => 'authors/01mailrc.txt.gz',
- 'dslip' => 'modules/03modlist.data.gz',
- 'mod' => 'modules/02packages.details.txt.gz'
- },
-};
-
-=head2 Section 'conf'
-
-=over 4
-
-=item hosts
-
-An array ref containing hosts entries to be queried for packages.
-
-An example entry would like this:
-
- { 'scheme' => 'ftp',
- 'path' => '/pub/CPAN/',
- 'host' => 'ftp.cpan.org'
- },
-
-=cut
-
- ### default host list
- $Conf->{'conf'}->{'hosts'} = [
- {
- 'scheme' => 'ftp',
- 'path' => '/pub/CPAN/',
- 'host' => 'ftp.cpan.org'
- },
- {
- 'scheme' => 'http',
- 'path' => '/',
- 'host' => 'www.cpan.org'
- },
- {
- 'scheme' => 'ftp',
- 'path' => '/',
- 'host' => 'cpan.hexten.net'
- },
- {
- 'scheme' => 'ftp',
- 'path' => '/CPAN/',
- 'host' => 'cpan.cpantesters.org'
- },
- {
- 'scheme' => 'ftp',
- 'path' => '/pub/languages/perl/CPAN/',
- 'host' => 'ftp.funet.fi'
- }
- ];
-
-=item allow_build_interactivity
-
-Boolean flag to indicate whether 'perl Makefile.PL' and similar
-are run interactively or not. Defaults to 'true'.
-
-=cut
-
- $Conf->{'conf'}->{'allow_build_interactivity'} = 1;
-
-=item allow_unknown_prereqs
-
-Boolean flag to indicate that unresolvable prereqs are acceptable.
-If C<true> then only warnings will be issued (the behaviour before 0.9114)
-when a module is unresolvable from any our sources (CPAN and/or
-C<custom_sources>). If C<false> then an unresolvable prereq will fail
-during the C<prepare> stage of distribution installation.
-Defaults to C<true>.
-
-=cut
-
- $Conf->{'conf'}->{'allow_unknown_prereqs'} = 1;
-
-=item base
-
-The directory CPANPLUS keeps all its build and state information in.
-Defaults to ~/.cpanplus. If L<File::HomeDir> is available, that will
-be used to work out your C<HOME> directory. This may be overriden by
-setting the C<PERL5_CPANPLUS_HOME> environment variable, see
-L<CPANPLUS::Config::HomeEnv> for more details.
-
-=cut
-
- $Conf->{'conf'}->{'base'} = File::Spec->catdir(
- __PACKAGE__->_home_dir, DOT_CPANPLUS );
-
-=item buildflags
-
-Any flags to be passed to 'perl Build.PL'. See C<perldoc Module::Build>
-for details. Defaults to an empty string.
-
-=cut
-
- $Conf->{'conf'}->{'buildflags'} = '';
-
-=item cpantest
-
-Boolean flag to indicate whether or not to mail test results of module
-installations to C<http://testers.cpan.org>. Defaults to 'false'.
-
-=cut
-
- $Conf->{'conf'}->{'cpantest'} = 0;
-
-=item cpantest_mx
-
-String holding an explicit mailserver to use when sending out emails
-for C<http://testers.cpan.org>. An empty string will use your system
-settings. Defaults to an empty string.
-
-=cut
-
- $Conf->{'conf'}->{'cpantest_mx'} = '';
-
-=item debug
-
-Boolean flag to enable or disable extensive debuggging information.
-Defaults to 'false'.
-
-=cut
-
- $Conf->{'conf'}->{'debug'} = 0;
-
-=item dist_type
-
-Default distribution type to use when building packages. See C<cpan2dist>
-or C<CPANPLUS::Dist> for details. An empty string will not use any
-package building software. Defaults to an empty string.
-
-=cut
-
- $Conf->{'conf'}->{'dist_type'} = '';
-
-=item email
-
-Email address to use for anonymous ftp access and as C<from> address
-when sending emails. Defaults to an C<example.com> address.
-
-=cut
-
- $Conf->{'conf'}->{'email'} = DEFAULT_EMAIL;
-
-=item enable_custom_sources
-
-Boolean flag indicating whether custom sources should be enabled or
-not. See the C<CUSTOM MODULE SOURCES> in C<CPANPLUS::Backend> for
-details on how to use them.
-
-Defaults to C<true>
-
-=cut
-
- ### this addresses #32248 which requests a possibility to
- ### turn off custom sources
- $Conf->{'conf'}->{'enable_custom_sources'} = 1;
-
-=item extractdir
-
-String containing the directory where fetched archives should be
-extracted. An empty string will use a directory under your C<base>
-directory. Defaults to an empty string.
-
-=cut
-
- $Conf->{'conf'}->{'extractdir'} = '';
-
-=item fetchdir
-
-String containing the directory where fetched archives should be
-stored. An empty string will use a directory under your C<base>
-directory. Defaults to an empty string.
-
-=cut
-
- $Conf->{'conf'}->{'fetchdir'} = '';
-
-=item flush
-
-Boolean indicating whether build failures, cache dirs etc should
-be flushed after every operation or not. Defaults to 'true'.
-
-=cut
-
- $Conf->{'conf'}->{'flush'} = 1;
-
-=item force
-
-Boolean indicating whether files should be forcefully overwritten
-if they exist, modules should be installed when they fail tests,
-etc. Defaults to 'false'.
-
-=cut
-
- $Conf->{'conf'}->{'force'} = 0;
-
-=item histfile
-
-A string containing the history filename of the CPANPLUS readline instance.
-
-=cut
-
- $Conf->{'conf'}->{'histfile'} = File::Spec->catdir(
- __PACKAGE__->_home_dir, DOT_CPANPLUS, 'history' );
-
-=item lib
-
-An array ref holding directories to be added to C<@INC> when CPANPLUS
-starts up. Defaults to an empty array reference.
-
-=cut
-
- $Conf->{'conf'}->{'lib'} = [];
-
-=item makeflags
-
-A string holding flags that will be passed to the C<make> program
-when invoked. Defaults to an empty string.
-
-=cut
-
- $Conf->{'conf'}->{'makeflags'} = '';
-
-=item makemakerflags
-
-A string holding flags that will be passed to C<perl Makefile.PL>
-when invoked. Defaults to an empty string.
-
-=cut
-
- $Conf->{'conf'}->{'makemakerflags'} = '';
-
-=item md5
-
-A boolean indicating whether or not sha256 checks should be done when
-an archive is fetched. Defaults to 'true' if you have C<Digest::SHA>
-installed, 'false' otherwise.
-
-=cut
-
- $Conf->{'conf'}->{'md5'} = (
- check_install( module => 'Digest::SHA' ) ? 1 : 0 );
-
-=item no_update
-
-A boolean indicating whether or not C<CPANPLUS>' source files should be
-updated or not. Defaults to 'false'.
-
-=cut
-
- $Conf->{'conf'}->{'no_update'} = 0;
-
-=item passive
-
-A boolean indicating whether or not to use passive ftp connections.
-Defaults to 'true'.
-
-=cut
-
- $Conf->{'conf'}->{'passive'} = 1;
-
-=item prefer_bin
-
-A boolean indicating whether or not to prefer command line programs
-over perl modules. Defaults to 'false' unless you do not have
-C<Compress::Zlib> installed (as that would mean we could not extract
-C<.tar.gz> files)
-
-=cut
-
- ### if we dont have c::zlib, we'll need to use /bin/tar or we
- ### can not extract any files. Good time to change the default
- $Conf->{'conf'}->{'prefer_bin'} =
- (eval {require Compress::Zlib; 1} ? 0 : 1 );
-
-=item prefer_makefile
-
-A boolean indicating whether or not prefer a C<Makefile.PL> over a
-C<Build.PL> file if both are present. Defaults to 'true', unless
-the perl version is at least 5.10.1 or appropriate versions of L<Module::Build>
-and L<CPANPLUS::Dist::Build> are available.
-
-=cut
-
- $Conf->{'conf'}->{'prefer_makefile'} =
- ( $] >= 5.010001 or
- ( check_install( module => 'Module::Build', version => '0.32' ) and
- check_install( module => INSTALLER_BUILD, version => '0.60' ) )
- ? 0 : 1 );
-
-=item prereqs
-
-A digit indicating what to do when a package you are installing has a
-prerequisite. Options are:
-
- 0 Do not install
- 1 Install
- 2 Ask
- 3 Ignore (dangerous, install will probably fail!)
-
-The default is to ask.
-
-=cut
-
- $Conf->{'conf'}->{'prereqs'} = PREREQ_ASK;
-
-=item shell
-
-A string holding the shell class you wish to start up when starting
-C<CPANPLUS> in interactive mode.
-
-Defaults to C<CPANPLUS::Shell::Default>, the default CPANPLUS shell.
-
-=cut
-
- $Conf->{'conf'}->{'shell'} = 'CPANPLUS::Shell::Default';
-
-=item show_startup_tip
-
-A boolean indicating whether or not to show start up tips in the
-interactive shell. Defaults to 'true'.
-
-=cut
-
- $Conf->{'conf'}->{'show_startup_tip'} = 1;
-
-=item signature
-
-A boolean indicating whether or not check signatures if packages are
-signed. Defaults to 'true' if you have C<gpg> or C<Crypt::OpenPGP>
-installed, 'false' otherwise.
-
-=cut
-
- $Conf->{'conf'}->{'signature'} = do {
- check_install( module => 'Module::Signature', version => '0.06' )
- and ( can_run('gpg') ||
- check_install(module => 'Crypt::OpenPGP')
- );
- } ? 1 : 0;
-
-=item skiptest
-
-A boolean indicating whether or not to skip tests when installing modules.
-Defaults to 'false'.
-
-=cut
-
- $Conf->{'conf'}->{'skiptest'} = 0;
-
-=item storable
-
-A boolean indicating whether or not to use C<Storable> to write compiled
-source file information to disk. This makes for faster startup and look
-up times, but takes extra diskspace. Defaults to 'true' if you have
-C<Storable> installed and 'false' if you don't.
-
-=cut
-
- $Conf->{'conf'}->{'storable'} =
- ( check_install( module => 'Storable' ) ? 1 : 0 );
-
-=item timeout
-
-Digit indicating the time before a fetch request times out (in seconds).
-Defaults to 300.
-
-=cut
-
- $Conf->{'conf'}->{'timeout'} = 300;
-
-=item verbose
-
-A boolean indicating whether or not C<CPANPLUS> runs in verbose mode.
-Defaults to 'true' if you have the environment variable
-C<PERL5_CPANPLUS_VERBOSE> set to true, 'false' otherwise.
-
-It is recommended you run with verbose enabled, but it is disabled
-for historical reasons.
-
-=cut
-
- $Conf->{'conf'}->{'verbose'} = $ENV{PERL5_CPANPLUS_VERBOSE} || 0;
-
-=item write_install_log
-
-A boolean indicating whether or not to write install logs after installing
-a module using the interactive shell. Defaults to 'true'.
-
-
-=cut
-
- $Conf->{'conf'}->{'write_install_logs'} = 1;
-
-=item source_engine
-
-Class to use as the source engine, which is generally a subclass of
-C<CPANPLUS::Internals::Source>. Default to C<CPANPLUS::Internals::Source::Memory>.
-
-=cut
-
- $Conf->{'conf'}->{'source_engine'} = DEFAULT_SOURCE_ENGINE;
-
-=item cpantest_reporter_args
-
-A hashref of key => value pairs that are passed to the constructor
-of C<Test::Reporter>. If you'd want to enable TLS for example, you'd
-set it to:
-
- { transport => 'Net::SMTP::TLS',
- transport_args => [ User => 'Joe', Password => '123' ],
- }
-
-=cut
-
- $Conf->{'conf'}->{'cpantest_reporter_args'} = {};
-
-=back
-
-=head2 Section 'program'
-
-=cut
-
- ### Paths get stripped of whitespace on win32 in the constructor
- ### sudo gets emptied if there's no need for it in the constructor
-
-=over 4
-
-=item editor
-
-A string holding the path to your editor of choice. Defaults to your
-$ENV{EDITOR}, $ENV{VISUAL}, 'vi' or 'pico' programs, in that order.
-
-=cut
-
- $Conf->{'program'}->{'editor'} = do {
- $ENV{'EDITOR'} || $ENV{'VISUAL'} ||
- can_run('vi') || can_run('pico')
- };
-
-=item make
-
-A string holding the path to your C<make> binary. Looks for the C<make>
-program used to build perl or failing that, a C<make> in your path.
-
-=cut
-
- $Conf->{'program'}->{'make'} =
- can_run($Config{'make'}) || can_run('make');
-
-=item pager
-
-A string holding the path to your pager of choice. Defaults to your
-$ENV{PAGER}, 'less' or 'more' programs, in that order.
-
-=cut
-
- $Conf->{'program'}->{'pager'} =
- $ENV{'PAGER'} || can_run('less') || can_run('more');
-
- ### no one uses this feature anyway, and it's only working for EU::MM
- ### and not for module::build
- #'perl' => '',
-
-=item shell
-
-A string holding the path to your login shell of choice. Defaults to your
-$ENV{SHELL} setting, or $ENV{COMSPEC} on Windows.
-
-=cut
-
- $Conf->{'program'}->{'shell'} = $^O eq 'MSWin32'
- ? $ENV{COMSPEC}
- : $ENV{SHELL};
-
-=item sudo
-
-A string holding the path to your C<sudo> binary if your install path
-requires super user permissions. Looks for C<sudo> in your path, or
-remains empty if you do not require super user permissions to install.
-
-=cut
-
- $Conf->{'program'}->{'sudo'} = do {
- ### let's assume you dont need sudo,
- ### unless one of the below criteria tells us otherwise
- my $sudo = undef;
-
- ### you're a normal user, you might need sudo
- if( $> ) {
-
- ### check for all install dirs!
- ### you have write permissions to the installdir,
- ### you don't need sudo
- if( -w $Config{'installsitelib'} && -w $Config{'installsitebin'} ) {
-
- ### installsiteman3dir is a 5.8'ism.. don't check
- ### it on 5.6.x...
- if( defined $Config{'installsiteman3dir'} ) {
- $sudo = -w $Config{'installsiteman3dir'}
- ? undef
- : can_run('sudo');
- } else {
- $sudo = undef;
- }
-
- ### you have PERL_MM_OPT set to some alternate
- ### install place. You probably have write permissions
- ### to that
- } elsif ( $ENV{'PERL_MM_OPT'} and
- $ENV{'PERL_MM_OPT'} =~ /INSTALL|LIB|PREFIX/
- ) {
- $sudo = undef;
-
- ### you probably don't have write permissions
- } else {
- $sudo = can_run('sudo');
- }
- }
-
- ### and return the value
- $sudo;
- };
-
-=item perlwrapper
-
-B<DEPRECATED>
-
-A string holding the path to the C<cpanp-run-perl> utility bundled
-with CPANPLUS, which is used to enable autoflushing in spawned processes.
-
-=cut
-
- ### perlwrapper that allows us to turn on autoflushing
- $Conf->{'program'}->{'perlwrapper'} = sub {
- my $name = 'cpanp-run-perl';
-
- my @bins = do{
- require Config;
- my $ver = $Config::Config{version};
-
- ### if we are running with 'versiononly' enabled,
- ### all binaries will have the perlversion appended
- ### ie, cpanp will become cpanp5.9.5
- ### so prefer the versioned binary in that case
- $Config::Config{versiononly}
- ? ($name.$ver, $name)
- : ($name, $name.$ver);
- };
-
- ### patch from Steve Hay Fri 29 Jun 2007 14:26:02 GMT+02:00
- ### Msg-Id: <4684FA5A.7030506@uk.radan.com>
- ### look for files with a ".bat" extension as well on Win32
- @bins = map { $_, "$_.bat" } @bins if $^O eq 'MSWin32';
-
- my $path;
- BIN: for my $bin (@bins) {
-
- ### parallel to your cpanp/cpanp-boxed
- my $maybe = File::Spec->rel2abs(
- File::Spec->catfile( dirname($0), $bin )
- );
- $path = $maybe and last BIN if -f $maybe;
-
- ### parallel to your CPANPLUS.pm:
- ### $INC{cpanplus}/../bin/cpanp-run-perl
- $maybe = File::Spec->rel2abs(
- File::Spec->catfile(
- dirname($INC{'CPANPLUS.pm'}),
- '..', # lib dir
- 'bin', # bin dir
- $bin, # script
- )
- );
- $path = $maybe and last BIN if -f $maybe;
-
- ### you installed CPANPLUS in a custom prefix,
- ### so go parallel to /that/. PREFIX=/tmp/cp
- ### would put cpanp-run-perl in /tmp/cp/bin and
- ### CPANPLUS.pm in
- ### /tmp/cp/lib/perl5/site_perl/5.8.8
- $maybe = File::Spec->rel2abs(
- File::Spec->catfile(
- dirname( $INC{'CPANPLUS.pm'} ),
- '..', '..', '..', '..', # 4x updir
- 'bin', # bin dir
- $bin, # script
- )
- );
- $path = $maybe and last BIN if -f $maybe;
-
- ### in your path -- take this one last, the
- ### previous two assume extracted tarballs
- ### or user installs
- ### note that we don't use 'can_run' as it's
- ### not an executable, just a wrapper...
- ### prefer anything that's found in the path paralel to your $^X
- for my $dir (File::Spec->rel2abs( dirname($^X) ),
- split(/\Q$Config::Config{path_sep}\E/, $ENV{PATH}),
- File::Spec->curdir,
- ) {
-
- ### On VMS the path could be in UNIX format, and we
- ### currently need it to be in VMS format
- $dir = VMS::Filespec::vmspath($dir) if ON_VMS;
-
- $maybe = File::Spec->catfile( $dir, $bin );
- $path = $maybe and last BIN if -f $maybe;
- }
- }
-
- ### we should have a $path by now ideally, if so return it
- return $path if defined $path;
-
- ### CPANPLUS::Dist::MM doesn't require this anymore
- ### but CPANPLUS::Dist::Build might if it is less than 0.60
- my $cpdb = check_install( module => INSTALLER_BUILD );
- return '' unless
- $cpdb and eval { version->parse($cpdb->{version}) < version->parse('0.60') };
-
- ### if not, warn about it and give sensible default.
- ### XXX try to be a no-op instead then..
- ### cross your fingers...
- ### pass '-P' to perl: "run program through C
- ### preprocessor before compilation"
- ### XXX using -P actually changes the way some Makefile.PLs
- ### are executed, so don't do that... --kane
- error(loc(
- "Could not find the '%1' binary in your path".
- "--this may be a problem.\n".
- "Please locate this program and set ".
- "your '%2' config entry to its path.\n".
- "From the default shell, you can do this by typing:\n\n".
- " %3\n".
- " %4\n",
- $name, 'perlwrapper',
- 's program perlwrapper FULL_PATH_TO_CPANP_RUN_PERL',
- 's save'
- ));
- return '';
- }->();
-
-=back
-
-=cut
-
-sub new {
- my $class = shift;
- my $obj = $class->SUPER::new;
-
- $obj->mk_accessors( keys %$Conf );
-
- for my $acc ( keys %$Conf ) {
- my $subobj = Object::Accessor->new;
- $subobj->mk_accessors( keys %{$Conf->{$acc}} );
-
- ### read in all the settings from the sub accessors;
- for my $subacc ( $subobj->ls_accessors ) {
- $subobj->$subacc( $Conf->{$acc}->{$subacc} );
- }
-
- ### now store it in the parent object
- $obj->$acc( $subobj );
- }
-
- $obj->_clean_up_paths;
-
- ### shut up IPC::Cmd warning about not findin IPC::Run on win32
- $IPC::Cmd::WARN = 0;
-
- return $obj;
-}
-
-sub _clean_up_paths {
- my $self = shift;
-
- ### clean up paths if we are on win32
- if( $^O eq 'MSWin32' ) {
- for my $pgm ( $self->program->ls_accessors ) {
- my $path = $self->program->$pgm;
-
- ### paths with whitespace needs to be shortened
- ### for shell outs.
- if ($path and $path =~ /\s+/) {
- my($prog, $args);
-
- ### patch from Steve Hay, 13nd of June 2007
- ### msg-id: <467012A4.6060705@uk.radan.com>
- ### windows directories are not allowed to end with
- ### a space, so any occurrence of '\w\s+/\w+' means
- ### we're dealing with arguments, not directory
- ### names.
- if ($path =~ /^(.*?)(\s+\/.*$)/) {
- ($prog, $args) = ($1, $2);
-
- ### otherwise, there are no arguments
- } else {
- ($prog, $args) = ($path, '');
- }
-
- $prog = Win32::GetShortPathName( $prog );
- $self->program->$pgm( $prog . $args );
- }
- }
- }
-
- return 1;
-}
-
-1;
-
-=pod
-
-=head1 BUG REPORTS
-
-Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>.
-
-=head1 AUTHOR
-
-This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
-
-=head1 COPYRIGHT
-
-The CPAN++ interface (of which this module is a part of) is copyright (c)
-2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved.
-
-This library is free software; you may redistribute and/or modify it
-under the same terms as Perl itself.
-
-=head1 SEE ALSO
-
-L<CPANPLUS::Backend>, L<CPANPLUS::Configure::Setup>, L<CPANPLUS::Configure>
-
-=cut
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Config/HomeEnv.pm b/cpan/CPANPLUS/lib/CPANPLUS/Config/HomeEnv.pm
deleted file mode 100644
index 90703a066d..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Config/HomeEnv.pm
+++ /dev/null
@@ -1,63 +0,0 @@
-package CPANPLUS::Config::HomeEnv;
-use deprecate;
-
-use strict;
-use File::Spec;
-use vars qw($VERSION);
-
-$VERSION = "0.9135";
-
-sub setup {
- my $conf = shift;
- $conf->set_conf( base => File::Spec->catdir( $ENV{PERL5_CPANPLUS_HOME}, '.cpanplus' ) )
- if $ENV{PERL5_CPANPLUS_HOME};
- return 1;
-}
-
-qq'Wherever I hang my hat is home';
-
-__END__
-
-=head1 NAME
-
-CPANPLUS::Config::HomeEnv - Set the environment for the CPANPLUS base dir
-
-=head1 SYNOPSIS
-
- export PERL5_CPANPLUS_HOME=/home/moo/perls/conf/perl-5.8.9/
-
-=head1 DESCRIPTION
-
-CPANPLUS::Config::HomeEnv is a L<CPANPLUS::Config> file that allows the CPANPLUS user to
-specify where L<CPANPLUS> gets its configuration from.
-
-Setting the environment variable C<PERL5_CPANPLUS_HOME> to a path location, determines
-where the C<.cpanplus> directory will be located.
-
-=head1 METHODS
-
-=over
-
-=item C<setup>
-
-Called by L<CPANPLUS::Configure>.
-
-=back
-
-=head1 AUTHOR
-
-Chris C<BinGOs> Williams <chris@bingosnet.co.uk>
-
-Contributions and patience from Jos Boumans the L<CPANPLUS> guy!
-
-=head1 LICENSE
-
-Copyright E<copy> Chris Williams and Jos Boumans.
-
-This module may be used, modified, and distributed under the same terms as Perl itself. Please see the license that came with your Perl distribution for details.
-
-=head1 SEE ALSO
-
-L<CPANPLUS>
-
-=cut
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Configure.pm b/cpan/CPANPLUS/lib/CPANPLUS/Configure.pm
deleted file mode 100644
index 1abf759ef7..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Configure.pm
+++ /dev/null
@@ -1,637 +0,0 @@
-package CPANPLUS::Configure;
-use deprecate;
-use strict;
-
-
-use CPANPLUS::Internals::Constants;
-use CPANPLUS::Error;
-use CPANPLUS::Config;
-
-use Log::Message;
-use Module::Load qw[load];
-use Params::Check qw[check];
-use File::Basename qw[dirname];
-use Module::Loaded ();
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-use vars qw[$AUTOLOAD $VERSION $MIN_CONFIG_VERSION];
-use base qw[CPANPLUS::Internals::Utils];
-
-local $Params::Check::VERBOSE = 1;
-
-### require, avoid circular use ###
-require CPANPLUS::Internals;
-$VERSION = "0.9135";
-
-### can't use O::A as we're using our own AUTOLOAD to get to
-### the config options.
-for my $meth ( qw[conf _lib _perl5lib]) {
- no strict 'refs';
-
- *$meth = sub {
- my $self = shift;
- $self->{'_'.$meth} = $_[0] if @_;
- return $self->{'_'.$meth};
- }
-}
-
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Configure - configuration for CPANPLUS
-
-=head1 SYNOPSIS
-
- $conf = CPANPLUS::Configure->new( );
-
- $bool = $conf->can_save;
- $bool = $conf->save( $where );
-
- @opts = $conf->options( $type );
-
- $make = $conf->get_program('make');
- $verbose = $conf->set_conf( verbose => 1 );
-
-=head1 DESCRIPTION
-
-This module deals with all the configuration issues for CPANPLUS.
-Users can use objects created by this module to alter the behaviour
-of CPANPLUS.
-
-Please refer to the C<CPANPLUS::Backend> documentation on how to
-obtain a C<CPANPLUS::Configure> object.
-
-=head1 METHODS
-
-=head2 $Configure = CPANPLUS::Configure->new( load_configs => BOOL )
-
-This method returns a new object. Normal users will never need to
-invoke the C<new> method, but instead retrieve the desired object via
-a method call on a C<CPANPLUS::Backend> object.
-
-=over 4
-
-=item load_configs
-
-Controls whether or not additional user configurations are to be loaded
-or not. Defaults to C<true>.
-
-=back
-
-=cut
-
-### store the CPANPLUS::Config object in a closure, so we only
-### initialize it once.. otherwise, on a 2nd ->new, settings
-### from configs on top of this one will be reset
-{ my $Config;
-
- sub new {
- my $class = shift;
- my %hash = @_;
-
- ### XXX pass on options to ->init() like rescan?
- my ($load);
- my $tmpl = {
- load_configs => { default => 1, store => \$load },
- };
-
- check( $tmpl, \%hash ) or (
- warn Params::Check->last_error, return
- );
-
- $Config ||= CPANPLUS::Config->new;
- my $self = bless {}, $class;
- $self->conf( $Config );
-
- ### you want us to load other configs?
- ### these can override things in the default config
- $self->init if $load;
-
- ### after processing the config files, check what
- ### @INC and PERL5LIB are set to.
- $self->_lib( \@INC );
- $self->_perl5lib( $ENV{'PERL5LIB'} );
-
- return $self;
- }
-}
-
-=head2 $bool = $Configure->init( [rescan => BOOL])
-
-Initialize the configure with other config files than just
-the default 'CPANPLUS::Config'.
-
-Called from C<new()> to load user/system configurations
-
-If the C<rescan> option is provided, your disk will be
-examined again to see if there are new config files that
-could be read. Defaults to C<false>.
-
-Returns true on success, false on failure.
-
-=cut
-
-### move the Module::Pluggable detection to runtime, rather
-### than compile time, so that a simple 'require CPANPLUS'
-### doesn't start running over your filesystem for no good
-### reason. Make sure we only do the M::P call once though.
-### we use $loaded to mark it
-{ my $loaded;
- my $warned;
- sub init {
- my $self = shift;
- my $obj = $self->conf;
- my %hash = @_;
-
- my ($rescan);
- my $tmpl = {
- rescan => { default => 0, store => \$rescan },
- };
-
- check( $tmpl, \%hash ) or (
- warn Params::Check->last_error, return
- );
-
- ### if the base dir is changed, we have to rescan it
- ### for any CPANPLUS::Config::* files as well, so keep
- ### track of it
- my $cur_base = $self->get_conf('base');
-
- ### warn if we find an old style config specified
- ### via environment variables
- { my $env = ENV_CPANPLUS_CONFIG;
- if( $ENV{$env} and not $warned ) {
- $warned++;
- error(loc("Specifying a config file in your environment " .
- "using %1 is obsolete.\nPlease follow the ".
- "directions outlined in %2 or use the '%3' command\n".
- "in the default shell to use custom config files.",
- $env, "CPANPLUS::Configure->save", 's save'));
- }
- }
-
- { ### make sure that the homedir is included now
- local @INC = ( LIB_DIR->($cur_base), @INC );
-
- ### only set it up once
- if( !$loaded++ or $rescan ) {
- ### find plugins & extra configs
- ### check $home/.cpanplus/lib as well
- require Module::Pluggable;
-
- Module::Pluggable->import(
- search_path => ['CPANPLUS::Config'],
- search_dirs => [ LIB_DIR->($cur_base) ],
- except => qr/::SUPER$/,
- sub_name => 'configs'
- );
- }
-
-
- ### do system config, user config, rest.. in that order
- ### apparently, on a 2nd invocation of -->configs, a
- ### ::ISA::CACHE package can appear.. that's bad...
- my %confs = map { $_ => $_ }
- grep { $_ !~ /::ISA::/ } __PACKAGE__->configs;
- my @confs = grep { defined }
- map { delete $confs{$_} } CONFIG_SYSTEM, CONFIG_USER;
- push @confs, sort keys %confs;
-
- for my $plugin ( @confs ) {
- msg(loc("Found config '%1'", $plugin),0);
-
- ### if we already did this the /last/ time around dont
- ### run the setup agian.
- if( my $loc = Module::Loaded::is_loaded( $plugin ) ) {
- msg(loc(" Already loaded '%1' (%2)", $plugin, $loc), 0);
- next;
- } else {
- msg(loc(" Loading config '%1'", $plugin),0);
-
- if( eval { load $plugin; 1 } ) {
- msg(loc(" Loaded '%1' (%2)",
- $plugin, Module::Loaded::is_loaded( $plugin ) ), 0);
- } else {
- error(loc(" Error loading '%1': %2", $plugin, $@));
- }
- }
-
- if( $@ ) {
- error(loc("Could not load '%1': %2", $plugin, $@));
- next;
- }
-
- my $sub = $plugin->can('setup');
- $sub->( $self ) if $sub;
- }
- }
-
- ### did one of the plugins change the base dir? then we should
- ### scan the dirs again
- if( $cur_base ne $self->get_conf('base') ) {
- msg(loc("Base dir changed from '%1' to '%2', rescanning",
- $cur_base, $self->get_conf('base')), 0);
- $self->init( @_, rescan => 1 );
- }
-
- ### clean up the paths once more, just in case
- $obj->_clean_up_paths;
-
- ### XXX in case the 'lib' param got changed, we need to
- ### add that now, or it's not propagating ;(
- { my $lib = $self->get_conf('lib');
- my %inc = map { $_ => $_ } @INC;
- for my $l ( @$lib ) {
- push @INC, $l unless $inc{$l};
- }
- $self->_lib( \@INC );
- }
-
- return 1;
- }
-}
-=pod
-
-=head2 can_save( [$config_location] )
-
-Check if we can save the configuration to the specified file.
-If no file is provided, defaults to your personal config.
-
-Returns true if the file can be saved, false otherwise.
-
-=cut
-
-sub can_save {
- my $self = shift;
- my $file = shift || CONFIG_USER_FILE->();
-
- return 1 unless -e $file;
-
- chmod 0644, $file;
- return (-w $file);
-}
-
-=pod
-
-=head2 $file = $conf->save( [$package_name] )
-
-Saves the configuration to the package name you provided.
-If this package is not C<CPANPLUS::Config::System>, it will
-be saved in your C<.cpanplus> directory, otherwise it will
-be attempted to be saved in the system wide directory.
-
-If no argument is provided, it will default to your personal
-config.
-
-Returns the full path to the file if the config was saved,
-false otherwise.
-
-=cut
-
-sub _config_pm_to_file {
- my $self = shift;
- my $pm = shift or return;
- my $dir = shift || CONFIG_USER_LIB_DIR->();
-
- ### only 3 types of files know: home, system and 'other'
- ### so figure out where to save them based on their type
- my $file;
- if( $pm eq CONFIG_USER ) {
- $file = CONFIG_USER_FILE->();
-
- } elsif ( $pm eq CONFIG_SYSTEM ) {
- $file = CONFIG_SYSTEM_FILE->();
-
- ### third party file
- } else {
- my $cfg_pkg = CONFIG . '::';
- unless( $pm =~ /^$cfg_pkg/ ) {
- error(loc(
- "WARNING: Your config package '%1' is not in the '%2' ".
- "namespace and will not be automatically detected by %3",
- $pm, $cfg_pkg, 'CPANPLUS'
- ));
- }
-
- $file = File::Spec->catfile(
- $dir,
- split( '::', $pm )
- ) . '.pm';
- }
-
- return $file;
-}
-
-
-sub save {
- my $self = shift;
- my $pm = shift || CONFIG_USER;
- my $savedir = shift || '';
-
- my $file = $self->_config_pm_to_file( $pm, $savedir ) or return;
- my $dir = dirname( $file );
-
- unless( -d $dir ) {
- $self->_mkdir( dir => $dir ) or (
- error(loc("Can not create directory '%1' to save config to",$dir)),
- return
- )
- }
- return unless $self->can_save($file);
-
- ### find only accessors that are not private
- my @acc = sort grep { $_ !~ /^_/ } $self->conf->ls_accessors;
-
- ### for dumping the values
- use Data::Dumper;
-
- my @lines;
- for my $acc ( @acc ) {
-
- push @lines, "### $acc section", $/;
-
- for my $key ( $self->conf->$acc->ls_accessors ) {
- my $val = Dumper( $self->conf->$acc->$key );
-
- $val =~ s/\$VAR1\s+=\s+//;
- $val =~ s/;\n//;
-
- push @lines, '$'. "conf->set_${acc}( $key => $val );", $/;
- }
- push @lines, $/,$/;
-
- }
-
- my $str = join '', map { " $_" } @lines;
-
- ### use a variable to make sure the pod parser doesn't snag it
- my $is = '=';
- my $time = gmtime;
-
-
- my $msg = <<_END_OF_CONFIG_;
-###############################################
-###
-### Configuration structure for $pm
-###
-###############################################
-
-#last changed: $time GMT
-
-### minimal pod, so you can find it with perldoc -l, etc
-${is}pod
-
-${is}head1 NAME
-
-$pm
-
-${is}head1 DESCRIPTION
-
-This is a CPANPLUS configuration file. Editing this
-config changes the way CPANPLUS will behave
-
-${is}cut
-
-package $pm;
-
-use strict;
-
-sub setup {
- my \$conf = shift;
-
-$str
-
- return 1;
-}
-
-1;
-
-_END_OF_CONFIG_
-
- $self->_move( file => $file, to => "$file~" ) if -f $file;
-
- my $fh = new FileHandle;
- $fh->open(">$file")
- or (error(loc("Could not open '%1' for writing: %2", $file, $!)),
- return );
-
- $fh->print($msg);
- $fh->close;
-
- return $file;
-}
-
-=pod
-
-=head2 options( type => TYPE )
-
-Returns a list of all valid config options given a specific type
-(like for example C<conf> of C<program>) or false if the type does
-not exist
-
-=cut
-
-sub options {
- my $self = shift;
- my $conf = $self->conf;
- my %hash = @_;
-
- my $type;
- my $tmpl = {
- type => { required => 1, default => '',
- strict_type => 1, store => \$type },
- };
-
- check($tmpl, \%hash) or return;
-
- my %seen;
- return sort grep { !$seen{$_}++ }
- map { $_->$type->ls_accessors if $_->can($type) }
- $self->conf;
- return;
-}
-
-=pod
-
-=head1 ACCESSORS
-
-Accessors that start with a C<_> are marked private -- regular users
-should never need to use these.
-
-See the C<CPANPLUS::Config> documentation for what items can be
-set and retrieved.
-
-=head2 get_SOMETHING( ITEM, [ITEM, ITEM, ... ] );
-
-The C<get_*> style accessors merely retrieves one or more desired
-config options.
-
-=head2 set_SOMETHING( ITEM => VAL, [ITEM => VAL, ITEM => VAL, ... ] );
-
-The C<set_*> style accessors set the current value for one
-or more config options and will return true upon success, false on
-failure.
-
-=head2 add_SOMETHING( ITEM => VAL, [ITEM => VAL, ITEM => VAL, ... ] );
-
-The C<add_*> style accessor adds a new key to a config key.
-
-Currently, the following accessors exist:
-
-=over 4
-
-=item set|get_conf
-
-Simple configuration directives like verbosity and favourite shell.
-
-=item set|get_program
-
-Location of helper programs.
-
-=item _set|_get_build
-
-Locations of where to put what files for CPANPLUS.
-
-=item _set|_get_source
-
-Locations and names of source files locally.
-
-=item _set|_get_mirror
-
-Locations and names of source files remotely.
-
-=item _set|_get_fetch
-
-Special settings pertaining to the fetching of files.
-
-=back
-
-=cut
-
-sub AUTOLOAD {
- my $self = shift;
- my $conf = $self->conf;
-
- my $name = $AUTOLOAD;
- $name =~ s/.+:://;
-
- my ($private, $action, $field) =
- $name =~ m/^(_)?((?:[gs]et|add))_([a-z]+)$/;
-
- my $type = '';
- $type .= '_' if $private;
- $type .= $field if $field;
-
- my $type_code = $conf->can($type);
- unless ( $type_code ) {
- error( loc("Invalid method type: '%1'", $name) );
- return;
- }
- my $type_obj = $type_code->();
-
- unless( scalar @_ ) {
- error( loc("No arguments provided!") );
- return;
- }
-
- ### retrieve a current value for an existing key ###
- if( $action eq 'get' ) {
- for my $key (@_) {
- my @list = ();
-
- ### get it from the user config first
- if( my $code = $type_obj->can($key) ) {
- push @list, $code->();
-
- ### XXX EU::AI compatibility hack to provide lookups like in
- ### cpanplus 0.04x; we renamed ->_get_build('base') to
- ### ->get_conf('base')
- } elsif ( $type eq '_build' and $key eq 'base' ) {
- return $self->get_conf($key);
-
- } else {
- error( loc(q[No such key '%1' in field '%2'], $key, $type) );
- return;
- }
-
- return wantarray ? @list : $list[0];
- }
-
- ### set an existing key to a new value ###
- } elsif ( $action eq 'set' ) {
- my %args = @_;
-
- while( my($key,$val) = each %args ) {
-
- if( my $code = $type_obj->can($key) ) {
- $code->( $val );
-
- } else {
- error( loc(q[No such key '%1' in field '%2'], $key, $type) );
- return;
- }
- }
-
- return 1;
-
- ### add a new key to the config ###
- } elsif ( $action eq 'add' ) {
- my %args = @_;
-
- while( my($key,$val) = each %args ) {
-
- if( $type_obj->can($key) ) {
- error( loc( q[Key '%1' already exists for field '%2'],
- $key, $type));
- return;
- } else {
- $type_obj->mk_accessors( $key );
- $type_obj->$key( $val );
- }
- }
- return 1;
-
- } else {
-
- error( loc(q[Unknown action '%1'], $action) );
- return;
- }
-}
-
-sub DESTROY { 1 };
-
-1;
-
-=pod
-
-=head1 BUG REPORTS
-
-Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>.
-
-=head1 AUTHOR
-
-This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
-
-=head1 COPYRIGHT
-
-The CPAN++ interface (of which this module is a part of) is copyright (c)
-2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved.
-
-This library is free software; you may redistribute and/or modify it
-under the same terms as Perl itself.
-
-=head1 SEE ALSO
-
-L<CPANPLUS::Backend>, L<CPANPLUS::Configure::Setup>, L<CPANPLUS::Config>
-
-=cut
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
-
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Configure/Setup.pm b/cpan/CPANPLUS/lib/CPANPLUS/Configure/Setup.pm
deleted file mode 100644
index 8ac565a70e..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Configure/Setup.pm
+++ /dev/null
@@ -1,1654 +0,0 @@
-package CPANPLUS::Configure::Setup;
-use deprecate;
-
-use strict;
-use vars qw[@ISA $VERSION];
-$VERSION = "0.9135";
-
-use base qw[CPANPLUS::Internals::Utils];
-use base qw[Object::Accessor];
-
-use Config;
-use Term::UI;
-use Module::Load;
-use Term::ReadLine;
-
-use CPANPLUS::Internals::Utils;
-use CPANPLUS::Internals::Constants;
-use CPANPLUS::Error;
-
-use IPC::Cmd qw[can_run];
-use Params::Check qw[check];
-use Module::Load::Conditional qw[check_install];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-### silence Term::UI
-$Term::UI::VERBOSE = 0;
-
-#Can't ioctl TIOCGETP: Unknown error
-#Consider installing Term::ReadKey from CPAN site nearby
-# at http://www.perl.com/CPAN
-#Or use
-# perl -MCPAN -e shell
-#to reach CPAN. Falling back to 'stty'.
-# If you do not want to see this warning, set PERL_READLINE_NOWARN
-#in your environment.
-#'stty' is not recognized as an internal or external command,
-#operable program or batch file.
-#Cannot call `stty': No such file or directory at C:/Perl/site/lib/Term/ReadLine/
-
-### setting this var in the meantime to avoid this warning ###
-$ENV{PERL_READLINE_NOWARN} = 1;
-
-
-sub new {
- my $class = shift;
- my %hash = @_;
-
- my $tmpl = {
- configure_object => { },
- term => { },
- backend => { },
- autoreply => { default => 0, },
- skip_mirrors => { default => 0, },
- use_previous => { default => 1, },
- config_type => { default => CONFIG_USER },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- ### initialize object
- my $obj = $class->SUPER::new( keys %$tmpl );
- for my $acc ( $obj->ls_accessors ) {
- $obj->$acc( $args->{$acc} );
- }
-
- ### otherwise there's a circular use ###
- load CPANPLUS::Configure;
- load CPANPLUS::Backend;
-
- $obj->configure_object( CPANPLUS::Configure->new() )
- unless $obj->configure_object;
-
- $obj->backend( CPANPLUS::Backend->new( $obj->configure_object ) )
- unless $obj->backend;
-
- ### use empty string in case user only has T::R::Stub -- it complains
- $obj->term( Term::ReadLine->new('') )
- unless $obj->term;
-
- ### enable autoreply if that was passed ###
- $Term::UI::AUTOREPLY = $obj->autoreply;
-
- return $obj;
-}
-
-sub init {
- my $self = shift;
- my $term = $self->term;
-
- ### default setting, unless changed
- $self->config_type( CONFIG_USER ) unless $self->config_type;
-
- my $save = loc('Save & exit');
- my $exit = loc('Quit without saving');
- my @map = (
- # key on the display # method to dispatch to
- [ loc('Select Configuration file') => '_save_where' ],
- [ loc('Setup CLI Programs') => '_setup_program' ],
- [ loc('Setup CPANPLUS Home directory') => '_setup_base' ],
- [ loc('Setup FTP/Email settings') => '_setup_ftp' ],
- [ loc('Setup basic preferences') => '_setup_conf' ],
- [ loc('Setup installer settings') => '_setup_installer' ],
- [ loc('Select mirrors'), => '_setup_hosts' ],
- [ loc('Edit configuration file') => '_edit' ],
- [ $save => '_save' ],
- [ $exit => 1 ],
- );
-
- my @keys = map { $_->[0] } @map; # sorted keys
- my %map = map { @$_ } @map; # lookup hash
-
- PICK_SECTION: {
- print loc("
-=================> MAIN MENU <=================
-
-Welcome to the CPANPLUS configuration. Please select which
-parts you wish to configure
-
-Defaults are taken from your current configuration.
-If you would save now, your settings would be written to:
-
- %1
-
- ", $self->config_type );
-
- my $choice = $term->get_reply(
- prompt => "Section to configure:",
- choices => \@keys,
- default => $keys[0]
- );
-
- ### exit configuration?
- if( $choice eq $exit ) {
- print loc("
-Quitting setup, changes will not be saved.
- ");
- return 1;
- }
-
- my $method = $map{$choice};
-
- my $rv = $self->$method or print loc("
-There was an error setting up this section. You might want to try again
- ");
-
- ### was it save & exit?
- if( $choice eq $save and $rv ) {
- print loc("
-Quitting setup, changes are saved to '%1'
- ", $self->config_type
- );
- return 1;
- }
-
- ### otherwise, present choice again
- redo PICK_SECTION;
- }
-
- return 1;
-}
-
-
-
-### sub that figures out what kind of config type the user wants
-sub _save_where {
- my $self = shift;
- my $term = $self->term;
- my $conf = $self->configure_object;
-
-
- ASK_CONFIG_TYPE: {
-
- print loc( q[
-Where would you like to save your CPANPLUS Configuration file?
-
-If you want to configure CPANPLUS for this user only,
-select the '%1' option.
-The file will then be saved in your homedirectory.
-
-If you are the system administrator of this machine,
-and would like to make this config available globally,
-select the '%2' option.
-The file will be then be saved in your CPANPLUS
-installation directory.
-
- ], CONFIG_USER, CONFIG_SYSTEM );
-
-
- ### ask what config type we should save to
- my $type = $term->get_reply(
- prompt => loc("Type of configuration file"),
- default => $self->config_type || CONFIG_USER,
- choices => [CONFIG_USER, CONFIG_SYSTEM],
- );
-
- my $file = $conf->_config_pm_to_file( $type );
-
- ### can we save to this file?
- unless( $conf->can_save( $file ) ) {
- error(loc(
- "Can not save to file '%1'-- please check permissions " .
- "and try again", $file
- ));
-
- redo ASK_CONFIG_FILE;
- }
-
- ### you already have the file -- are we allowed to overwrite
- ### or should we try again?
- if ( -e $file and -w _ ) {
- print loc(q[
-I see you already have this file:
- %1
-
-The file will not be overwritten until you explicitly save it.
-
- ], $file );
-
- redo ASK_CONFIG_TYPE
- unless $term->ask_yn(
- prompt => loc( "Do you wish to use this file?"),
- default => 'n',
- );
- }
-
- print $/, loc("Using '%1' as your configuration type", $type);
-
- return $self->config_type($type);
- }
-}
-
-
-### setup the build & cache dirs
-sub _setup_base {
- my $self = shift;
- my $term = $self->term;
- my $conf = $self->configure_object;
-
- my $base = $conf->get_conf('base');
- my $home = File::Spec->catdir( $self->_home_dir, DOT_CPANPLUS );
-
- print loc("
-CPANPLUS needs a directory of its own to cache important index
-files and maybe keep a temporary mirror of CPAN files.
-This may be a site-wide directory or a personal directory.
-
-For a single-user installation, we suggest using your home directory.
-
-");
-
- my $where;
- ASK_HOME_DIR: {
- my $other = loc('Somewhere else');
- if( $base and ($base ne $home) ) {
- print loc("You have several choices:");
-
- $where = $term->get_reply(
- prompt => loc('Please pick one'),
- choices => [$home, $base, $other],
- default => $home,
- );
- } else {
- $where = $base;
- }
-
- if( $where and -d $where ) {
- print loc("
-I see you already have a directory:
- %1
-
- "), $where;
-
- my $yn = $term->ask_yn(
- prompt => loc('Should I use it?'),
- default => 'y',
- );
- $where = '' unless $yn;
- }
-
- if( $where and ($where ne $other) and not -d $where ) {
- if (!$self->_mkdir( dir => $where ) ) {
- print "\n", loc("Unable to create directory '%1'", $where);
- redo ASK_HOME_DIR;
- }
-
- } elsif( not $where or ($where eq $other) ) {
- print loc("
-First of all, I'd like to create this directory.
-
- ");
-
- NEW_HOME: {
- $where = $term->get_reply(
- prompt => loc('Where shall I create it?'),
- default => $home,
- );
-
- my $again;
- if( -d $where and not -w _ ) {
- print "\n", loc("I can't seem to write in this directory");
- $again++;
- } elsif (!$self->_mkdir( dir => $where ) ) {
- print "\n", loc("Unable to create directory '%1'", $where);
- $again++;
- }
-
- if( $again ) {
- print "\n", loc('Please select another directory'), "\n\n";
- redo NEW_HOME;
- }
- }
- }
- }
-
- ### tidy up the path and store it
- $where = File::Spec->rel2abs($where);
- $conf->set_conf( base => $where );
-
- ### create subdirectories ###
- my @dirs =
- File::Spec->catdir( $where, $self->_perl_version(perl => $^X),
- $conf->_get_build('moddir') ),
- map {
- File::Spec->catdir( $where, $conf->_get_build($_) )
- } qw[autdir distdir];
-
- for my $dir ( @dirs ) {
- unless( $self->_mkdir( dir => $dir ) ) {
- warn loc("I wasn't able to create '%1'", $dir), "\n";
- }
- }
-
- ### clear away old storable images before 0.031
- for my $src (qw[dslip mailrc packages]) {
- 1 while unlink File::Spec->catfile( $where, $src );
-
- }
-
- print loc(q[
-Your CPANPLUS build and cache directory has been set to:
- %1
-
- ], $where);
-
- return 1;
-}
-
-sub _setup_ftp {
- my $self = shift;
- my $term = $self->term;
- my $conf = $self->configure_object;
-
- #########################
- ## are you a pacifist? ##
- #########################
-
- print loc("
-If you are connecting through a firewall or proxy that doesn't handle
-FTP all that well you can use passive FTP.
-
-");
-
- my $yn = $term->ask_yn(
- prompt => loc("Use passive FTP?"),
- default => $conf->get_conf('passive'),
- );
-
- $conf->set_conf(passive => $yn);
-
- ### set the ENV var as well, else it won't get set till AFTER
- ### the configuration is saved. but we fetch files BEFORE that.
- $ENV{FTP_PASSIVE} = $yn;
-
- print "\n";
- print $yn
- ? loc("I will use passive FTP.")
- : loc("I won't use passive FTP.");
- print "\n";
-
- #############################
- ## should fetches timeout? ##
- #############################
-
- print loc("
-CPANPLUS can specify a network timeout for downloads (in whole seconds).
-If none is desired (or to skip this question), enter '0'.
-
-");
-
- my $timeout = 0 + $term->get_reply(
- prompt => loc("Network timeout for downloads"),
- default => $conf->get_conf('timeout') || 0,
- allow => qr/(?!\D)/, ### whole numbers only
- );
-
- $conf->set_conf(timeout => $timeout);
-
- print "\n";
- print $timeout
- ? loc("The network timeout for downloads is %1 seconds.", $timeout)
- : loc("The network timeout for downloads is not set.");
- print "\n";
-
- ############################
- ## where can I reach you? ##
- ############################
-
- print loc("
-What email address should we send as our anonymous password when
-fetching modules from CPAN servers? Some servers will NOT allow you to
-connect without a valid email address, or at least something that looks
-like one.
-Also, if you choose to report test results at some point, a valid email
-is required for the 'from' field, so choose wisely.
-
- ");
-
- my $other = 'Something else';
- my @choices = (DEFAULT_EMAIL, $Config{cf_email}, $other);
- my $current = $conf->get_conf('email');
-
- ### if your current address is not in the list, add it to the choices
- unless (grep { $_ eq $current } @choices) {
- unshift @choices, $current;
- }
-
- my $email = $term->get_reply(
- prompt => loc('Which email address shall I use?'),
- default => $current || $choices[0],
- choices => \@choices,
- );
-
- if( $email eq $other ) {
- EMAIL: {
- $email = $term->get_reply(
- prompt => loc('Email address: '),
- );
-
- unless( $self->_valid_email($email) ) {
- print loc("
-You did not enter a valid email address, please try again!
- ") if length $email;
-
- redo EMAIL;
- }
- }
- }
-
- print loc("
-Your 'email' is now:
- %1
-
- ", $email);
-
- $conf->set_conf( email => $email );
-
- return 1;
-}
-
-
-### commandline programs
-sub _setup_program {
- my $self = shift;
- my $term = $self->term;
- my $conf = $self->configure_object;
-
- print loc("
-CPANPLUS can use command line utilities to do certain
-tasks, rather than use perl modules.
-
-If you wish to use a certain command utility, just enter
-the full path (or accept the default). If you do not wish
-to use it, enter a single space.
-
-Note that the paths you provide should not contain spaces, which is
-needed to make a distinction between program name and options to that
-program. For Win32 machines, you can use the short name for a path,
-like '%1'.
-", 'c:\Progra~1\prog.exe' );
-
- for my $prog ( sort $conf->options( type => 'program') ) {
- PROGRAM: {
- print "\n", loc("Where can I find your '%1' utility? ".
- "(Enter a single space to disable)", $prog ), "\n";
-
- my $loc = $term->get_reply(
- prompt => "Path to your '$prog'",
- default => $conf->get_program( $prog ),
- );
-
- ### empty line clears it
- my $cmd = $loc =~ /^\s*$/ ? undef : $loc;
- my ($bin) = $cmd =~ /^(\S+)/;
-
- ### did you provide a valid program ?
- if( $bin and not can_run( $bin ) ) {
- print "\n";
- print loc("Can not find the binary '%1' in your path!", $bin);
- redo PROGRAM;
- }
-
- ### make is special -- we /need/ it!
- if( $prog eq 'make' and not $bin ) {
- print loc(
- "==> Without your '%1' utility, I can not function! <==",
- 'make'
- );
- print loc("Please provide one!");
-
- ### show win32 where to download
- if ( $^O eq 'MSWin32' ) {
- print loc("You can get '%1' from:", NMAKE);
- print "\t". NMAKE_URL ."\n";
- }
- print "\n";
- redo PROGRAM;
- }
-
- $conf->set_program( $prog => $cmd );
- print $cmd
- ? loc( "Your '%1' utility has been set to '%2'.",
- $prog, $cmd )
- : loc( "Your '%1' has been disabled.", $prog );
- print "\n";
- }
- }
-
- return 1;
-}
-
-sub _setup_installer {
- my $self = shift;
- my $term = $self->term;
- my $conf = $self->configure_object;
-
- my $none = 'None';
- {
- print loc("
-CPANPLUS uses binary programs as well as Perl modules to accomplish
-various tasks. Normally, CPANPLUS will prefer the use of Perl modules
-over binary programs.
-
-You can change this setting by making CPANPLUS prefer the use of
-certain binary programs if they are available.
-
- ");
-
- ### default to using binaries if we don't have compress::zlib only
- ### -- it'll get very noisy otherwise
- my $type = 'prefer_bin';
- my $yn = $term->ask_yn(
- prompt => loc("Should I prefer the use of binary programs?"),
- default => $conf->get_conf( $type ),
- );
-
- print $yn
- ? loc("Ok, I will prefer to use binary programs if possible.")
- : loc("Ok, I will prefer to use Perl modules if possible.");
- print "\n\n";
-
-
- $conf->set_conf( $type => $yn );
- }
-
- {
- print loc("
-Makefile.PL is run by perl in a separate process, and accepts various
-flags that controls the module's installation. For instance, if you
-would like to install modules to your private user directory, set
-'makemakerflags' to:
-
-LIB=~/perl/lib INSTALLMAN1DIR=~/perl/man/man1 INSTALLMAN3DIR=~/perl/man/man3
-
-and be sure that you do NOT set UNINST=1 in 'makeflags' below.
-
-Enter a name=value list separated by whitespace, but quote any embedded
-spaces that you want to preserve. (Enter a space to clear any existing
-settings.)
-
-If you don't understand this question, just press ENTER.
-
- ");
-
- my $type = 'makemakerflags';
- my $flags = $term->get_reply(
- prompt => 'Makefile.PL flags?',
- default => $conf->get_conf($type),
- );
-
- $flags = '' if $flags eq $none || $flags !~ /\S/;
-
- print "\n", loc("Your '%1' have been set to:", 'Makefile.PL flags'),
- "\n ", ( $flags ? $flags : loc('*nothing entered*')),
- "\n\n";
-
- $conf->set_conf( $type => $flags );
- }
-
- {
- print loc("
-Like Makefile.PL, we run 'make' and 'make install' as separate processes.
-If you have any parameters (e.g. '-j3' in dual processor systems) you want
-to pass to the calls, please specify them here.
-
-In particular, 'UNINST=1' is recommended for root users, unless you have
-fine-tuned ideas of where modules should be installed in the \@INC path.
-
-Enter a name=value list separated by whitespace, but quote any embedded
-spaces that you want to preserve. (Enter a space to clear any existing
-settings.)
-
-Again, if you don't understand this question, just press ENTER.
-
- ");
- my $type = 'makeflags';
- my $flags = $term->get_reply(
- prompt => 'make flags?',
- default => $conf->get_conf($type),
- );
-
- $flags = '' if $flags eq $none || $flags !~ /\S/;
-
- print "\n", loc("Your '%1' have been set to:", $type),
- "\n ", ( $flags ? $flags : loc('*nothing entered*')),
- "\n\n";
-
- $conf->set_conf( $type => $flags );
- }
-
- {
- print loc("
-An alternative to ExtUtils::MakeMaker and Makefile.PL there's a module
-called Module::Build which uses a Build.PL.
-
-If you would like to specify any flags to pass when executing the
-Build.PL (and Build) script, please enter them below.
-
-For instance, if you would like to install modules to your private
-user directory, you could enter:
-
- install_base=/my/private/path
-
-Or to uninstall old copies of modules before updating, you might
-want to enter:
-
- uninst=1
-
-Again, if you don't understand this question, just press ENTER.
-
- ");
-
- my $type = 'buildflags';
- my $flags = $term->get_reply(
- prompt => 'Build.PL and Build flags?',
- default => $conf->get_conf($type),
- );
-
- $flags = '' if $flags eq $none || $flags !~ /\S/;
-
- print "\n", loc("Your '%1' have been set to:",
- 'Build.PL and Build flags'),
- "\n ", ( $flags ? $flags : loc('*nothing entered*')),
- "\n\n";
-
- $conf->set_conf( $type => $flags );
- }
-
- ### use EU::MM or module::build? ###
- {
- print loc("
-Some modules provide both a Build.PL (Module::Build) and a Makefile.PL
-(ExtUtils::MakeMaker). By default, CPANPLUS prefers Makefile.PL.
-
-Module::Build support is not bundled standard with CPANPLUS, but
-requires you to install 'CPANPLUS::Dist::Build' from CPAN.
-
-Although Module::Build is a pure perl solution, which means you will
-not need a 'make' binary, it does have some limitations. The most
-important is that CPANPLUS is unable to uninstall any modules installed
-by Module::Build.
-
-Again, if you don't understand this question, just press ENTER.
-
- ");
- my $type = 'prefer_makefile';
- my $yn = $term->ask_yn(
- prompt => loc("Prefer Makefile.PL over Build.PL?"),
- default => $conf->get_conf($type),
- );
-
- $conf->set_conf( $type => $yn );
- }
-
- {
- print loc('
-If you like, CPANPLUS can add extra directories to your @INC list during
-startup. These will just be used by CPANPLUS and will not change your
-external environment or perl interpreter. Enter a space separated list of
-pathnames to be added to your @INC, quoting any with embedded whitespace.
-(To clear the current value enter a single space.)
-
- ');
-
- my $type = 'lib';
- my $flags = $term->get_reply(
- prompt => loc('Additional @INC directories to add?'),
- default => (join " ", @{$conf->get_conf($type) || []} ),
- );
-
- my $lib;
- unless( $flags =~ /\S/ ) {
- $lib = [];
- } else {
- (@$lib) = $flags =~ m/\s*("[^"]+"|'[^']+'|[^\s]+)/g;
- }
-
- print "\n", loc("Your additional libs are now:"), "\n";
-
- print scalar @$lib
- ? map { " $_\n" } @$lib
- : " ", loc("*nothing entered*"), "\n";
- print "\n\n";
-
- $conf->set_conf( $type => $lib );
- }
-
- return 1;
-}
-
-
-sub _setup_conf {
- my $self = shift;
- my $term = $self->term;
- my $conf = $self->configure_object;
-
- my $none = 'None';
- {
- ############
- ## noisy? ##
- ############
-
- print loc("
-In normal operation I can just give you basic information about what I
-am doing, or I can be more verbose and give you every little detail.
-
- ");
-
- my $type = 'verbose';
- my $yn = $term->ask_yn(
- prompt => loc("Should I be verbose?"),
- default => $conf->get_conf( $type ), );
-
- print "\n";
- print $yn
- ? loc("You asked for it!")
- : loc("I'll try to be quiet");
-
- $conf->set_conf( $type => $yn );
- }
-
- {
- #######################
- ## flush you animal! ##
- #######################
-
- print loc("
-In the interest of speed, we keep track of what modules were installed
-successfully and which failed in the current session. We can flush this
-data automatically, or you can explicitly issue a 'flush' when you want
-to purge it.
-
- ");
-
- my $type = 'flush';
- my $yn = $term->ask_yn(
- prompt => loc("Flush automatically?"),
- default => $conf->get_conf( $type ),
- );
-
- print "\n";
- print $yn
- ? loc("I'll flush after every full module install.")
- : loc("I won't flush until you tell me to.");
-
- $conf->set_conf( $type => $yn );
- }
-
- {
- #####################
- ## force installs? ##
- #####################
-
- print loc("
-Usually, when a test fails, I won't install the module, but if you
-prefer, I can force the install anyway.
-
- ");
-
- my $type = 'force';
- my $yn = $term->ask_yn(
- prompt => loc("Force installs?"),
- default => $conf->get_conf( $type ),
- );
-
- print "\n";
- print $yn
- ? loc("I will force installs.")
- : loc("I won't force installs.");
-
- $conf->set_conf( $type => $yn );
- }
-
- {
- ###################
- ## about prereqs ##
- ###################
-
- print loc("
-Sometimes a module will require other modules to be installed before it
-will work. CPANPLUS can attempt to install these for you automatically
-if you like, or you can do the deed yourself.
-
-If you would prefer that we NEVER try to install extra modules
-automatically, select NO. (Usually you will want this set to YES.)
-
-If you would like to build modules to satisfy testing or prerequisites,
-but not actually install them, select BUILD.
-
-NOTE: This feature requires you to flush the 'lib' cache for longer
-running programs (refer to the CPANPLUS::Backend documentations for
-more details).
-
-Otherwise, select ASK to have us ask your permission to install them.
-
- ");
-
- my $type = 'prereqs';
-
- my @map = (
- [ PREREQ_IGNORE, # conf value
- loc('No, do not install prerequisites'), # UI Value
- loc("I won't install prerequisites") # diag message
- ],
- [ PREREQ_INSTALL,
- loc('Yes, please install prerequisites'),
- loc("I will install prerequisites")
- ],
- [ PREREQ_ASK,
- loc('Ask me before installing a prerequisite'),
- loc("I will ask permission to install")
- ],
- [ PREREQ_BUILD,
- loc('Build prerequisites, but do not install them'),
- loc( "I will only build, but not install prerequisites" )
- ],
- );
-
- my %reply = map { $_->[1] => $_->[0] } @map; # choice => value
- my %diag = map { $_->[1] => $_->[2] } @map; # choice => diag message
- my %conf = map { $_->[0] => $_->[1] } @map; # value => ui choice
-
- my $reply = $term->get_reply(
- prompt => loc('Follow prerequisites?'),
- default => $conf{ $conf->get_conf( $type ) },
- choices => [ @conf{ sort keys %conf } ],
- );
- print "\n";
-
- my $value = $reply{ $reply };
- my $diag = $diag{ $reply };
-
- $conf->set_conf( $type => $value );
- print $diag, "\n";
- }
-
- { print loc("
-Modules in the CPAN archives are protected with md5 checksums.
-
-This requires the Perl module Digest::MD5 to be installed (which
-CPANPLUS can do for you later);
-
- ");
- my $type = 'md5';
-
- my $yn = $term->ask_yn(
- prompt => loc("Shall I use the MD5 checksums?"),
- default => $conf->get_conf( $type ),
- );
-
- print $yn
- ? loc("I will use the MD5 checksums if you have it")
- : loc("I won't use the MD5 checksums");
-
- $conf->set_conf( $type => $yn );
-
- }
-
-
- { ###########################################
- ## sally sells seashells by the seashore ##
- ###########################################
-
- print loc("
-By default CPANPLUS uses its own shell when invoked. If you would prefer
-a different shell, such as one you have written or otherwise acquired,
-please enter the full name for your shell module.
-
- ");
-
- my $type = 'shell';
- my $other = 'Other';
- my @choices = (qw| CPANPLUS::Shell::Default
- CPANPLUS::Shell::Classic |,
- $other );
- my $default = $conf->get_conf($type);
-
- unshift @choices, $default unless grep { $_ eq $default } @choices;
-
- my $reply = $term->get_reply(
- prompt => loc('Which CPANPLUS shell do you want to use?'),
- default => $default,
- choices => \@choices,
- );
-
- if( $reply eq $other ) {
- SHELL: {
- $reply = $term->get_reply(
- prompt => loc( 'Please enter the name of the shell '.
- 'you wish to use: '),
- );
-
- unless( check_install( module => $reply ) ) {
- print "\n",
- loc("Could not find '$reply' in your path " .
- "-- please try again"),
- "\n";
- redo SHELL;
- }
- }
- }
-
- print "\n", loc("Your shell is now: %1", $reply), "\n\n";
-
- $conf->set_conf( $type => $reply );
- }
-
- {
- ###################
- ## use storable? ##
- ###################
-
- print loc("
-To speed up the start time of CPANPLUS, and maintain a cache over
-multiple runs, we can use Storable to freeze some information.
-Would you like to do this?
-
-");
- my $type = 'storable';
- my $yn = $term->ask_yn(
- prompt => loc("Use Storable?"),
- default => $conf->get_conf( $type ) ? 1 : 0,
- );
- print "\n";
- print $yn
- ? loc("I will use Storable if you have it")
- : loc("I will not use Storable");
-
- $conf->set_conf( $type => $yn );
- }
-
- {
- ###################
- ## use sqlite ? ##
- ###################
-
- print loc("
-
-To limit the amount of RAM used by CPANPLUS, you can use the SQLite
-source backend instead. Note that it is currently still experimental.
-Would you like to do this?
-
-");
- my $type = 'source_engine';
- my $class = 'CPANPLUS::Internals::Source::SQLite';
- my $yn = $term->ask_yn(
- prompt => loc("Use SQLite?"),
- default => $conf->get_conf( $type ) eq $class ? 1 : 0,
- );
- print "\n";
- print $yn
- ? loc("I will use SQLite")
- : loc("I will not use SQLite");
-
- $conf->set_conf( $type => $class );
- }
-
- {
- ###################
- ## use cpantest? ##
- ###################
-
- print loc("
-CPANPLUS has support for the Test::Reporter module, which can be utilized
-to report success and failures of modules installed by CPANPLUS. Would
-you like to do this? Note that you will still be prompted before
-sending each report.
-
-If you don't have all the required modules installed yet, you should
-consider installing '%1'
-
-This package bundles all the required modules to enable test reporting
-and querying from CPANPLUS.
-You can do so straight after this installation.
-
- ", 'Bundle::CPANPLUS::Test::Reporter');
-
- my $type = 'cpantest';
- my $yn = $term->ask_yn(
- prompt => loc('Report test results?'),
- default => $conf->get_conf( $type ) ? 1 : 0,
- );
-
- print "\n";
- print $yn
- ? loc("I will prompt you to report test results")
- : loc("I won't prompt you to report test results");
-
- $conf->set_conf( $type => $yn );
- }
-
- {
- ###################################
- ## use cryptographic signatures? ##
- ###################################
-
- print loc("
-The Module::Signature extension allows CPAN authors to sign their
-distributions using PGP signatures. Would you like to check for
-module's cryptographic integrity before attempting to install them?
-Note that this requires either the 'gpg' utility or Crypt::OpenPGP
-to be installed.
-
- ");
- my $type = 'signature';
-
- my $yn = $term->ask_yn(
- prompt => loc('Shall I check module signatures?'),
- default => $conf->get_conf($type) ? 1 : 0,
- );
-
- print "\n";
- print $yn
- ? loc("Ok, I will attempt to check module signatures.")
- : loc("Ok, I won't attempt to check module signatures.");
-
- $conf->set_conf( $type => $yn );
- }
-
- return 1;
-}
-
-sub _setup_hosts {
- my $self = shift;
- my $term = $self->term;
- my $conf = $self->configure_object;
-
-
- if( scalar @{ $conf->get_conf('hosts') } ) {
-
- my $hosts;
- for my $href ( @{$conf->get_conf('hosts')} ) {
- $hosts .= "\t$href->{scheme}://$href->{host}$href->{path}\n";
- }
-
- print loc("
-I see you already have some hosts selected:
-
-$hosts
-
-If you'd like to stick with your current settings, just select 'Yes'.
-Otherwise, select 'No' and you can reconfigure your hosts
-
-");
- my $yn = $term->ask_yn(
- prompt => loc("Would you like to keep your current hosts?"),
- default => 'y',
- );
- return 1 if $yn;
- }
-
- my @hosts;
- MAIN: {
-
- print loc("
-Now we need to know where your favorite CPAN sites are located. Make a
-list of a few sites (just in case the first on the array won't work).
-
-If you are mirroring CPAN to your local workstation, specify a file:
-URI by picking the CUSTOM option.
-
-Otherwise, let us fetch the official CPAN mirror list and you can pick
-the mirror that suits you best from a list by using the MIRROR option;
-First, pick a nearby continent and country. Then, you will be presented
-with a list of URLs of CPAN mirrors in the country you selected. Select
-one or more of those URLs.
-
-Note, the latter option requires a working net connection.
-
-You can select VIEW to see your current selection and QUIT when you
-are done.
-
-");
-
- my $reply = $term->get_reply(
- prompt => loc('Please choose an option'),
- choices => [qw|Mirror Custom View Quit|],
- default => 'Mirror',
- );
-
- goto MIRROR if $reply eq 'Mirror';
- goto CUSTOM if $reply eq 'Custom';
- goto QUIT if $reply eq 'Quit';
-
- $self->_view_hosts(@hosts) if $reply eq 'View';
- redo MAIN;
- }
-
- my $mirror_file;
- my $hosts;
- MIRROR: {
- $mirror_file ||= $self->_get_mirrored_by or return;
- $hosts ||= $self->_parse_mirrored_by($mirror_file) or return;
-
- my ($continent, $country, $host) = $self->_guess_from_timezone( $hosts );
-
- CONTINENT: {
- my %seen;
- my @choices = sort map {
- $_->{'continent'}
- } grep {
- not $seen{$_->{'continent'}}++
- } values %$hosts;
- push @choices, qw[Custom Up Quit];
-
- my $reply = $term->get_reply(
- prompt => loc('Pick a continent'),
- default => $continent,
- choices => \@choices,
- );
-
- goto MAIN if $reply eq 'Up';
- goto CUSTOM if $reply eq 'Custom';
- goto QUIT if $reply eq 'Quit';
-
- $continent = $reply;
- }
-
- COUNTRY: {
- my %seen;
- my @choices = sort map {
- $_->{'country'}
- } grep {
- not $seen{$_->{'country'}}++
- } grep {
- ($_->{'continent'} eq $continent)
- } values %$hosts;
- push @choices, qw[Custom Up Quit];
-
- my $reply = $term->get_reply(
- prompt => loc('Pick a country'),
- default => $country,
- choices => \@choices,
- );
-
- goto CONTINENT if $reply eq 'Up';
- goto CUSTOM if $reply eq 'Custom';
- goto QUIT if $reply eq 'Quit';
-
- $country = $reply;
- }
-
- HOST: {
- my @list = grep {
- $_->{'continent'} eq $continent and
- $_->{'country'} eq $country
- } values %$hosts;
-
- my %map; my $default;
- for my $href (@list) {
- for my $con ( @{$href->{'connections'}} ) {
- next unless length $con->{'host'};
-
- my $entry = $con->{'scheme'} . '://' . $con->{'host'};
- $default = $entry if $con->{'host'} eq $host;
-
- $map{$entry} = $con;
- }
- }
-
- CHOICE: {
-
- ### doesn't play nice with Term::UI :(
- ### should make t::ui figure out pager opens
- #$self->_pager_open; # host lists might be long
-
- print loc("
-You can enter multiple sites by separating them by a space.
-For example:
- 1 4 2 5
- ");
-
- my @reply = $term->get_reply(
- prompt => loc('Please pick a site: '),
- choices => [sort(keys %map),
- qw|Custom View Up Quit|],
- default => $default,
- multi => 1,
- );
- #$self->_pager_close;
-
-
- goto COUNTRY if grep { $_ eq 'Up' } @reply;
- goto CUSTOM if grep { $_ eq 'Custom' } @reply;
- goto QUIT if grep { $_ eq 'Quit' } @reply;
-
- ### add the host, but only if it's not on the stack already ###
- unless( grep { $_ eq 'View' } @reply ) {
- for my $reply (@reply) {
- if( grep { $_ eq $map{$reply} } @hosts ) {
- print loc("Host '%1' already selected", $reply);
- print "\n\n";
- } else {
- push @hosts, $map{$reply}
- }
- }
- }
-
- $self->_view_hosts(@hosts);
-
- goto QUIT if $self->autoreply;
- redo CHOICE;
- }
- }
- }
-
- CUSTOM: {
- print loc("
-If there are any additional URLs you would like to use, please add them
-now. You may enter them separately or as a space delimited list.
-
-We provide a default fall-back URL, but you are welcome to override it
-with e.g. 'http://www.cpan.org/' if LWP, wget or curl is installed.
-
-(Enter a single space when you are done, or to simply skip this step.)
-
-Note that if you want to use a local depository, you will have to enter
-as follows:
-
-file://server/path/to/cpan
-
-if the file is on a server on your local network or as:
-
-file:///path/to/cpan
-
-if the file is on your local disk. Note the three /// after the file: bit
-
-");
-
- CHOICE: {
- my $reply = $term->get_reply(
- prompt => loc("Additionals host(s) to add: "),
- default => '',
- );
-
- last CHOICE unless $reply =~ /\S/;
-
- my $href = $self->_parse_host($reply);
-
- if( $href ) {
- push @hosts, $href
- unless grep {
- $href->{'scheme'} eq $_->{'scheme'} and
- $href->{'host'} eq $_->{'host'} and
- $href->{'path'} eq $_->{'path'}
- } @hosts;
-
- last CHOICE if $self->autoreply;
- } else {
- print loc("Invalid uri! Please try again!");
- }
-
- $self->_view_hosts(@hosts);
-
- redo CHOICE;
- }
-
- DONE: {
-
- print loc("
-Where would you like to go now?
-
-Please pick one of the following options or Quit when you are done
-
-");
- my $answer = $term->get_reply(
- prompt => loc("Where to now?"),
- default => 'Quit',
- choices => [qw|Mirror Custom View Quit|],
- );
-
- if( $answer eq 'View' ) {
- $self->_view_hosts(@hosts);
- redo DONE;
- }
-
- goto MIRROR if $answer eq 'Mirror';
- goto CUSTOM if $answer eq 'Custom';
- goto QUIT if $answer eq 'Quit';
- }
- }
-
- QUIT: {
- $conf->set_conf( hosts => \@hosts );
-
- print loc("
-Your host configuration has been saved
-
-");
- }
-
- return 1;
-}
-
-sub _view_hosts {
- my $self = shift;
- my @hosts = @_;
-
- print "\n\n";
-
- if( scalar @hosts ) {
- my $i = 1;
- for my $host (@hosts) {
-
- ### show full path on file uris, otherwise, just show host
- my $path = join '', (
- $host->{'scheme'} eq 'file'
- ? ( ($host->{'host'} || '[localhost]'),
- $host->{path} )
- : $host->{'host'}
- );
-
- printf "%-40s %30s\n",
- loc("Selected %1",$host->{'scheme'} . '://' . $path ),
- loc("%quant(%2,host) selected thus far.", $i);
- $i++;
- }
- } else {
- print loc("No hosts selected so far.");
- }
-
- print "\n\n";
-
- return 1;
-}
-
-sub _get_mirrored_by {
- my $self = shift;
- my $cpan = $self->backend;
- my $conf = $self->configure_object;
-
- print loc("
-Now, we are going to fetch the mirror list for first-time configurations.
-This may take a while...
-
-");
-
- ### use the new configuration ###
- $cpan->configure_object( $conf );
-
- load CPANPLUS::Module::Fake;
- load CPANPLUS::Module::Author::Fake;
-
- my $mb = CPANPLUS::Module::Fake->new(
- module => $conf->_get_source('hosts'),
- path => '',
- package => $conf->_get_source('hosts'),
- author => CPANPLUS::Module::Author::Fake->new(
- _id => $cpan->_id ),
- _id => $cpan->_id,
- );
-
- my $file = $cpan->_fetch( fetchdir => $conf->get_conf('base'),
- module => $mb );
-
- return $file if $file;
- return;
-}
-
-sub _parse_mirrored_by {
- my $self = shift;
- my $file = shift;
-
- -s $file or return;
-
- my $fh = new FileHandle;
- $fh->open("$file")
- or (
- warn(loc('Could not open file "%1": %2', $file, $!)),
- return
- );
-
- ### slurp the file in ###
- { local $/; $file = <$fh> }
-
- ### remove comments ###
- $file =~ s/#.*$//gm;
-
- $fh->close;
-
- ### sample host entry ###
- # ftp.sun.ac.za:
- # frequency = "daily"
- # dst_ftp = "ftp://ftp.sun.ac.za/CPAN/CPAN/"
- # dst_location = "Stellenbosch, South Africa, Africa (-26.1992 28.0564)"
- # dst_organisation = "University of Stellenbosch"
- # dst_timezone = "+2"
- # dst_contact = "ftpadm@ftp.sun.ac.za"
- # dst_src = "ftp.funet.fi"
- #
- # # dst_dst = "ftp://ftp.sun.ac.za/CPAN/CPAN/"
- # # dst_contact = "mailto:ftpadm@ftp.sun.ac.za
- # # dst_src = "ftp.funet.fi"
-
- ### host name as key, rest of the entry as value ###
- my %hosts = $file =~ m/([a-zA-Z0-9\-\.]+):\s+((?:\w+\s+=\s+".*?"\s+)+)/gs;
-
- while (my($host,$data) = each %hosts) {
-
- my $href;
- map {
- s/^\s*//;
- my @a = split /\s*=\s*/;
- $a[1] =~ s/^"(.+?)"$/$1/g;
- $href->{ pop @a } = pop @a;
- } grep /\S/, split /\n/, $data;
-
- ($href->{city_area}, $href->{country}, $href->{continent},
- $href->{latitude}, $href->{longitude} ) =
- $href->{dst_location} =~
- m/
- #Aizu-Wakamatsu, Tohoku-chiho, Fukushima
- ^"?(
- (?:[^,]+?)\s* # city
- (?:
- (?:,\s*[^,]+?)\s* # optional area
- )*? # some have multiple areas listed
- )
-
- #Japan
- ,\s*([^,]+?)\s* # country
-
- #Asia
- ,\s*([^,]+?)\s* # continent
-
- # (37.4333 139.9821)
- \((\S+)\s+(\S+?)\)"?$ # (latitude longitude)
- /sx;
-
- ### parse the different hosts, store them in config format ###
- my @list;
-
- for my $type (qw[dst_ftp dst_rsync dst_http]) {
- my $path = $href->{$type};
- next unless $path =~ /\w/;
- if ($type eq 'dst_rsync' && $path !~ /^rsync:/) {
- $path =~ s{::}{/};
- $path = "rsync://$path/";
- }
- my $parts = $self->_parse_host($path);
- push @list, $parts;
- }
-
- $href->{connections} = \@list;
- $hosts{$host} = $href;
- }
-
- return \%hosts;
-}
-
-sub _parse_host {
- my $self = shift;
- my $host = shift;
-
- my @parts = $host =~ m|^(\w*)://([^/]*)(/.*)$|s;
-
- my $href;
- for my $key (qw[scheme host path]) {
- $href->{$key} = shift @parts;
- }
-
- return if lc($href->{'scheme'}) ne 'file' and !$href->{'host'};
- return if !$href->{'path'};
-
- return $href;
-}
-
-## tries to figure out close hosts based on your timezone
-##
-## Currently can only report on unique items for each of zones, countries, and
-## sites. In the future this will be combined with something else (perhaps a
-## ping?) to narrow down multiple choices.
-##
-## Tries to return the best zone, country, and site for your location. Any non-
-## unique items will be set to undef instead.
-##
-## (takes hashref, returns array)
-##
-sub _guess_from_timezone {
- my $self = shift;
- my $hosts = shift;
- my (%zones, %countries, %sites);
-
- ### autrijus - build time zone table
- my %freq_weight = (
- 'hourly' => 2400,
- '4 times a day' => 400,
- '4x daily' => 400,
- 'daily' => 100,
- 'twice daily' => 50,
- 'weekly' => 15,
- );
-
- while (my ($site, $host) = each %{$hosts}) {
- my ($zone, $continent, $country, $frequency) =
- @{$host}{qw/dst_timezone continent country frequency/};
-
-
- # skip non-well-formed ones
- next unless $continent and $country and $zone =~ /^[-+]?\d+(?::30)?/;
- ### fix style
- chomp $zone;
- $zone =~ s/:30/.5/;
- $zone =~ s/^\+//;
- $zone =~ s/"//g;
-
- $zones{$zone}{$continent}++;
- $countries{$zone}{$continent}{$country}++;
- $sites{$zone}{$continent}{$country}{$site} = $freq_weight{$frequency};
- }
-
- use Time::Local;
- my $offset = ((timegm(localtime) - timegm(gmtime)) / 3600);
-
- local $_;
-
- ## pick the entry with most country/site/frequency, one level each;
- ## note it has to be sorted -- otherwise we're depending on the hash order.
- ## also, the list context assignment (pick first one) is deliberate.
-
- my ($continent) = map {
- (sort { ($_->{$b} <=> $_->{$a}) or $b cmp $a } keys(%{$_}))
- } $zones{$offset};
-
- my ($country) = map {
- (sort { ($_->{$b} <=> $_->{$a}) or $b cmp $a } keys(%{$_}))
- } $countries{$offset}{$continent};
-
- my ($site) = map {
- (sort { ($_->{$b} <=> $_->{$a}) or $b cmp $a } keys(%{$_}))
- } $sites{$offset}{$continent}{$country};
-
- return ($continent, $country, $site);
-} # _guess_from_timezone
-
-
-### big big regex, stolen to check if you enter a valid address
-{
- my $RFC822PAT; # RFC pattern to match for valid email address
-
- sub _valid_email {
- my $self = shift;
- if (!$RFC822PAT) {
- my $esc = '\\\\'; my $Period = '\.'; my $space = '\040';
- my $tab = '\t'; my $OpenBR = '\['; my $CloseBR = '\]';
- my $OpenParen = '\('; my $CloseParen = '\)'; my $NonASCII = '\x80-\xff';
- my $ctrl = '\000-\037'; my $CRlist = '\012\015';
-
- my $qtext = qq/[^$esc$NonASCII$CRlist\"]/;
- my $dtext = qq/[^$esc$NonASCII$CRlist$OpenBR$CloseBR]/;
- my $quoted_pair = qq< $esc [^$NonASCII] >; # an escaped character
- my $ctext = qq< [^$esc$NonASCII$CRlist()] >;
- my $Cnested = qq< $OpenParen $ctext* (?: $quoted_pair $ctext* )* $CloseParen >;
- my $comment = qq< $OpenParen $ctext* (?: (?: $quoted_pair | $Cnested ) $ctext* )* $CloseParen >;
- my $X = qq< [$space$tab]* (?: $comment [$space$tab]* )* >;
- my $atom_char = qq/[^($space)<>\@,;:\".$esc$OpenBR$CloseBR$ctrl$NonASCII]/;
- my $atom = qq< $atom_char+ (?!$atom_char) >;
- my $quoted_str = qq< \" $qtext * (?: $quoted_pair $qtext * )* \" >;
- my $word = qq< (?: $atom | $quoted_str ) >;
- my $domain_ref = $atom;
- my $domain_lit = qq< $OpenBR (?: $dtext | $quoted_pair )* $CloseBR >;
- my $sub_domain = qq< (?: $domain_ref | $domain_lit) $X >;
- my $domain = qq< $sub_domain (?: $Period $X $sub_domain)* >;
- my $route = qq< \@ $X $domain (?: , $X \@ $X $domain )* : $X >;
- my $local_part = qq< $word $X (?: $Period $X $word $X )* >;
- my $addr_spec = qq< $local_part \@ $X $domain >;
- my $route_addr = qq[ < $X (?: $route )? $addr_spec > ];
- my $phrase_ctrl = '\000-\010\012-\037'; # like ctrl, but without tab
- my $phrase_char = qq/[^()<>\@,;:\".$esc$OpenBR$CloseBR$NonASCII$phrase_ctrl]/;
- my $phrase = qq< $word $phrase_char * (?: (?: $comment | $quoted_str ) $phrase_char * )* >;
- $RFC822PAT = qq< $X (?: $addr_spec | $phrase $route_addr) >;
- }
-
- return scalar ($_[0] =~ /$RFC822PAT/ox);
- }
-}
-
-
-
-
-
-
-1;
-
-
-sub _edit {
- my $self = shift;
- my $conf = $self->configure_object;
- my $file = shift || $conf->_config_pm_to_file( $self->config_type );
- my $editor = shift || $conf->get_program('editor');
- my $term = $self->term;
-
- unless( $editor ) {
- print loc("
-I'm sorry, I can't find a suitable editor, so I can't offer you
-post-configuration editing of the config file
-
-");
- return 1;
- }
-
- ### save the thing first, so there's something to edit
- $self->_save;
-
- return !system("$editor $file");
-}
-
-sub _save {
- my $self = shift;
- my $conf = $self->configure_object;
-
- return $conf->save( $self->config_type );
-}
-
-1;
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Dist.pm b/cpan/CPANPLUS/lib/CPANPLUS/Dist.pm
deleted file mode 100644
index 51ee5fb9ca..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Dist.pm
+++ /dev/null
@@ -1,808 +0,0 @@
-package CPANPLUS::Dist;
-use deprecate;
-
-use strict;
-
-use CPANPLUS::Error;
-use CPANPLUS::Internals::Constants;
-
-use Cwd ();
-use Object::Accessor;
-use Parse::CPAN::Meta;
-
-use IPC::Cmd qw[run];
-use Params::Check qw[check];
-use Module::Load::Conditional qw[can_load check_install];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-use base 'Object::Accessor';
-
-local $Params::Check::VERBOSE = 1;
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Dist - base class for plugins
-
-=head1 SYNOPSIS
-
- my $dist = CPANPLUS::Dist::YOUR_DIST_TYPE_HERE->new(
- module => $modobj,
- );
-
-=head1 DESCRIPTION
-
-C<CPANPLUS::Dist> is a base class for C<CPANPLUS::Dist::MM>
-and C<CPANPLUS::Dist::Build>. Developers of other C<CPANPLUS::Dist::*>
-plugins should look at C<CPANPLUS::Dist::Base>.
-
-=head1 ACCESSORS
-
-=over 4
-
-=item parent()
-
-Returns the C<CPANPLUS::Module> object that parented this object.
-
-=item status()
-
-Returns the C<Object::Accessor> object that keeps the status for
-this module.
-
-=back
-
-=head1 STATUS ACCESSORS
-
-All accessors can be accessed as follows:
- $deb->status->ACCESSOR
-
-=over 4
-
-=item created()
-
-Boolean indicating whether the dist was created successfully.
-Explicitly set to C<0> when failed, so a value of C<undef> may be
-interpreted as C<not yet attempted>.
-
-=item installed()
-
-Boolean indicating whether the dist was installed successfully.
-Explicitly set to C<0> when failed, so a value of C<undef> may be
-interpreted as C<not yet attempted>.
-
-=item uninstalled()
-
-Boolean indicating whether the dist was uninstalled successfully.
-Explicitly set to C<0> when failed, so a value of C<undef> may be
-interpreted as C<not yet attempted>.
-
-=item dist()
-
-The location of the final distribution. This may be a file or
-directory, depending on how your distribution plug in of choice
-works. This will be set upon a successful create.
-
-=cut
-
-=back
-
-=head2 $dist = CPANPLUS::Dist::YOUR_DIST_TYPE_HERE->new( module => MODOBJ );
-
-Create a new C<CPANPLUS::Dist::YOUR_DIST_TYPE_HERE> object based on the
-provided C<MODOBJ>.
-
-*** DEPRECATED ***
-The optional argument C<format> is used to indicate what type of dist
-you would like to create (like C<CPANPLUS::Dist::MM> or
-C<CPANPLUS::Dist::Build> and so on ).
-
-C<< CPANPLUS::Dist->new >> is exclusively meant as a method to be
-inherited by C<CPANPLUS::Dist::MM|Build>.
-
-Returns a C<CPANPLUS::Dist::YOUR_DIST_TYPE_HERE> object on success
-and false on failure.
-
-=cut
-
-sub new {
- my $self = shift;
- my $class = ref $self || $self;
- my %hash = @_;
-
- ### first verify we got a module object ###
- my( $mod, $format );
- my $tmpl = {
- module => { required => 1, allow => IS_MODOBJ, store => \$mod },
- ### for backwards compatibility
- format => { default => $class, store => \$format,
- allow => [ __PACKAGE__->dist_types ],
- },
- };
- check( $tmpl, \%hash ) or return;
-
- unless( can_load( modules => { $format => '0.0' }, verbose => 1 ) ) {
- error(loc("'%1' not found -- you need '%2' version '%3' or higher ".
- "to detect plugins", $format, 'Module::Pluggable','2.4'));
- return;
- }
-
- ### get an empty o::a object for this class
- my $obj = $format->SUPER::new;
-
- $obj->mk_accessors( qw[parent status] );
-
- ### set the parent
- $obj->parent( $mod );
-
- ### create a status object ###
- { my $acc = Object::Accessor->new;
- $obj->status($acc);
-
- ### add minimum supported accessors
- $acc->mk_accessors( qw[prepared created installed uninstalled
- distdir dist] );
- }
-
- ### get the conf object ###
- my $conf = $mod->parent->configure_object();
-
- ### check if the format is available in this environment ###
- if( $conf->_get_build('sanity_check') and not $obj->format_available ) {
- error( loc( "Format '%1' is not available", $format) );
- return;
- }
-
- ### now initialize it or admit failure
- unless( $obj->init ) {
- error(loc("Dist initialization of '%1' failed for '%2'",
- $format, $mod->module));
- return;
- }
-
- ### return the object
- return $obj;
-}
-
-=head2 @dists = CPANPLUS::Dist->dist_types;
-
-Returns a list of the CPANPLUS::Dist::* classes available
-
-=cut
-
-### returns a list of dist_types we support
-### will get overridden by Module::Pluggable if loaded
-### XXX add support for 'plugin' dir in config as well
-{ my $Loaded;
- my @Dists = (INSTALLER_MM);
- my @Ignore = ();
-
- ### backdoor method to add more dist types
- sub _add_dist_types { my $self = shift; push @Dists, @_ };
-
- ### backdoor method to exclude dist types
- sub _ignore_dist_types { my $self = shift; push @Ignore, @_ };
- sub _reset_dist_ignore { @Ignore = () };
-
- ### locally add the plugins dir to @INC, so we can find extra plugins
- #local @INC = @INC, File::Spec->catdir(
- # $conf->get_conf('base'),
- # $conf->_get_build('plugins') );
-
- ### load any possible plugins
- sub dist_types {
-
- if ( !$Loaded++ and check_install( module => 'Module::Pluggable',
- version => '2.4')
- ) {
- require Module::Pluggable;
-
- my $only_re = __PACKAGE__ . '::\w+$';
- my %except = map { $_ => 1 }
- INSTALLER_SAMPLE,
- INSTALLER_BASE;
-
- Module::Pluggable->import(
- sub_name => '_dist_types',
- search_path => __PACKAGE__,
- only => qr/$only_re/,
- require => 1,
- except => [ keys %except ]
- );
- my %ignore = map { $_ => $_ } @Ignore;
-
- push @Dists, grep { not $ignore{$_} and not $except{$_} }
- __PACKAGE__->_dist_types;
- }
-
- return @Dists;
- }
-
-=head2 $bool = CPANPLUS::Dist->rescan_dist_types;
-
-Rescans C<@INC> for available dist types. Useful if you've installed new
-C<CPANPLUS::Dist::*> classes and want to make them available to the
-current process.
-
-=cut
-
- sub rescan_dist_types {
- my $dist = shift;
- $Loaded = 0; # reset the flag;
- return $dist->dist_types;
- }
-}
-
-=head2 $bool = CPANPLUS::Dist->has_dist_type( $type )
-
-Returns true if distribution type C<$type> is loaded/supported.
-
-=cut
-
-sub has_dist_type {
- my $dist = shift;
- my $type = shift or return;
-
- return scalar grep { $_ eq $type } CPANPLUS::Dist->dist_types;
-}
-
-=head2 $bool = $dist->prereq_satisfied( modobj => $modobj, version => $version_spec )
-
-Returns true if this prereq is satisfied. Returns false if it's not.
-Also issues an error if it seems "unsatisfiable," i.e. if it can't be
-found on CPAN or the latest CPAN version doesn't satisfy it.
-
-=cut
-
-sub prereq_satisfied {
- my $dist = shift;
- my $cb = $dist->parent->parent;
- my %hash = @_;
-
- my($mod,$ver);
- my $tmpl = {
- version => { required => 1, store => \$ver },
- modobj => { required => 1, store => \$mod, allow => IS_MODOBJ },
- };
-
- check( $tmpl, \%hash ) or return;
-
- return 1 if $mod->is_uptodate( version => $ver );
-
- if ( $cb->_vcmp( $ver, $mod->version ) > 0 ) {
-
- error(loc(
- "This distribution depends on %1, but the latest version".
- " of %2 on CPAN (%3) doesn't satisfy the specific version".
- " dependency (%4). You may have to resolve this dependency ".
- "manually.",
- $mod->module, $mod->module, $mod->version, $ver ));
-
- }
-
- return;
-}
-
-=head2 $configure_requires = $dist->find_configure_requires( [file => /path/to/META.yml] )
-
-Reads the configure_requires for this distribution from the META.yml or META.json
-file in the root directory and returns a hashref with module names
-and versions required.
-
-=cut
-
-sub find_configure_requires {
- my $self = shift;
- my $mod = $self->parent;
- my %hash = @_;
-
- my ($meta);
- my $href = {};
-
- my $tmpl = {
- file => { store => \$meta },
- };
-
- check( $tmpl, \%hash ) or return;
-
- my $meth = 'configure_requires';
-
- {
-
- ### the prereqs as we have them now
- my @args = (
- defaults => $mod->status->$meth || {},
- );
-
- my @possibles = do { defined $mod->status->extract
- ? ( META_JSON->( $mod->status->extract ),
- META_YML->( $mod->status->extract ) )
- : ()
- };
-
- unshift @possibles, $meta if $meta;
-
- META: foreach my $mfile ( grep { -e } @possibles ) {
- push @args, ( file => $mfile );
- if ( $mfile =~ /\.json/ ) {
- $href = $self->_prereqs_from_meta_json( @args, keys => [ 'configure' ] );
- }
- else {
- $href = $self->_prereqs_from_meta_file( @args, keys => [ $meth ] );
- }
- last META;
- }
-
- }
-
- ### and store it in the module
- $mod->status->$meth( $href );
-
- return { %$href };
-}
-
-sub find_mymeta_requires {
- my $self = shift;
- my $mod = $self->parent;
- my %hash = @_;
-
- my ($meta);
- my $href = {};
-
- my $tmpl = {
- file => { store => \$meta },
- };
-
- check( $tmpl, \%hash ) or return;
-
- my $meth = 'prereqs';
-
- {
-
- ### the prereqs as we have them now
- my @args = (
- defaults => $mod->status->$meth || {},
- );
-
- my @possibles = do { defined $mod->status->extract
- ? ( MYMETA_JSON->( $mod->status->extract ),
- MYMETA_YML->( $mod->status->extract ) )
- : ()
- };
-
- unshift @possibles, $meta if $meta;
-
- META: foreach my $mfile ( grep { -e } @possibles ) {
- push @args, ( file => $mfile );
- if ( $mfile =~ /\.json/ ) {
- $href = $self->_prereqs_from_meta_json( @args,
- keys => [ qw|build test runtime| ] );
- }
- else {
- $href = $self->_prereqs_from_meta_file( @args,
- keys => [ qw|build_requires requires| ] );
- }
- last META;
- }
-
- }
-
- ### and store it in the module
- $mod->status->$meth( $href );
-
- return { %$href };
-}
-
-sub _prereqs_from_meta_file {
- my $self = shift;
- my $mod = $self->parent;
- my %hash = @_;
-
- my( $meta, $defaults, $keys );
- my $tmpl = { ### check if we have an extract path. if not, we
- ### get 'undef value' warnings from file::spec
- file => { default => do { defined $mod->status->extract
- ? META_YML->( $mod->status->extract )
- : '' },
- store => \$meta,
- },
- defaults => { required => 1, default => {}, strict_type => 1,
- store => \$defaults },
- keys => { required => 1, default => [], strict_type => 1,
- store => \$keys },
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### if there's a meta file, we read it;
- if( -e $meta ) {
-
- ### Parse::CPAN::Meta uses exceptions for errors
- ### hash returned in list context!!!
-
- local $ENV{PERL_JSON_BACKEND};
-
- my ($doc) = eval { Parse::CPAN::Meta::LoadFile( $meta ) };
-
- unless( $doc ) {
- error(loc( "Could not read %1: '%2'", $meta, $@ ));
- return $defaults;
- }
-
- ### read the keys now, make sure not to throw
- ### away anything that was already added
- for my $key ( @$keys ) {
- $defaults = {
- %$defaults,
- %{ $doc->{$key} },
- } if $doc->{ $key };
- }
- }
-
- ### and return a copy
- return \%{ $defaults };
-}
-
-sub _prereqs_from_meta_json {
- my $self = shift;
- my $mod = $self->parent;
- my %hash = @_;
-
- my( $meta, $defaults, $keys );
- my $tmpl = { ### check if we have an extract path. if not, we
- ### get 'undef value' warnings from file::spec
- file => { default => do { defined $mod->status->extract
- ? META_JSON->( $mod->status->extract )
- : '' },
- store => \$meta,
- },
- defaults => { required => 1, default => {}, strict_type => 1,
- store => \$defaults },
- keys => { required => 1, default => [], strict_type => 1,
- store => \$keys },
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### if there's a meta file, we read it;
- if( -e $meta ) {
-
- ### Parse::CPAN::Meta uses exceptions for errors
- ### hash returned in list context!!!
-
- local $ENV{PERL_JSON_BACKEND};
-
- my ($doc) = eval { Parse::CPAN::Meta->load_file( $meta ) };
-
- unless( $doc ) {
- error(loc( "Could not read %1: '%2'", $meta, $@ ));
- return $defaults;
- }
-
- ### read the keys now, make sure not to throw
- ### away anything that was already added
- #for my $key ( @$keys ) {
- # $defaults = {
- # %$defaults,
- # %{ $doc->{$key} },
- # } if $doc->{ $key };
- #}
- my $prereqs = $doc->{prereqs} || {};
- for my $key ( @$keys ) {
- $defaults = {
- %$defaults,
- %{ $prereqs->{$key}->{requires} },
- } if $prereqs->{ $key }->{requires};
- }
- }
-
- ### and return a copy
- return \%{ $defaults };
-}
-
-=head2 $bool = $dist->_resolve_prereqs( ... )
-
-Makes sure prerequisites are resolved
-
- format The dist class to use to make the prereqs
- (ie. CPANPLUS::Dist::MM)
-
- prereqs Hash of the prerequisite modules and their versions
-
- target What to do with the prereqs.
- create => Just build them
- install => Install them
- ignore => Ignore them
-
- prereq_build If true, always build the prereqs even if already
- resolved
-
- verbose Be verbose
-
- force Force the prereq to be built, even if already resolved
-
-=cut
-
-sub _resolve_prereqs {
- my $dist = shift;
- my $self = $dist->parent;
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my ($prereqs, $format, $verbose, $target, $force, $prereq_build,$tolerant);
- my $tmpl = {
- ### XXX perhaps this should not be required, since it may not be
- ### packaged, just installed...
- ### Let it be empty as well -- that means the $modobj->install
- ### routine will figure it out, which is fine if we didn't have any
- ### very specific wishes (it will even detect the favourite
- ### dist_type).
- format => { required => 1, store => \$format,
- allow => ['',__PACKAGE__->dist_types], },
- prereqs => { required => 1, default => { },
- strict_type => 1, store => \$prereqs },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- force => { default => $conf->get_conf('force'),
- store => \$force },
- ### make sure allow matches with $mod->install's list
- target => { default => '', store => \$target,
- allow => ['',qw[create ignore install]] },
- prereq_build => { default => 0, store => \$prereq_build },
- tolerant => { default => $conf->get_conf('allow_unknown_prereqs'),
- store => \$tolerant },
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### so there are no prereqs? then don't even bother
- return 1 unless keys %$prereqs;
-
- ### Make sure we wound up where we started.
- my $original_wd = Cwd::cwd;
-
- ### so you didn't provide an explicit target.
- ### maybe your config can tell us what to do.
- $target ||= {
- PREREQ_ASK, TARGET_INSTALL, # we'll bail out if the user says no
- PREREQ_BUILD, TARGET_CREATE,
- PREREQ_IGNORE, TARGET_IGNORE,
- PREREQ_INSTALL, TARGET_INSTALL,
- }->{ $conf->get_conf('prereqs') } || '';
-
- ### XXX BIG NASTY HACK XXX FIXME at some point.
- ### when installing Bundle::CPANPLUS::Dependencies, we want to
- ### install all packages matching 'cpanplus' to be installed last,
- ### as all CPANPLUS' prereqs are being installed as well, but are
- ### being loaded for bootstrapping purposes. This means CPANPLUS
- ### can find them, but for example cpanplus::dist::build won't,
- ### which gets messy FAST. So, here we sort our prereqs only IF
- ### the parent module is Bundle::CPANPLUS::Dependencies.
- ### Really, we would wnat some sort of sorted prereq mechanism,
- ### but Bundle:: doesn't support it, and we flatten everything
- ### to a hash internally. A sorted hash *might* do the trick if
- ### we got a transparent implementation.. that would mean we would
- ### just have to remove the 'sort' here, and all will be well
- my @sorted_prereqs;
-
- ### use regex, could either be a module name, or a package name
- if( $self->module =~ /^Bundle(::|-)CPANPLUS(::|-)Dependencies/ ) {
- my (@first, @last);
- for my $mod ( sort keys %$prereqs ) {
- $mod =~ /CPANPLUS/
- ? push @last, $mod
- : push @first, $mod;
- }
- @sorted_prereqs = (@first, @last);
- } else {
- @sorted_prereqs = sort keys %$prereqs;
- }
-
- ### first, transfer this key/value pairing into a
- ### list of module objects + desired versions
- my @install_me;
-
- my $flag;
-
- for my $mod ( @sorted_prereqs ) {
- ( my $version = $prereqs->{$mod} ) =~ s#[^0-9\._]+##g;
-
- ### 'perl' is a special case, there's no mod object for it
- if( $mod eq PERL_CORE ) {
-
- unless( $cb->_vcmp( sprintf('v%vd',$^V), $version ) >= 0 ) {
- error(loc( "Module '%1' needs perl version '%2', but you ".
- "only have version '%3' -- can not proceed",
- $self->module, $version,
- $cb->_perl_version( perl => $^X ) ) );
- return;
- }
-
- next;
- }
-
- my $modobj = $cb->module_tree($mod);
-
- #### XXX we ignore the version, and just assume that the latest
- #### version from cpan will meet your requirements... dodgy =/
- unless( $modobj ) {
- # Check if it is a core module
- my $sub = CPANPLUS::Module->can(
- 'module_is_supplied_with_perl_core' );
- my $core = $sub->( $mod );
- unless ( defined $core ) {
- error( loc( "No such module '%1' found on CPAN", $mod ) );
- $flag++ unless $tolerant;
- next;
- }
- if ( $cb->_vcmp( $version, $core ) > 0 ) {
- error(loc( "Version of core module '%1' ('%2') is too low for ".
- "'%3' (needs '%4') -- carrying on but this may be a problem",
- $mod, $core,
- $self->module, $version ));
- }
- next;
- }
-
- ### it's not uptodate, we need to install it
- if( !$dist->prereq_satisfied(modobj => $modobj, version => $version)) {
- msg(loc("Module '%1' requires '%2' version '%3' to be installed ",
- $self->module, $modobj->module, $version), $verbose );
-
- push @install_me, [$modobj, $version];
-
- ### it's not an MM or Build format, that means it's a package
- ### manager... we'll need to install it as well, via the PM
- } elsif ( INSTALL_VIA_PACKAGE_MANAGER->($format) and
- !$modobj->package_is_perl_core and
- ($target ne TARGET_IGNORE)
- ) {
- msg(loc("Module '%1' depends on '%2', may need to build a '%3' ".
- "package for it as well", $self->module, $modobj->module,
- $format));
- push @install_me, [$modobj, $version];
- }
- }
-
-
-
- ### so you just want to ignore prereqs? ###
- if( $target eq TARGET_IGNORE ) {
-
- ### but you have modules you need to install
- if( @install_me ) {
- msg(loc("Ignoring prereqs, this may mean your install will fail"),
- $verbose);
- msg(loc("'%1' listed the following dependencies:", $self->module),
- $verbose);
-
- for my $aref (@install_me) {
- my ($mod,$version) = @$aref;
-
- my $str = sprintf "\t%-35s %8s\n", $mod->module, $version;
- msg($str,$verbose);
- }
-
- return;
-
- ### ok, no problem, you have all needed prereqs anyway
- } else {
- return 1;
- }
- }
-
- for my $aref (@install_me) {
- my($modobj,$version) = @$aref;
-
- ### another prereq may have already installed this one...
- ### so dont ask again if the module turns out to be uptodate
- ### see bug [#11840]
- ### if either force or prereq_build are given, the prereq
- ### should be built anyway
- next if (!$force and !$prereq_build) &&
- $dist->prereq_satisfied(modobj => $modobj, version => $version);
-
- ### either we're told to ignore the prereq,
- ### or the user wants us to ask him
- if( ( $conf->get_conf('prereqs') == PREREQ_ASK and not
- $cb->_callbacks->install_prerequisite->($self, $modobj)
- )
- ) {
- msg(loc("Will not install prerequisite '%1' -- Note " .
- "that the overall install may fail due to this",
- $modobj->module), $verbose);
- next;
- }
-
- ### value set and false -- means failure ###
- if( defined $modobj->status->installed
- && !$modobj->status->installed
- ) {
- error( loc( "Prerequisite '%1' failed to install before in " .
- "this session", $modobj->module ) );
- $flag++;
- last;
- }
-
- ### part of core?
- if( $modobj->package_is_perl_core ) {
- error(loc("Prerequisite '%1' is perl-core (%2) -- not ".
- "installing that. -- Note that the overall ".
- "install may fail due to this.",
- $modobj->module, $modobj->package ) );
- next;
- }
-
- ### circular dependency code ###
- my $pending = $cb->_status->pending_prereqs || {};
-
- ### recursive dependency ###
- if ( $pending->{ $modobj->module } ) {
- error( loc( "Recursive dependency detected (%1) -- skipping",
- $modobj->module ) );
- next;
- }
-
- ### register this dependency as pending ###
- $pending->{ $modobj->module } = $modobj;
- $cb->_status->pending_prereqs( $pending );
-
- ### call $modobj->install rather than doing
- ### CPANPLUS::Dist->new and the like ourselves,
- ### since ->install will take care of fetch &&
- ### extract as well
- my $pa = $dist->status->_prepare_args || {};
- my $ca = $dist->status->_create_args || {};
- my $ia = $dist->status->_install_args || {};
-
- unless( $modobj->install( %$pa, %$ca, %$ia,
- force => $force,
- verbose => $verbose,
- format => $format,
- target => $target )
- ) {
- error(loc("Failed to install '%1' as prerequisite " .
- "for '%2'", $modobj->module, $self->module ) );
- $flag++;
- }
-
- ### unregister the pending dependency ###
- $pending->{ $modobj->module } = 0;
- $cb->_status->pending_prereqs( $pending );
-
- last if $flag;
-
- ### don't want us to install? ###
- if( $target ne TARGET_INSTALL ) {
- my $dir = $modobj->status->extract
- or error(loc("No extraction dir for '%1' found ".
- "-- weird", $modobj->module));
-
- $modobj->add_to_includepath();
-
- next;
- }
- }
-
- ### reset the $prereqs iterator, in case we bailed out early ###
- keys %$prereqs;
-
- ### chdir back to where we started
- $cb->_chdir( dir => $original_wd );
-
- return 1 unless $flag;
- return;
-}
-
-1;
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Dist/Autobundle.pm b/cpan/CPANPLUS/lib/CPANPLUS/Dist/Autobundle.pm
deleted file mode 100644
index d5e45f3eca..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Dist/Autobundle.pm
+++ /dev/null
@@ -1,120 +0,0 @@
-package CPANPLUS::Dist::Autobundle;
-use deprecate;
-
-use strict;
-use warnings;
-use CPANPLUS::Error qw[error msg];
-use Params::Check qw[check];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-use base qw[CPANPLUS::Dist::Base];
-
-=head1 NAME
-
-CPANPLUS::Dist::Autobundle - distribution class for installation snapshots
-
-=head1 SYNOPSIS
-
- $modobj = $cb->parse_module( module => 'file://path/to/Snapshot_XXYY.pm' );
- $modobj->install;
-
-=head1 DESCRIPTION
-
-C<CPANPLUS::Dist::Autobundle> is a distribution class for installing installation
-snapshots as created by C<CPANPLUS>' C<autobundle> command.
-
-All modules as mentioned in the snapshot will be installed on your system.
-
-=cut
-
-sub init {
- my $dist = shift;
- my $status = $dist->status;
-
- $status->mk_accessors(
- qw[prepared created installed _prepare_args _create_args _install_args]
- );
-
- return 1;
-}
-
-sub prepare {
- my $dist = shift;
- my %args = @_;
-
- ### store the arguments, so ->install can use them in recursive loops ###
- $dist->status->_prepare_args( \%args );
-
- return $dist->status->prepared( 1 );
-}
-
-sub create {
- my $dist = shift;
- my $self = $dist->parent;
-
- ### we're also the cpan_dist, since we don't need to have anything
- ### prepared
- $dist = $self->status->dist_cpan if $self->status->dist_cpan;
- $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan;
-
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my( $force, $verbose, $prereq_target, $prereq_format, $prereq_build);
-
- my $args = do {
- local $Params::Check::ALLOW_UNKNOWN = 1;
- my $tmpl = {
- force => { default => $conf->get_conf('force'),
- store => \$force },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- prereq_target => { default => '', store => \$prereq_target },
-
- ### don't set the default prereq format to 'makemaker' -- wrong!
- prereq_format => { #default => $self->status->installer_type,
- default => '',
- store => \$prereq_format },
- prereq_build => { default => 0, store => \$prereq_build },
- };
-
- check( $tmpl, \%hash ) or return;
- };
-
- ### maybe we already ran a create on this object? ###
- return 1 if $dist->status->created && !$force;
-
- ### store the arguments, so ->install can use them in recursive loops ###
- $dist->status->_create_args( \%hash );
-
- msg(loc("Resolving prerequisites mentioned in the bundle"), $verbose);
-
- ### this will set the directory back to the start
- ### dir, so we must chdir /again/
- my $ok = $dist->_resolve_prereqs(
- format => $prereq_format,
- verbose => $verbose,
- prereqs => $self->status->prereqs,
- target => $prereq_target,
- force => $force,
- prereq_build => $prereq_build,
- );
-
- ### if all went well, mark it & return
- return $dist->status->created( $ok ? 1 : 0);
-}
-
-sub install {
- my $dist = shift;
- my %args = @_;
-
- ### store the arguments, so ->install can use them in recursive loops ###
- $dist->status->_install_args( \%args );
-
- return $dist->status->installed( 1 );
-}
-
-1;
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Dist/Base.pm b/cpan/CPANPLUS/lib/CPANPLUS/Dist/Base.pm
deleted file mode 100644
index 73736d9e4d..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Dist/Base.pm
+++ /dev/null
@@ -1,261 +0,0 @@
-package CPANPLUS::Dist::Base;
-use deprecate;
-
-use strict;
-
-use base qw[CPANPLUS::Dist];
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-=head1 NAME
-
-CPANPLUS::Dist::Base - Base class for custom distribution classes
-
-=head1 SYNOPSIS
-
- package CPANPLUS::Dist::MY_IMPLEMENTATION
-
- use base 'CPANPLUS::Dist::Base';
-
- sub prepare {
- my $dist = shift;
-
- ### do the 'standard' things
- $dist->SUPER::prepare( @_ ) or return;
-
- ### do MY_IMPLEMENTATION specific things
- ...
-
- ### don't forget to set the status!
- return $dist->status->prepared( $SUCCESS ? 1 : 0 );
- }
-
-
-=head1 DESCRIPTION
-
-CPANPLUS::Dist::Base functions as a base class for all custom
-distribution implementations. It does all the mundane work
-CPANPLUS would have done without a custom distribution, so you
-can override just the parts you need to make your own implementation
-work.
-
-=head1 FLOW
-
-Below is a brief outline when and in which order methods in this
-class are called:
-
- $Class->format_available; # can we use this class on this system?
-
- $dist->init; # set up custom accessors, etc
- $dist->prepare; # find/write meta information
- $dist->create; # write the distribution file
- $dist->install; # install the distribution file
-
- $dist->uninstall; # remove the distribution (OPTIONAL)
-
-=head1 METHODS
-
-=cut
-
-=head2 @subs = $Class->methods
-
-Returns a list of methods that this class implements that you can
-override.
-
-=cut
-
-sub methods {
- return qw[format_available init prepare create install uninstall]
-}
-
-=head2 $bool = $Class->format_available
-
-This method is called when someone requests a module to be installed
-via the superclass. This gives you the opportunity to check if all
-the needed requirements to build and install this distribution have
-been met.
-
-For example, you might need a command line program, or a certain perl
-module installed to do your job. Now is the time to check.
-
-Simply return true if the request can proceed and false if it can not.
-
-The C<CPANPLUS::Dist::Base> implementation always returns true.
-
-=cut
-
-sub format_available { return 1 }
-
-
-=head2 $bool = $dist->init
-
-This method is called just after the new dist object is set up and
-before the C<prepare> method is called. This is the time to set up
-the object so it can be used with your class.
-
-For example, you might want to add extra accessors to the C<status>
-object, which you might do as follows:
-
- $dist->status->mk_accessors( qw[my_implementation_accessor] );
-
-The C<status> object is implemented as an instance of the
-C<Object::Accessor> class. Please refer to its documentation for
-details.
-
-Return true if the initialization was successful, and false if it was
-not.
-
-The C<CPANPLUS::Dist::Base> implementation does not alter your object
-and always returns true.
-
-=cut
-
-sub init { return 1; }
-
-=head2 $bool = $dist->prepare
-
-This runs the preparation step of your distribution. This step is meant
-to set up the environment so the C<create> step can create the actual
-distribution(file).
-A C<prepare> call in the standard C<ExtUtils::MakeMaker> distribution
-would, for example, run C<perl Makefile.PL> to find the dependencies
-for a distribution. For a C<debian> distribution, this is where you
-would write all the metafiles required for the C<dpkg-*> tools.
-
-The C<CPANPLUS::Dist::Base> implementation simply calls the underlying
-distribution class (Typically C<CPANPLUS::Dist::MM> or
-C<CPANPLUS::Dist::Build>).
-
-Sets C<< $dist->status->prepared >> to the return value of this function.
-If you override this method, you should make sure to set this value.
-
-=cut
-
-sub prepare {
- ### just in case you already did a create call for this module object
- ### just via a different dist object
- my $dist = shift;
- my $self = $dist->parent;
- my $dist_cpan = $self->status->dist_cpan;
-
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
-
- $dist->status->prepared( $dist_cpan->prepare( @_ ) );
-}
-
-=head2 $bool = $dist->create
-
-This runs the creation step of your distribution. This step is meant
-to follow up on the C<prepare> call, that set up your environment so
-the C<create> step can create the actual distribution(file).
-A C<create> call in the standard C<ExtUtils::MakeMaker> distribution
-would, for example, run C<make> and C<make test> to build and test
-a distribution. For a C<debian> distribution, this is where you
-would create the actual C<.deb> file using C<dpkg>.
-
-The C<CPANPLUS::Dist::Base> implementation simply calls the underlying
-distribution class (Typically C<CPANPLUS::Dist::MM> or
-C<CPANPLUS::Dist::Build>).
-
-Sets C<< $dist->status->dist >> to the location of the created
-distribution.
-If you override this method, you should make sure to set this value.
-
-Sets C<< $dist->status->created >> to the return value of this function.
-If you override this method, you should make sure to set this value.
-
-=cut
-
-sub create {
- ### just in case you already did a create call for this module object
- ### just via a different dist object
- my $dist = shift;
- my $self = $dist->parent;
- my $dist_cpan = $self->status->dist_cpan;
- $dist = $self->status->dist if $self->status->dist;
- $self->status->dist( $dist ) unless $self->status->dist;
-
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
- my $format = ref $dist;
-
- ### make sure to set this variable, if the caller hasn't yet
- ### just so we have some clue where the dist left off.
- $dist->status->dist( $dist_cpan->status->distdir )
- unless defined $dist->status->dist;
-
- $dist->status->created( $dist_cpan->create(prereq_format => $format, @_) );
-}
-
-=head2 $bool = $dist->install
-
-This runs the install step of your distribution. This step is meant
-to follow up on the C<create> call, which prepared a distribution(file)
-to install.
-A C<create> call in the standard C<ExtUtils::MakeMaker> distribution
-would, for example, run C<make install> to copy the distribution files
-to their final destination. For a C<debian> distribution, this is where
-you would run C<dpkg --install> on the created C<.deb> file.
-
-The C<CPANPLUS::Dist::Base> implementation simply calls the underlying
-distribution class (Typically C<CPANPLUS::Dist::MM> or
-C<CPANPLUS::Dist::Build>).
-
-Sets C<< $dist->status->installed >> to the return value of this function.
-If you override this method, you should make sure to set this value.
-
-=cut
-
-sub install {
- ### just in case you already did a create call for this module object
- ### just via a different dist object
- my $dist = shift;
- my $self = $dist->parent;
- my $dist_cpan = $self->status->dist_cpan;
-
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
-
- $dist->status->installed( $dist_cpan->install( @_ ) );
-}
-
-=head2 $bool = $dist->uninstall
-
-This runs the uninstall step of your distribution. This step is meant
-to remove the distribution from the file system.
-A C<uninstall> call in the standard C<ExtUtils::MakeMaker> distribution
-would, for example, run C<make uninstall> to remove the distribution
-files the file system. For a C<debian> distribution, this is where you
-would run C<dpkg --uninstall PACKAGE>.
-
-The C<CPANPLUS::Dist::Base> implementation simply calls the underlying
-distribution class (Typically C<CPANPLUS::Dist::MM> or
-C<CPANPLUS::Dist::Build>).
-
-Sets C<< $dist->status->uninstalled >> to the return value of this function.
-If you override this method, you should make sure to set this value.
-
-=cut
-
-sub uninstall {
- ### just in case you already did a create call for this module object
- ### just via a different dist object
- my $dist = shift;
- my $self = $dist->parent;
- my $dist_cpan = $self->status->dist_cpan;
-
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
-
- $dist->status->uninstalled( $dist_cpan->uninstall( @_ ) );
-}
-
-1;
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Dist/MM.pm b/cpan/CPANPLUS/lib/CPANPLUS/Dist/MM.pm
deleted file mode 100644
index 35f31b7b08..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Dist/MM.pm
+++ /dev/null
@@ -1,1044 +0,0 @@
-package CPANPLUS::Dist::MM;
-use deprecate;
-
-use strict;
-use warnings;
-use vars qw[@ISA $STATUS $VERSION];
-use base 'CPANPLUS::Dist::Base';
-$VERSION = "0.9135";
-
-use CPANPLUS::Internals::Constants;
-use CPANPLUS::Internals::Constants::Report;
-use CPANPLUS::Error;
-use FileHandle;
-use Cwd;
-
-use IPC::Cmd qw[run];
-use Params::Check qw[check];
-use File::Basename qw[dirname];
-use Module::Load::Conditional qw[can_load check_install];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-local $Params::Check::VERBOSE = 1;
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Dist::MM - distribution class for MakeMaker related modules
-
-=head1 SYNOPSIS
-
- $mm = CPANPLUS::Dist::MM->new( module => $modobj );
-
- $mm->create; # runs make && make test
- $mm->install; # runs make install
-
-
-=head1 DESCRIPTION
-
-C<CPANPLUS::Dist::MM> is a distribution class for MakeMaker related
-modules.
-Using this package, you can create, install and uninstall perl
-modules. It inherits from C<CPANPLUS::Dist>.
-
-=head1 ACCESSORS
-
-=over 4
-
-=item parent()
-
-Returns the C<CPANPLUS::Module> object that parented this object.
-
-=item status()
-
-Returns the C<Object::Accessor> object that keeps the status for
-this module.
-
-=back
-
-=head1 STATUS ACCESSORS
-
-All accessors can be accessed as follows:
- $mm->status->ACCESSOR
-
-=over 4
-
-=item makefile ()
-
-Location of the Makefile (or Build file).
-Set to 0 explicitly if something went wrong.
-
-=item make ()
-
-BOOL indicating if the C<make> (or C<Build>) command was successful.
-
-=item test ()
-
-BOOL indicating if the C<make test> (or C<Build test>) command was
-successful.
-
-=item prepared ()
-
-BOOL indicating if the C<prepare> call exited successfully
-This gets set after C<perl Makefile.PL>
-
-=item distdir ()
-
-Full path to the directory in which the C<prepare> call took place,
-set after a call to C<prepare>.
-
-=item created ()
-
-BOOL indicating if the C<create> call exited successfully. This gets
-set after C<make> and C<make test>.
-
-=item installed ()
-
-BOOL indicating if the module was installed. This gets set after
-C<make install> (or C<Build install>) exits successfully.
-
-=item uninstalled ()
-
-BOOL indicating if the module was uninstalled properly.
-
-=item _create_args ()
-
-Storage of the arguments passed to C<create> for this object. Used
-for recursive calls when satisfying prerequisites.
-
-=item _install_args ()
-
-Storage of the arguments passed to C<install> for this object. Used
-for recursive calls when satisfying prerequisites.
-
-=back
-
-=cut
-
-=head1 METHODS
-
-=head2 $bool = $dist->format_available();
-
-Returns a boolean indicating whether or not you can use this package
-to create and install modules in your environment.
-
-=cut
-
-### check if the format is available ###
-sub format_available {
- my $dist = shift;
-
- ### we might be called as $class->format_available =/
- require CPANPLUS::Internals;
- my $cb = CPANPLUS::Internals->_retrieve_id(
- CPANPLUS::Internals->_last_id );
- my $conf = $cb->configure_object;
-
- my $mod = "ExtUtils::MakeMaker";
- unless( can_load( modules => { $mod => 0.0 } ) ) {
- error( loc( "You do not have '%1' -- '%2' not available",
- $mod, __PACKAGE__ ) );
- return;
- }
-
- for my $pgm ( qw[make] ) {
- unless( $conf->get_program( $pgm ) ) {
- error(loc(
- "You do not have '%1' in your path -- '%2' not available\n" .
- "Please check your config entry for '%1'",
- $pgm, __PACKAGE__ , $pgm
- ));
- return;
- }
- }
-
- return 1;
-}
-
-=pod
-
-=head2 $bool = $dist->init();
-
-Sets up the C<CPANPLUS::Dist::MM> object for use.
-Effectively creates all the needed status accessors.
-
-Called automatically whenever you create a new C<CPANPLUS::Dist> object.
-
-=cut
-
-sub init {
- my $dist = shift;
- my $status = $dist->status;
-
- $status->mk_accessors(qw[makefile make test created installed uninstalled
- bin_make _prepare_args _create_args _install_args]
- );
-
- return 1;
-}
-
-=pod
-
-=head2 $bool = $dist->prepare([perl => '/path/to/perl', makemakerflags => 'EXTRA=FLAGS', force => BOOL, verbose => BOOL])
-
-C<prepare> preps a distribution for installation. This means it will
-run C<perl Makefile.PL> and determine what prerequisites this distribution
-declared.
-
-If you set C<force> to true, it will go over all the stages of the
-C<prepare> process again, ignoring any previously cached results.
-
-When running C<perl Makefile.PL>, the environment variable
-C<PERL5_CPANPLUS_IS_EXECUTING> will be set to the full path of the
-C<Makefile.PL> that is being executed. This enables any code inside
-the C<Makefile.PL> to know that it is being installed via CPANPLUS.
-
-Returns true on success and false on failure.
-
-You may then call C<< $dist->create >> on the object to create the
-installable files.
-
-=cut
-
-sub prepare {
- ### just in case you already did a create call for this module object
- ### just via a different dist object
- my $dist = shift;
- my $self = $dist->parent;
-
- ### we're also the cpan_dist, since we don't need to have anything
- ### prepared
- $dist = $self->status->dist_cpan if $self->status->dist_cpan;
- $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan;
-
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my $dir;
- unless( $dir = $self->status->extract ) {
- error( loc( "No dir found to operate on!" ) );
- return;
- }
-
- my $args;
- my( $force, $verbose, $perl, $mmflags, $prereq_target, $prereq_format,
- $prereq_build );
- { local $Params::Check::ALLOW_UNKNOWN = 1;
- my $tmpl = {
- perl => { default => $^X, store => \$perl },
- makemakerflags => { default =>
- $conf->get_conf('makemakerflags') || '',
- store => \$mmflags },
- force => { default => $conf->get_conf('force'),
- store => \$force },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- prereq_target => { default => '', store => \$prereq_target },
- prereq_format => { default => '',
- store => \$prereq_format },
- prereq_build => { default => 0, store => \$prereq_build },
- };
-
- $args = check( $tmpl, \%hash ) or return;
- }
-
- my @mmflags = $dist->_split_like_shell( $mmflags );
-
- ### maybe we already ran a create on this object? ###
- return 1 if $dist->status->prepared && !$force;
-
- ### store the arguments, so ->install can use them in recursive loops ###
- $dist->status->_prepare_args( $args );
-
- ### chdir to work directory ###
- my $orig = cwd();
- unless( $cb->_chdir( dir => $dir ) ) {
- error( loc( "Could not chdir to build directory '%1'", $dir ) );
- return;
- }
-
- my $fail;
- RUN: {
-
- ### we resolve 'configure requires' here, so we can run the 'perl
- ### Makefile.PL' command
- ### XXX for tests: mock f_c_r to something that *can* resolve and
- ### something that *doesn't* resolve. Check the error log for ok
- ### on this step or failure
- ### XXX make a separate tarball to test for this scenario: simply
- ### containing a makefile.pl/build.pl for test purposes?
- { my $configure_requires = $dist->find_configure_requires;
- my $ok = $dist->_resolve_prereqs(
- format => $prereq_format,
- verbose => $verbose,
- prereqs => $configure_requires,
- target => $prereq_target,
- force => $force,
- prereq_build => $prereq_build,
- );
-
- unless( $ok ) {
-
- #### use $dist->flush to reset the cache ###
- error( loc( "Unable to satisfy '%1' for '%2' " .
- "-- aborting install",
- 'configure_requires', $self->module ) );
- $dist->status->prepared(0);
- $fail++;
- last RUN;
- }
- ### end of prereq resolving ###
- }
-
-
-
- ### don't run 'perl makefile.pl' again if there's a makefile already
- if( -e MAKEFILE->() && (-M MAKEFILE->() < -M $dir) && !$force ) {
- msg(loc("'%1' already exists, not running '%2 %3' again ".
- " unless you force",
- MAKEFILE->(), $perl, MAKEFILE_PL->() ), $verbose );
-
- } else {
- unless( -e MAKEFILE_PL->() ) {
- msg(loc("No '%1' found - attempting to generate one",
- MAKEFILE_PL->() ), $verbose );
-
- $dist->write_makefile_pl(
- verbose => $verbose,
- force => $force
- );
-
- ### bail out if there's no makefile.pl ###
- unless( -e MAKEFILE_PL->() ) {
- error( loc( "Could not find '%1' - cannot continue",
- MAKEFILE_PL->() ) );
-
- ### mark that we screwed up ###
- $dist->status->makefile(0);
- $fail++; last RUN;
- }
- }
-
- ### you can turn off running this verbose by changing
- ### the config setting below, although it is really not
- ### recommended
- my $run_verbose = $verbose ||
- $conf->get_conf('allow_build_interactivity') ||
- 0;
-
- ### this makes MakeMaker use defaults if possible, according
- ### to schwern. See ticket 8047 for details.
- local $ENV{PERL_MM_USE_DEFAULT} = 1 unless $run_verbose;
-
- ### turn off our PERL5OPT so no modules from CPANPLUS::inc get
- ### included in the makefile.pl -- it should build without
- ### also, modules that run in taint mode break if we leave
- ### our code ref in perl5opt
- ### XXX we've removed the ENV settings from cp::inc, so only need
- ### to reset the @INC
- #local $ENV{PERL5OPT} = CPANPLUS::inc->original_perl5opt || '';
-
- ### make sure it's a string, so that mmflags that have more than
- ### one key value pair are passed as is, rather than as:
- ### perl Makefile.PL "key=val key=>val"
-
-
- #### XXX this needs to be the absolute path to the Makefile.PL
- ### since cpanp-run-perl uses 'do' to execute the file, and do()
- ### checks your @INC.. so, if there's _another_ makefile.pl in
- ### your @INC, it will execute that one...
- my $makefile_pl = MAKEFILE_PL->( $cb->_safe_path( path => $dir ) );
-
- ### setting autoflush to true fixes issue from rt #8047
- ### XXX this means that we need to keep the path to CPANPLUS
- ### in @INC, stopping us from resolving dependencies on CPANPLUS
- ### at bootstrap time properly.
-
- my @run_perl = ( '-e', PERL_WRAPPER );
- my $cmd = [$perl, @run_perl, $makefile_pl, @mmflags];
-
- ### set ENV var to tell underlying code this is what we're
- ### executing.
- my $captured;
- my $rv = do {
- my $env = ENV_CPANPLUS_IS_EXECUTING;
- local $ENV{$env} = $makefile_pl;
- scalar run( command => $cmd,
- buffer => \$captured,
- verbose => $run_verbose, # may be interactive
- );
- };
-
- unless( $rv ) {
- error( loc( "Could not run '%1 %2': %3 -- cannot continue",
- $perl, MAKEFILE_PL->(), $captured ) );
-
- $dist->status->makefile(0);
- $fail++; last RUN;
- }
-
- ### put the output on the stack, don't print it
- msg( $captured, 0 );
- }
-
- ### so, nasty feature in Module::Build, that when a Makefile.PL
- ### is a disguised Build.PL, it generates a Build file, not a
- ### Makefile. this breaks everything :( see rt bug #19741
- if( not -e MAKEFILE->( $dir ) and -e BUILD_PL->( $dir ) ) {
- error(loc(
- "We just ran '%1' without errors, but no '%2' is ".
- "present. However, there is a '%3' file, so this may ".
- "be related to bug #19741 in %4, which describes a ".
- "fake '%5' which generates a '%6' file instead of a '%7'. ".
- "You could try to work around this issue by setting '%8' ".
- "to false and trying again. This will attempt to use the ".
- "'%9' instead.",
- "$^X ".MAKEFILE_PL->(), MAKEFILE->(), BUILD_PL->(),
- 'Module::Build', MAKEFILE_PL->(), 'Build', MAKEFILE->(),
- 'prefer_makefile', BUILD_PL->()
- ));
-
- $fail++, last RUN;
- }
-
- ### if we got here, we managed to make a 'makefile' ###
- $dist->status->makefile( MAKEFILE->($dir) );
-
- ### Make (haha) sure that Makefile.PL is older than the Makefile
- ### we just generated.
- eval {
- my $makestat = ( stat MAKEFILE->( $dir ) )[9];
- my $mplstat = ( stat MAKEFILE_PL->( $cb->_safe_path( path => $dir ) ) )[9];
- if ( $makestat < $mplstat ) {
- my $ftime = $makestat - 60;
- utime $ftime, $ftime, MAKEFILE_PL->( $cb->_safe_path( path => $dir ) );
- }
- };
-
- ### start resolving prereqs ###
- my $prereqs = $self->status->prereqs;
-
- ### a hashref of prereqs on success, undef on failure ###
- $prereqs ||= $dist->_find_prereqs(
- verbose => $verbose,
- file => $dist->status->makefile
- );
-
- unless( $prereqs ) {
- error( loc( "Unable to scan '%1' for prereqs",
- $dist->status->makefile ) );
-
- $fail++; last RUN;
- }
- }
-
- unless( $cb->_chdir( dir => $orig ) ) {
- error( loc( "Could not chdir back to start dir '%1'", $orig ) );
- }
-
- ### save where we wrote this stuff -- same as extract dir in normal
- ### installer circumstances
- $dist->status->distdir( $self->status->extract );
-
- return $dist->status->prepared( $fail ? 0 : 1);
-}
-
-=pod
-
-=head2 $href = $dist->_find_prereqs( file => '/path/to/Makefile', [verbose => BOOL])
-
-Parses a C<Makefile> for C<PREREQ_PM> entries and distills from that
-any prerequisites mentioned in the C<Makefile>
-
-Returns a hash with module-version pairs on success and false on
-failure.
-
-=cut
-
-sub _find_prereqs {
- my $dist = shift;
- my $self = $dist->parent;
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my ($verbose, $file);
- my $tmpl = {
- verbose => { default => $conf->get_conf('verbose'), store => \$verbose },
- file => { required => 1, allow => FILE_READABLE, store => \$file },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- ### see if we got prereqs from MYMETA
- my $prereqs = $dist->find_mymeta_requires();
-
- ### we found some prereqs, we'll trust MYMETA
- ### but we do need to run it through the callback
- return $cb->_callbacks->filter_prereqs->( $cb, $prereqs ) if keys %$prereqs;
-
- my $fh = FileHandle->new();
- unless( $fh->open( $file ) ) {
- error( loc( "Cannot open '%1': %2", $file, $! ) );
- return;
- }
-
- my %p;
- while( local $_ = <$fh> ) {
- my ($found) = m|^[\#]\s+PREREQ_PM\s+=>\s+(.+)|;
-
- next unless $found;
-
- while( $found =~ m/(?:\s)([\w\:]+)=>(?:q\[(.*?)\],?|undef)/g ) {
- if( defined $p{$1} ) {
- my $ver = $cb->_version_to_number(version => $2);
- $p{$1} = $ver
- if $cb->_vcmp( $ver, $p{$1} ) > 0;
- }
- else {
- $p{$1} = $cb->_version_to_number(version => $2);
- }
- }
- last;
- }
-
- my $href = $cb->_callbacks->filter_prereqs->( $cb, \%p );
-
- $self->status->prereqs( $href );
-
- ### just to make sure it's not the same reference ###
- return { %$href };
-}
-
-=pod
-
-=head2 $bool = $dist->create([perl => '/path/to/perl', make => '/path/to/make', makeflags => 'EXTRA=FLAGS', prereq_target => TARGET, skiptest => BOOL, force => BOOL, verbose => BOOL])
-
-C<create> creates the files necessary for installation. This means
-it will run C<make> and C<make test>. This will also scan for and
-attempt to satisfy any prerequisites the module may have.
-
-If you set C<skiptest> to true, it will skip the C<make test> stage.
-If you set C<force> to true, it will go over all the stages of the
-C<make> process again, ignoring any previously cached results. It
-will also ignore a bad return value from C<make test> and still allow
-the operation to return true.
-
-Returns true on success and false on failure.
-
-You may then call C<< $dist->install >> on the object to actually
-install it.
-
-=cut
-
-sub create {
- ### just in case you already did a create call for this module object
- ### just via a different dist object
- my $dist = shift;
- my $self = $dist->parent;
-
- ### we're also the cpan_dist, since we don't need to have anything
- ### prepared
- $dist = $self->status->dist_cpan if $self->status->dist_cpan;
- $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan;
-
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my $dir;
- unless( $dir = $self->status->extract ) {
- error( loc( "No dir found to operate on!" ) );
- return;
- }
-
- my $args;
- my( $force, $verbose, $make, $makeflags, $skiptest, $prereq_target, $perl,
- @mmflags, $prereq_format, $prereq_build);
- { local $Params::Check::ALLOW_UNKNOWN = 1;
- my $tmpl = {
- perl => { default => $^X, store => \$perl },
- force => { default => $conf->get_conf('force'),
- store => \$force },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- make => { default => $conf->get_program('make'),
- store => \$make },
- makeflags => { default => $conf->get_conf('makeflags'),
- store => \$makeflags },
- skiptest => { default => $conf->get_conf('skiptest'),
- store => \$skiptest },
- prereq_target => { default => '', store => \$prereq_target },
- ### don't set the default prereq format to 'makemaker' -- wrong!
- prereq_format => { #default => $self->status->installer_type,
- default => '',
- store => \$prereq_format },
- prereq_build => { default => 0, store => \$prereq_build },
- };
-
- $args = check( $tmpl, \%hash ) or return;
- }
-
- my @makeflags = $dist->_split_like_shell( $makeflags );
-
- ### maybe we already ran a create on this object?
- ### make sure we add to include path again, just in case we came from
- ### ->save_state, at which point we need to restore @INC/$PERL5LIB
- if( $dist->status->created && !$force ) {
- $self->add_to_includepath;
- return 1;
- }
-
- ### store the arguments, so ->install can use them in recursive loops ###
- $dist->status->_create_args( $args );
-
- unless( $dist->status->prepared ) {
- error( loc( "You have not successfully prepared a '%2' distribution ".
- "yet -- cannot create yet", __PACKAGE__ ) );
- return;
- }
-
-
- ### chdir to work directory ###
- my $orig = cwd();
- unless( $cb->_chdir( dir => $dir ) ) {
- error( loc( "Could not chdir to build directory '%1'", $dir ) );
- return;
- }
-
- my $fail; my $prereq_fail; my $test_fail;
- my $status = { };
- RUN: {
- ### this will set the directory back to the start
- ### dir, so we must chdir /again/
- my $ok = $dist->_resolve_prereqs(
- format => $prereq_format,
- verbose => $verbose,
- prereqs => $self->status->prereqs,
- target => $prereq_target,
- force => $force,
- prereq_build => $prereq_build,
- );
-
- unless( $cb->_chdir( dir => $dir ) ) {
- error( loc( "Could not chdir to build directory '%1'", $dir ) );
- return;
- }
-
- unless( $ok ) {
-
- #### use $dist->flush to reset the cache ###
- error( loc( "Unable to satisfy prerequisites for '%1' " .
- "-- aborting install", $self->module ) );
- $dist->status->make(0);
- $fail++; $prereq_fail++;
- last RUN;
- }
- ### end of prereq resolving ###
-
- my $captured;
-
- ### 'make' section ###
- if( -d BLIB->($dir) && (-M BLIB->($dir) < -M $dir) && !$force ) {
- msg(loc("Already ran '%1' for this module [%2] -- " .
- "not running again unless you force",
- $make, $self->module ), $verbose );
- } else {
- unless(scalar run( command => [$make, @makeflags],
- buffer => \$captured,
- verbose => $verbose )
- ) {
- error( loc( "MAKE failed: %1 %2", $!, $captured ) );
- if ( $conf->get_conf('cpantest') ) {
- $status->{stage} = 'build';
- $status->{capture} = $captured;
- }
- $dist->status->make(0);
- $fail++; last RUN;
- }
-
- ### put the output on the stack, don't print it
- msg( $captured, 0 );
-
- $dist->status->make(1);
-
- ### add this directory to your lib ###
- $self->add_to_includepath();
-
- ### dont bail out here, there's a conditional later on
- #last RUN if $skiptest;
- }
-
- ### 'make test' section ###
- unless( $skiptest ) {
-
- ### turn off our PERL5OPT so no modules from CPANPLUS::inc get
- ### included in make test -- it should build without
- ### also, modules that run in taint mode break if we leave
- ### our code ref in perl5opt
- ### XXX CPANPLUS::inc functionality is now obsolete.
- #local $ENV{PERL5OPT} = CPANPLUS::inc->original_perl5opt || '';
-
- ### you can turn off running this verbose by changing
- ### the config setting below, although it is really not
- ### recommended
- my $run_verbose =
- $verbose ||
- $conf->get_conf('allow_build_interactivity') ||
- 0;
-
- ### XXX need to add makeflags here too?
- ### yes, but they should really be split out -- see bug #4143
- if( scalar run(
- command => [$make, 'test', @makeflags],
- buffer => \$captured,
- verbose => $run_verbose,
- ) ) {
- ### tests might pass because it doesn't have any tests defined
- ### log this occasion non-verbosely, so our test reporter can
- ### pick up on this
- if ( NO_TESTS_DEFINED->( $captured ) ) {
- msg( NO_TESTS_DEFINED->( $captured ), 0 )
- } else {
- msg( loc( "MAKE TEST passed: %1", $captured ), 0 );
- }
-
- if ( $conf->get_conf('cpantest') ) {
- $status->{stage} = 'test';
- $status->{capture} = $captured;
- }
-
- $dist->status->test(1);
- } else {
- error( loc( "MAKE TEST failed: %1", $captured ), ( $run_verbose ? 0 : 1 ) );
-
- if ( $conf->get_conf('cpantest') ) {
- $status->{stage} = 'test';
- $status->{capture} = $captured;
- }
-
- ### send out error report here? or do so at a higher level?
- ### --higher level --kane.
- $dist->status->test(0);
-
- ### mark specifically *test* failure.. so we dont
- ### send success on force...
- $test_fail++;
-
- if( !$force and !$cb->_callbacks->proceed_on_test_failure->(
- $self, $captured )
- ) {
- $fail++; last RUN;
- }
- }
- }
- } #</RUN>
-
- unless( $cb->_chdir( dir => $orig ) ) {
- error( loc( "Could not chdir back to start dir '%1'", $orig ) );
- }
-
- ### TODO: Add $stage to _send_report()
- ### send out test report?
- ### only do so if the failure is this module, not its prereq
- if( $conf->get_conf('cpantest') and not $prereq_fail) {
- $cb->_send_report(
- module => $self,
- failed => $test_fail || $fail,
- buffer => CPANPLUS::Error->stack_as_string,
- status => $status,
- verbose => $verbose,
- force => $force,
- ) or error(loc("Failed to send test report for '%1'",
- $self->module ) );
- }
-
- return $dist->status->created( $fail ? 0 : 1);
-}
-
-=pod
-
-=head2 $bool = $dist->install([make => '/path/to/make', makemakerflags => 'EXTRA=FLAGS', force => BOOL, verbose => BOOL])
-
-C<install> runs the following command:
- make install
-
-Returns true on success, false on failure.
-
-=cut
-
-sub install {
-
- ### just in case you did the create with ANOTHER dist object linked
- ### to the same module object
- my $dist = shift();
- my $self = $dist->parent;
- $dist = $self->status->dist_cpan if $self->status->dist_cpan;
-
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
-
- unless( $dist->status->created ) {
- error(loc("You have not successfully created a '%2' distribution yet " .
- "-- cannot install yet", __PACKAGE__ ));
- return;
- }
-
- my $dir;
- unless( $dir = $self->status->extract ) {
- error( loc( "No dir found to operate on!" ) );
- return;
- }
-
- my $args;
- my($force,$verbose,$make,$makeflags);
- { local $Params::Check::ALLOW_UNKNOWN = 1;
- my $tmpl = {
- force => { default => $conf->get_conf('force'),
- store => \$force },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- make => { default => $conf->get_program('make'),
- store => \$make },
- makeflags => { default => $conf->get_conf('makeflags'),
- store => \$makeflags },
- };
-
- $args = check( $tmpl, \%hash ) or return;
- }
-
- ### value set and false -- means failure ###
- if( defined $self->status->installed &&
- !$self->status->installed && !$force
- ) {
- error( loc( "Module '%1' has failed to install before this session " .
- "-- aborting install", $self->module ) );
- return;
- }
-
- my @makeflags = $dist->_split_like_shell( $makeflags );
-
- $dist->status->_install_args( $args );
-
- my $orig = cwd();
- unless( $cb->_chdir( dir => $dir ) ) {
- error( loc( "Could not chdir to build directory '%1'", $dir ) );
- return;
- }
-
- my $fail; my $captured;
-
- ### 'make install' section ###
- ### XXX need makeflags here too?
- ### yes, but they should really be split out.. see bug #4143
- my $cmd = [$make, 'install', @makeflags];
- my $sudo = $conf->get_program('sudo');
- unshift @$cmd, $sudo if $sudo and $>;
-
- $cb->flush('lib');
- unless(scalar run( command => $cmd,
- verbose => $verbose,
- buffer => \$captured,
- ) ) {
- error( loc( "MAKE INSTALL failed: %1 %2", $!, $captured ) );
- $fail++;
- }
-
- ### put the output on the stack, don't print it
- msg( $captured, 0 );
-
- unless( $cb->_chdir( dir => $orig ) ) {
- error( loc( "Could not chdir back to start dir '%1'", $orig ) );
- }
-
- return $dist->status->installed( $fail ? 0 : 1 );
-
-}
-
-=pod
-
-=head2 $bool = $dist->write_makefile_pl([force => BOOL, verbose => BOOL])
-
-This routine can write a C<Makefile.PL> from the information in a
-module object. It is used to write a C<Makefile.PL> when the original
-author forgot it (!!).
-
-Returns 1 on success and false on failure.
-
-The file gets written to the directory the module's been extracted
-to.
-
-=cut
-
-sub write_makefile_pl {
- ### just in case you already did a call for this module object
- ### just via a different dist object
- my $dist = shift;
- my $self = $dist->parent;
- $dist = $self->status->dist_cpan if $self->status->dist_cpan;
- $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan;
-
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my $dir;
- unless( $dir = $self->status->extract ) {
- error( loc( "No dir found to operate on!" ) );
- return;
- }
-
- my ($force, $verbose);
- my $tmpl = {
- force => { default => $conf->get_conf('force'),
- store => \$force },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- my $file = MAKEFILE_PL->($dir);
- if( -s $file && !$force ) {
- msg(loc("Already created '%1' - not doing so again without force",
- $file ), $verbose );
- return 1;
- }
-
- ### due to a bug with AS perl 5.8.4 built 810 (and maybe others)
- ### opening files with content in them already does nasty things;
- ### seek to pos 0 and then print, but not truncating the file
- ### bug reported to activestate on 19 sep 2004:
- ### http://bugs.activestate.com/show_bug.cgi?id=34051
- unlink $file if $force;
-
- my $fh = new FileHandle;
- unless( $fh->open( ">$file" ) ) {
- error( loc( "Could not create file '%1': %2", $file, $! ) );
- return;
- }
-
- my $mf = MAKEFILE_PL->();
- my $name = $self->module;
- my $version = $self->version;
- my $author = $self->author->author;
- my $href = $self->status->prereqs;
- my $prereqs = join ",\n", map {
- (' ' x 25) . "'$_'\t=> '$href->{$_}'"
- } keys %$href;
- $prereqs ||= ''; # just in case there are none;
-
- print $fh qq|
- ### Auto-generated $mf by CPANPLUS ###
-
- use ExtUtils::MakeMaker;
-
- WriteMakefile(
- NAME => '$name',
- VERSION => '$version',
- AUTHOR => '$author',
- PREREQ_PM => {
-$prereqs
- },
- );
- \n|;
-
- $fh->close;
- return 1;
-}
-
-sub dist_dir {
- ### just in case you already did a call for this module object
- ### just via a different dist object
- my $dist = shift;
- my $self = $dist->parent;
- $dist = $self->status->dist_cpan if $self->status->dist_cpan;
- $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan;
-
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my $make; my $verbose;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
- my $tmpl = {
- make => { default => $conf->get_program('make'),
- store => \$make },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- };
-
- check( $tmpl, \%hash ) or return;
- }
-
-
- my $dir;
- unless( $dir = $self->status->extract ) {
- error( loc( "No dir found to operate on!" ) );
- return;
- }
-
- ### chdir to work directory ###
- my $orig = cwd();
- unless( $cb->_chdir( dir => $dir ) ) {
- error( loc( "Could not chdir to build directory '%1'", $dir ) );
- return;
- }
-
- my $fail; my $distdir;
- TRY: {
- $dist->prepare( @_ ) or (++$fail, last TRY);
-
-
- my $captured;
- unless(scalar run( command => [$make, 'distdir'],
- buffer => \$captured,
- verbose => $verbose )
- ) {
- error( loc( "MAKE DISTDIR failed: %1 %2", $!, $captured ) );
- ++$fail, last TRY;
- }
-
- ### /path/to/Foo-Bar-1.2/Foo-Bar-1.2
- $distdir = File::Spec->catdir( $dir, $self->package_name . '-' .
- $self->package_version );
-
- unless( -d $distdir ) {
- error(loc("Do not know where '%1' got created", 'distdir'));
- ++$fail, last TRY;
- }
- }
-
- unless( $cb->_chdir( dir => $orig ) ) {
- error( loc( "Could not chdir to start directory '%1'", $orig ) );
- return;
- }
-
- return if $fail;
- return $distdir;
-}
-
-sub _split_like_shell {
- my ($self, $string) = @_;
-
- return () unless defined($string);
- return @$string if ref $string eq 'ARRAY';
- $string =~ s/^\s+|\s+$//g;
- return () unless length($string);
-
- require Text::ParseWords;
- return Text::ParseWords::shellwords($string);
-}
-
-1;
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Dist/Sample.pm b/cpan/CPANPLUS/lib/CPANPLUS/Dist/Sample.pm
deleted file mode 100644
index e03d66f983..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Dist/Sample.pm
+++ /dev/null
@@ -1,20 +0,0 @@
-package CPANPLUS::Dist::Sample;
-use deprecate;
-
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Dist::Sample -- Sample code to create your own Dist::* plugin
-
-=head1 Description.
-
-This document is B<Obsolete>. Please read the documentation and code
-in C<CPANPLUS::Dist::Base>.
-
-=cut
-
-1;
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Error.pm b/cpan/CPANPLUS/lib/CPANPLUS/Error.pm
deleted file mode 100644
index 0df6f33468..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Error.pm
+++ /dev/null
@@ -1,210 +0,0 @@
-package CPANPLUS::Error;
-use deprecate;
-
-use strict;
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-use Log::Message private => 0;;
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Error - error handling for CPANPLUS
-
-=head1 SYNOPSIS
-
- use CPANPLUS::Error qw[cp_msg cp_error];
-
-=head1 DESCRIPTION
-
-This module provides the error handling code for the CPANPLUS
-libraries, and is mainly intended for internal use.
-
-=head1 FUNCTIONS
-
-=head2 cp_msg("message string" [,VERBOSE])
-
-Records a message on the stack, and prints it to C<STDOUT> (or actually
-C<$MSG_FH>, see the C<GLOBAL VARIABLES> section below), if the
-C<VERBOSE> option is true.
-The C<VERBOSE> option defaults to false.
-
-=head2 msg()
-
-An alias for C<cp_msg>.
-
-=head2 cp_error("error string" [,VERBOSE])
-
-Records an error on the stack, and prints it to C<STDERR> (or actually
-C<$ERROR_FH>, see the C<GLOBAL VARIABLES> sections below), if the
-C<VERBOSE> option is true.
-The C<VERBOSE> options defaults to true.
-
-=head2 error()
-
-An alias for C<cp_error>.
-
-=head1 CLASS METHODS
-
-=head2 CPANPLUS::Error->stack()
-
-Retrieves all the items on the stack. Since C<CPANPLUS::Error> is
-implemented using C<Log::Message>, consult its manpage for the
-function C<retrieve> to see what is returned and how to use the items.
-
-=head2 CPANPLUS::Error->stack_as_string([TRACE])
-
-Returns the whole stack as a printable string. If the C<TRACE> option is
-true all items are returned with C<Carp::longmess> output, rather than
-just the message.
-C<TRACE> defaults to false.
-
-=head2 CPANPLUS::Error->flush()
-
-Removes all the items from the stack and returns them. Since
-C<CPANPLUS::Error> is implemented using C<Log::Message>, consult its
-manpage for the function C<retrieve> to see what is returned and how
-to use the items.
-
-=cut
-
-BEGIN {
- use Exporter;
- use Params::Check qw[check];
- use vars qw[@EXPORT @ISA $ERROR_FH $MSG_FH];
-
- @ISA = 'Exporter';
- @EXPORT = qw[cp_error cp_msg error msg];
-
- my $log = new Log::Message;
-
- for my $func ( @EXPORT ) {
- no strict 'refs';
-
- my $prefix = 'cp_';
- my $name = $func;
- $name =~ s/^$prefix//g;
-
- *$func = sub {
- my $msg = shift;
-
- ### no point storing non-messages
- return unless defined $msg;
-
- $log->store(
- message => $msg,
- tag => uc $name,
- level => $prefix . $name,
- extra => [@_]
- );
- };
- }
-
- sub flush {
- my @foo = $log->flush;
- return unless @foo;
- return reverse @foo;
- }
-
- sub stack {
- return $log->retrieve( chrono => 1 );
- }
-
- sub stack_as_string {
- my $class = shift;
- my $trace = shift() ? 1 : 0;
-
- return join $/, map {
- '[' . $_->tag . '] [' . $_->when . '] ' .
- ($trace ? $_->message . ' ' . $_->longmess
- : $_->message);
- } __PACKAGE__->stack;
- }
-}
-
-=head1 GLOBAL VARIABLES
-
-=over 4
-
-=item $ERROR_FH
-
-This is the filehandle all the messages sent to C<error()> are being
-printed. This defaults to C<*STDERR>.
-
-=item $MSG_FH
-
-This is the filehandle all the messages sent to C<msg()> are being
-printed. This default to C<*STDOUT>.
-
-=back
-
-=cut
-
-local $| = 1;
-$ERROR_FH = \*STDERR;
-$MSG_FH = \*STDOUT;
-
-package # Hide from Pause
- Log::Message::Handlers;
-use Carp ();
-
-{
-
- sub cp_msg {
- my $self = shift;
- my $verbose = shift;
-
- ### so you don't want us to print the msg? ###
- return if defined $verbose && $verbose == 0;
-
- my $old_fh = select $CPANPLUS::Error::MSG_FH;
-
- print '['. $self->tag . '] ' . $self->message . "\n";
- select $old_fh;
-
- return;
- }
-
- sub cp_error {
- my $self = shift;
- my $verbose = shift;
-
- ### so you don't want us to print the error? ###
- return if defined $verbose && $verbose == 0;
-
- my $old_fh = select $CPANPLUS::Error::ERROR_FH;
-
- ### is only going to be 1 for now anyway ###
- ### C::I may not be loaded, so do a can() check first
- my $cb = CPANPLUS::Internals->can('_return_all_objects')
- ? (CPANPLUS::Internals->_return_all_objects)[0]
- : undef;
-
- ### maybe we didn't initialize an internals object (yet) ###
- my $debug = $cb ? $cb->configure_object->get_conf('debug') : 0;
- my $msg = '['. $self->tag . '] ' . $self->message . "\n";
-
- ### i'm getting this warning in the test suite:
- ### Ambiguous call resolved as CORE::warn(), qualify as such or
- ### use & at CPANPLUS/Error.pm line 57.
- ### no idea where it's coming from, since there's no 'sub warn'
- ### anywhere to be found, but i'll mark it explicitly nonetheless
- ### --kane
- print $debug ? Carp::shortmess($msg) : $msg . "\n";
-
- select $old_fh;
-
- return;
- }
-}
-
-1;
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/FAQ.pod b/cpan/CPANPLUS/lib/CPANPLUS/FAQ.pod
deleted file mode 100644
index 00c186ab0d..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/FAQ.pod
+++ /dev/null
@@ -1,34 +0,0 @@
-=pod
-
-=head1 NAME
-
-CPANPLUS::FAQ - CPANPLUS Frequently Asked Questions
-
-=head1 NAME
-
-CPANPLUS::FAQ
-
-=head1 DESCRIPTION
-
-This document attempts to provide answers to commonly asked questions.
-
- XXX Work in progress
-
-=head1 BUG REPORTS
-
-Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>.
-
-=head1 AUTHOR
-
-This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
-
-=head1 COPYRIGHT
-
-The CPAN++ interface (of which this module is a part of) is copyright (c)
-2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved.
-
-This library is free software; you may redistribute and/or modify it
-under the same terms as Perl itself.
-
-=cut
-
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Hacking.pod b/cpan/CPANPLUS/lib/CPANPLUS/Hacking.pod
deleted file mode 100644
index c226b07169..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Hacking.pod
+++ /dev/null
@@ -1,135 +0,0 @@
-=pod
-
-=head1 NAME
-
-CPANPLUS::Hacking - developing CPANPLUS
-
-=head1 DESCRIPTION
-
-This document attempts to describe how to develop with the
-CPANPLUS environment most easily, how certain things work and why.
-
-This is basically a quick-start guide to people who want to add
-features or patches to CPANPLUS.
-
-=head1 OBTAINING CPANPLUS
-
-Checkout CPANPLUS from its GIT repository at
-L<https://github.com/jib/cpanplus-devel> .
-
-=head1 INSTALLING CPANPLUS
-
-CPANPLUS follows the standard perl module installation process:
-
- perl Makefile.PL
- make
- make test
- make install
-
-=head1 CONFIGURING CPANPLUS
-
-When running C<perl Makefile.PL> you will be prompted to configure.
-If you have already done so, and merely wish to update the C<Makefile>,
-simply run:
-
- perl Makefile.PL JFDI=1
-
-This will keep your configuration intact. Note however, if there are
-changes to the default configuration file C<Config.pm-orig>, you should
-either delete your current config file and reconfigure, or patch your
-config file from the new entries in C<Config.pm-orig>.
-
-=head1 RUNNING CPANPLUS FROM DEVELOPMENT ENVIRONMENT
-
-If you'd rather not install the development version to your
-C<site_perl> directory, that's no problem. You can set your C<PERL5LIB>
-environment variable to CPANPLUS' C<lib> directory, and you can run it
-from there.
-
-=head1 RUNNING CPANPLUS TESTS
-
-Tests are what tells us if CPANPLUS is working. If a test is not working,
-try to run it explicitly like this:
-
- perl -I/path/to/cpanplus/lib t/XX_name_of_test.t 1
-
-The extra '1' makes sure that all the messages and errors (they might
-be errors we're testing for!) are being printed rather than kept quiet.
-This is a great way to find out the context of any failures that may
-occur.
-
-If you believe this test failure proves a bug in CPANPLUS, the long
-output of the test file is something we'd like to see alongside your
-bug report.
-
-=head1 FINDING BUGS
-
-Sometimes you might find bugs in CPANPLUS' behaviour. If you encounter
-these in a development snapshot, we'd appreciate a complete patch (as
-described below in the L<SENDING PATCHES> section.
-
-If it's way over your head, then of course reporting the bug is always
-better than not reporting it at all. Before you do so though, make
-sure you have the B<latest> development snapshot, and the bug still
-persists there. If so, report the bug to this address:
-
- bug-cpanplus@rt.cpan.org
-
-A good C<patch> would have the following characteristics:
-
-=over 4
-
-=item Problem description
-
-Describe clearly what the bug is you found, and what it should have
-done instead.
-
-=item Program demonstrating the bug
-
-Show us how to reproduce the bug, in a simple of a program as possible
-
-=item [OPTIONAL] A patch to the test suite to test for the bug
-
-Amend our test suite by making sure this bug will be found in this, and
-future versions of CPANPLUS (see L<SUPPLYING PATCHES>)
-
-=item [OPTIONAL] A patch to the code + tests + documentation
-
-Fix the bug, update the docs & tests. That way your bug will be gone
-forever :)
-
-=back
-
-=head1 SUPPLYING PATCHES
-
-Patches are a good thing, and they are welcome. Especially if they fix
-bugs you've found along the way, or that others have reported.
-
-We prefer patches in the following format:
-
-=over 4
-
-=item * In C<diff -u> or C<diff -c> format
-
-=item * From the root of the snapshot
-
-=item * Including patches for code + tests + docs
-
-=item * Sent per mail to bug-cpanplus@rt.cpan.org
-
-=item * With subject containing C<[PATCH]> + description of the patch
-
-=back
-
-You will always be informed if a patch is applied or rejected, and in
-case of rejection why that is (perhaps you can tweak the patch to have
-it accepted after all).
-
-=cut
-
-__END__
-
-* perl5lib
-* perl t/foo 1
-* patches to cpanplus-devel
-* snap/devel.tgz
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Internals.pm b/cpan/CPANPLUS/lib/CPANPLUS/Internals.pm
deleted file mode 100644
index 5c53e67e74..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Internals.pm
+++ /dev/null
@@ -1,556 +0,0 @@
-package CPANPLUS::Internals;
-use deprecate;
-
-### we /need/ perl5.6.1 or higher -- we use coderefs in @INC,
-### and 5.6.0 is just too buggy
-use 5.006001;
-
-use strict;
-use Config;
-
-use CPANPLUS::Error;
-
-use CPANPLUS::Selfupdate;
-
-use CPANPLUS::Internals::Extract;
-use CPANPLUS::Internals::Fetch;
-use CPANPLUS::Internals::Utils;
-use CPANPLUS::Internals::Constants;
-use CPANPLUS::Internals::Search;
-use CPANPLUS::Internals::Report;
-
-require base;
-use Cwd qw[cwd];
-use Module::Load qw[load];
-use Params::Check qw[check];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-use Module::Load::Conditional qw[can_load];
-
-use Object::Accessor;
-
-local $Params::Check::VERBOSE = 1;
-
-use vars qw[@ISA $VERSION];
-
-@ISA = qw[
- CPANPLUS::Internals::Extract
- CPANPLUS::Internals::Fetch
- CPANPLUS::Internals::Utils
- CPANPLUS::Internals::Search
- CPANPLUS::Internals::Report
- ];
-
-$VERSION = "0.9135";
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Internals - CPANPLUS internals
-
-=head1 SYNOPSIS
-
- my $internals = CPANPLUS::Internals->_init( _conf => $conf );
- my $backend = CPANPLUS::Internals->_retrieve_id( $ID );
-
-=head1 DESCRIPTION
-
-This module is the guts of CPANPLUS -- it inherits from all other
-modules in the CPANPLUS::Internals::* namespace, thus defying normal
-rules of OO programming -- but if you're reading this, you already
-know what's going on ;)
-
-Please read the C<CPANPLUS::Backend> documentation for the normal API.
-
-=head1 ACCESSORS
-
-=over 4
-
-=item _conf
-
-Get/set the configure object
-
-=item _id
-
-Get/set the id
-
-=cut
-
-### autogenerate accessors ###
-for my $key ( qw[_conf _id _modules _hosts _methods _status _path
- _callbacks _selfupdate _mtree _atree]
-) {
- no strict 'refs';
- *{__PACKAGE__."::$key"} = sub {
- $_[0]->{$key} = $_[1] if @_ > 1;
- return $_[0]->{$key};
- }
-}
-
-=pod
-
-=back
-
-=head1 METHODS
-
-=head2 $internals = CPANPLUS::Internals->_init( _conf => CONFIG_OBJ )
-
-C<_init> creates a new CPANPLUS::Internals object.
-
-You have to pass it a valid C<CPANPLUS::Configure> object.
-
-Returns the object on success, or dies on failure.
-
-=cut
-
-{ ### NOTE:
- ### if extra callbacks are added, don't forget to update the
- ### 02-internals.t test script with them!
- my $callback_map = {
- ### name default value
- install_prerequisite => 1, # install prereqs when 'ask' is set?
- edit_test_report => 0, # edit the prepared test report?
- send_test_report => 1, # send the test report?
- # munge the test report
- munge_test_report => sub { return $_[1] },
- # filter out unwanted prereqs
- filter_prereqs => sub { return $_[1] },
- # continue if 'make test' fails?
- proceed_on_test_failure => sub { return 0 },
- munge_dist_metafile => sub { return $_[1] },
- };
-
- my $status = Object::Accessor->new;
- $status->mk_accessors(qw[pending_prereqs]);
-
- my $callback = Object::Accessor->new;
- $callback->mk_accessors(keys %$callback_map);
-
- my $conf;
- my $Tmpl = {
- _conf => { required => 1, store => \$conf,
- allow => IS_CONFOBJ },
- _id => { default => '', no_override => 1 },
- _authortree => { default => '', no_override => 1 },
- _modtree => { default => '', no_override => 1 },
- _hosts => { default => {}, no_override => 1 },
- _methods => { default => {}, no_override => 1 },
- _status => { default => '<empty>', no_override => 1 },
- _callbacks => { default => '<empty>', no_override => 1 },
- _path => { default => $ENV{PATH} || '', no_override => 1 },
- };
-
- sub _init {
- my $class = shift;
- my %hash = @_;
-
- ### temporary warning until we fix the storing of multiple id's
- ### and their serialization:
- ### probably not going to happen --kane
- if( my $id = $class->_last_id ) {
- # make it a singleton.
- warn loc(q[%1 currently only supports one %2 object per ] .
- qq[running program\n], 'CPANPLUS', $class);
-
- return $class->_retrieve_id( $id );
- }
-
- my $args = check($Tmpl, \%hash)
- or die loc(qq[Could not initialize '%1' object], $class);
-
- bless $args, $class;
-
- $args->{'_id'} = $args->_inc_id;
- $args->{'_status'} = $status;
- $args->{'_callbacks'} = $callback;
-
- ### initialize callbacks to default state ###
- for my $name ( $callback->ls_accessors ) {
- my $rv = ref $callback_map->{$name} ? 'sub return value' :
- $callback_map->{$name} ? 'true' : 'false';
-
- $args->_callbacks->$name(
- sub { msg(loc("DEFAULT '%1' HANDLER RETURNING '%2'",
- $name, $rv), $args->_conf->get_conf('debug'));
- return ref $callback_map->{$name}
- ? $callback_map->{$name}->( @_ )
- : $callback_map->{$name};
- }
- );
- }
-
- ### create a selfupdate object
- $args->_selfupdate( CPANPLUS::Selfupdate->new( $args ) );
-
- ### initialize it as an empty hashref ###
- $args->_status->pending_prereqs( {} );
-
- $conf->_set_build( startdir => cwd() ),
- or error( loc("couldn't locate current dir!") );
-
- $ENV{FTP_PASSIVE} = 1, if $conf->get_conf('passive');
-
- my $id = $args->_store_id( $args );
-
- unless ( $id == $args->_id ) {
- error( loc("IDs do not match: %1 != %2. Storage failed!",
- $id, $args->_id) );
- }
-
- ### different source engines available now, so set them here
- { my $store = $conf->get_conf( 'source_engine' )
- || DEFAULT_SOURCE_ENGINE;
-
- unless( can_load( modules => { $store => '0.0' }, verbose => 1 ) ) {
- error( loc( "Could not load source engine '%1'", $store ) );
-
- if( $store ne DEFAULT_SOURCE_ENGINE ) {
- msg( loc("Falling back to %1", DEFAULT_SOURCE_ENGINE), 1 );
-
- load DEFAULT_SOURCE_ENGINE;
-
- base->import( DEFAULT_SOURCE_ENGINE );
- } else {
- return;
- }
- } else {
- base->import( $store );
- }
- }
-
- return $args;
- }
-
-=pod
-
-=head2 $bool = $internals->_flush( list => \@caches )
-
-Flushes the designated caches from the C<CPANPLUS> object.
-
-Returns true on success, false if one or more caches could not be
-be flushed.
-
-=cut
-
- sub _flush {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my $aref;
- my $tmpl = {
- list => { required => 1, default => [],
- strict_type => 1, store => \$aref },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- my $flag = 0;
- for my $what (@$aref) {
- my $cache = '_' . $what;
-
- ### set the include paths back to their original ###
- if( $what eq 'lib' ) {
- $ENV{PERL5LIB} = $conf->_perl5lib || '';
- @INC = @{$conf->_lib};
- $ENV{PATH} = $self->_path || '';
-
- ### give all modules a new status object -- this is slightly
- ### costly, but the best way to make sure all statuses are
- ### forgotten --kane
- } elsif ( $what eq 'modules' ) {
- for my $modobj ( values %{$self->module_tree} ) {
-
- $modobj->_flush;
- }
-
- ### blow away the methods cache... currently, that's only
- ### File::Fetch's method fail list
- } elsif ( $what eq 'methods' ) {
-
- ### still unbelievably p4 :( ###
- $File'Fetch::METHOD_FAIL = $File'Fetch::METHOD_FAIL = {};
-
- ### blow away the m::l::c cache, so modules can be (re)loaded
- ### again if they become available
- } elsif ( $what eq 'load' ) {
- undef $Module::Load::Conditional::CACHE;
-
- } else {
- unless ( exists $self->{$cache} && exists $Tmpl->{$cache} ) {
- error( loc( "No such cache: '%1'", $what ) );
- $flag++;
- next;
- } else {
- $self->$cache( {} );
- }
- }
- }
- return !$flag;
- }
-
-### NOTE:
-### if extra callbacks are added, don't forget to update the
-### 02-internals.t test script with them!
-
-=pod
-
-=head2 $bool = $internals->_register_callback( name => CALLBACK_NAME, code => CODEREF );
-
-Registers a callback for later use by the internal libraries.
-
-Here is a list of the currently used callbacks:
-
-=over 4
-
-=item install_prerequisite
-
-Is called when the user wants to be C<asked> about what to do with
-prerequisites. Should return a boolean indicating true to install
-the prerequisite and false to skip it.
-
-=item send_test_report
-
-Is called when the user should be prompted if he wishes to send the
-test report. Should return a boolean indicating true to send the
-test report and false to skip it.
-
-=item munge_test_report
-
-Is called when the test report message has been composed, giving
-the user a chance to programatically alter it. Should return the
-(munged) message to be sent.
-
-=item edit_test_report
-
-Is called when the user should be prompted to edit test reports
-about to be sent out by Test::Reporter. Should return a boolean
-indicating true to edit the test report in an editor and false
-to skip it.
-
-=item proceed_on_test_failure
-
-Is called when 'make test' or 'Build test' fails. Should return
-a boolean indicating whether the install should continue even if
-the test failed.
-
-=item munge_dist_metafile
-
-Is called when the C<CPANPLUS::Dist::*> metafile is created, like
-C<control> for C<CPANPLUS::Dist::Deb>, giving the user a chance to
-programatically alter it. Should return the (munged) text to be
-written to the metafile.
-
-=back
-
-=cut
-
- sub _register_callback {
- my $self = shift or return;
- my %hash = @_;
-
- my ($name,$code);
- my $tmpl = {
- name => { required => 1, store => \$name,
- allow => [$callback->ls_accessors] },
- code => { required => 1, allow => IS_CODEREF,
- store => \$code },
- };
-
- check( $tmpl, \%hash ) or return;
-
- $self->_callbacks->$name( $code ) or return;
-
- return 1;
- }
-
-# =head2 $bool = $internals->_add_callback( name => CALLBACK_NAME, code => CODEREF );
-#
-# Adds a new callback to be used from anywhere in the system. If the callback
-# is already known, an error is raised and false is returned. If the callback
-# is not yet known, it is added, and the corresponding coderef is registered
-# using the
-#
-# =cut
-#
-# sub _add_callback {
-# my $self = shift or return;
-# my %hash = @_;
-#
-# my ($name,$code);
-# my $tmpl = {
-# name => { required => 1, store => \$name, },
-# code => { required => 1, allow => IS_CODEREF,
-# store => \$code },
-# };
-#
-# check( $tmpl, \%hash ) or return;
-#
-# if( $callback->can( $name ) ) {
-# error(loc("Callback '%1' is already registered"));
-# return;
-# }
-#
-# $callback->mk_accessor( $name );
-#
-# $self->_register_callback( name => $name, code => $code ) or return;
-#
-# return 1;
-# }
-
-}
-
-=pod
-
-=head2 $bool = $internals->_add_to_includepath( directories => \@dirs )
-
-Adds a list of directories to the include path.
-This means they get added to C<@INC> as well as C<$ENV{PERL5LIB}>.
-
-Returns true on success, false on failure.
-
-=cut
-
-sub _add_to_includepath {
- my $self = shift;
- my %hash = @_;
-
- my $dirs;
- my $tmpl = {
- directories => { required => 1, default => [], store => \$dirs,
- strict_type => 1 },
- };
-
- check( $tmpl, \%hash ) or return;
-
- my $s = $Config{'path_sep'};
-
- ### only add if it's not added yet
- for my $lib (@$dirs) {
- push @INC, $lib unless grep { $_ eq $lib } @INC;
- #
- ### it will be complaining if $ENV{PERL5LIB] is not defined (yet).
- local $^W;
- $ENV{'PERL5LIB'} .= $s . $lib
- unless $ENV{'PERL5LIB'} =~ qr|\Q$s$lib\E|;
- }
-
- return 1;
-}
-
-=pod
-
-=head2 $bool = $internals->_add_to_path( directories => \@dirs )
-
-Adds a list of directories to the PATH, but only if they actually
-contain anything.
-
-Returns true on success, false on failure.
-
-=cut
-
-sub _add_to_path {
- my $self = shift;
- my %hash = @_;
-
- my $dirs;
- my $tmpl = {
- directories => { required => 1, default => [], store => \$dirs,
- strict_type => 1 },
- };
-
- check( $tmpl, \%hash ) or return;
-
- my $s = $Config{'path_sep'};
-
- require File::Glob;
-
- ### only add if it's not added yet
- for my $dir (@$dirs) {
- $dir =~ s![\\/]*$!!g;
- next if $ENV{PATH} =~ qr|\Q$dir\E|;
- next unless -d $dir;
- next unless File::Glob::bsd_glob( $dir . q{/*} );
- $ENV{PATH} = join $s, $dir, $ENV{PATH};
- }
-
- return 1;
-}
-
-=pod
-
-=head2 $id = CPANPLUS::Internals->_last_id
-
-Return the id of the last object stored.
-
-=head2 $id = CPANPLUS::Internals->_store_id( $internals )
-
-Store this object; return its id.
-
-=head2 $obj = CPANPLUS::Internals->_retrieve_id( $ID )
-
-Retrieve an object based on its ID -- return false on error.
-
-=head2 CPANPLUS::Internals->_remove_id( $ID )
-
-Remove the object marked by $ID from storage.
-
-=head2 @objs = CPANPLUS::Internals->_return_all_objects
-
-Return all stored objects.
-
-=cut
-
-
-### code for storing multiple objects
-### -- although we only support one right now
-### XXX when support for multiple objects comes, saving source will have
-### to change
-{
- my $idref = {};
- my $count = 0;
-
- sub _inc_id { return ++$count; }
-
- sub _last_id { $count }
-
- sub _store_id {
- my $self = shift;
- my $obj = shift or return;
-
- unless( IS_INTERNALS_OBJ->($obj) ) {
- error( loc("The object you passed has the wrong ref type: '%1'",
- ref $obj) );
- return;
- }
-
- $idref->{ $obj->_id } = $obj;
- return $obj->_id;
- }
-
- sub _retrieve_id {
- my $self = shift;
- my $id = shift or return;
-
- my $obj = $idref->{$id};
- return $obj;
- }
-
- sub _remove_id {
- my $self = shift;
- my $id = shift or return;
-
- return delete $idref->{$id};
- }
-
- sub _return_all_objects { return values %$idref }
-}
-
-1;
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Constants.pm b/cpan/CPANPLUS/lib/CPANPLUS/Internals/Constants.pm
deleted file mode 100644
index 09501c78e8..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Constants.pm
+++ /dev/null
@@ -1,391 +0,0 @@
-package CPANPLUS::Internals::Constants;
-use deprecate;
-
-use strict;
-
-use CPANPLUS::Error;
-
-use Config;
-use File::Spec;
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-require Exporter;
-use vars qw[$VERSION @ISA @EXPORT];
-
-use Package::Constants;
-
-$VERSION = "0.9135";
-@ISA = qw[Exporter];
-@EXPORT = Package::Constants->list( __PACKAGE__ );
-
-sub constants { @EXPORT };
-
-use constant INSTALLER_BUILD
- => 'CPANPLUS::Dist::Build';
-use constant INSTALLER_MM => 'CPANPLUS::Dist::MM';
-use constant INSTALLER_SAMPLE
- => 'CPANPLUS::Dist::Sample';
-use constant INSTALLER_BASE => 'CPANPLUS::Dist::Base';
-use constant INSTALLER_AUTOBUNDLE
- => 'CPANPLUS::Dist::Autobundle';
-
-use constant SHELL_DEFAULT => 'CPANPLUS::Shell::Default';
-use constant SHELL_CLASSIC => 'CPANPLUS::Shell::Classic';
-
-use constant CONFIG => 'CPANPLUS::Config';
-use constant CONFIG_USER => 'CPANPLUS::Config::User';
-use constant CONFIG_SYSTEM => 'CPANPLUS::Config::System';
-use constant CONFIG_BOXED => 'CPANPLUS::Config::Boxed';
-
-use constant DEFAULT_SOURCE_ENGINE
- => 'CPANPLUS::Internals::Source::Memory';
-
-use constant TARGET_INIT => 'init';
-use constant TARGET_CREATE => 'create';
-use constant TARGET_PREPARE => 'prepare';
-use constant TARGET_INSTALL => 'install';
-use constant TARGET_IGNORE => 'ignore';
-
-use constant ON_WIN32 => $^O eq 'MSWin32';
-use constant ON_NETWARE => $^O eq 'NetWare';
-use constant ON_CYGWIN => $^O eq 'cygwin';
-use constant ON_VMS => $^O eq 'VMS';
-
-use constant DOT_CPANPLUS => ON_VMS ? '_cpanplus' : '.cpanplus';
-
-use constant OPT_AUTOFLUSH => '-MCPANPLUS::Internals::Utils::Autoflush';
-
-use constant UNKNOWN_DL_LOCATION
- => 'UNKNOWN-ORIGIN';
-
-use constant NMAKE => 'nmake.exe';
-use constant NMAKE_URL =>
- 'ftp://ftp.microsoft.com/Softlib/MSLFILES/nmake15.exe';
-
-use constant INSTALL_VIA_PACKAGE_MANAGER
- => sub { my $fmt = $_[0] or return;
- return 1 if $fmt ne INSTALLER_BUILD and
- $fmt ne INSTALLER_MM;
- };
-
-use constant IS_CODEREF => sub { ref $_[-1] eq 'CODE' };
-use constant IS_MODOBJ => sub { UNIVERSAL::isa($_[-1],
- 'CPANPLUS::Module') };
-use constant IS_FAKE_MODOBJ => sub { UNIVERSAL::isa($_[-1],
- 'CPANPLUS::Module::Fake') };
-use constant IS_AUTHOBJ => sub { UNIVERSAL::isa($_[-1],
- 'CPANPLUS::Module::Author') };
-use constant IS_FAKE_AUTHOBJ
- => sub { UNIVERSAL::isa($_[-1],
- 'CPANPLUS::Module::Author::Fake') };
-
-use constant IS_CONFOBJ => sub { UNIVERSAL::isa($_[-1],
- 'CPANPLUS::Configure') };
-
-use constant IS_RVOBJ => sub { UNIVERSAL::isa($_[-1],
- 'CPANPLUS::Backend::RV') };
-
-use constant IS_INTERNALS_OBJ
- => sub { UNIVERSAL::isa($_[-1],
- 'CPANPLUS::Internals') };
-
-use constant IS_FILE => sub { return 1 if -e $_[-1] };
-
-use constant FILE_EXISTS => sub {
- my $file = $_[-1];
- return 1 if IS_FILE->($file);
- local $Carp::CarpLevel =
- $Carp::CarpLevel+2;
- error(loc( q[File '%1' does not exist],
- $file));
- return;
- };
-
-use constant FILE_READABLE => sub {
- my $file = $_[-1];
- return 1 if -e $file && -r _;
- local $Carp::CarpLevel =
- $Carp::CarpLevel+2;
- error( loc( q[File '%1' is not readable ].
- q[or does not exist], $file));
- return;
- };
-use constant IS_DIR => sub { return 1 if -d $_[-1] };
-
-use constant DIR_EXISTS => sub {
- my $dir = $_[-1];
- return 1 if IS_DIR->($dir);
- local $Carp::CarpLevel =
- $Carp::CarpLevel+2;
- error(loc(q[Dir '%1' does not exist],
- $dir));
- return;
- };
-
- ### On VMS, if the $Config{make} is either MMK
- ### or MMS, then the makefile is 'DESCRIP.MMS'.
-use constant MAKEFILE => sub { my $file =
- (ON_VMS and
- $Config::Config{make} =~ /MM[S|K]/i)
- ? 'DESCRIP.MMS'
- : 'Makefile';
-
- return @_
- ? File::Spec->catfile( @_, $file )
- : $file;
- };
-use constant MAKEFILE_PL => sub { return @_
- ? File::Spec->catfile( @_,
- 'Makefile.PL' )
- : 'Makefile.PL';
- };
-use constant BUILD_PL => sub { return @_
- ? File::Spec->catfile( @_,
- 'Build.PL' )
- : 'Build.PL';
- };
-
-use constant META_YML => sub { return @_
- ? File::Spec->catfile( @_, 'META.yml' )
- : 'META.yml';
- };
-
-use constant MYMETA_YML => sub { return @_
- ? File::Spec->catfile( @_, 'MYMETA.yml' )
- : 'MYMETA.yml';
- };
-
-use constant META_JSON => sub { return @_
- ? File::Spec->catfile( @_, 'META.json' )
- : 'META.json';
- };
-
-use constant MYMETA_JSON => sub { return @_
- ? File::Spec->catfile( @_, 'MYMETA.json' )
- : 'MYMETA.json';
- };
-
-use constant BLIB => sub { return @_
- ? File::Spec->catfile(@_, 'blib')
- : 'blib';
- };
-
-use constant LIB => 'lib';
-use constant LIB_DIR => sub { return @_
- ? File::Spec->catdir(@_, LIB)
- : LIB;
- };
-use constant AUTO => 'auto';
-use constant LIB_AUTO_DIR => sub { return @_
- ? File::Spec->catdir(@_, LIB, AUTO)
- : File::Spec->catdir(LIB, AUTO)
- };
-use constant ARCH => 'arch';
-use constant ARCH_DIR => sub { return @_
- ? File::Spec->catdir(@_, ARCH)
- : ARCH;
- };
-use constant ARCH_AUTO_DIR => sub { return @_
- ? File::Spec->catdir(@_,ARCH,AUTO)
- : File::Spec->catdir(ARCH,AUTO)
- };
-
-use constant BLIB_LIBDIR => sub { return @_
- ? File::Spec->catdir(
- @_, BLIB->(), LIB )
- : File::Spec->catdir( BLIB->(), LIB );
- };
-
-use constant BIN => 'bin';
-
-use constant SCRIPT => 'script';
-
-use constant CONFIG_USER_LIB_DIR => sub {
- require CPANPLUS::Internals::Utils;
- LIB_DIR->(
- CPANPLUS::Internals::Utils->_home_dir,
- DOT_CPANPLUS
- );
- };
-use constant CONFIG_USER_FILE => sub {
- File::Spec->catfile(
- CONFIG_USER_LIB_DIR->(),
- split('::', CONFIG_USER),
- ) . '.pm';
- };
-use constant CONFIG_SYSTEM_FILE => sub {
- require CPANPLUS::Internals;
- require File::Basename;
- my $dir = File::Basename::dirname(
- $INC{'CPANPLUS/Internals.pm'}
- );
-
- ### XXX use constants
- File::Spec->catfile(
- $dir, qw[Config System.pm]
- );
- };
-
-use constant README => sub { my $obj = $_[0];
- my $pkg = $obj->package_name;
- $pkg .= '-' . $obj->package_version .
- '.readme';
- return $pkg;
- };
-use constant META_EXT => 'meta';
-
-use constant META => sub { my $obj = $_[0];
- my $pkg = $obj->package_name;
- $pkg .= '-' . $obj->package_version .
- '.' . META_EXT;
- return $pkg;
- };
-
-use constant OPEN_FILE => sub {
- my($file, $mode) = (@_, '');
- my $fh;
- open $fh, "$mode" . $file
- or error(loc(
- "Could not open file '%1': %2",
- $file, $!));
- return $fh if $fh;
- return;
- };
-
-use constant OPEN_DIR => sub {
- my $dir = shift;
- my $dh;
- opendir $dh, $dir or error(loc(
- "Could not open dir '%1': %2", $dir, $!
- ));
-
- return $dh if $dh;
- return;
- };
-
-use constant READ_DIR => sub {
- my $dir = shift;
- my $dh = OPEN_DIR->( $dir ) or return;
-
- ### exclude . and ..
- my @files = grep { $_ !~ /^\.{1,2}/ }
- readdir($dh);
-
- ### Remove trailing dot on VMS when
- ### using VMS syntax.
- if( ON_VMS ) {
- s/(?<!\^)\.$// for @files;
- }
-
- return @files;
- };
-
-use constant STRIP_GZ_SUFFIX
- => sub {
- my $file = $_[0] or return;
- $file =~ s/.gz$//i;
- return $file;
- };
-
-use constant CHECKSUMS => 'CHECKSUMS';
-use constant PGP_HEADER => '-----BEGIN PGP SIGNED MESSAGE-----';
-use constant ENV_CPANPLUS_CONFIG
- => 'PERL5_CPANPLUS_CONFIG';
-use constant ENV_CPANPLUS_IS_EXECUTING
- => 'PERL5_CPANPLUS_IS_EXECUTING';
-use constant DEFAULT_EMAIL => 'cpanplus@example.com';
-use constant CPANPLUS_UA => sub { ### for the version number ###
- require CPANPLUS::Internals;
- "CPANPLUS/$CPANPLUS::Internals::VERSION"
- };
-use constant TESTERS_URL => sub {
- 'http://cpantesters.org/distro/'.
- uc(substr($_[0],0,1)) .'/'. $_[0] . '.yaml';
- };
-use constant TESTERS_DETAILS_URL
- => sub {
- 'http://cpantesters.org/distro/'.
- uc(substr($_[0],0,1)) .'/'. $_[0];
- };
-
-use constant CREATE_FILE_URI
- => sub {
- my $dir = $_[0] or return;
- return $dir =~ m|^/|
- ? 'file://' . $dir
- : 'file:///' . $dir;
- };
-
-use constant EMPTY_DSLIP => ' ';
-
-use constant CUSTOM_AUTHOR_ID
- => 'LOCAL';
-
-use constant DOT_SHELL_DEFAULT_RC
- => '.shell-default.rc';
-
-use constant SOURCE_SQLITE_DB
- => 'db.sql';
-
-use constant PREREQ_IGNORE => 0;
-use constant PREREQ_INSTALL => 1;
-use constant PREREQ_ASK => 2;
-use constant PREREQ_BUILD => 3;
-use constant BOOLEANS => [0,1];
-use constant CALLING_FUNCTION
- => sub { my $lvl = $_[0] || 0;
- return join '::', (caller(2+$lvl))[3]
- };
-use constant PERL_CORE => 'perl';
-use constant PERL_WRAPPER => 'use strict; BEGIN { my $old = select STDERR; $|++; select $old; $|++; $0 = shift(@ARGV); my $rv = do($0); die $@ if $@; }';
-use constant STORABLE_EXT => '.stored';
-
-use constant GET_XS_FILES => sub { my $dir = $_[0] or return;
- require File::Find;
- my @files;
- File::Find::find(
- sub { push @files, $File::Find::name
- if $File::Find::name =~ /\.xs$/i
- }, $dir );
-
- return @files;
- };
-
-use constant INSTALL_LOG_FILE
- => sub { my $obj = shift or return;
- my $name = $obj->name; $name =~ s/::/-/g;
- $name .= '-'. $obj->version;
- $name .= '-'. scalar(time) . '.log';
- return $name;
- };
-
-use constant ON_OLD_CYGWIN => do { ON_CYGWIN and $] < 5.008
- ? loc(
- "Your perl version for %1 is too low; ".
- "Require %2 or higher for this function",
- $^O, '5.8.0' )
- : '';
- };
-
-### XXX these 2 are probably obsolete -- check & remove;
-use constant DOT_EXISTS => '.exists';
-
-use constant QUOTE_PERL_ONE_LINER
- => sub { my $line = shift or return;
-
- ### use double quotes on these systems
- return qq["$line"]
- if ON_WIN32 || ON_NETWARE || ON_VMS;
-
- ### single quotes on the rest
- return qq['$line'];
- };
-
-1;
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Constants/Report.pm b/cpan/CPANPLUS/lib/CPANPLUS/Internals/Constants/Report.pm
deleted file mode 100644
index dc92ec6c31..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Constants/Report.pm
+++ /dev/null
@@ -1,426 +0,0 @@
-package CPANPLUS::Internals::Constants::Report;
-use deprecate;
-
-use strict;
-use CPANPLUS::Error;
-
-use File::Spec;
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-require Exporter;
-use vars qw[$VERSION @ISA @EXPORT];
-
-use Package::Constants;
-
-### for the version
-require CPANPLUS::Internals;
-
-$VERSION = "0.9135";
-@ISA = qw[Exporter];
-@EXPORT = Package::Constants->list( __PACKAGE__ );
-
-### OS to regex map ###
-my %OS = (
- Amiga => 'amigaos',
- Atari => 'mint',
- BSD => 'bsdos|darwin|freebsd|openbsd|netbsd',
- Be => 'beos',
- BeOS => 'beos',
- Cygwin => 'cygwin',
- Darwin => 'darwin',
- EBCDIC => 'os390|os400|posix-bc|vmesa',
- HPUX => 'hpux',
- Linux => 'linux',
- MSDOS => 'dos|os2|MSWin32|cygwin',
- 'bin\\d*Mac'=> 'MacOS|darwin', # binMac, bin56Mac, bin58Mac...
- Mac => 'MacOS|darwin',
- MacPerl => 'MacOS',
- MacOS => 'MacOS|darwin',
- MacOSX => 'darwin',
- MPE => 'mpeix',
- MPEiX => 'mpeix',
- OS2 => 'os2',
- Plan9 => 'plan9',
- RISCOS => 'riscos',
- SGI => 'irix',
- Solaris => 'solaris',
- Unix => 'aix|bsdos|darwin|dgux|dynixptx|freebsd|'.
- 'linux|hpux|machten|netbsd|next|openbsd|dec_osf|'.
- 'svr4|sco_sv|unicos|unicosmk|solaris|sunos',
- VMS => 'VMS',
- VOS => 'VOS',
- Win32 => 'MSWin32|cygwin',
- Win32API => 'MSWin32|cygwin',
-);
-
-use constant GRADE_FAIL => 'fail';
-use constant GRADE_PASS => 'pass';
-use constant GRADE_NA => 'na';
-use constant GRADE_UNKNOWN => 'unknown';
-
-use constant MAX_REPORT_SEND
- => 2;
-
-use constant CPAN_TESTERS_EMAIL
- => 'cpan-testers@perl.org';
-
-### the cpan mail account for this user ###
-use constant CPAN_MAIL_ACCOUNT
- => sub {
- my $username = shift or return;
- return $username . '@cpan.org';
- };
-
-### check if this module is platform specific and if we're on that
-### specific platform. Alternately, the module is not platform specific
-### and we're always OK to send out test results.
-use constant RELEVANT_TEST_RESULT
- => sub {
- my $mod = shift or return;
- my $name = $mod->module;
- my $specific;
- for my $platform (keys %OS) {
- if( $name =~ /^$platform\b/i ) {
- # beware the Mac != MAC
- next if($platform eq 'Mac' &&
- $name !~ /^$platform\b/);
- $specific++;
- return 1 if
- $^O =~ /^(?:$OS{$platform})$/
- }
- };
- return $specific ? 0 : 1;
- };
-
-use constant UNSUPPORTED_OS
- => sub {
- my $buffer = shift or return;
- if( $buffer =~
- /No support for OS|OS unsupported/im ) {
- return 1;
- }
- return 0;
- };
-
-use constant PERL_VERSION_TOO_LOW
- => sub {
- my $buffer = shift or return;
- # ExtUtils::MakeMaker format
- if( $buffer =~
- /Perl .*? required--this is only .*?/m ) {
- return 1;
- }
- # Module::Build format
- if( $buffer =~
- /ERROR:( perl:)? Version .*?( of perl)? is installed, but we need version >= .*?/m ) {
- return 1;
- }
- return 0;
- };
-
-use constant NO_TESTS_DEFINED
- => sub {
- my $buffer = shift or return;
- if( $buffer =~
- /(No tests defined( for [\w:]+ extension)?\.)/
- and $buffer !~ /\*\.t/m and
- $buffer !~ /test\.pl/m
- ) {
- return $1
- }
-
- return;
- };
-
-### what stage did the test fail? ###
-use constant TEST_FAIL_STAGE
- => sub {
- my $buffer = shift or return;
- return $buffer =~ /(MAKE [A-Z]+).*/
- ? lc $1 :
- 'fetch';
- };
-
-
-use constant MISSING_PREREQS_LIST
- => sub {
- my $buffer = shift;
- my $last = ( split /\[ERROR\] .+? MAKE TEST/, $buffer )[-1];
- my @list = map { s/.pm$//; s|/|::|g; $_ }
- ($last =~
- m/\bCan\'t locate (\S+) in \@INC/g);
-
- ### make sure every missing prereq is only
- ### listed once
- { my %seen;
- @list = grep { !$seen{$_}++ } @list
- }
-
- return @list;
- };
-
-use constant MISSING_EXTLIBS_LIST
- => sub {
- my $buffer = shift;
- my @list =
- ($buffer =~
- m/No library found for -l([-\w]+)/g);
-
- return @list;
- };
-
-use constant REPORT_MESSAGE_HEADER
- => sub {
- my ($version, $author) = @_;
- return << ".";
-
-Dear $author,
-
-This is a computer-generated error report created automatically by
-CPANPLUS, version $version. Testers personal comments may appear
-at the end of this report.
-
-.
- };
-
-use constant REPORT_MESSAGE_FAIL_HEADER
- => sub {
- my($stage, $buffer) = @_;
- return << ".";
-
-Thank you for uploading your work to CPAN. However, it appears that
-there were some problems testing your distribution.
-
-TEST RESULTS:
-
-Below is the error stack from stage '$stage':
-
-$buffer
-
-.
- };
-
-use constant REPORT_MESSAGE_PASS_HEADER
- => sub {
- my($stage, $buffer) = @_;
- return << ".";
-
-Thank you for uploading your work to CPAN. Congratulations!
-All tests were successful.
-
-TEST RESULTS:
-
-Below is the error stack from stage '$stage':
-
-$buffer
-
-.
- };
-
-use constant REPORT_MISSING_PREREQS
- => sub {
- my ($author,$email,@missing) = @_;
- $author = ($author && $email)
- ? "$author ($email)"
- : 'Your Name Here';
-
- my $modules = join "\n", @missing;
- my $prereqs = join "\n",
- map {"\t'$_'\t=> '0',".
- " # or a minimum working version"}
- @missing;
-
- return << ".";
-
-MISSING PREREQUISITES:
-
-It was observed that the test suite seem to fail without these modules:
-
-$modules
-
-As such, adding the prerequisite module(s) to 'PREREQ_PM' in your
-Makefile.PL should solve this problem. For example:
-
-WriteMakefile(
- AUTHOR => '$author',
- ... # other information
- PREREQ_PM => {
-$prereqs
- }
-);
-
-Thanks! :-)
-
-.
- };
-
-use constant REPORT_MISSING_TESTS
- => sub {
- return << ".";
-RECOMMENDATIONS:
-
-It would be very helpful if you could include even a simple test
-script in the next release, so people can verify which platforms
-can successfully install them, as well as avoid regression bugs?
-
-A simple 't/use.t' that says:
-
-#!/usr/bin/env perl -w
-use strict;
-use Test;
-BEGIN { plan tests => 1 }
-
-use Your::Module::Here; ok(1);
-exit;
-__END__
-
-would be appreciated. If you are interested in making a more robust
-test suite, please see the Test::Simple, Test::More and Test::Tutorial
-documentation at <http://search.cpan.org/dist/Test-Simple/>.
-
-Thanks! :-)
-
-.
- };
-
-use constant REPORT_LOADED_PREREQS
- => sub {
- my $mod = shift;
- my $cb = $mod->parent;
- my $prq = $mod->status->prereqs || {};
-
- ### not every prereq may be coming from CPAN
- ### so maybe we wont find it in our module
- ### tree at all...
- ### skip ones that cant be found in teh list
- ### as reported in #12723
- my @prq = grep { defined }
- map { $cb->module_tree($_) }
- sort keys %$prq;
-
- ### no prereqs?
- return '' unless @prq;
-
- ### some apparently, list what we loaded
- my $str = << ".";
-PREREQUISITES:
-
-Here is a list of prerequisites you specified and versions we
-managed to load:
-
-.
- $str .= join '',
- map { sprintf "\t%s %-30s %8s %8s\n",
- @$_
-
- } [' ', 'Module Name', 'Have', 'Want'],
- map { my $want = $prq->{$_->name};
- [ do { $_->is_uptodate(
- version => $want
- ) ? ' ' : '!'
- },
- $_->name,
- $_->installed_version,
- $want
- ],
- ### might be empty entries in there
- } grep { $_ } @prq;
-
- return $str;
- };
-
-use constant REPORT_TOOLCHAIN_VERSIONS
- => sub {
- my $mod = shift;
- my $cb = $mod->parent;
- #die unless $cb->isa('CPANPLUS::Backend');
-
- my @toolchain_modules= qw(
- CPANPLUS
- CPANPLUS::Dist::Build
- Cwd
- ExtUtils::CBuilder
- ExtUtils::Command
- ExtUtils::Install
- ExtUtils::MakeMaker
- ExtUtils::Manifest
- ExtUtils::ParseXS
- File::Spec
- Module::Build
- Pod::Parser
- Pod::Simple
- Test::Harness
- Test::More
- version
- );
-
- my @toolchain =
- grep { $_ } #module_tree returns '' when module is not found
- map { $cb->module_tree($_) }
- sort @toolchain_modules;
-
- ### no prereqs?
- return '' unless @toolchain;
-
- ### toolchain modules
- my $str = << ".";
-
-Perl module toolchain versions installed:
-.
- $str .= join '',
- map { sprintf "\t%-30s %8s\n",
- @$_
-
- } ['Module Name', 'Have'],
- map {
- [ $_->name,
- $_->installed_version,
- ],
- ### might be empty entries in there
- } @toolchain;
-
- return $str;
- };
-
-
-use constant REPORT_TESTS_SKIPPED
- => sub {
- return << ".";
-
-******************************** NOTE ********************************
-*** ***
-*** The tests for this module were skipped during this build ***
-*** ***
-**********************************************************************
-
-.
- };
-
-use constant REPORT_MESSAGE_FOOTER
- => sub {
- return << ".";
-
-******************************** NOTE ********************************
-The comments above are created mechanically, possibly without manual
-checking by the sender. As there are many people performing automatic
-tests on each upload to CPAN, it is likely that you will receive
-identical messages about the same problem.
-
-If you believe that the message is mistaken, please reply to the first
-one with correction and/or additional informations, and do not take
-it personally. We appreciate your patience. :)
-**********************************************************************
-
-Additional comments:
-
-.
- };
-
-1;
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Extract.pm b/cpan/CPANPLUS/lib/CPANPLUS/Internals/Extract.pm
deleted file mode 100644
index 4028aacfa7..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Extract.pm
+++ /dev/null
@@ -1,247 +0,0 @@
-package CPANPLUS::Internals::Extract;
-use deprecate;
-
-use strict;
-
-use CPANPLUS::Error;
-use CPANPLUS::Internals::Constants;
-
-use File::Spec ();
-use File::Basename ();
-use Archive::Extract;
-use IPC::Cmd qw[run];
-use Params::Check qw[check];
-use Module::Load::Conditional qw[can_load check_install];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-local $Params::Check::VERBOSE = 1;
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Internals::Extract - internals for archive extraction
-
-=head1 SYNOPSIS
-
- ### for source files ###
- $self->_gunzip( file => 'foo.gz', output => 'blah.txt' );
-
- ### for modules/packages ###
- $dir = $self->_extract( module => $modobj,
- extractdir => '/some/where' );
-
-=head1 DESCRIPTION
-
-CPANPLUS::Internals::Extract extracts compressed files for CPANPLUS.
-It can do this by either a pure perl solution (preferred) with the
-use of C<Archive::Tar> and C<Compress::Zlib>, or with binaries, like
-C<gzip> and C<tar>.
-
-The flow looks like this:
-
- $cb->_extract
- Delegate to Archive::Extract
-
-=head1 METHODS
-
-=head2 $dir = _extract( module => $modobj, [perl => '/path/to/perl', extractdir => '/path/to/extract/to', prefer_bin => BOOL, verbose => BOOL, force => BOOL] )
-
-C<_extract> will take a module object and extract it to C<extractdir>
-if provided, or the default location which is obtained from your
-config.
-
-The file name is obtained by looking at C<< $modobj->status->fetch >>
-and will be parsed to see if it's a tar or zip archive.
-
-If it's a zip archive, C<__unzip> will be called, otherwise C<__untar>
-will be called. In the unlikely event the file is of neither format,
-an error will be thrown.
-
-C<_extract> takes the following options:
-
-=over 4
-
-=item module
-
-A C<CPANPLUS::Module> object. This is required.
-
-=item extractdir
-
-The directory to extract the archive to. By default this looks
-something like:
- /CPANPLUS_BASE/PERL_VERSION/BUILD/MODULE_NAME
-
-=item prefer_bin
-
-A flag indicating whether you prefer a pure perl solution, ie
-C<Archive::Tar> or C<Archive::Zip> respectively, or a binary solution
-like C<unzip> and C<tar>.
-
-=item perl
-
-The path to the perl executable to use for any perl calls. Also used
-to determine the build version directory for extraction.
-
-=item verbose
-
-Specifies whether to be verbose or not. Defaults to your corresponding
-config entry.
-
-=item force
-
-Specifies whether to force the extraction or not. Defaults to your
-corresponding config entry.
-
-=back
-
-All other options are passed on verbatim to C<__unzip> or C<__untar>.
-
-Returns the directory the file was extracted to on success and false
-on failure.
-
-=cut
-
-sub _extract {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my( $mod, $verbose, $force );
- my $tmpl = {
- force => { default => $conf->get_conf('force'),
- store => \$force },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- prefer_bin => { default => $conf->get_conf('prefer_bin') },
- extractdir => { default => $conf->get_conf('extractdir') },
- module => { required => 1, allow => IS_MODOBJ, store => \$mod },
- perl => { default => $^X },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- ### did we already extract it ? ###
- my $loc = $mod->status->extract();
-
- if( $loc && !$force ) {
- msg(loc("Already extracted '%1' to '%2'. ".
- "Won't extract again without force",
- $mod->module, $loc), $verbose);
- return $loc;
- }
-
- ### did we already fetch the file? ###
- my $file = $mod->status->fetch();
- unless( -s $file ) {
- error( loc( "File '%1' has zero size: cannot extract", $file ) );
- return;
- }
-
- ### the dir to extract to ###
- my $to = $args->{'extractdir'} ||
- File::Spec->catdir(
- $conf->get_conf('base'),
- $self->_perl_version( perl => $args->{'perl'} ),
- $conf->_get_build('moddir'),
- );
-
- ### delegate to Archive::Extract ###
- ### set up some flags for archive::extract ###
- local $Archive::Extract::PREFER_BIN = $args->{'prefer_bin'};
- local $Archive::Extract::DEBUG = $conf->get_conf('debug');
- local $Archive::Extract::WARN = $verbose;
-
- my $ae = Archive::Extract->new( archive => $file );
-
- unless( $ae->extract( to => $to ) ) {
- error( loc( "Unable to extract '%1' to '%2': %3",
- $file, $to, $ae->error ) );
- return;
- }
-
- ### if ->files is not filled, we dont know what the hell was
- ### extracted.. try to offer a suggestion and bail :(
- unless ( $ae->files ) {
- error( loc( "'%1' was not able to determine extracted ".
- "files from the archive. Install '%2' and ensure ".
- "it works properly and try again",
- $ae->is_zip ? 'Archive::Zip' : 'Archive::Tar' ) );
- return;
- }
-
-
- ### print out what files we extracted ###
- msg(loc("Extracted '%1'",$_),$verbose) for @{$ae->files};
-
- ### set them all to be +w for the owner, so we don't get permission
- ### denied for overwriting files that are just +r
-
- ### this is too rigorous -- just change to +w for the owner [cpan #13358]
- #chmod 0755, map { File::Spec->rel2abs( File::Spec->catdir($to, $_) ) }
- # @{$ae->files};
-
- for my $file ( @{$ae->files} ) {
- my $path = File::Spec->rel2abs( File::Spec->catfile($to, $file) );
-
- $self->_mode_plus_w( file => $path );
- }
-
- ### check the return value for the extracted path ###
- ### Make an educated guess if we didn't get an extract_path
- ### back
- ### XXX apparently some people make their own dists and they
- ### pack up '.' which means the leading directory is '.'
- ### and only the second directory is the actual module directory
- ### so, we'll have to check if our educated guess exists first,
- ### then see if the extract path works.. and if nothing works...
- ### well, then we really don't know.
-
- my $dir;
- for my $try (
- File::Spec->rel2abs(
- ### _safe_path must be called before catdir because catdir on
- ### VMS currently will not handle the extra dots in the directories.
- File::Spec->catdir( $self->_safe_path( path => $to ) ,
- $self->_safe_path( path =>
- $mod->package_name .'-'.
- $mod->package_version
- ) ) ) ,
- File::Spec->rel2abs( $ae->extract_path ),
- ) {
- ($dir = $try) && last if -d $try;
- }
-
- ### test if the dir exists ###
- unless( $dir && -d $dir ) {
- error(loc("Unable to determine extract dir for '%1'",$mod->module));
- return;
-
- } else {
- msg(loc("Extracted '%1' to '%2'", $mod->module, $dir), $verbose);
-
- ### register where we extracted the files to,
- ### also store what files were extracted
- $mod->status->extract( $dir );
- $mod->status->files( $ae->files );
- }
-
- ### also, figure out what kind of install we're dealing with ###
- $mod->get_installer_type();
-
- return $mod->status->extract();
-}
-
-1;
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Fetch.pm b/cpan/CPANPLUS/lib/CPANPLUS/Internals/Fetch.pm
deleted file mode 100644
index 098d1e3761..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Fetch.pm
+++ /dev/null
@@ -1,476 +0,0 @@
-package CPANPLUS::Internals::Fetch;
-use deprecate;
-
-use strict;
-
-use CPANPLUS::Error;
-use CPANPLUS::Internals::Constants;
-
-use File::Fetch;
-use File::Spec;
-use Cwd qw[cwd];
-use IPC::Cmd qw[run];
-use Params::Check qw[check];
-use Module::Load::Conditional qw[can_load];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-$Params::Check::VERBOSE = 1;
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Internals::Fetch - internals for fetching files
-
-=head1 SYNOPSIS
-
- my $output = $cb->_fetch(
- module => $modobj,
- fetchdir => '/path/to/save/to',
- verbose => BOOL,
- force => BOOL,
- );
-
- $cb->_add_fail_host( host => 'foo.com' );
- $cb->_host_ok( host => 'foo.com' );
-
-
-=head1 DESCRIPTION
-
-CPANPLUS::Internals::Fetch fetches files from either ftp, http, file
-or rsync mirrors.
-
-This is the rough flow:
-
- $cb->_fetch
- Delegate to File::Fetch;
-
-
-=head1 METHODS
-
-=cut
-
-=head1 $path = _fetch( module => $modobj, [fetchdir => '/path/to/save/to', fetch_from => 'scheme://path/to/fetch/from', verbose => BOOL, force => BOOL, prefer_bin => BOOL, ttl => $seconds] )
-
-C<_fetch> will fetch files based on the information in a module
-object. You always need a module object. If you want a fake module
-object for a one-off fetch, look at C<CPANPLUS::Module::Fake>.
-
-C<fetchdir> is the place to save the file to. Usually this
-information comes from your configuration, but you can override it
-expressly if needed.
-
-C<fetch_from> lets you specify an URI to get this file from. If you
-do not specify one, your list of configured hosts will be probed to
-download the file from.
-
-C<force> forces a new download, even if the file already exists.
-
-C<verbose> simply indicates whether or not to print extra messages.
-
-C<prefer_bin> indicates whether you prefer the use of commandline
-programs over perl modules. Defaults to your corresponding config
-setting.
-
-C<ttl> (in seconds) indicates how long a cached copy is valid for. If
-the fetch time of the local copy is within the ttl, the cached copy is
-returned. Otherwise, the file is refetched.
-
-C<_fetch> figures out, based on the host list, what scheme to use and
-from there, delegates to C<File::Fetch> do the actual fetching.
-
-Returns the path of the output file on success, false on failure.
-
-Note that you can set a C<blacklist> on certain methods in the config.
-Simply add the identifying name of the method (ie, C<lwp>) to:
- $conf->_set_fetch( blacklist => ['lwp'] );
-
-And the C<LWP> function will be skipped by C<File::Fetch>.
-
-=cut
-
-sub _fetch {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- local $Params::Check::NO_DUPLICATES = 0;
-
- my ($modobj, $verbose, $force, $fetch_from, $ttl);
- my $tmpl = {
- module => { required => 1, allow => IS_MODOBJ, store => \$modobj },
- fetchdir => { default => $conf->get_conf('fetchdir') },
- fetch_from => { default => '', store => \$fetch_from },
- force => { default => $conf->get_conf('force'),
- store => \$force },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- prefer_bin => { default => $conf->get_conf('prefer_bin') },
- ttl => { default => 0, store => \$ttl },
- };
-
-
- my $args = check( $tmpl, \%hash ) or return;
-
- ### check if we already downloaded the thing ###
- if( (my $where = $modobj->status->fetch()) and not $force and not $ttl ) {
-
- msg(loc("Already fetched '%1' to '%2', " .
- "won't fetch again without force",
- $modobj->module, $where ), $verbose );
- return $where;
- }
-
- my ($remote_file, $local_file, $local_path);
-
- ### build the local path to download to ###
- {
- $local_path = $args->{fetchdir} ||
- File::Spec->catdir(
- $conf->get_conf('base'),
- $modobj->path,
- );
-
- ### create the path if it doesn't exist ###
- unless( -d $local_path ) {
- unless( $self->_mkdir( dir => $local_path ) ) {
- msg( loc("Could not create path '%1'", $local_path), $verbose);
- return;
- }
- }
-
- $local_file = File::Spec->rel2abs(
- File::Spec->catfile(
- $local_path,
- $modobj->package,
- )
- );
-
- ### do we already have the file? if so, can we use the cached version,
- ### or do we need to refetch?
- if( -e $local_file ) {
-
- my $unlink = 0;
- my $use_cached = 0;
-
- ### if force is in effect, we have to refetch
- if( $force ) {
- $unlink++
-
- ### if you provided a ttl, and it was exceeded, we'll refetch,
- } elsif( $ttl and ([stat $local_file]->[9] + $ttl > time) ) {
- msg(loc("Using cached file '%1' on disk; ".
- "ttl (%2s) is not exceeded",
- $local_file, $ttl), $verbose );
-
- $use_cached++;
-
- ### if you provided a ttl, and the above conditional didn't match,
- ### we exceeded the ttl, so we refetch
- } elsif ( $ttl ) {
- $unlink++;
-
- ### otherwise we can use the cached version
- } else {
- $use_cached++;
- }
-
- if( $unlink ) {
- ### some fetches will fail if the files exist already, so let's
- ### delete them first
- 1 while unlink $local_file;
-
- msg(loc("Could not delete %1, some methods may " .
- "fail to force a download", $local_file), $verbose)
- if -e $local_file;
-
- } else {
-
- ### store where we fetched it ###
- $modobj->status->fetch( $local_file );
-
- return $local_file;
- }
- }
- }
-
-
- ### we got a custom URI
- if ( $fetch_from ) {
- my $abs = $self->__file_fetch( from => $fetch_from,
- to => $local_path,
- verbose => $verbose );
-
- unless( $abs ) {
- error(loc("Unable to download '%1'", $fetch_from));
- return;
- }
-
- ### store where we fetched it ###
- $modobj->status->fetch( $abs );
-
- return $abs;
-
- ### we will get it from one of our mirrors
- } else {
- ### build the remote path to download from ###
- { $remote_file = File::Spec::Unix->catfile(
- $modobj->path,
- $modobj->package,
- );
- unless( $remote_file ) {
- error( loc('No remote file given for download') );
- return;
- }
- }
-
- ### see if we even have a host or a method to use to download with ###
- my $found_host;
- my @maybe_bad_host;
-
- HOST: {
- ### F*CKING PIECE OF F*CKING p4 SHIT makes
- ### '$File :: Fetch::SOME_VAR'
- ### into a meta variable and starts substituting the file name...
- ### GRAAAAAAAAAAAAAAAAAAAAAAH!
- ### use ' to combat it!
-
- ### set up some flags for File::Fetch ###
- local $File'Fetch::BLACKLIST = $conf->_get_fetch('blacklist');
- local $File'Fetch::TIMEOUT = $conf->get_conf('timeout');
- local $File'Fetch::DEBUG = $conf->get_conf('debug');
- local $File'Fetch::FTP_PASSIVE = $conf->get_conf('passive');
- local $File'Fetch::FROM_EMAIL = $conf->get_conf('email');
- local $File'Fetch::PREFER_BIN = $conf->get_conf('prefer_bin');
- local $File'Fetch::WARN = $verbose;
-
-
- ### loop over all hosts we have ###
- for my $host ( @{$conf->get_conf('hosts')} ) {
- $found_host++;
-
- my $where;
-
- ### file:// uris are special and need parsing
- if( $host->{'scheme'} eq 'file' ) {
-
- ### the full path in the native format of the OS
- my $host_spec =
- File::Spec->file_name_is_absolute( $host->{'path'} )
- ? $host->{'path'}
- : File::Spec->rel2abs( $host->{'path'} );
-
- ### there might be volumes involved on vms/win32
- if( ON_WIN32 or ON_VMS ) {
-
- ### now extract the volume in order to be Win32 and
- ### VMS friendly.
- ### 'no_file' indicates that there's no file part
- ### of this path, so we only get 2 bits returned.
- my ($vol, $host_path) = File::Spec->splitpath(
- $host_spec, 'no_file'
- );
-
- ### and split up the directories
- my @host_dirs = File::Spec->splitdir( $host_path );
-
- ### if we got a volume we pretend its a directory for
- ### the sake of the file:// url
- if( defined $vol and $vol ) {
-
- ### D:\foo\bar needs to be encoded as D|\foo\bar
- ### For details, see the following link:
- ### http://en.wikipedia.org/wiki/File://
- ### The RFC doesn't seem to address Windows volume
- ### descriptors but it does address VMS volume
- ### descriptors, however wikipedia covers a bit of
- ### history regarding win32
- $vol =~ s/:$/|/ if ON_WIN32;
-
- $vol =~ s/:// if ON_VMS;
-
- ### XXX i'm not sure what cases this is addressing.
- ### this comes straight from dmq's file:// patches
- ### for win32. --kane
- ### According to dmq, the best summary is:
- ### "if file:// urls dont look right on VMS reuse
- ### the win32 logic and see if that fixes things"
-
- ### first element not empty? Might happen on VMS.
- ### prepend the volume in that case.
- if( $host_dirs[0] ) {
- unshift @host_dirs, $vol;
-
- ### element empty? reuse it to store the volume
- ### encoded as a directory name. (Win32/VMS)
- } else {
- $host_dirs[0] = $vol;
- }
- }
-
- ### now it's in UNIX format, which is the same format
- ### as used for URIs
- $host_spec = File::Spec::Unix->catdir( @host_dirs );
- }
-
- ### now create the file:// uri from the components
- $where = CREATE_FILE_URI->(
- File::Spec::Unix->catfile(
- $host->{'host'} || '',
- $host_spec,
- $remote_file,
- )
- );
-
- ### its components will be in unix format, for a http://,
- ### ftp:// or any other style of URI
- } else {
- my $mirror_path = File::Spec::Unix->catfile(
- $host->{'path'}, $remote_file
- );
-
- my %args = ( scheme => $host->{scheme},
- host => $host->{host},
- path => $mirror_path,
- );
-
- $where = $self->_host_to_uri( %args );
- }
-
- my $abs = $self->__file_fetch( from => $where,
- to => $local_path,
- verbose => $verbose );
-
- ### we got a path back?
- if( $abs ) {
- ### store where we fetched it ###
- $modobj->status->fetch( $abs );
-
- ### this host is good, the previous ones are apparently
- ### not, so mark them as such.
- $self->_add_fail_host( host => $_ ) for @maybe_bad_host;
-
- return $abs;
- }
-
- ### so we tried to get the file but didn't actually fetch it --
- ### there's a chance this host is bad. mark it as such and
- ### actually flag it back if we manage to get the file
- ### somewhere else
- push @maybe_bad_host, $host;
- }
- }
-
- $found_host
- ? error(loc("Fetch failed: host list exhausted " .
- "-- are you connected today?"))
- : error(loc("No hosts found to download from " .
- "-- check your config"));
- }
-
- return;
-}
-
-sub __file_fetch {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my ($where, $local_path, $verbose);
- my $tmpl = {
- from => { required => 1, store => \$where },
- to => { required => 1, store => \$local_path },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- };
-
- check( $tmpl, \%hash ) or return;
-
- msg(loc("Trying to get '%1'", $where ), $verbose );
-
- ### build the object ###
- my $ff = File::Fetch->new( uri => $where );
-
- ### sanity check ###
- error(loc("Bad uri '%1'",$where)), return unless $ff;
-
- if( my $file = $ff->fetch( to => $local_path ) ) {
- unless( -e $file && -s _ ) {
- msg(loc("'%1' said it fetched '%2', but it was not created",
- 'File::Fetch', $file), $verbose);
-
- } else {
- my $abs = File::Spec->rel2abs( $file );
-
- ### so TTLs will work
- $self->_update_timestamp( file => $abs );
-
- return $abs;
- }
-
- } else {
- error(loc("Fetching of '%1' failed: %2", $where, $ff->error));
- }
-
- return;
-}
-
-=pod
-
-=head2 _add_fail_host( host => $host_hashref )
-
-Mark a particular host as bad. This makes C<CPANPLUS::Internals::Fetch>
-skip it in fetches until this cache is flushed.
-
-=head2 _host_ok( host => $host_hashref )
-
-Query the cache to see if this host is ok, or if it has been flagged
-as bad.
-
-Returns true if the host is ok, false otherwise.
-
-=cut
-
-{ ### caching functions ###
-
- sub _add_fail_host {
- my $self = shift;
- my %hash = @_;
-
- my $host;
- my $tmpl = {
- host => { required => 1, default => {},
- strict_type => 1, store => \$host },
- };
-
- check( $tmpl, \%hash ) or return;
-
- return $self->_hosts->{$host} = 1;
- }
-
- sub _host_ok {
- my $self = shift;
- my %hash = @_;
-
- my $host;
- my $tmpl = {
- host => { required => 1, store => \$host },
- };
-
- check( $tmpl, \%hash ) or return;
-
- return $self->_hosts->{$host} ? 0 : 1;
- }
-}
-
-
-1;
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Report.pm b/cpan/CPANPLUS/lib/CPANPLUS/Internals/Report.pm
deleted file mode 100644
index c5892f93bb..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Report.pm
+++ /dev/null
@@ -1,696 +0,0 @@
-package CPANPLUS::Internals::Report;
-use deprecate;
-
-use strict;
-
-use CPANPLUS::Error;
-use CPANPLUS::Internals::Constants;
-use CPANPLUS::Internals::Constants::Report;
-
-use Data::Dumper;
-
-use Params::Check qw[check];
-use Module::Load::Conditional qw[can_load];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-use version;
-
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-$Params::Check::VERBOSE = 1;
-
-### for the version ###
-require CPANPLUS::Internals;
-
-=head1 NAME
-
-CPANPLUS::Internals::Report - internals for sending test reports
-
-=head1 SYNOPSIS
-
- ### enable test reporting
- $cb->configure_object->set_conf( cpantest => 1 );
-
- ### set custom mx host, shouldn't normally be needed
- $cb->configure_object->set_conf( cpantest_mx => 'smtp.example.com' );
-
-=head1 DESCRIPTION
-
-This module provides all the functionality to send test reports to
-C<http://testers.cpan.org> using the C<Test::Reporter> module.
-
-All methods will be called automatically if you have C<CPANPLUS>
-configured to enable test reporting (see the C<SYNOPSIS>).
-
-=head1 METHODS
-
-=head2 $bool = $cb->_have_query_report_modules
-
-This function checks if all the required modules are here for querying
-reports. It returns true and loads them if they are, or returns false
-otherwise.
-
-=head2 $bool = $cb->_have_send_report_modules
-
-This function checks if all the required modules are here for sending
-reports. It returns true and loads them if they are, or returns false
-otherwise.
-
-=cut
-
-### XXX remove this list and move it into selfupdate, somehow..
-### this is dual administration
-{ my $query_list = {
- 'File::Fetch' => '0.13_02',
- 'Parse::CPAN::Meta' => '0.0',
- 'File::Temp' => '0.0',
- };
-
- my $send_list = {
- %$query_list,
- 'Test::Reporter' => '1.54',
- };
-
- sub _have_query_report_modules {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my $tmpl = {
- verbose => { default => $conf->get_conf('verbose') },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- return can_load( modules => $query_list, verbose => $args->{verbose} )
- ? 1
- : 0;
- }
-
- sub _have_send_report_modules {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my $tmpl = {
- verbose => { default => $conf->get_conf('verbose') },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- return can_load( modules => $send_list, verbose => $args->{verbose} )
- ? 1
- : 0;
- }
-}
-
-=head2 @list = $cb->_query_report( module => $modobj, [all_versions => BOOL, verbose => BOOL] )
-
-This function queries the CPAN testers database at
-I<http://testers.cpan.org/> for test results of specified module objects,
-module names or distributions.
-
-The optional argument C<all_versions> controls whether all versions of
-a given distribution should be grabbed. It defaults to false
-(fetching only reports for the current version).
-
-Returns the a list with the following data structures (for CPANPLUS
-version 0.042) on success, or false on failure. The contents of the
-data structure depends on what I<http://testers.cpan.org> returns,
-but generally looks like this:
-
- {
- 'grade' => 'PASS',
- 'dist' => 'CPANPLUS-0.042',
- 'platform' => 'i686-pld-linux-thread-multi'
- 'details' => 'http://nntp.x.perl.org/group/perl.cpan.testers/98316'
- ...
- },
- {
- 'grade' => 'PASS',
- 'dist' => 'CPANPLUS-0.042',
- 'platform' => 'i686-linux-thread-multi'
- 'details' => 'http://nntp.x.perl.org/group/perl.cpan.testers/99416'
- ...
- },
- {
- 'grade' => 'FAIL',
- 'dist' => 'CPANPLUS-0.042',
- 'platform' => 'cygwin-multi-64int',
- 'details' => 'http://nntp.x.perl.org/group/perl.cpan.testers/99371'
- ...
- },
- {
- 'grade' => 'FAIL',
- 'dist' => 'CPANPLUS-0.042',
- 'platform' => 'i586-linux',
- 'details' => 'http://nntp.x.perl.org/group/perl.cpan.testers/99396'
- ...
- },
-
-The status of the test can be one of the following:
-UNKNOWN, PASS, FAIL or NA (not applicable).
-
-=cut
-
-sub _query_report {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my($mod, $verbose, $all);
- my $tmpl = {
- module => { required => 1, allow => IS_MODOBJ,
- store => \$mod },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- all_versions => { default => 0, store => \$all },
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### check if we have the modules we need for querying
- return unless $self->_have_query_report_modules( verbose => 1 );
-
-
- ### XXX no longer use LWP here. However, that means we don't
- ### automagically set proxies anymore!!!
- # my $ua = LWP::UserAgent->new;
- # $ua->agent( CPANPLUS_UA->() );
- #
- ### set proxies if we have them ###
- # $ua->env_proxy();
-
- my $url = TESTERS_URL->($mod->package_name);
- my $ff = File::Fetch->new( uri => $url );
-
- msg( loc("Fetching: '%1'", $url), $verbose );
-
- my $res = do {
- my $tempdir = File::Temp::tempdir();
- my $where = $ff->fetch( to => $tempdir );
-
- unless( $where ) {
- error( loc( "Fetching report for '%1' failed: %2",
- $url, $ff->error ) );
- return;
- }
-
- my $fh = OPEN_FILE->( $where );
-
- do { local $/; <$fh> };
- };
-
- my ($aref) = eval { Parse::CPAN::Meta::Load( $res ) };
-
- if( $@ ) {
- error(loc("Error reading result: %1", $@));
- return;
- };
-
- my $dist = $mod->package_name .'-'. $mod->package_version;
- my $details = TESTERS_DETAILS_URL->($mod->package_name);
-
- my @rv;
- for my $href ( @$aref ) {
- next unless $all or defined $href->{'distversion'} &&
- $href->{'distversion'} eq $dist;
-
- $href->{'details'} = $details;
-
- ### backwards compatibility :(
- $href->{'dist'} ||= $href->{'distversion'};
- $href->{'grade'} ||= $href->{'action'} || $href->{'status'};
-
- push @rv, $href;
- }
-
- return @rv if @rv;
- return;
-}
-
-=pod
-
-=head2 $bool = $cb->_send_report( module => $modobj, buffer => $make_output, failed => BOOL, [save => BOOL, address => $email_to, verbose => BOOL, force => BOOL]);
-
-This function sends a testers report to C<cpan-testers@perl.org> for a
-particular distribution.
-It returns true on success, and false on failure.
-
-It takes the following options:
-
-=over 4
-
-=item module
-
-The module object of this particular distribution
-
-=item buffer
-
-The output buffer from the 'make/make test' process
-
-=item failed
-
-Boolean indicating if the 'make/make test' went wrong
-
-=item save
-
-Boolean indicating if the report should be saved locally instead of
-mailed out. If provided, this function will return the location the
-report was saved to, rather than a simple boolean 'TRUE'.
-
-Defaults to false.
-
-=item address
-
-The email address to mail the report for. You should never need to
-override this, but it might be useful for debugging purposes.
-
-Defaults to C<cpan-testers@perl.org>.
-
-=item verbose
-
-Boolean indicating on whether or not to be verbose.
-
-Defaults to your configuration settings
-
-=item force
-
-Boolean indicating whether to force the sending, even if the max
-amount of reports for fails have already been reached, or if you
-may already have sent it before.
-
-Defaults to your configuration settings
-
-=back
-
-=cut
-
-sub _send_report {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- ### do you even /have/ test::reporter? ###
- unless( $self->_have_send_report_modules(verbose => 1) ) {
- error( loc( "You don't have '%1' (or modules required by '%2') ".
- "installed, you cannot report test results.",
- 'Test::Reporter', 'Test::Reporter' ) );
- return;
- }
-
- ### check arguments ###
- my ($buffer, $failed, $mod, $verbose, $force, $address, $save,
- $tests_skipped, $status );
- my $tmpl = {
- module => { required => 1, store => \$mod, allow => IS_MODOBJ },
- buffer => { required => 1, store => \$buffer },
- failed => { required => 1, store => \$failed },
- status => { default => {}, store => \$status, strict_type => 1 },
- address => { default => CPAN_TESTERS_EMAIL, store => \$address },
- save => { default => 0, store => \$save },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- force => { default => $conf->get_conf('force'),
- store => \$force },
- tests_skipped
- => { default => 0, store => \$tests_skipped },
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### get the data to fill the email with ###
- my $name = $mod->module;
- my $dist = $mod->package_name . '-' . $mod->package_version;
- my $author = $mod->author->author;
- my $distfile= $mod->author->cpanid . "/" . $mod->package;
- my $email = $mod->author->email || CPAN_MAIL_ACCOUNT->( $author );
- my $cp_conf = $conf->get_conf('cpantest') || '';
- my $int_ver = $CPANPLUS::Internals::VERSION;
- my $cb = $mod->parent;
-
-
- ### will be 'fetch', 'make', 'test', 'install', etc ###
- my $stage = TEST_FAIL_STAGE->($buffer);
-
- ### determine the grade now ###
-
- my $grade;
- ### check if this is a platform specific module ###
- ### if we failed the test, there may be reasons why
- ### an 'NA' might have to be instead
- GRADE: { if ( $failed ) {
-
-
- ### XXX duplicated logic between this block
- ### and REPORTED_LOADED_PREREQS :(
-
- ### figure out if the prereqs are on CPAN at all
- ### -- if not, send NA grade
- ### Also, if our version of prereqs is too low,
- ### -- send NA grade.
- ### This is to address bug: #25327: do not count
- ### as FAIL modules where prereqs are not filled
- { my $prq = $mod->status->prereqs || {};
-
- PREREQ: while( my($prq_name,$prq_ver) = each %$prq ) {
-
- # 'perl' listed as prereq
-
- if ( $prq_name eq 'perl' ) {
- my $req_ver = eval { version->new( $prq_ver ) };
- next PREREQ unless $req_ver;
- if ( version->new( $] ) < $req_ver ) {
- msg(loc("'%1' requires a higher version of perl than your current ".
- "version -- sending N/A grade.", $name), $verbose);
-
- $grade = GRADE_NA;
- last GRADE;
- }
- next PREREQ;
- }
-
- my $obj = $cb->module_tree( $prq_name );
- my $sub = CPANPLUS::Module->can(
- 'module_is_supplied_with_perl_core' );
-
- ### if we can't find the module and it's not supplied with core.
- ### this addresses: #32064: NA reports generated for failing
- ### tests where core prereqs are specified
- ### Note that due to a bug in Module::CoreList, in some released
- ### version of perl (5.8.6+ and 5.9.2-4 at the time of writing)
- ### 'Config' is not recognized as a core module. See this bug:
- ### http://rt.cpan.org/Ticket/Display.html?id=32155
- if( !$obj and !defined $sub->( $prq_name ) ) {
- msg(loc( "Prerequisite '%1' for '%2' could not be obtained".
- " from CPAN -- sending N/A grade",
- $prq_name, $name ), $verbose );
-
- $grade = GRADE_NA;
- last GRADE;
- }
-
- if ( !$obj ) {
- my $vcore = $sub->( $prq_name );
- if ( $cb->_vcmp( $prq_ver, $vcore ) > 0 ) {
- msg(loc( "Version of core module '%1' ('%2') is too low for ".
- "'%3' (needs '%4') -- sending N/A grade",
- $prq_name, $vcore,
- $name, $prq_ver ), $verbose );
-
- $grade = GRADE_NA;
- last GRADE;
- }
- }
-
- if( $obj and $cb->_vcmp( $prq_ver, $obj->installed_version ) > 0 ) {
- msg(loc( "Installed version of '%1' ('%2') is too low for ".
- "'%3' (needs '%4') -- sending N/A grade",
- $prq_name, $obj->installed_version,
- $name, $prq_ver ), $verbose );
-
- $grade = GRADE_NA;
- last GRADE;
- }
- }
- }
-
- unless( RELEVANT_TEST_RESULT->($mod) ) {
- msg(loc(
- "'%1' is a platform specific module, and the test results on".
- " your platform are not relevant --sending N/A grade.",
- $name), $verbose);
-
- $grade = GRADE_NA;
-
- } elsif ( UNSUPPORTED_OS->( $buffer ) ) {
- msg(loc(
- "'%1' is a platform specific module, and the test results on".
- " your platform are not relevant --sending N/A grade.",
- $name), $verbose);
-
- $grade = GRADE_NA;
-
- ### you dont have a high enough perl version?
- } elsif ( PERL_VERSION_TOO_LOW->( $buffer ) ) {
- msg(loc("'%1' requires a higher version of perl than your current ".
- "version -- sending N/A grade.", $name), $verbose);
-
- $grade = GRADE_NA;
-
- ### perhaps where were no tests...
- ### see if the thing even had tests ###
- } elsif ( NO_TESTS_DEFINED->( $buffer ) ) {
- $grade = GRADE_UNKNOWN;
- ### failures in PL or make/build stage are now considered UNKNOWN
- } elsif ( $stage !~ /\btest\b/ ) {
-
- $grade = GRADE_UNKNOWN
-
- } else {
-
- $grade = GRADE_FAIL;
- }
-
- ### if we got here, it didn't fail and tests were present.. so a PASS
- ### is in order
- } else {
- $grade = GRADE_PASS;
- } }
-
- ### so an error occurred, let's see what stage it went wrong in ###
-
- ### the header -- always include so the CPANPLUS version is apparent
- my $message = REPORT_MESSAGE_HEADER->( $int_ver, $author );
-
- if( $grade eq GRADE_FAIL or $grade eq GRADE_UNKNOWN) {
-
- ### return if one or more missing external libraries
- if( my @missing = MISSING_EXTLIBS_LIST->($buffer) ) {
- msg(loc("Not sending test report - " .
- "external libraries not pre-installed"));
- return 1;
- }
-
- ### return if we're only supposed to report make_test failures ###
- return 1 if $cp_conf =~ /\bmaketest_only\b/i
- and ($stage !~ /\btest\b/);
-
- my $capture = ( $status && defined $status->{capture} ? $status->{capture} : $buffer );
- ### the bit where we inform what went wrong
- $message .= REPORT_MESSAGE_FAIL_HEADER->( $stage, $capture );
-
- ### was it missing prereqs? ###
- if( my @missing = MISSING_PREREQS_LIST->($buffer) ) {
- if(!$self->_verify_missing_prereqs(
- module => $mod,
- missing => \@missing
- )) {
- msg(loc("Not sending test report - " .
- "bogus missing prerequisites report"));
- return 1;
- }
- $message .= REPORT_MISSING_PREREQS->($author,$email,@missing);
- }
-
- ### was it missing test files? ###
- if( NO_TESTS_DEFINED->($buffer) ) {
- $message .= REPORT_MISSING_TESTS->();
- }
-
- ### add a list of what modules have been loaded of your prereqs list
- $message .= REPORT_LOADED_PREREQS->($mod);
-
- ### add a list of versions of toolchain modules
- $message .= REPORT_TOOLCHAIN_VERSIONS->($mod);
-
- ### the footer
- $message .= REPORT_MESSAGE_FOOTER->();
-
- ### it may be another grade than fail/unknown.. may be worth noting
- ### that tests got skipped, since the buffer is not added in
- } elsif ( $tests_skipped ) {
- $message .= REPORT_TESTS_SKIPPED->();
- } elsif( $grade eq GRADE_NA) {
-
- my $capture = ( $status && defined $status->{capture} ? $status->{capture} : $buffer );
-
- ### add the reason for the NA to the buffer
- $capture = join $/, $capture, map {
- '[' . $_->tag . '] [' . $_->when . '] ' .
- $_->message } ( CPANPLUS::Error->stack )[-1];
-
- ### the bit where we inform what went wrong
- $message .= REPORT_MESSAGE_FAIL_HEADER->( $stage, $capture );
-
- ### add a list of what modules have been loaded of your prereqs list
- $message .= REPORT_LOADED_PREREQS->($mod);
-
- ### add a list of versions of toolchain modules
- $message .= REPORT_TOOLCHAIN_VERSIONS->($mod);
-
- ### the footer
- $message .= REPORT_MESSAGE_FOOTER->();
-
- } elsif ( $grade eq GRADE_PASS and ( $status and defined $status->{capture} ) ) {
- ### the bit where we inform what went right
- $message .= REPORT_MESSAGE_PASS_HEADER->( $stage, $status->{capture} );
-
- ### add a list of what modules have been loaded of your prereqs list
- $message .= REPORT_LOADED_PREREQS->($mod);
-
- ### add a list of versions of toolchain modules
- $message .= REPORT_TOOLCHAIN_VERSIONS->($mod);
-
- ### the footer
- $message .= REPORT_MESSAGE_FOOTER->();
-
- }
-
- msg( loc("Sending test report for '%1'", $dist), $verbose);
-
- ### reporter object ###
- my $reporter = do {
- my $args = $conf->get_conf('cpantest_reporter_args') || {};
-
- unless( UNIVERSAL::isa( $args, 'HASH' ) ) {
- error(loc("'%1' must be a hashref, ignoring...",
- 'cpantest_reporter_args'));
- $args = {};
- }
-
- Test::Reporter->new(
- grade => $grade,
- distribution => $dist,
- distfile => $distfile,
- via => "CPANPLUS $int_ver",
- timeout => $conf->get_conf('timeout') || 60,
- debug => $conf->get_conf('debug'),
- %$args,
- );
- };
-
- ### set a custom mx, if requested
- $reporter->mx( [ $conf->get_conf('cpantest_mx') ] )
- if $conf->get_conf('cpantest_mx');
-
- ### set the from address ###
- $reporter->from( $conf->get_conf('email') )
- if $conf->get_conf('email') !~ /\@example\.\w+$/i;
-
- ### give the user a chance to programatically alter the message
- $message = $self->_callbacks->munge_test_report->($mod, $message, $grade);
-
- ### add the body if we have any ###
- $reporter->comments( $message ) if defined $message && length $message;
-
- ### do a callback to ask if we should send the report
- unless ($self->_callbacks->send_test_report->($mod, $grade)) {
- msg(loc("Ok, not sending test report"));
- return 1;
- }
-
- ### do a callback to ask if we should edit the report
- if ($self->_callbacks->edit_test_report->($mod, $grade)) {
- ### test::reporter 1.20 and lower don't have a way to set
- ### the preferred editor with a method call, but it does
- ### respect your env variable, so let's set that.
- local $ENV{VISUAL} = $conf->get_program('editor')
- if $conf->get_program('editor');
-
- $reporter->edit_comments;
- }
-
- ### allow to be overridden, but default to the normal address ###
- $reporter->address( $address );
-
- ### should we save it locally? ###
- if( $save ) {
- if( my $file = $reporter->write() ) {
- msg(loc("Successfully wrote report for '%1' to '%2'",
- $dist, $file), $verbose);
- return $file;
-
- } else {
- error(loc("Failed to write report for '%1'", $dist));
- return;
- }
-
- ### XXX should we do an 'already sent' check? ###
- ### something broke :( ###
- }
- else {
- my $status;
- eval {
- $status = $reporter->send();
- };
- if ( $@ ) {
- error(loc("Could not send '%1' report for '%2': %3",
- $grade, $dist, $@));
- return;
- }
- if ( $status ) {
- msg(loc("Successfully sent '%1' report for '%2'", $grade, $dist),
- $verbose);
- return 1;
- }
- error(loc("Could not send '%1' report for '%2': %3",
- $grade, $dist, $reporter->errstr));
- return;
- }
-}
-
-sub _verify_missing_prereqs {
- my $self = shift;
- my %hash = @_;
-
- ### check arguments ###
- my ($mod, $missing);
- my $tmpl = {
- module => { required => 1, store => \$mod },
- missing => { required => 1, store => \$missing },
- };
-
- check( $tmpl, \%hash ) or return;
-
-
- my %missing = map {$_ => 1} @$missing;
- my $conf = $self->configure_object;
- my $extract = $mod->status->extract;
-
- ### Read pre-requisites from Makefile.PL or Build.PL (if there is one),
- ### of the form:
- ### 'PREREQ_PM' => {
- ### 'Compress::Zlib' => '1.20',
- ### 'Test::More' => 0,
- ### },
- ### Build.PL uses 'requires' instead of 'PREREQ_PM'.
-
- my @search;
- push @search, ($extract ? MAKEFILE_PL->( $extract ) : MAKEFILE_PL->());
- push @search, ($extract ? BUILD_PL->( $extract ) : BUILD_PL->());
-
- for my $file ( @search ) {
- if(-e $file and -r $file) {
- my $slurp = $self->_get_file_contents(file => $file);
- my ($prereq) =
- ($slurp =~ /'?(?:PREREQ_PM|requires)'?\s*=>\s*{(.*?)}/s);
- my @prereq =
- ($prereq =~ /'?([\w\:]+)'?\s*=>\s*'?\d[\d\.\-\_]*'?/sg);
- delete $missing{$_} for(@prereq);
- }
- }
-
- return 1 if(keys %missing); # There ARE missing prerequisites
- return; # All prerequisites accounted for
-}
-
-1;
-
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Search.pm b/cpan/CPANPLUS/lib/CPANPLUS/Internals/Search.pm
deleted file mode 100644
index 2a99dbfde3..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Search.pm
+++ /dev/null
@@ -1,367 +0,0 @@
-package CPANPLUS::Internals::Search;
-use deprecate;
-
-use strict;
-
-use CPANPLUS::Error;
-use CPANPLUS::Internals::Constants;
-use CPANPLUS::Module;
-use CPANPLUS::Module::Author;
-
-use File::Find;
-use File::Spec;
-
-use Params::Check qw[check allow];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-$Params::Check::VERBOSE = 1;
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Internals::Search - internals for searching for modules
-
-=head1 SYNOPSIS
-
- my $aref = $cpan->_search_module_tree(
- type => 'package',
- allow => [qr/DBI/],
- );
-
- my $aref = $cpan->_search_author_tree(
- type => 'cpanid',
- data => \@old_results,
- verbose => 1,
- allow => [qw|KANE AUTRIJUS|],
- );
-
- my $aref = $cpan->_all_installed( );
-
-=head1 DESCRIPTION
-
-The functions in this module are designed to find module(objects)
-based on certain criteria and return them.
-
-=head1 METHODS
-
-=head2 _search_module_tree( type => TYPE, allow => \@regexes, [data => \@previous_results ] )
-
-Searches the moduletree for module objects matching the criteria you
-specify. Returns an array ref of module objects on success, and false
-on failure.
-
-It takes the following arguments:
-
-=over 4
-
-=item type
-
-This can be any of the accessors for the C<CPANPLUS::Module> objects.
-This is a required argument.
-
-=item allow
-
-A set of rules, or more precisely, a list of regexes (via C<qr//> or
-plain strings), that the C<type> must adhere too. You can specify as
-many as you like, and it will be treated as an C<OR> search.
-For an C<AND> search, see the C<data> argument.
-
-This is a required argument.
-
-=item data
-
-An arrayref of previous search results. This is the way to do an C<AND>
-search -- C<_search_module_tree> will only search the module objects
-specified in C<data> if provided, rather than the moduletree itself.
-
-=back
-
-=cut
-
-# Although the Params::Check solution is more graceful, it is WAY too slow.
-#
-# This sample script:
-#
-# use CPANPLUS::Backend;
-# my $cb = new CPANPLUS::Backend;
-# $cb->module_tree;
-# my @list = $cb->search( type => 'module', allow => [qr/^Acme/] );
-# print $_->module, $/ for @list;
-#
-# Produced the following output using Dprof WITH params::check code
-#
-# Total Elapsed Time = 3.670024 Seconds
-# User+System Time = 3.390373 Seconds
-# Exclusive Times
-# %Time ExclSec CumulS #Calls sec/call Csec/c Name
-# 88.7 3.008 4.463 20610 0.0001 0.0002 Params::Check::check
-# 47.4 1.610 1.610 1 1.6100 1.6100 Storable::net_pstore
-# 25.6 0.869 0.737 20491 0.0000 0.0000 Locale::Maketext::Simple::_default
-# _gettext
-# 23.2 0.789 0.524 40976 0.0000 0.0000 Params::Check::_who_was_it
-# 23.2 0.789 0.677 20610 0.0000 0.0000 Params::Check::_sanity_check
-# 19.7 0.670 0.670 1 0.6700 0.6700 Storable::pretrieve
-# 14.1 0.480 0.211 41350 0.0000 0.0000 Params::Check::_convert_case
-# 11.5 0.390 0.256 20610 0.0000 0.0000 Params::Check::_hashdefs
-# 11.5 0.390 0.255 20697 0.0000 0.0000 Params::Check::_listreqs
-# 11.4 0.389 0.177 20653 0.0000 0.0000 Params::Check::_canon_key
-# 10.9 0.370 0.356 20697 0.0000 0.0000 Params::Check::_hasreq
-# 8.02 0.272 4.750 1 0.2723 4.7501 CPANPLUS::Internals::Search::_sear
-# ch_module_tree
-# 6.49 0.220 0.086 20653 0.0000 0.0000 Params::Check::_iskey
-# 6.19 0.210 0.077 20488 0.0000 0.0000 Params::Check::_store_error
-# 5.01 0.170 0.036 20680 0.0000 0.0000 CPANPLUS::Module::__ANON__
-#
-# and this output /without/
-#
-# Total Elapsed Time = 2.803426 Seconds
-# User+System Time = 2.493426 Seconds
-# Exclusive Times
-# %Time ExclSec CumulS #Calls sec/call Csec/c Name
-# 56.9 1.420 1.420 1 1.4200 1.4200 Storable::net_pstore
-# 25.6 0.640 0.640 1 0.6400 0.6400 Storable::pretrieve
-# 9.22 0.230 0.096 20680 0.0000 0.0000 CPANPLUS::Module::__ANON__
-# 7.06 0.176 0.272 1 0.1762 0.2719 CPANPLUS::Internals::Search::_sear
-# ch_module_tree
-# 3.21 0.080 0.098 10 0.0080 0.0098 IPC::Cmd::BEGIN
-# 1.60 0.040 0.205 13 0.0031 0.0158 CPANPLUS::Internals::BEGIN
-# 1.20 0.030 0.030 29 0.0010 0.0010 vars::BEGIN
-# 1.20 0.030 0.117 10 0.0030 0.0117 Log::Message::BEGIN
-# 1.20 0.030 0.029 9 0.0033 0.0033 CPANPLUS::Internals::Search::BEGIN
-# 0.80 0.020 0.020 5 0.0040 0.0040 DynaLoader::dl_load_file
-# 0.80 0.020 0.127 10 0.0020 0.0127 CPANPLUS::Module::BEGIN
-# 0.80 0.020 0.389 2 0.0099 0.1944 main::BEGIN
-# 0.80 0.020 0.359 12 0.0017 0.0299 CPANPLUS::Backend::BEGIN
-# 0.40 0.010 0.010 30 0.0003 0.0003 Config::FETCH
-# 0.40 0.010 0.010 18 0.0006 0.0005 Locale::Maketext::Simple::load_loc
-#
-
-sub _search_module_tree {
-
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my($mods,$list,$verbose,$type);
- my $tmpl = {
- data => { default => [],
- strict_type=> 1, store => \$mods },
- allow => { required => 1, default => [ ], strict_type => 1,
- store => \$list },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- type => { required => 1, allow => [CPANPLUS::Module->accessors()],
- store => \$type },
- };
-
- my $args = do {
- ### don't check the template for sanity
- ### -- we know it's good and saves a lot of performance
- local $Params::Check::SANITY_CHECK_TEMPLATE = 0;
-
- check( $tmpl, \%hash );
- } or return;
-
- ### a list of module objects was supplied
- if( @$mods ) {
- local $Params::Check::VERBOSE = 0;
-
- my @rv;
- for my $mod (@$mods) {
- #push @rv, $mod if check(
- # { $type => { allow => $list } },
- # { $type => $mod->$type() }
- # );
- push @rv, $mod if allow( $mod->$type() => $list );
-
- }
- return \@rv;
-
- } else {
- my @rv = $self->_source_search_module_tree(
- allow => $list,
- type => $type,
- );
- return \@rv;
- }
-}
-
-=pod
-
-=head2 _search_author_tree( type => TYPE, allow => \@regexex, [data => \@previous_results ] )
-
-Searches the authortree for author objects matching the criteria you
-specify. Returns an array ref of author objects on success, and false
-on failure.
-
-It takes the following arguments:
-
-=over 4
-
-=item type
-
-This can be any of the accessors for the C<CPANPLUS::Module::Author>
-objects. This is a required argument.
-
-=item allow
-
-
-A set of rules, or more precisely, a list of regexes (via C<qr//> or
-plain strings), that the C<type> must adhere too. You can specify as
-many as you like, and it will be treated as an C<OR> search.
-For an C<AND> search, see the C<data> argument.
-
-This is a required argument.
-
-=item data
-
-An arrayref of previous search results. This is the way to do an C<and>
-search -- C<_search_author_tree> will only search the author objects
-specified in C<data> if provided, rather than the authortree itself.
-
-=back
-
-=cut
-
-sub _search_author_tree {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my($authors,$list,$verbose,$type);
- my $tmpl = {
- data => { default => [],
- strict_type=> 1, store => \$authors },
- allow => { required => 1, default => [ ], strict_type => 1,
- store => \$list },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- type => { required => 1, allow => [CPANPLUS::Module::Author->accessors()],
- store => \$type },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- if( @$authors ) {
- local $Params::Check::VERBOSE = 0;
-
- my @rv;
- for my $auth (@$authors) {
- #push @rv, $auth if check(
- # { $type => { allow => $list } },
- # { $type => $auth->$type }
- # );
- push @rv, $auth if allow( $auth->$type() => $list );
- }
- return \@rv;
- } else {
- my @rv = $self->_source_search_author_tree(
- allow => $list,
- type => $type,
- );
- return \@rv;
- }
-}
-
-=pod
-
-=head2 _all_installed()
-
-This function returns an array ref of module objects of modules that
-are installed on this system.
-
-=cut
-
-sub _all_installed {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- ### File::Find uses follow_skip => 1 by default, which doesn't die
- ### on duplicates, unless they are directories or symlinks.
- ### Ticket #29796 shows this code dying on Alien::WxWidgets,
- ### which uses symlinks.
- ### File::Find doc says to use follow_skip => 2 to ignore duplicates
- ### so this will stop it from dying.
- my %find_args = ( follow_skip => 2 );
-
- ### File::Find uses lstat, which quietly becomes stat on win32
- ### it then uses -l _ which is not allowed by the statbuffer because
- ### you did a stat, not an lstat (duh!). so don't tell win32 to
- ### follow symlinks, as that will break badly
- $find_args{'follow_fast'} = 1 unless ON_WIN32;
-
- ### never use the @INC hooks to find installed versions of
- ### modules -- they're just there in case they're not on the
- ### perl install, but the user shouldn't trust them for *other*
- ### modules!
- ### XXX CPANPLUS::inc is now obsolete, remove the calls
- #local @INC = CPANPLUS::inc->original_inc;
-
- my %seen; my @rv;
- for my $dir (@INC ) {
- next if $dir eq '.';
-
- ### not a directory after all
- ### may be coderef or some such
- next unless -d $dir;
-
- ### make sure to clean up the directories just in case,
- ### as we're making assumptions about the length
- ### This solves rt.cpan issue #19738
-
- ### John M. notes: On VMS cannonpath can not currently handle
- ### the $dir values that are in UNIX format.
- $dir = File::Spec->canonpath( $dir ) unless ON_VMS;
-
- ### have to use F::S::Unix on VMS, or things will break
- my $file_spec = ON_VMS ? 'File::Spec::Unix' : 'File::Spec';
-
- ### XXX in some cases File::Find can actually die!
- ### so be safe and wrap it in an eval.
- eval { File::Find::find(
- { %find_args,
- wanted => sub {
-
- return unless /\.pm$/i;
- my $mod = $File::Find::name;
-
- ### make sure it's in Unix format, as it
- ### may be in VMS format on VMS;
- $mod = VMS::Filespec::unixify( $mod ) if ON_VMS;
-
- $mod = substr($mod, length($dir) + 1, -3);
- $mod = join '::', $file_spec->splitdir($mod);
-
- return if $seen{$mod}++;
-
- my $modobj = $self->module_tree($mod);
-
- ### separate return, a list context return with one ''
- ### in it, is also true!
- return unless $modobj;
-
- push @rv, $modobj;
- },
- }, $dir
- ) };
-
- ### report the error if file::find died
- error(loc("Error finding installed files in '%1': %2", $dir, $@)) if $@;
- }
-
- return \@rv;
-}
-
-1;
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Source.pm b/cpan/CPANPLUS/lib/CPANPLUS/Internals/Source.pm
deleted file mode 100644
index 8f8ad7bd4c..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Source.pm
+++ /dev/null
@@ -1,1470 +0,0 @@
-package CPANPLUS::Internals::Source;
-use deprecate;
-
-use strict;
-
-use CPANPLUS::Error;
-use CPANPLUS::Module;
-use CPANPLUS::Module::Fake;
-use CPANPLUS::Module::Author;
-use CPANPLUS::Internals::Constants;
-
-use File::Fetch;
-use Archive::Extract;
-
-use IPC::Cmd qw[can_run];
-use File::Temp qw[tempdir];
-use File::Basename qw[dirname];
-use Params::Check qw[check];
-use Module::Load::Conditional qw[can_load];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-$Params::Check::VERBOSE = 1;
-
-### list of methods the parent class must implement
-{ for my $sub ( qw[_init_trees _finalize_trees
- _standard_trees_completed _custom_trees_completed
- _add_module_object _add_author_object _save_state
- ]
- ) {
- no strict 'refs';
- *$sub = sub {
- my $self = shift;
- my $class = ref $self || $self;
-
- require Carp;
- Carp::croak( loc( "Class %1 must implement method '%2'",
- $class, $sub ) );
- }
- }
-}
-
-{
- my $recurse; # flag to prevent recursive calls to *_tree functions
-
- ### lazy loading of module tree
- sub _module_tree {
- my $self = $_[0];
-
- unless ($self->_mtree or $recurse++ > 0) {
- my $uptodate = $self->_check_trees( @_[1..$#_] );
- $self->_build_trees(uptodate => $uptodate);
- }
-
- $recurse--;
- return $self->_mtree;
- }
-
- ### lazy loading of author tree
- sub _author_tree {
- my $self = $_[0];
-
- unless ($self->_atree or $recurse++ > 0) {
- my $uptodate = $self->_check_trees( @_[1..$#_] );
- $self->_build_trees(uptodate => $uptodate);
- }
-
- $recurse--;
- return $self->_atree;
- }
-
-}
-
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Internals::Source - internals for updating source files
-
-=head1 SYNOPSIS
-
- ### lazy load author/module trees ###
-
- $cb->_author_tree;
- $cb->_module_tree;
-
-=head1 DESCRIPTION
-
-CPANPLUS::Internals::Source controls the updating of source files and
-the parsing of them into usable module/author trees to be used by
-C<CPANPLUS>.
-
-Functions exist to check if source files are still C<good to use> as
-well as update them, and then parse them.
-
-The flow looks like this:
-
- $cb->_author_tree || $cb->_module_tree
- $cb->_check_trees
- $cb->__check_uptodate
- $cb->_update_source
- $cb->__update_custom_module_sources
- $cb->__update_custom_module_source
- $cb->_build_trees
- ### engine methods
- { $cb->_init_trees;
- $cb->_standard_trees_completed
- $cb->_custom_trees_completed
- }
- $cb->__create_author_tree
- ### engine methods
- { $cb->_add_author_object }
- $cb->__create_module_tree
- $cb->__create_dslip_tree
- ### engine methods
- { $cb->_add_module_object }
- $cb->__create_custom_module_entries
-
- $cb->_dslip_defs
-
-=head1 METHODS
-
-=cut
-
-=pod
-
-=head2 $cb->_build_trees( uptodate => BOOL, [use_stored => BOOL, path => $path, verbose => BOOL] )
-
-This method rebuilds the author- and module-trees from source.
-
-It takes the following arguments:
-
-=over 4
-
-=item uptodate
-
-Indicates whether any on disk caches are still ok to use.
-
-=item path
-
-The absolute path to the directory holding the source files.
-
-=item verbose
-
-A boolean flag indicating whether or not to be verbose.
-
-=item use_stored
-
-A boolean flag indicating whether or not it is ok to use previously
-stored trees. Defaults to true.
-
-=back
-
-Returns a boolean indicating success.
-
-=cut
-
-### (re)build the trees ###
-sub _build_trees {
- my ($self, %hash) = @_;
- my $conf = $self->configure_object;
-
- my($path,$uptodate,$use_stored,$verbose);
- my $tmpl = {
- path => { default => $conf->get_conf('base'), store => \$path },
- verbose => { default => $conf->get_conf('verbose'), store => \$verbose },
- uptodate => { required => 1, store => \$uptodate },
- use_stored => { default => 1, store => \$use_stored },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- $self->_init_trees(
- path => $path,
- uptodate => $uptodate,
- verbose => $verbose,
- use_stored => $use_stored,
- ) or do {
- error( loc("Could not initialize trees" ) );
- return;
- };
-
- ### return if we weren't able to build the trees ###
- return unless $self->_mtree && $self->_atree;
-
- ### did we get everything from a stored state? if not,
- ### process them now.
- if( not $self->_standard_trees_completed ) {
-
- ### first, prep the author tree
- $self->__create_author_tree(
- uptodate => $uptodate,
- path => $path,
- verbose => $verbose,
- ) or return;
-
- ### and now the module tree
- $self->_create_mod_tree(
- uptodate => $uptodate,
- path => $path,
- verbose => $verbose,
- ) or return;
- }
-
- ### XXX unpleasant hack. since custom sources uses ->parse_module, we
- ### already have a special module object with extra meta data. that
- ### doesn't gelwell with the sqlite storage engine. So, we check 'normal'
- ### trees from separate trees, so the engine can treat them differently.
- ### Effectively this means that with the SQLite engine, for now, custom
- ### sources are continuously reparsed =/ -kane
- if( not $self->_custom_trees_completed ) {
-
- ### update them if the other sources are also deemed out of date
- if( $conf->get_conf('enable_custom_sources') ) {
- $self->__update_custom_module_sources( verbose => $verbose )
- or error(loc("Could not update custom module sources"));
- }
-
- ### add custom sources here if enabled
- if( $conf->get_conf('enable_custom_sources') ) {
- $self->__create_custom_module_entries( verbose => $verbose )
- or error(loc("Could not create custom module entries"));
- }
- }
-
- ### give the source engine a chance to wrap up creation
- $self->_finalize_trees(
- path => $path,
- uptodate => $uptodate,
- verbose => $verbose,
- use_stored => $use_stored,
- ) or do {
- error(loc( "Could not finalize trees" ));
- return;
- };
-
- ### still necessary? can only run one instance now ###
- ### will probably stay that way --kane
-# my $id = $self->_store_id( $self );
-#
-# unless ( $id == $self->_id ) {
-# error( loc("IDs do not match: %1 != %2. Storage failed!", $id, $self->_id) );
-# }
-
- return 1;
-}
-
-=pod
-
-=head2 $cb->_check_trees( [update_source => BOOL, path => PATH, verbose => BOOL] )
-
-Retrieve source files and return a boolean indicating whether or not
-the source files are up to date.
-
-Takes several arguments:
-
-=over 4
-
-=item update_source
-
-A flag to force re-fetching of the source files, even
-if they are still up to date.
-
-=item path
-
-The absolute path to the directory holding the source files.
-
-=item verbose
-
-A boolean flag indicating whether or not to be verbose.
-
-=back
-
-Will get information from the config file by default.
-
-=cut
-
-### retrieve source files, and returns a boolean indicating if it's up to date
-sub _check_trees {
- my ($self, %hash) = @_;
- my $conf = $self->configure_object;
-
- my $update_source;
- my $verbose;
- my $path;
-
- my $tmpl = {
- path => { default => $conf->get_conf('base'),
- store => \$path
- },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose
- },
- update_source => { default => 0, store => \$update_source },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- ### if the user never wants to update their source without explicitly
- ### telling us, shortcircuit here
- return 1 if $conf->get_conf('no_update') && !$update_source;
-
- ### a check to see if our source files are still up to date ###
- msg( loc("Checking if source files are up to date"), $verbose );
-
- my $uptodate = 1; # default return value
-
- for my $name (qw[auth dslip mod]) {
- for my $file ( $conf->_get_source( $name ) ) {
- $self->__check_uptodate(
- file => File::Spec->catfile( $path, $file ),
- name => $name,
- update_source => $update_source,
- verbose => $verbose,
- ) or $uptodate = 0;
- }
- }
-
- ### if we're explicitly asked to update the sources, or if the
- ### standard source files are out of date, update the custom sources
- ### as well
- ### RT #47820: Don't try to update custom sources if they are disabled
- ### in the configuration.
- $self->__update_custom_module_sources( verbose => $verbose )
- if $conf->get_conf('enable_custom_sources') and ( $update_source or !$uptodate );
-
- return $uptodate;
-}
-
-=pod
-
-=head2 $cb->__check_uptodate( file => $file, name => $name, [update_source => BOOL, verbose => BOOL] )
-
-C<__check_uptodate> checks if a given source file is still up-to-date
-and if not, or when C<update_source> is true, will re-fetch the source
-file.
-
-Takes the following arguments:
-
-=over 4
-
-=item file
-
-The source file to check.
-
-=item name
-
-The internal shortcut name for the source file (used for config
-lookups).
-
-=item update_source
-
-Flag to force updating of sourcefiles regardless.
-
-=item verbose
-
-Boolean to indicate whether to be verbose or not.
-
-=back
-
-Returns a boolean value indicating whether the current files are up
-to date or not.
-
-=cut
-
-### this method checks whether or not the source files we are using are still up to date
-sub __check_uptodate {
- my $self = shift;
- my %hash = @_;
- my $conf = $self->configure_object;
-
-
- my $tmpl = {
- file => { required => 1 },
- name => { required => 1 },
- update_source => { default => 0 },
- verbose => { default => $conf->get_conf('verbose') },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- my $flag;
- unless ( -e $args->{'file'} && (
- ( stat $args->{'file'} )[9]
- + $conf->_get_source('update') )
- > time ) {
- $flag = 1;
- }
-
- if ( $flag or $args->{'update_source'} ) {
-
- if ( $self->_update_source( name => $args->{'name'} ) ) {
- return 0; # return 0 so 'uptodate' will be set to 0, meaning no
- # use of previously stored hashrefs!
- } else {
- msg( loc("Unable to update source, attempting to get away with using old source file!"), $args->{verbose} );
- return 1;
- }
-
- } else {
- return 1;
- }
-}
-
-=pod
-
-=head2 $cb->_update_source( name => $name, [path => $path, verbose => BOOL] )
-
-This method does the actual fetching of source files.
-
-It takes the following arguments:
-
-=over 4
-
-=item name
-
-The internal shortcut name for the source file (used for config
-lookups).
-
-=item path
-
-The full path where to write the files.
-
-=item verbose
-
-Boolean to indicate whether to be verbose or not.
-
-=back
-
-Returns a boolean to indicate success.
-
-=cut
-
-### this sub fetches new source files ###
-sub _update_source {
- my $self = shift;
- my %hash = @_;
- my $conf = $self->configure_object;
-
- my $verbose;
- my $tmpl = {
- name => { required => 1 },
- path => { default => $conf->get_conf('base') },
- verbose => { default => $conf->get_conf('verbose'), store => \$verbose },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
-
- my $path = $args->{path};
- { ### this could use a clean up - Kane
- ### no worries about the / -> we get it from the _ftp configuration, so
- ### it's not platform dependant. -kane
- my ($dir, $file) = $conf->_get_mirror( $args->{'name'} ) =~ m|(.+/)(.+)$|sg;
-
- msg( loc("Updating source file '%1'", $file), $verbose );
-
- my $fake = CPANPLUS::Module::Fake->new(
- module => $args->{'name'},
- path => $dir,
- package => $file,
- _id => $self->_id,
- );
-
- ### can't use $fake->fetch here, since ->parent won't work --
- ### the sources haven't been saved yet
- my $rv = $self->_fetch(
- module => $fake,
- fetchdir => $path,
- force => 1,
- );
-
-
- unless ($rv) {
- error( loc("Couldn't fetch '%1'", $file) );
- return;
- }
-
- $self->_update_timestamp( file => File::Spec->catfile($path, $file) );
- }
-
- return 1;
-}
-
-=pod
-
-=head2 $cb->__create_author_tree([path => $path, uptodate => BOOL, verbose => BOOL])
-
-This method opens a source files and parses its contents into a
-searchable author-tree or restores a file-cached version of a
-previous parse, if the sources are uptodate and the file-cache exists.
-
-It takes the following arguments:
-
-=over 4
-
-=item uptodate
-
-A flag indicating whether the file-cache is uptodate or not.
-
-=item path
-
-The absolute path to the directory holding the source files.
-
-=item verbose
-
-A boolean flag indicating whether or not to be verbose.
-
-=back
-
-Will get information from the config file by default.
-
-Returns a tree on success, false on failure.
-
-=cut
-
-sub __create_author_tree {
- my $self = shift;
- my %hash = @_;
- my $conf = $self->configure_object;
-
-
- my $tmpl = {
- path => { default => $conf->get_conf('base') },
- verbose => { default => $conf->get_conf('verbose') },
- uptodate => { default => 0 },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- my $file = File::Spec->catfile(
- $args->{path},
- $conf->_get_source('auth')
- );
-
- msg(loc("Rebuilding author tree, this might take a while"),
- $args->{verbose});
-
- ### extract the file ###
- my $ae = Archive::Extract->new( archive => $file ) or return;
- my $out = STRIP_GZ_SUFFIX->($file);
-
- ### make sure to set the PREFER_BIN flag if desired ###
- { local $Archive::Extract::PREFER_BIN = $conf->get_conf('prefer_bin');
- $ae->extract( to => $out ) or return;
- }
-
- my $cont = $self->_get_file_contents( file => $out ) or return;
-
- ### don't need it anymore ###
- unlink $out;
-
- my ($tot,$prce,$prc,$idx);
-
- if ( $args->{verbose} and local $|=1 ) {
- no warnings;
- $tot = scalar(split /\n/, $cont);
- ($prce, $prc, $idx) = (int $tot / 25, 0, 0);
- print "\t0%";
- }
-
- for ( split /\n/, $cont ) {
- my($id, $name, $email) = m/^alias \s+
- (\S+) \s+
- "\s* ([^\"\<]+?) \s* <(.+)> \s*"
- /x;
-
- $self->_add_author_object(
- author => $name, #authors name
- email => $email, #authors email address
- cpanid => $id, #authors CPAN ID
- ) or error( loc("Could not add author '%1'", $name ) );
-
- $args->{verbose}
- and (
- $idx++,
-
- ($idx==$prce
- and ($prc+=4,$idx=0,print ".")),
-
- (($prc % 10)
- or $idx
- or print $prc,'%')
- );
-
- }
-
- $args->{verbose}
- and print "\n";
-
-
- return $self->_atree;
-
-} #__create_author_tree
-
-=pod
-
-=head2 $cb->_create_mod_tree([path => $path, uptodate => BOOL, verbose => BOOL])
-
-This method opens a source files and parses its contents into a
-searchable module-tree or restores a file-cached version of a
-previous parse, if the sources are uptodate and the file-cache exists.
-
-It takes the following arguments:
-
-=over 4
-
-=item uptodate
-
-A flag indicating whether the file-cache is up-to-date or not.
-
-=item path
-
-The absolute path to the directory holding the source files.
-
-=item verbose
-
-A boolean flag indicating whether or not to be verbose.
-
-=back
-
-Will get information from the config file by default.
-
-Returns a tree on success, false on failure.
-
-=cut
-
-### this builds a hash reference with the structure of the cpan module tree ###
-sub _create_mod_tree {
- my $self = shift;
- my %hash = @_;
- my $conf = $self->configure_object;
- my $base = $conf->_get_mirror('base');
-
- my $tmpl = {
- path => { default => $conf->get_conf('base') },
- verbose => { default => $conf->get_conf('verbose') },
- uptodate => { default => 0 },
- };
-
- my $args = check( $tmpl, \%hash ) or return undef;
- my $file = File::Spec->catfile($args->{path}, $conf->_get_source('mod'));
-
- msg(loc("Rebuilding module tree, this might take a while"),
- $args->{verbose});
-
-
- my $dslip_tree = $self->__create_dslip_tree( %$args );
-
- my $author_tree = $self->author_tree;
-
- ### extract the file ###
- my $ae = Archive::Extract->new( archive => $file ) or return;
- my $out = STRIP_GZ_SUFFIX->($file);
-
- ### make sure to set the PREFER_BIN flag if desired ###
- { local $Archive::Extract::PREFER_BIN = $conf->get_conf('prefer_bin');
- $ae->extract( to => $out ) or return;
- }
-
- my $content = $self->_get_file_contents( file => $out ) or return;
- my $lines = $content =~ tr/\n/\n/;
-
- ### don't need it anymore ###
- unlink $out;
-
- my($past_header, $count, $tot, $prce, $prc, $idx);
-
- if ( $args->{verbose} and local $|=1 ) {
- no warnings;
- $tot = scalar(split /\n/, $content);
- ($prce, $prc, $idx) = (int $tot / 25, 0, 0);
- print "\t0%";
- }
-
- for ( split /\n/, $content ) {
-
- ### we're still in the header -- find the amount of lines we expect
- unless( $past_header ) {
-
- ### header has ended -- did we get the line count?
- if( m|^\s*$| ) {
- unless( $count ) {
- error(loc("Could not determine line count from %1", $file));
- return;
- }
- $past_header = 1;
-
- ### if the line count doesn't match what we expect, bail out
- ### this should address: #45644: detect broken index
- } else {
- $count = $1 if /^Line-Count:\s+(\d+)/;
- if( $count ) {
- if( $lines < $count ) {
- error(loc("Expected to read at least %1 lines, but %2 ".
- "contains only %3 lines!",
- $count, $file, $lines ));
- return;
- }
- }
- }
-
- ### still in the header, keep moving
- next;
- }
-
- my @data = split /\s+/;
- ### three fields expected on each line
- next unless @data == 3;
-
- ### filter out the author and filename as well ###
- ### authors can apparently have digits in their names,
- ### and dirs can have dots... blah!
- my ($author, $package) = $data[2] =~
- m| (?:[A-Z\d-]/)?
- (?:[A-Z\d-]{2}/)?
- ([A-Z\d-]+) (?:/[\S]+)?/
- ([^/]+)$
- |xsg;
-
- ### remove file name from the path
- $data[2] =~ s|/[^/]+$||;
-
- my $aobj = $author_tree->{$author};
- unless( $aobj ) {
- error( loc( "No such author '%1' -- can't make module object " .
- "'%2' that is supposed to belong to this author",
- $author, $data[0] ) );
- next;
- }
-
- my $dslip_mod = $dslip_tree->{ $data[0] };
-
- ### adding the dslip info
- my $dslip;
- for my $item ( qw[ statd stats statl stati statp ] ) {
- ### checking if there's an entry in the dslip info before
- ### catting it on. appeasing warnings this way
- $dslip .= $dslip_mod->{$item} || ' ';
- }
-
- ### XXX this could be sped up if we used author names, not author
- ### objects in creation, and then look them up in the author tree
- ### when needed. This will need a fix to all the places that create
- ### fake author/module objects as well.
-
- ### callback to store the individual object
- $self->_add_module_object(
- module => $data[0], # full module name
- version => ($data[1] eq 'undef' # version number
- ? '0.0'
- : $data[1]),
- path => File::Spec::Unix->catfile(
- $base,
- $data[2],
- ), # extended path on the cpan mirror,
- # like /A/AB/ABIGAIL
- comment => $data[3], # comment on the module
- author => $aobj,
- package => $package, # package name, like
- # 'foo-bar-baz-1.03.tar.gz'
- description => $dslip_mod->{'description'},
- dslip => $dslip,
- mtime => '',
- ) or error( loc( "Could not add module '%1'", $data[0] ) );
-
- $args->{verbose}
- and (
- $idx++,
-
- ($idx==$prce
- and ($prc+=4,$idx=0,print ".")),
-
- (($prc % 10)
- or $idx
- or print $prc,'%')
- );
-
- } #for
-
- $args->{verbose}
- and print "\n";
-
- return $self->_mtree;
-
-} #_create_mod_tree
-
-=pod
-
-=head2 $cb->__create_dslip_tree([path => $path, uptodate => BOOL, verbose => BOOL])
-
-This method opens a source files and parses its contents into a
-searchable dslip-tree or restores a file-cached version of a
-previous parse, if the sources are uptodate and the file-cache exists.
-
-It takes the following arguments:
-
-=over 4
-
-=item uptodate
-
-A flag indicating whether the file-cache is uptodate or not.
-
-=item path
-
-The absolute path to the directory holding the source files.
-
-=item verbose
-
-A boolean flag indicating whether or not to be verbose.
-
-=back
-
-Will get information from the config file by default.
-
-Returns a tree on success, false on failure.
-
-=cut
-
-sub __create_dslip_tree {
- my $self = shift;
- my %hash = @_;
- my $conf = $self->configure_object;
-
- my $tmpl = {
- path => { default => $conf->get_conf('base') },
- verbose => { default => $conf->get_conf('verbose') },
- uptodate => { default => 0 },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- ### get the file name of the source ###
- my $file = File::Spec->catfile($args->{path}, $conf->_get_source('dslip'));
-
- ### extract the file ###
- my $ae = Archive::Extract->new( archive => $file ) or return;
- my $out = STRIP_GZ_SUFFIX->($file);
-
- ### make sure to set the PREFER_BIN flag if desired ###
- { local $Archive::Extract::PREFER_BIN = $conf->get_conf('prefer_bin');
- $ae->extract( to => $out ) or return;
- }
-
- my $in = $self->_get_file_contents( file => $out ) or return;
-
- ### don't need it anymore ###
- unlink $out;
-
-
- ### get rid of the comments and the code ###
- ### need a smarter parser, some people have this in their dslip info:
- # [
- # 'Statistics::LTU',
- # 'R',
- # 'd',
- # 'p',
- # 'O',
- # '?',
- # 'Implements Linear Threshold Units',
- # ...skipping...
- # "\x{c4}dd \x{fc}ml\x{e4}\x{fc}ts t\x{f6} \x{eb}v\x{eb}r\x{ff}th\x{ef}ng!",
- # 'BENNIE',
- # '11'
- # ],
- ### also, older versions say:
- ### $cols = [....]
- ### and newer versions say:
- ### $CPANPLUS::Modulelist::cols = [...]
- ### split '$cols' and '$data' into 2 variables ###
- ### use this regex to make sure dslips with ';' in them don't cause
- ### parser errors
- my ($ds_one, $ds_two) = ($in =~ m|.+}\s+
- (\$(?:CPAN::Modulelist::)?cols.*?)
- (\$(?:CPAN::Modulelist::)?data.*)
- |sx);
-
- ### eval them into existence ###
- ### still not too fond of this solution - kane ###
- my ($cols, $data);
- { #local $@; can't use this, it's buggy -kane
-
- $cols = eval $ds_one;
- error( loc("Error in eval of dslip source files: %1", $@) ) if $@;
-
- $data = eval $ds_two;
- error( loc("Error in eval of dslip source files: %1", $@) ) if $@;
-
- }
-
- my $tree = {};
- my $primary = "modid";
-
- ### this comes from CPAN::Modulelist
- ### which is in 03modlist.data.gz
- for (@$data){
- my %hash;
- @hash{@$cols} = @$_;
- $tree->{$hash{$primary}} = \%hash;
- }
-
- return $tree;
-
-} #__create_dslip_tree
-
-=pod
-
-=head2 $cb->_dslip_defs ()
-
-This function returns the definition structure (ARRAYREF) of the
-dslip tree.
-
-=cut
-
-### these are the definitions used for dslip info
-### they shouldn't change over time.. so hardcoding them doesn't appear to
-### be a problem. if it is, we need to parse 03modlist.data better to filter
-### all this out.
-### right now, this is just used to look up dslip info from a module
-sub _dslip_defs {
- my $self = shift;
-
- my $aref = [
-
- # D
- [ q|Development Stage|, {
- i => loc('Idea, listed to gain consensus or as a placeholder'),
- c => loc('under construction but pre-alpha (not yet released)'),
- a => loc('Alpha testing'),
- b => loc('Beta testing'),
- R => loc('Released'),
- M => loc('Mature (no rigorous definition)'),
- S => loc('Standard, supplied with Perl 5'),
- }],
-
- # S
- [ q|Support Level|, {
- m => loc('Mailing-list'),
- d => loc('Developer'),
- u => loc('Usenet newsgroup comp.lang.perl.modules'),
- n => loc('None known, try comp.lang.perl.modules'),
- a => loc('Abandoned; volunteers welcome to take over maintenance'),
- }],
-
- # L
- [ q|Language Used|, {
- p => loc('Perl-only, no compiler needed, should be platform independent'),
- c => loc('C and perl, a C compiler will be needed'),
- h => loc('Hybrid, written in perl with optional C code, no compiler needed'),
- '+' => loc('C++ and perl, a C++ compiler will be needed'),
- o => loc('perl and another language other than C or C++'),
- }],
-
- # I
- [ q|Interface Style|, {
- f => loc('plain Functions, no references used'),
- h => loc('hybrid, object and function interfaces available'),
- n => loc('no interface at all (huh?)'),
- r => loc('some use of unblessed References or ties'),
- O => loc('Object oriented using blessed references and/or inheritance'),
- }],
-
- # P
- [ q|Public License|, {
- p => loc('Standard-Perl: user may choose between GPL and Artistic'),
- g => loc('GPL: GNU General Public License'),
- l => loc('LGPL: "GNU Lesser General Public License" (previously known as "GNU Library General Public License")'),
- b => loc('BSD: The BSD License'),
- a => loc('Artistic license alone'),
- o => loc('other (but distribution allowed without restrictions)'),
- }],
- ];
-
- return $aref;
-}
-
-=head2 $file = $cb->_add_custom_module_source( uri => URI, [verbose => BOOL] );
-
-Adds a custom source index and updates it based on the provided URI.
-
-Returns the full path to the index file on success or false on failure.
-
-=cut
-
-sub _add_custom_module_source {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my($verbose,$uri);
- my $tmpl = {
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- uri => { required => 1, store => \$uri }
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### what index file should we use on disk?
- my $index = $self->__custom_module_source_index_file( uri => $uri );
-
- ### already have it.
- if( IS_FILE->( $index ) ) {
- msg(loc("Source '%1' already added", $uri));
- return 1;
- }
-
- ### do we need to create the targe dir?
- { my $dir = dirname( $index );
- unless( IS_DIR->( $dir ) ) {
- $self->_mkdir( dir => $dir ) or return
- }
- }
-
- ### write the file
- my $fh = OPEN_FILE->( $index => '>' ) or do {
- error(loc("Could not open index file for '%1'", $uri));
- return;
- };
-
- ### basically we 'touched' it. Check the return value, may be
- ### important on win32 and similar OS, where there's file length
- ### limits
- close $fh or do {
- error(loc("Could not write index file to disk for '%1'", $uri));
- return;
- };
-
- $self->__update_custom_module_source(
- remote => $uri,
- local => $index,
- verbose => $verbose,
- ) or do {
- ### we faild to update it, we probably have an empty
- ### possibly silly filename on disk now -- remove it
- 1 while unlink $index;
- return;
- };
-
- return $index;
-}
-
-=head2 $index = $cb->__custom_module_source_index_file( uri => $uri );
-
-Returns the full path to the encoded index file for C<$uri>, as used by
-all C<custom module source> routines.
-
-=cut
-
-sub __custom_module_source_index_file {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my($verbose,$uri);
- my $tmpl = {
- uri => { required => 1, store => \$uri }
- };
-
- check( $tmpl, \%hash ) or return;
-
- my $index = File::Spec->catfile(
- $conf->get_conf('base'),
- $conf->_get_build('custom_sources'),
- $self->_uri_encode( uri => $uri ),
- );
-
- return $index;
-}
-
-=head2 $file = $cb->_remove_custom_module_source( uri => URI, [verbose => BOOL] );
-
-Removes a custom index file based on the URI provided.
-
-Returns the full path to the index file on success or false on failure.
-
-=cut
-
-sub _remove_custom_module_source {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my($verbose,$uri);
- my $tmpl = {
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- uri => { required => 1, store => \$uri }
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### use uri => local, instead of the other way around
- my %files = reverse $self->__list_custom_module_sources;
-
- ### On VMS the case of key to %files can be either exact or lower case
- ### XXX abstract this lookup out? --kane
- my $file = $files{ $uri };
- $file = $files{ lc $uri } if !defined($file) && ON_VMS;
-
- unless (defined $file) {
- error(loc("No such custom source '%1'", $uri));
- return;
- };
-
- 1 while unlink $file;
-
- if( IS_FILE->( $file ) ) {
- error(loc("Could not remove index file '%1' for custom source '%2'",
- $file, $uri));
- return;
- }
-
- msg(loc("Successfully removed index file for '%1'", $uri), $verbose);
-
- return $file;
-}
-
-=head2 %files = $cb->__list_custom_module_sources
-
-This method scans the 'custom-sources' directory in your base directory
-for additional sources to include in your module tree.
-
-Returns a list of key value pairs as follows:
-
- /full/path/to/source/file%3Fencoded => http://decoded/mirror/path
-
-=cut
-
-sub __list_custom_module_sources {
- my $self = shift;
- my $conf = $self->configure_object;
-
- my($verbose);
- my $tmpl = {
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- };
-
- my $dir = File::Spec->catdir(
- $conf->get_conf('base'),
- $conf->_get_build('custom_sources'),
- );
-
- unless( IS_DIR->( $dir ) ) {
- msg(loc("No '%1' dir, skipping custom sources", $dir), $verbose);
- return;
- }
-
- ### unencode the files
- ### skip ones starting with # though
- my %files = map {
- my $org = $_;
- my $dec = $self->_uri_decode( uri => $_ );
- File::Spec->catfile( $dir, $org ) => $dec
- } grep { $_ !~ /^#/ } READ_DIR->( $dir );
-
- return %files;
-}
-
-=head2 $bool = $cb->__update_custom_module_sources( [verbose => BOOL] );
-
-Attempts to update all the index files to your custom module sources.
-
-If the index is missing, and it's a C<file://> uri, it will generate
-a new local index for you.
-
-Return true on success, false on failure.
-
-=cut
-
-sub __update_custom_module_sources {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my $verbose;
- my $tmpl = {
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose }
- };
-
- check( $tmpl, \%hash ) or return;
-
- my %files = $self->__list_custom_module_sources;
-
- ### uptodate check has been done a few levels up.
- my $fail;
- while( my($local,$remote) = each %files ) {
-
- $self->__update_custom_module_source(
- remote => $remote,
- local => $local,
- verbose => $verbose,
- ) or ( $fail++, next );
- }
-
- error(loc("Failed updating one or more remote sources files")) if $fail;
-
- return if $fail;
- return 1;
-}
-
-=head2 $ok = $cb->__update_custom_module_source
-
-Attempts to update all the index files to your custom module sources.
-
-If the index is missing, and it's a C<file://> uri, it will generate
-a new local index for you.
-
-Return true on success, false on failure.
-
-=cut
-
-sub __update_custom_module_source {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my($verbose,$local,$remote);
- my $tmpl = {
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- local => { store => \$local, allow => FILE_EXISTS },
- remote => { required => 1, store => \$remote },
- };
-
- check( $tmpl, \%hash ) or return;
-
- msg( loc("Updating sources from '%1'", $remote), $verbose);
-
- ### if you didn't provide a local file, we'll look in your custom
- ### dir to find the local encoded version for you
- $local ||= do {
- ### find all files we know of
- my %files = reverse $self->__list_custom_module_sources or do {
- error(loc("No custom modules sources defined -- need '%1' argument",
- 'local'));
- return;
- };
-
- ### On VMS the case of key to %files can be either exact or lower case
- ### XXX abstract this lookup out? --kane
- my $file = $files{ $remote };
- $file = $files{ lc $remote } if !defined ($file) && ON_VMS;
-
- ### return the local file we're supposed to use
- $file or do {
- error(loc("Remote source '%1' unknown -- needs '%2' argument",
- $remote, 'local'));
- return;
- };
- };
-
- my $uri = join '/', $remote, $conf->_get_source('custom_index');
- my $ff = File::Fetch->new( uri => $uri );
-
- ### tempdir doesn't clean up by default, as opposed to tempfile()
- ### so add it explicitly.
- my $dir = tempdir( CLEANUP => 1 );
-
- my $res = do {
- local $File::Fetch::WARN = 0;
- local $File::Fetch::TIMEOUT = $conf->get_conf('timeout');
- $ff->fetch( to => $dir );
- };
-
- ### couldn't get the file
- unless( $res ) {
-
- ### it's not a local scheme, so can't auto index
- unless( $ff->scheme eq 'file' ) {
- error(loc("Could not update sources from '%1': %2",
- $remote, $ff->error ));
- return;
-
- ### it's a local uri, we can index it ourselves
- } else {
- msg(loc("No index file found at '%1', generating one",
- $ff->uri), $verbose );
-
- ### ON VMS, if you are working with a UNIX file specification,
- ### you need currently use the UNIX variants of the File::Spec.
- my $ff_path = do {
- my $file_class = 'File::Spec';
- $file_class .= '::Unix' if ON_VMS;
- $file_class->catdir( File::Spec::Unix->splitdir( $ff->path ) );
- };
-
- $self->__write_custom_module_index(
- path => $ff_path,
- to => $local,
- verbose => $verbose,
- ) or return;
-
- ### XXX don't write that here, __write_custom_module_index
- ### already prints this out
- #msg(loc("Index file written to '%1'", $to), $verbose);
- }
-
- ### copy it to the real spot and update its timestamp
- } else {
- $self->_move( file => $res, to => $local ) or return;
- $self->_update_timestamp( file => $local );
-
- msg(loc("Index file saved to '%1'", $local), $verbose);
- }
-
- return $local;
-}
-
-=head2 $bool = $cb->__write_custom_module_index( path => /path/to/packages, [to => /path/to/index/file, verbose => BOOL] )
-
-Scans the C<path> you provided for packages and writes an index with all
-the available packages to C<$path/packages.txt>. If you'd like the index
-to be written to a different file, provide the C<to> argument.
-
-Returns true on success and false on failure.
-
-=cut
-
-sub __write_custom_module_index {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my ($verbose, $path, $to);
- my $tmpl = {
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- path => { required => 1, allow => DIR_EXISTS, store => \$path },
- to => { store => \$to },
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### no explicit to? then we'll use our default
- $to ||= File::Spec->catfile( $path, $conf->_get_source('custom_index') );
-
- my @files;
- require File::Find;
- File::Find::find( sub {
- ### let's see if A::E can even parse it
- my $ae = do {
- local $Archive::Extract::WARN = 0;
- local $Archive::Extract::WARN = 0;
- Archive::Extract->new( archive => $File::Find::name )
- } or return;
-
- ### it's a type A::E recognize, so we can add it
- $ae->type or return;
-
- ### neither $_ nor $File::Find::name have the chunk of the path in
- ### it starting $path -- it's either only the filename, or the full
- ### path, so we have to strip it ourselves
- ### make sure to remove the leading slash as well.
- my $copy = $File::Find::name;
- my $re = quotemeta($path);
- $copy =~ s|^$re[\\/]?||i;
-
- push @files, $copy;
-
- }, $path );
-
- ### does the dir exist? if not, create it.
- { my $dir = dirname( $to );
- unless( IS_DIR->( $dir ) ) {
- $self->_mkdir( dir => $dir ) or return
- }
- }
-
- ### create the index file
- my $fh = OPEN_FILE->( $to => '>' ) or return;
-
- print $fh "$_\n" for @files;
- close $fh;
-
- msg(loc("Successfully written index file to '%1'", $to), $verbose);
-
- return $to;
-}
-
-
-=head2 $bool = $cb->__create_custom_module_entries( [verbose => BOOL] )
-
-Creates entries in the module tree based upon the files as returned
-by C<__list_custom_module_sources>.
-
-Returns true on success, false on failure.
-
-=cut
-
-### use $auth_obj as a persistent version, so we don't have to recreate
-### modules all the time
-{ my $auth_obj;
-
- sub __create_custom_module_entries {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my $verbose;
- my $tmpl = {
- verbose => { default => $conf->get_conf('verbose'), store => \$verbose },
- };
-
- check( $tmpl, \%hash ) or return undef;
-
- my %files = $self->__list_custom_module_sources;
-
- while( my($file,$name) = each %files ) {
-
- msg(loc("Adding packages from custom source '%1'", $name), $verbose);
-
- my $fh = OPEN_FILE->( $file ) or next;
-
- while( local $_ = <$fh> ) {
- chomp;
- next if /^#/;
- next unless /\S+/;
-
- ### join on / -- it's a URI after all!
- my $parse = join '/', $name, $_;
-
- ### try to make a module object out of it
- my $mod = $self->parse_module( module => $parse ) or (
- error(loc("Could not parse '%1'", $_)),
- next
- );
-
- ### mark this object with a custom author
- $auth_obj ||= do {
- my $id = CUSTOM_AUTHOR_ID;
-
- ### if the object is being created for the first time,
- ### make sure there's an entry in the author tree as
- ### well, so we can search on the CPAN ID
- $self->author_tree->{ $id } =
- CPANPLUS::Module::Author::Fake->new( cpanid => $id );
- };
-
- $mod->author( $auth_obj );
-
- ### and now add it to the module tree -- this MAY
- ### override things of course
- if( my $old_mod = $self->module_tree( $mod->module ) ) {
-
- ### On VMS use the old module name to get the real case
- $mod->module( $old_mod->module ) if ON_VMS;
-
- msg(loc("About to overwrite module tree entry for '%1' with '%2'",
- $mod->module, $mod->package), $verbose);
- }
-
- ### mark where it came from
- $mod->description( loc("Custom source from '%1'",$name) );
-
- ### store it in the module tree
- $self->module_tree->{ $mod->module } = $mod;
- }
- }
-
- return 1;
- }
-}
-
-1;
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Source/Memory.pm b/cpan/CPANPLUS/lib/CPANPLUS/Internals/Source/Memory.pm
deleted file mode 100644
index a28532e02c..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Source/Memory.pm
+++ /dev/null
@@ -1,381 +0,0 @@
-package CPANPLUS::Internals::Source::Memory;
-use deprecate;
-
-use base 'CPANPLUS::Internals::Source';
-
-use strict;
-
-use CPANPLUS::Error;
-use CPANPLUS::Module;
-use CPANPLUS::Module::Fake;
-use CPANPLUS::Module::Author;
-use CPANPLUS::Internals::Constants;
-
-use File::Fetch;
-use Archive::Extract;
-
-use IPC::Cmd qw[can_run];
-use File::Temp qw[tempdir];
-use File::Basename qw[dirname];
-use Params::Check qw[allow check];
-use Module::Load::Conditional qw[can_load];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-$Params::Check::VERBOSE = 1;
-
-=head1 NAME
-
-CPANPLUS::Internals::Source::Memory - In memory implementation
-
-=cut
-
-### flag to show if init_trees got its' data from storable. This allows
-### us to not write an existing stored file back to disk
-{ my $from_storable;
-
- sub _init_trees {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my($path,$uptodate,$verbose,$use_stored);
- my $tmpl = {
- path => { default => $conf->get_conf('base'), store => \$path },
- verbose => { default => $conf->get_conf('verbose'), store => \$verbose },
- uptodate => { required => 1, store => \$uptodate },
- use_stored => { default => 1, store => \$use_stored },
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### retrieve the stored source files ###
- my $stored = $self->__memory_retrieve_source(
- path => $path,
- uptodate => $uptodate && $use_stored,
- verbose => $verbose,
- ) || {};
-
- ### we got this from storable if $stored has keys..
- $from_storable = keys %$stored ? 1 : 0;
-
- ### set up the trees
- $self->_atree( $stored->{_atree} || {} );
- $self->_mtree( $stored->{_mtree} || {} );
-
- return 1;
- }
-
- sub _standard_trees_completed { return $from_storable }
- sub _custom_trees_completed { return $from_storable }
-
- sub _finalize_trees {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my($path,$uptodate,$verbose);
- my $tmpl = {
- path => { default => $conf->get_conf('base'), store => \$path },
- verbose => { default => $conf->get_conf('verbose'), store => \$verbose },
- uptodate => { required => 1, store => \$uptodate },
- };
-
- { local $Params::Check::ALLOW_UNKNOWN = 1;
- check( $tmpl, \%hash ) or return;
- }
-
- ### write the stored files to disk, so we can keep using them
- ### from now on, till they become invalid
- ### write them if the original sources weren't uptodate, or
- ### we didn't just load storable files
- $self->__memory_save_source() if !$uptodate or not $from_storable;
-
- return 1;
- }
-
- ### saves current memory state
- sub _save_state {
- my $self = shift;
- return $self->_finalize_trees( @_, uptodate => 0 );
- }
-}
-
-sub _add_author_object {
- my $self = shift;
- my %hash = @_;
-
- my $class;
- my $tmpl = {
- class => { default => 'CPANPLUS::Module::Author', store => \$class },
- map { $_ => { required => 1 } }
- qw[ author cpanid email ]
- };
-
- my $href = do {
- local $Params::Check::NO_DUPLICATES = 1;
- check( $tmpl, \%hash ) or return;
- };
-
- my $obj = $class->new( %$href, _id => $self->_id );
-
- $self->author_tree->{ $href->{'cpanid'} } = $obj or return;
-
- return $obj;
-}
-
-{
- my $tmpl = {
- class => { default => 'CPANPLUS::Module' },
- map { $_ => { required => 1 } } qw[
- module version path comment author package description dslip mtime
- ],
- };
-
- sub _add_module_object {
- my $self = shift;
- my %hash = @_;
-
- my $href = do {
- local $Params::Check::SANITY_CHECK_TEMPLATE = 0;
- check( $tmpl, \%hash ) or return;
- };
- my $class = delete $href->{class};
-
- my $obj = $class->new( %$href, _id => $self->_id );
-
- ### Every module get's stored as a module object ###
- $self->module_tree->{ $href->{module} } = $obj or return;
-
- return $obj;
- }
-}
-
-{ my %map = (
- _source_search_module_tree => [ module_tree => 'CPANPLUS::Module' ],
- _source_search_author_tree => [ author_tree => 'CPANPLUS::Module::Author' ],
- );
-
- while( my($sub, $aref) = each %map ) {
- no strict 'refs';
-
- my($meth, $class) = @$aref;
-
- *$sub = sub {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my($authors,$list,$verbose,$type);
- my $tmpl = {
- data => { default => [],
- strict_type=> 1, store => \$authors },
- allow => { required => 1, default => [ ], strict_type => 1,
- store => \$list },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- type => { required => 1, allow => [$class->accessors()],
- store => \$type },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- my @rv;
- for my $obj ( values %{ $self->$meth } ) {
- #push @rv, $auth if check(
- # { $type => { allow => $list } },
- # { $type => $auth->$type }
- # );
- push @rv, $obj if allow( $obj->$type() => $list );
- }
-
- return @rv;
- }
- }
-}
-
-=pod
-
-=head2 $cb->__memory_retrieve_source(name => $name, [path => $path, uptodate => BOOL, verbose => BOOL])
-
-This method retrieves a I<storable>d tree identified by C<$name>.
-
-It takes the following arguments:
-
-=over 4
-
-=item name
-
-The internal name for the source file to retrieve.
-
-=item uptodate
-
-A flag indicating whether the file-cache is up-to-date or not.
-
-=item path
-
-The absolute path to the directory holding the source files.
-
-=item verbose
-
-A boolean flag indicating whether or not to be verbose.
-
-=back
-
-Will get information from the config file by default.
-
-Returns a tree on success, false on failure.
-
-=cut
-
-sub __memory_retrieve_source {
- my $self = shift;
- my %hash = @_;
- my $conf = $self->configure_object;
-
- my $tmpl = {
- path => { default => $conf->get_conf('base') },
- verbose => { default => $conf->get_conf('verbose') },
- uptodate => { default => 0 },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- ### check if we can retrieve a frozen data structure with storable ###
- my $storable = can_load( modules => {'Storable' => '0.0'} )
- if $conf->get_conf('storable');
-
- return unless $storable;
-
- ### $stored is the name of the frozen data structure ###
- my $stored = $self->__memory_storable_file( $args->{path} );
-
- if ($storable && -e $stored && -s _ && $args->{'uptodate'}) {
- msg( loc("Retrieving %1", $stored), $args->{'verbose'} );
-
- my $href = Storable::retrieve($stored);
- return $href;
- } else {
- return;
- }
-}
-
-=pod
-
-=head2 $cb->__memory_save_source([verbose => BOOL, path => $path])
-
-This method saves all the parsed trees in I<storable>d format if
-C<Storable> is available.
-
-It takes the following arguments:
-
-=over 4
-
-=item path
-
-The absolute path to the directory holding the source files.
-
-=item verbose
-
-A boolean flag indicating whether or not to be verbose.
-
-=back
-
-Will get information from the config file by default.
-
-Returns true on success, false on failure.
-
-=cut
-
-sub __memory_save_source {
- my $self = shift;
- my %hash = @_;
- my $conf = $self->configure_object;
-
-
- my $tmpl = {
- path => { default => $conf->get_conf('base'), allow => DIR_EXISTS },
- verbose => { default => $conf->get_conf('verbose') },
- force => { default => 1 },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- my $aref = [qw[_mtree _atree]];
-
- ### check if we can retrieve a frozen data structure with storable ###
- my $storable;
- $storable = can_load( modules => {'Storable' => '0.0'} )
- if $conf->get_conf('storable');
- return unless $storable;
-
- my $to_write = {};
- foreach my $key ( @$aref ) {
- next unless ref( $self->$key );
- $to_write->{$key} = $self->$key;
- }
-
- return unless keys %$to_write;
-
- ### $stored is the name of the frozen data structure ###
- my $stored = $self->__memory_storable_file( $args->{path} );
-
- if (-e $stored && not -w $stored) {
- msg( loc("%1 not writable; skipped.", $stored), $args->{'verbose'} );
- return;
- }
-
- msg( loc("Writing compiled source information to disk. This might take a little while."),
- $args->{'verbose'} );
-
- my $flag;
- unless( Storable::nstore( $to_write, $stored ) ) {
- error( loc("could not store %1!", $stored) );
- $flag++;
- }
-
- return $flag ? 0 : 1;
-}
-
-sub __memory_storable_file {
- my $self = shift;
- my $conf = $self->configure_object;
- my $path = shift or return;
-
- ### check if we can retrieve a frozen data structure with storable ###
- my $storable = $conf->get_conf('storable')
- ? can_load( modules => {'Storable' => '0.0'} )
- : 0;
-
- return unless $storable;
-
- ### $stored is the name of the frozen data structure ###
- ### changed to use File::Spec->catfile -jmb
- my $stored = File::Spec->rel2abs(
- File::Spec->catfile(
- $path, #base dir
- $conf->_get_source('stored') #file
- . '.s' .
- $Storable::VERSION #the version of storable
- . '.c' .
- $self->VERSION #the version of CPANPLUS
- . STORABLE_EXT #append a suffix
- )
- );
-
- return $stored;
-}
-
-
-
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
-
-1;
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Source/SQLite.pm b/cpan/CPANPLUS/lib/CPANPLUS/Internals/Source/SQLite.pm
deleted file mode 100644
index 50f82f485c..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Source/SQLite.pm
+++ /dev/null
@@ -1,383 +0,0 @@
-package CPANPLUS::Internals::Source::SQLite;
-use deprecate;
-
-use strict;
-use warnings;
-
-use base 'CPANPLUS::Internals::Source';
-
-use CPANPLUS::Error;
-use CPANPLUS::Internals::Constants;
-use CPANPLUS::Internals::Source::SQLite::Tie;
-
-use Data::Dumper;
-use DBIx::Simple;
-use DBD::SQLite;
-
-use Params::Check qw[allow check];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-use constant TXN_COMMIT => 1000;
-
-=head1 NAME
-
-CPANPLUS::Internals::Source::SQLite - SQLite implementation
-
-=cut
-
-{ my $Dbh;
- my $DbFile;
-
- sub __sqlite_file {
- return $DbFile if $DbFile;
-
- my $self = shift;
- my $conf = $self->configure_object;
-
- $DbFile = File::Spec->catdir(
- $conf->get_conf('base'),
- SOURCE_SQLITE_DB
- );
-
- return $DbFile;
- };
-
- sub __sqlite_dbh {
- return $Dbh if $Dbh;
-
- my $self = shift;
- $Dbh = DBIx::Simple->connect(
- "dbi:SQLite:dbname=" . $self->__sqlite_file,
- '', '',
- { AutoCommit => 1 }
- );
- #$Dbh->dbh->trace(1);
- $Dbh->query(qq{PRAGMA synchronous = OFF});
-
- return $Dbh;
- };
-
- sub __sqlite_disconnect {
- return unless $Dbh;
- $Dbh->disconnect;
- $Dbh = undef;
- return;
- }
-}
-
-{ my $used_old_copy = 0;
-
- sub _init_trees {
- my $self = shift;
- my $conf = $self->configure_object;
- my %hash = @_;
-
- my($path,$uptodate,$verbose,$use_stored);
- my $tmpl = {
- path => { default => $conf->get_conf('base'), store => \$path },
- verbose => { default => $conf->get_conf('verbose'), store => \$verbose },
- uptodate => { required => 1, store => \$uptodate },
- use_stored => { default => 1, store => \$use_stored },
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### if it's not uptodate, or the file doesn't exist, we need to create
- ### a new sqlite db
- if( not $uptodate or not -e $self->__sqlite_file ) {
- $used_old_copy = 0;
-
- ### chuck the file
- $self->__sqlite_disconnect;
- 1 while unlink $self->__sqlite_file;
-
- ### and create a new one
- $self->__sqlite_create_db or do {
- error(loc("Could not create new SQLite DB"));
- return;
- }
- } else {
- $used_old_copy = 1;
- }
-
- ### set up the author tree
- { my %at;
- tie %at, 'CPANPLUS::Internals::Source::SQLite::Tie',
- dbh => $self->__sqlite_dbh, table => 'author',
- key => 'cpanid', cb => $self;
-
- $self->_atree( \%at );
- }
-
- ### set up the author tree
- { my %mt;
- tie %mt, 'CPANPLUS::Internals::Source::SQLite::Tie',
- dbh => $self->__sqlite_dbh, table => 'module',
- key => 'module', cb => $self;
-
- $self->_mtree( \%mt );
- }
-
- ### start a transaction
- $self->__sqlite_dbh->query('BEGIN');
-
- return 1;
-
- }
-
- sub _standard_trees_completed { return $used_old_copy }
- sub _custom_trees_completed { return }
- ### finish transaction
- sub _finalize_trees { $_[0]->__sqlite_dbh->commit; return 1 }
-
- ### saves current memory state, but not implemented in sqlite
- sub _save_state {
- error(loc("%1 has not implemented writing state to disk", __PACKAGE__));
- return;
- }
-}
-
-{ my $txn_count = 0;
-
- ### XXX move this outside the sub, so we only compute it once
- my $class;
- my @keys = qw[ author cpanid email ];
- my $tmpl = {
- class => { default => 'CPANPLUS::Module::Author', store => \$class },
- map { $_ => { required => 1 } } @keys
- };
-
- ### dbix::simple's expansion of (??) is REALLY expensive, so do it manually
- my $ph = join ',', map { '?' } @keys;
-
-
- sub _add_author_object {
- my $self = shift;
- my %hash = @_;
- my $dbh = $self->__sqlite_dbh;
-
- my $href = do {
- local $Params::Check::NO_DUPLICATES = 1;
- local $Params::Check::SANITY_CHECK_TEMPLATE = 0;
- check( $tmpl, \%hash ) or return;
- };
-
- ### keep counting how many we inserted
- unless( ++$txn_count % TXN_COMMIT ) {
- #warn "Committing transaction $txn_count";
- $dbh->commit or error( $dbh->error ); # commit previous transaction
- $dbh->begin_work or error( $dbh->error ); # and start a new one
- }
-
- $dbh->query(
- "INSERT INTO author (". join(',',keys(%$href)) .") VALUES ($ph)",
- values %$href
- ) or do {
- error( $dbh->error );
- return;
- };
-
- return 1;
- }
-}
-
-{ my $txn_count = 0;
-
- ### XXX move this outside the sub, so we only compute it once
- my $class;
- my @keys = qw[ module version path comment author package description dslip mtime ];
- my $tmpl = {
- class => { default => 'CPANPLUS::Module', store => \$class },
- map { $_ => { required => 1 } } @keys
- };
-
- ### dbix::simple's expansion of (??) is REALLY expensive, so do it manually
- my $ph = join ',', map { '?' } @keys;
-
- sub _add_module_object {
- my $self = shift;
- my %hash = @_;
- my $dbh = $self->__sqlite_dbh;
-
- my $href = do {
- local $Params::Check::NO_DUPLICATES = 1;
- local $Params::Check::SANITY_CHECK_TEMPLATE = 0;
- check( $tmpl, \%hash ) or return;
- };
-
- ### fix up author to be 'plain' string
- $href->{'author'} = $href->{'author'}->cpanid;
-
- ### keep counting how many we inserted
- unless( ++$txn_count % TXN_COMMIT ) {
- #warn "Committing transaction $txn_count";
- $dbh->commit or error( $dbh->error ); # commit previous transaction
- $dbh->begin_work or error( $dbh->error ); # and start a new one
- }
-
- $dbh->query(
- "INSERT INTO module (". join(',',keys(%$href)) .") VALUES ($ph)",
- values %$href
- ) or do {
- error( $dbh->error );
- return;
- };
-
- return 1;
- }
-}
-
-{ my %map = (
- _source_search_module_tree
- => [ module => module => 'CPANPLUS::Module' ],
- _source_search_author_tree
- => [ author => cpanid => 'CPANPLUS::Module::Author' ],
- );
-
- while( my($sub, $aref) = each %map ) {
- no strict 'refs';
-
- my($table, $key, $class) = @$aref;
- *$sub = sub {
- my $self = shift;
- my %hash = @_;
-
- my($list,$type);
- my $tmpl = {
- allow => { required => 1, default => [ ], strict_type => 1,
- store => \$list },
- type => { required => 1, allow => [$class->accessors()],
- store => \$type },
- };
-
- check( $tmpl, \%hash ) or return;
-
-
- ### we aliased 'module' to 'name', so change that here too
- $type = 'module' if $type eq 'name';
-
- my $meth = $table .'_tree';
-
- {
- my $throw = $self->$meth;
- }
-
- my $dbh = $self->__sqlite_dbh;
- my $res = $dbh->query( "SELECT * from $table" );
-
- my @rv = map { $self->$meth( $_->{$key} ) }
- grep { allow( $_->{$type} => $list ) } $res->hashes;
-
- return @rv;
- }
- }
-}
-
-
-
-sub __sqlite_create_db {
- my $self = shift;
- my $dbh = $self->__sqlite_dbh;
-
- ### we can ignore the result/error; not all sqlite implementations
- ### support this
- $dbh->query( qq[
- DROP TABLE IF EXISTS author;
- \n]
- ) or do {
- msg( $dbh->error );
- };
- $dbh->query( qq[
- DROP TABLE IF EXISTS module;
- \n]
- ) or do {
- msg( $dbh->error );
- };
-
-
-
- $dbh->query( qq[
- /* the author information */
- CREATE TABLE author (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
-
- author varchar(255),
- email varchar(255),
- cpanid varchar(255)
- );
- \n]
-
- ) or do {
- error( $dbh->error );
- return;
- };
-
- $dbh->query( qq[
- /* the module information */
- CREATE TABLE module (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
-
- module varchar(255),
- version varchar(255),
- path varchar(255),
- comment varchar(255),
- author varchar(255),
- package varchar(255),
- description varchar(255),
- dslip varchar(255),
- mtime varchar(255)
- );
-
- \n]
-
- ) or do {
- error( $dbh->error );
- return;
- };
-
- $dbh->query( qq[
- /* the module index */
- CREATE INDEX IX_module_module ON module (
- module
- );
-
- \n]
-
- ) or do {
- error( $dbh->error );
- return;
- };
-
- $dbh->query( qq[
- /* the version index */
- CREATE INDEX IX_module_version ON module (
- version
- );
-
- \n]
-
- ) or do {
- error( $dbh->error );
- return;
- };
-
- $dbh->query( qq[
- /* the module-version index */
- CREATE INDEX IX_module_module_version ON module (
- module, version
- );
-
- \n]
-
- ) or do {
- error( $dbh->error );
- return;
- };
-
- return 1;
-}
-
-1;
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Source/SQLite/Tie.pm b/cpan/CPANPLUS/lib/CPANPLUS/Internals/Source/SQLite/Tie.pm
deleted file mode 100644
index b44b04bd58..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Source/SQLite/Tie.pm
+++ /dev/null
@@ -1,143 +0,0 @@
-package CPANPLUS::Internals::Source::SQLite::Tie;
-use deprecate;
-
-use strict;
-use warnings;
-
-use CPANPLUS::Error;
-use CPANPLUS::Module;
-use CPANPLUS::Module::Fake;
-use CPANPLUS::Module::Author::Fake;
-use CPANPLUS::Internals::Constants;
-
-use Params::Check qw[check];
-use Module::Load::Conditional qw[can_load];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-use vars qw[@ISA $VERSION];
-$VERSION = "0.9135";
-
-require Tie::Hash;
-push @ISA, 'Tie::StdHash';
-
-
-sub TIEHASH {
- my $class = shift;
- my %hash = @_;
-
- my $tmpl = {
- dbh => { required => 1 },
- table => { required => 1 },
- key => { required => 1 },
- cb => { required => 1 },
- offset => { default => 0 },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
- my $obj = bless { %$args, store => {} } , $class;
-
- return $obj;
-}
-
-sub FETCH {
- my $self = shift;
- my $key = shift or return;
- my $dbh = $self->{dbh};
- my $cb = $self->{cb};
- my $table = $self->{table};
-
-
- ### did we look this one up before?
- if( my $obj = $self->{store}->{$key} ) {
- return $obj;
- }
-
- my $res = $dbh->query(
- "SELECT * from $table where $self->{key} = ?", $key
- ) or do {
- error( $dbh->error );
- return;
- };
-
- my $href = $res->hash;
-
- ### get rid of the primary key
- delete $href->{'id'};
-
- ### no results?
- return unless keys %$href;
-
- ### expand author if needed
- ### XXX no longer generic :(
- if( $table eq 'module' ) {
- $href->{author} = $cb->author_tree( $href->{author } ) or return;
- }
-
- my $class = {
- module => 'CPANPLUS::Module',
- author => 'CPANPLUS::Module::Author',
- }->{ $table };
-
- my $obj = $self->{store}->{$key} = $class->new( %$href, _id => $cb->_id );
-
- return $obj;
-}
-
-sub STORE {
- my $self = shift;
- my $key = shift;
- my $val = shift;
-
- $self->{store}->{$key} = $val;
-}
-
-1;
-
-sub FIRSTKEY {
- my $self = shift;
- my $dbh = $self->{'dbh'};
-
- my $res = $dbh->query(
- "select $self->{key} from $self->{table} order by $self->{key} limit 1"
- );
-
- $self->{offset} = 0;
-
- my $key = $res->flat->[0];
-
- return $key;
-}
-
-sub NEXTKEY {
- my $self = shift;
- my $dbh = $self->{'dbh'};
-
- my $res = $dbh->query(
- "select $self->{key} from $self->{table} ".
- "order by $self->{key} limit 1 offset $self->{offset}"
- );
-
- $self->{offset} +=1;
-
- my $key = $res->flat->[0];
- my $val = $self->FETCH( $key );
-
- ### use each() semantics
- return wantarray ? ( $key, $val ) : $key;
-}
-
-sub EXISTS { !!$_[0]->FETCH( $_[1] ) }
-
-sub SCALAR {
- my $self = shift;
- my $dbh = $self->{'dbh'};
-
- my $res = $dbh->query( "select count(*) from $self->{table}" );
-
- return $res->flat;
-}
-
-### intentionally left blank
-sub DELETE { }
-sub CLEAR { }
-
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Utils.pm b/cpan/CPANPLUS/lib/CPANPLUS/Internals/Utils.pm
deleted file mode 100644
index 58ece81ee6..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Utils.pm
+++ /dev/null
@@ -1,680 +0,0 @@
-package CPANPLUS::Internals::Utils;
-use deprecate;
-
-use strict;
-
-use CPANPLUS::Error;
-use CPANPLUS::Internals::Constants;
-
-use Cwd qw[chdir cwd];
-use File::Copy;
-use Params::Check qw[check];
-use Module::Load::Conditional qw[can_load];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-use version;
-
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-local $Params::Check::VERBOSE = 1;
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Internals::Utils - convenience functions for CPANPLUS
-
-=head1 SYNOPSIS
-
- my $bool = $cb->_mkdir( dir => 'blah' );
- my $bool = $cb->_chdir( dir => 'blah' );
- my $bool = $cb->_rmdir( dir => 'blah' );
-
- my $bool = $cb->_move( from => '/some/file', to => '/other/file' );
- my $bool = $cb->_move( from => '/some/dir', to => '/other/dir' );
-
- my $cont = $cb->_get_file_contents( file => '/path/to/file' );
-
-
- my $version = $cb->_perl_version( perl => $^X );
-
-=head1 DESCRIPTION
-
-C<CPANPLUS::Internals::Utils> holds a few convenience functions for
-CPANPLUS libraries.
-
-=head1 METHODS
-
-=head2 $cb->_mkdir( dir => '/some/dir' )
-
-C<_mkdir> creates a full path to a directory.
-
-Returns true on success, false on failure.
-
-=cut
-
-sub _mkdir {
- my $self = shift;
-
- my %hash = @_;
-
- my $tmpl = {
- dir => { required => 1 },
- };
-
- my $args = check( $tmpl, \%hash ) or (
- error(loc( Params::Check->last_error ) ), return
- );
-
- unless( can_load( modules => { 'File::Path' => 0.0 } ) ) {
- error( loc("Could not use File::Path! This module should be core!") );
- return;
- }
-
- eval { File::Path::mkpath($args->{dir}) };
-
- if($@) {
- chomp($@);
- error(loc(qq[Could not create directory '%1': %2], $args->{dir}, $@ ));
- return;
- }
-
- return 1;
-}
-
-=pod
-
-=head2 $cb->_chdir( dir => '/some/dir' )
-
-C<_chdir> changes directory to a dir.
-
-Returns true on success, false on failure.
-
-=cut
-
-sub _chdir {
- my $self = shift;
- my %hash = @_;
-
- my $tmpl = {
- dir => { required => 1, allow => DIR_EXISTS },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- unless( chdir $args->{dir} ) {
- error( loc(q[Could not chdir into '%1'], $args->{dir}) );
- return;
- }
-
- return 1;
-}
-
-=pod
-
-=head2 $cb->_rmdir( dir => '/some/dir' );
-
-Removes a directory completely, even if it is non-empty.
-
-Returns true on success, false on failure.
-
-=cut
-
-sub _rmdir {
- my $self = shift;
- my %hash = @_;
-
- my $tmpl = {
- dir => { required => 1, allow => IS_DIR },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- unless( can_load( modules => { 'File::Path' => 0.0 } ) ) {
- error( loc("Could not use File::Path! This module should be core!") );
- return;
- }
-
- eval { File::Path::rmtree($args->{dir}) };
-
- if($@) {
- chomp($@);
- error(loc(qq[Could not delete directory '%1': %2], $args->{dir}, $@ ));
- return;
- }
-
- return 1;
-}
-
-=pod
-
-=head2 $cb->_perl_version ( perl => 'some/perl/binary' );
-
-C<_perl_version> returns the version of a certain perl binary.
-It does this by actually running a command.
-
-Returns the perl version on success and false on failure.
-
-=cut
-
-sub _perl_version {
- my $self = shift;
- my %hash = @_;
-
- my $perl;
- my $tmpl = {
- perl => { required => 1, store => \$perl },
- };
-
- check( $tmpl, \%hash ) or return;
-
- my $perl_version;
- ### special perl, or the one we are running under?
- if( $perl eq $^X ) {
- ### just load the config
- require Config;
- $perl_version = $Config::Config{version};
-
- } else {
- my $cmd = $perl .
- ' -MConfig -eprint+Config::config_vars+version';
- ($perl_version) = (`$cmd` =~ /version='(.*)'/);
- }
-
- return $perl_version if defined $perl_version;
- return;
-}
-
-=pod
-
-=head2 $cb->_version_to_number( version => $version );
-
-Returns a proper module version, or '0.0' if none was available.
-
-=cut
-
-sub _version_to_number {
- my $self = shift;
- my %hash = @_;
-
- my $version;
- my $tmpl = {
- version => { default => '0.0', store => \$version },
- };
-
- check( $tmpl, \%hash ) or return;
-
- $version =~ s!_!!g; # *sigh*
- return $version if $version =~ /^\d*(?:\.\d+)?$/;
- if ( my ($vers) = $version =~ /^(v?\d+(?:\.\d+(?:\.\d+)?)?)/ ) {
- return eval { version->parse($vers)->numify };
- }
- return '0.0';
-}
-
-=pod
-
-=head2 $cb->_whoami
-
-Returns the name of the subroutine you're currently in.
-
-=cut
-
-sub _whoami { my $name = (caller 1)[3]; $name =~ s/.+:://; $name }
-
-=pod
-
-=head2 _get_file_contents( file => $file );
-
-Returns the contents of a file
-
-=cut
-
-sub _get_file_contents {
- my $self = shift;
- my %hash = @_;
-
- my $file;
- my $tmpl = {
- file => { required => 1, store => \$file }
- };
-
- check( $tmpl, \%hash ) or return;
-
- my $fh = OPEN_FILE->($file) or return;
- my $contents = do { local $/; <$fh> };
-
- return $contents;
-}
-
-=pod
-
-=head2 $cb->_move( from => $file|$dir, to => $target );
-
-Moves a file or directory to the target.
-
-Returns true on success, false on failure.
-
-=cut
-
-sub _move {
- my $self = shift;
- my %hash = @_;
-
- my $from; my $to;
- my $tmpl = {
- file => { required => 1, allow => [IS_FILE,IS_DIR],
- store => \$from },
- to => { required => 1, store => \$to }
- };
-
- check( $tmpl, \%hash ) or return;
-
- if( File::Copy::move( $from, $to ) ) {
- return 1;
- } else {
- error(loc("Failed to move '%1' to '%2': %3", $from, $to, $!));
- return;
- }
-}
-
-=pod
-
-=head2 $cb->_copy( from => $file|$dir, to => $target );
-
-Moves a file or directory to the target.
-
-Returns true on success, false on failure.
-
-=cut
-
-sub _copy {
- my $self = shift;
- my %hash = @_;
-
- my($from,$to);
- my $tmpl = {
- file =>{ required => 1, allow => [IS_FILE,IS_DIR],
- store => \$from },
- to => { required => 1, store => \$to }
- };
-
- check( $tmpl, \%hash ) or return;
-
- if( File::Copy::copy( $from, $to ) ) {
- return 1;
- } else {
- error(loc("Failed to copy '%1' to '%2': %3", $from, $to, $!));
- return;
- }
-}
-
-=head2 $cb->_mode_plus_w( file => '/path/to/file' );
-
-Sets the +w bit for the file.
-
-Returns true on success, false on failure.
-
-=cut
-
-sub _mode_plus_w {
- my $self = shift;
- my %hash = @_;
-
- require File::stat;
-
- my $file;
- my $tmpl = {
- file => { required => 1, allow => IS_FILE, store => \$file },
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### set the mode to +w for a file and +wx for a dir
- my $x = File::stat::stat( $file );
- my $mask = -d $file ? 0100 : 0200;
-
- if( $x and chmod( $x->mode|$mask, $file ) ) {
- return 1;
-
- } else {
- error(loc("Failed to '%1' '%2': '%3'", 'chmod +w', $file, $!));
- return;
- }
-}
-
-=head2 $uri = $cb->_host_to_uri( scheme => SCHEME, host => HOST, path => PATH );
-
-Turns a CPANPLUS::Config style C<host> entry into an URI string.
-
-Returns the uri on success, and false on failure
-
-=cut
-
-sub _host_to_uri {
- my $self = shift;
- my %hash = @_;
-
- my($scheme, $host, $path);
- my $tmpl = {
- scheme => { required => 1, store => \$scheme },
- host => { default => 'localhost', store => \$host },
- path => { default => '', store => \$path },
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### it's an URI, so unixify the path.
- ### VMS has a special method for just that
- $path = ON_VMS
- ? VMS::Filespec::unixify($path)
- : File::Spec::Unix->catdir( File::Spec->splitdir( $path ) );
-
- return "$scheme://" . File::Spec::Unix->catdir( $host, $path );
-}
-
-=head2 $cb->_vcmp( VERSION, VERSION );
-
-Normalizes the versions passed and does a '<=>' on them, returning the result.
-
-=cut
-
-sub _vcmp {
- my $self = shift;
- my ($x, $y) = @_;
-
- $x = $self->_version_to_number(version => $x);
- $y = $self->_version_to_number(version => $y);
-
- return $x <=> $y;
-}
-
-=head2 $cb->_home_dir
-
-Returns the user's homedir, or C<cwd> if it could not be found
-
-=cut
-
-sub _home_dir {
-
- if ( can_load( modules => { 'File::HomeDir' => 0.0 } ) ) {
- if ( defined $ENV{APPDATA} && length $ENV{APPDATA} && !ON_WIN32 ) {
- msg("'APPDATA' env var is set and not on MSWin32, " .
- "please use 'PERL5_CPANPLUS_HOME' instead to change .cpanplus location", 1 );
- }
- return File::HomeDir->my_home if -d File::HomeDir->my_home;
- }
-
- my @os_home_envs = qw( APPDATA HOME USERPROFILE WINDIR SYS$LOGIN );
-
- for my $env ( @os_home_envs ) {
- next unless exists $ENV{ $env };
- next unless defined $ENV{ $env } && length $ENV{ $env };
- return $ENV{ $env } if -d $ENV{ $env };
- }
-
- return cwd();
-}
-
-=head2 $path = $cb->_safe_path( path => $path );
-
-Returns a path that's safe to us on Win32 and VMS.
-
-Only cleans up the path on Win32 if the path exists.
-
-On VMS, it encodes dots to _ using C<VMS::Filespec::vmsify>
-
-=cut
-
-sub _safe_path {
- my $self = shift;
-
- my %hash = @_;
-
- my $path;
- my $tmpl = {
- path => { required => 1, store => \$path },
- };
-
- check( $tmpl, \%hash ) or return;
-
- if( ON_WIN32 ) {
- ### only need to fix it up if there's spaces in the path
- return $path unless $path =~ /\s+/;
-
- ### clean up paths if we are on win32
- return Win32::GetShortPathName( $path ) || $path;
-
- } elsif ( ON_VMS ) {
- ### XXX According to John Malmberg, there's an VMS issue:
- ### catdir on VMS can not currently deal with directory components
- ### with dots in them.
- ### Fixing this is a a three step procedure, which will work for
- ### VMS in its traditional ODS-2 mode, and it will also work if
- ### VMS is in the ODS-5 mode that is being implemented.
- ### If the path is already in VMS syntax, assume that we are done.
-
- ### VMS format is a path with a trailing ']' or ':'
- return $path if $path =~ /\:|\]$/;
-
- ### 1. Make sure that the value to be converted, $path is
- ### in UNIX directory syntax by appending a '/' to it.
- $path .= '/' unless $path =~ m|/$|;
-
- ### 2. Use VMS::Filespec::vmsify($path . '/') to convert the dots to
- ### underscores if needed. The trailing '/' is needed as so that
- ### C<vmsify> knows that it should use directory translation instead of
- ### filename translation, as filename translation leaves one dot.
- $path = VMS::Filespec::vmsify( $path );
-
- ### 3. Use $path = File::Spec->splitdir( VMS::Filespec::vmsify(
- ### $path . '/') to remove the directory delimiters.
-
- ### From John Malmberg:
- ### File::Spec->catdir will put the path back together.
- ### The '/' trick only works if the string is a directory name
- ### with UNIX style directory delimiters or no directory delimiters.
- ### It is to force vmsify to treat the input specification as UNIX.
- ###
- ### There is a VMS::Filespec::unixpath() to do the appending of the '/'
- ### to the specification, which will do a VMS::Filespec::vmsify()
- ### if needed.
- ### However it is not a good idea to call vmsify() on a pathname
- ### returned by unixify(), and it is not a good idea to call unixify()
- ### on a pathname returned by vmsify(). Because of the nature of the
- ### conversion, not all file specifications can make the round trip.
- ###
- ### I think that directory specifications can safely make the round
- ### trip, but not ones containing filenames.
- $path = File::Spec->catdir( File::Spec->splitdir( $path ) )
- }
-
- return $path;
-}
-
-
-=head2 ($pkg, $version, $ext) = $cb->_split_package_string( package => PACKAGE_STRING );
-
-Splits the name of a CPAN package string up into its package, version
-and extension parts.
-
-For example, C<Foo-Bar-1.2.tar.gz> would return the following parts:
-
- Package: Foo-Bar
- Version: 1.2
- Extension: tar.gz
-
-=cut
-
-{ my $del_re = qr/[-_\+]/i; # delimiter between elements
- my $pkg_re = qr/[a-z] # any letters followed by
- [a-z\d]* # any letters, numbers
- (?i:\.pm)? # followed by '.pm'--authors do this :(
- (?: # optionally repeating:
- $del_re # followed by a delimiter
- [a-z] # any letters followed by
- [a-z\d]* # any letters, numbers
- (?i:\.pm)? # followed by '.pm'--authors do this :(
- )*
- /xi;
-
- my $ver_re = qr/[a-z]*\d*?[a-z]* # contains a digit and possibly letters
- (?: # however, some start with a . only :(
- [-._] # followed by a delimiter
- [a-z\d]+ # and more digits and or letters
- )*?
- /xi;
-
- my $ext_re = qr/[a-z] # a letter, followed by
- [a-z\d]* # letters and or digits, optionally
- (?:
- \. # followed by a dot and letters
- [a-z\d]+ # and or digits (like .tar.bz2)
- )? # optionally
- /xi;
-
- my $ver_ext_re = qr/
- ($ver_re+) # version, optional
- (?:
- \. # a literal .
- ($ext_re) # extension,
- )? # optional, but requires version
- /xi;
-
- ### composed regex for CPAN packages
- my $full_re = qr/
- ^
- ( # the whole thing
- ($pkg_re+) # package
- (?:
- $del_re # delimiter
- $ver_ext_re # version + extension
- )?
- )
- $
- /xi;
-
- ### composed regex for perl packages
- my $perl = PERL_CORE;
- my $perl_re = qr/
- ^
- ( # the whole thing
- ($perl) # package name for 'perl'
- (?:
- $ver_ext_re # version + extension
- )?
- )
- $
- /xi;
-
-
-sub _split_package_string {
- my $self = shift;
- my %hash = @_;
-
- my $str;
- my $tmpl = { package => { required => 1, store => \$str } };
- check( $tmpl, \%hash ) or return;
-
-
- ### 2 different regexes, one for the 'perl' package,
- ### one for ordinary CPAN packages.. try them both,
- ### first match wins.
- for my $re ( $full_re, $perl_re ) {
-
- ### try the next if the match fails
- $str =~ $re or next;
-
- my $full = $1 || '';
- my $pkg = $2 || '';
- my $ver = $3 || '';
- my $ext = $4 || '';
-
- ### this regex resets the capture markers!
- ### strip the trailing delimiter
- $pkg =~ s/$del_re$//;
-
- ### strip the .pm package suffix some authors insist on adding
- $pkg =~ s/\.pm$//i;
-
- return ($pkg, $ver, $ext, $full );
- }
-
- return;
- }
-}
-
-{ my %escapes = map {
- chr($_) => sprintf("%%%02X", $_)
- } 0 .. 255;
-
- sub _uri_encode {
- my $self = shift;
- my %hash = @_;
-
- my $str;
- my $tmpl = {
- uri => { store => \$str, required => 1 }
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### XXX taken straight from URI::Encode
- ### Default unsafe characters. RFC 2732 ^(uric - reserved)
- $str =~ s|([^A-Za-z0-9\-_.!~*'()])|$escapes{$1}|g;
-
- return $str;
- }
-
-
- sub _uri_decode {
- my $self = shift;
- my %hash = @_;
-
- my $str;
- my $tmpl = {
- uri => { store => \$str, required => 1 }
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### XXX use unencode routine in utils?
- $str =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
-
- return $str;
- }
-}
-
-sub _update_timestamp {
- my $self = shift;
- my %hash = @_;
-
- my $file;
- my $tmpl = {
- file => { required => 1, store => \$file, allow => FILE_EXISTS }
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### `touch` the file, so windoze knows it's new -jmb
- ### works on *nix too, good fix -Kane
- ### make sure it is writable first, otherwise the `touch` will fail
-
- my $now = time;
- unless( chmod( 0644, $file) && utime ($now, $now, $file) ) {
- error( loc("Couldn't touch %1", $file) );
- return;
- }
-
- return 1;
-}
-
-
-1;
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Utils/Autoflush.pm b/cpan/CPANPLUS/lib/CPANPLUS/Internals/Utils/Autoflush.pm
deleted file mode 100644
index 8aa9030dfa..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Internals/Utils/Autoflush.pm
+++ /dev/null
@@ -1,9 +0,0 @@
-package CPANPLUS::Internals::Utils::Autoflush;
-use deprecate;
-
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-BEGIN { $|++ };
-
-1;
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Module.pm b/cpan/CPANPLUS/lib/CPANPLUS/Module.pm
deleted file mode 100644
index 4eda894629..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Module.pm
+++ /dev/null
@@ -1,1839 +0,0 @@
-package CPANPLUS::Module;
-use deprecate;
-
-use strict;
-use vars qw[@ISA $VERSION];
-$VERSION = "0.9135";
-
-use CPANPLUS::Dist;
-use CPANPLUS::Error;
-use CPANPLUS::Module::Signature;
-use CPANPLUS::Module::Checksums;
-use CPANPLUS::Internals::Constants;
-
-use FileHandle;
-
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-use IPC::Cmd qw[can_run run];
-use File::Find qw[find];
-use Params::Check qw[check];
-use File::Basename qw[dirname];
-use Module::Load::Conditional qw[can_load check_install];
-
-$Params::Check::VERBOSE = 1;
-
-@ISA = qw[ CPANPLUS::Module::Signature CPANPLUS::Module::Checksums];
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Module - CPAN module objects for CPANPLUS
-
-=head1 SYNOPSIS
-
- ### get a module object from the CPANPLUS::Backend object
- my $mod = $cb->module_tree('Some::Module');
-
- ### accessors
- $mod->version;
- $mod->package;
-
- ### methods
- $mod->fetch;
- $mod->extract;
- $mod->install;
-
-
-=head1 DESCRIPTION
-
-C<CPANPLUS::Module> creates objects from the information in the
-source files. These can then be used to query and perform actions
-on, like fetching or installing.
-
-These objects should only be created internally. For C<fake> objects,
-there's the C<CPANPLUS::Module::Fake> class. To obtain a module object
-consult the C<CPANPLUS::Backend> documentation.
-
-=cut
-
-my $tmpl = {
- module => { default => '', required => 1 }, # full module name
- version => { default => '0.0' }, # version number
- path => { default => '', required => 1 }, # extended path on the
- # cpan mirror, like
- # /author/id/K/KA/KANE
- comment => { default => ''}, # comment on module
- package => { default => '', required => 1 }, # package name, like
- # 'bar-baz-1.03.tgz'
- description => { default => '' }, # description of the
- # module
- dslip => { default => EMPTY_DSLIP }, # dslip information
- _id => { required => 1 }, # id of the Internals
- # parent object
- _status => { no_override => 1 }, # stores status object
- author => { default => '', required => 1,
- allow => IS_AUTHOBJ }, # module author
- mtime => { default => '' },
-};
-
-### some of these will be resolved by wrapper functions that
-### do Clever Things to find the actual value, so don't create
-### an autogenerated sub for that just here, take an alternate
-### name to allow for a wrapper
-{ my %rename = (
- dslip => '_dslip'
- );
-
- ### autogenerate accessors ###
- for my $key ( keys %$tmpl ) {
- no strict 'refs';
-
- my $sub = $rename{$key} || $key;
-
- *{__PACKAGE__."::$sub"} = sub {
- $_[0]->{$key} = $_[1] if @_ > 1;
- return $_[0]->{$key};
- }
- }
-}
-
-
-=pod
-
-=head1 CLASS METHODS
-
-=head2 accessors ()
-
-Returns a list of all accessor methods to the object
-
-=cut
-
-### *name is an alias, include it explicitly
-sub accessors { return ('name', keys %$tmpl) };
-
-=head1 ACCESSORS
-
-An objects of this class has the following accessors:
-
-=over 4
-
-=item name
-
-Name of the module.
-
-=item module
-
-Name of the module.
-
-=item version
-
-Version of the module. Defaults to '0.0' if none was provided.
-
-=item path
-
-Extended path on the mirror.
-
-=item comment
-
-Any comment about the module -- largely unused.
-
-=item package
-
-The name of the package.
-
-=item description
-
-Description of the module -- only registered modules have this.
-
-=item dslip
-
-The five character dslip string, that represents meta-data of the
-module -- again, only registered modules have this.
-
-=cut
-
-sub dslip {
- my $self = shift;
-
- ### if this module has relevant dslip info, return it
- return $self->_dslip if $self->_dslip ne EMPTY_DSLIP;
-
- ### if not, look at other modules in the same package,
- ### see if *they* have any dslip info
- for my $mod ( $self->contains ) {
- return $mod->_dslip if $mod->_dslip ne EMPTY_DSLIP;
- }
-
- ### ok, really no dslip info found, return the default
- return EMPTY_DSLIP;
-}
-
-
-=pod
-
-=item status
-
-The C<CPANPLUS::Module::Status> object associated with this object.
-(see below).
-
-=item author
-
-The C<CPANPLUS::Module::Author> object associated with this object.
-
-=item parent
-
-The C<CPANPLUS::Internals> object that spawned this module object.
-
-=back
-
-=cut
-
-### Alias ->name to ->module, for human beings.
-*name = *module;
-
-sub parent {
- my $self = shift;
- my $obj = CPANPLUS::Internals->_retrieve_id( $self->_id );
-
- return $obj;
-}
-
-=head1 STATUS ACCESSORS
-
-C<CPANPLUS> caches a lot of results from method calls and saves data
-it collected along the road for later reuse.
-
-C<CPANPLUS> uses this internally, but it is also available for the end
-user. You can get a status object by calling:
-
- $modobj->status
-
-You can then query the object as follows:
-
-=over 4
-
-=item installer_type
-
-The installer type used for this distribution. Will be one of
-'makemaker' or 'build'. This determines whether C<CPANPLUS::Dist::MM>
-or C<CPANPLUS::Dist::Build> will be used to build this distribution.
-
-=item dist_cpan
-
-The dist object used to do the CPAN-side of the installation. Either
-a C<CPANPLUS::Dist::MM> or C<CPANPLUS::Dist::Build> object.
-
-=item dist
-
-The custom dist object used to do the operating specific side of the
-installation, if you've chosen to use this. For example, if you've
-chosen to install using the C<ports> format, this may be a
-C<CPANPLUS::Dist::Ports> object.
-
-Undefined if you didn't specify a separate format to install through.
-
-=item prereqs | requires
-
-A hashref of prereqs this distribution was found to have. Will look
-something like this:
-
- { Carp => 0.01, strict => 0 }
-
-Might be undefined if the distribution didn't have any prerequisites.
-
-=item configure_requires
-
-Like prereqs, but these are necessary to be installed before the
-build process can even begin.
-
-=item signature
-
-Flag indicating, if a signature check was done, whether it was OK or
-not.
-
-=item extract
-
-The directory this distribution was extracted to.
-
-=item fetch
-
-The location this distribution was fetched to.
-
-=item readme
-
-The text of this distributions README file.
-
-=item uninstall
-
-Flag indicating if an uninstall call was done successfully.
-
-=item created
-
-Flag indicating if the C<create> call to your dist object was done
-successfully.
-
-=item installed
-
-Flag indicating if the C<install> call to your dist object was done
-successfully.
-
-=item checksums
-
-The location of this distributions CHECKSUMS file.
-
-=item checksum_ok
-
-Flag indicating if the checksums check was done successfully.
-
-=item checksum_value
-
-The checksum value this distribution is expected to have
-
-=back
-
-=head1 METHODS
-
-=head2 $self = CPANPLUS::Module->new( OPTIONS )
-
-This method returns a C<CPANPLUS::Module> object. Normal users
-should never call this method directly, but instead use the
-C<CPANPLUS::Backend> to obtain module objects.
-
-This example illustrates a C<new()> call with all required arguments:
-
- CPANPLUS::Module->new(
- module => 'Foo',
- path => 'authors/id/A/AA/AAA',
- package => 'Foo-1.0.tgz',
- author => $author_object,
- _id => INTERNALS_OBJECT_ID,
- );
-
-Every accessor is also a valid option to pass to C<new>.
-
-Returns a module object on success and false on failure.
-
-=cut
-
-
-sub new {
- my($class, %hash) = @_;
-
- ### don't check the template for sanity
- ### -- we know it's good and saves a lot of performance
- local $Params::Check::SANITY_CHECK_TEMPLATE = 0;
-
- my $object = check( $tmpl, \%hash ) or return;
-
- bless $object, $class;
-
- return $object;
-}
-
-### only create status objects when they're actually asked for
-sub status {
- my $self = shift;
- return $self->_status if $self->_status;
-
- my $acc = Object::Accessor->new;
- $acc->mk_accessors( qw[ installer_type dist_cpan dist prereqs
- signature extract fetch readme uninstall
- created installed prepared checksums files
- checksum_ok checksum_value _fetch_from
- configure_requires
- ] );
-
- ### create an alias from 'requires' to 'prereqs', so it's more in
- ### line with 'configure_requires';
- $acc->mk_aliases( requires => 'prereqs' );
-
- $self->_status( $acc );
-
- return $self->_status;
-}
-
-
-### flush the cache of this object ###
-sub _flush {
- my $self = shift;
- $self->status->mk_flush;
- return 1;
-}
-
-=head2 $mod->package_name( [$package_string] )
-
-Returns the name of the package a module is in. For C<Acme::Bleach>
-that might be C<Acme-Bleach>.
-
-=head2 $mod->package_version( [$package_string] )
-
-Returns the version of the package a module is in. For a module
-in the package C<Acme-Bleach-1.1.tar.gz> this would be C<1.1>.
-
-=head2 $mod->package_extension( [$package_string] )
-
-Returns the suffix added by the compression method of a package a
-certain module is in. For a module in C<Acme-Bleach-1.1.tar.gz>, this
-would be C<tar.gz>.
-
-=head2 $mod->package_is_perl_core
-
-Returns a boolean indicating of the package a particular module is in,
-is actually a core perl distribution.
-
-=head2 $mod->module_is_supplied_with_perl_core( [version => $]] )
-
-Returns a boolean indicating whether C<ANY VERSION> of this module
-was supplied with the current running perl's core package.
-
-=head2 $mod->is_bundle
-
-Returns a boolean indicating if the module you are looking at, is
-actually a bundle. Bundles are identified as modules whose name starts
-with C<Bundle::>.
-
-=head2 $mod->is_autobundle;
-
-Returns a boolean indicating if the module you are looking at, is
-actually an autobundle as generated by C<< $cb->autobundle >>.
-
-=head2 $mod->is_third_party
-
-Returns a boolean indicating whether the package is a known third-party
-module (i.e. it's not provided by the standard Perl distribution and
-is not available on the CPAN, but on a third party software provider).
-See L<Module::ThirdParty> for more details.
-
-=head2 $mod->third_party_information
-
-Returns a reference to a hash with more information about a third-party
-module. See the documentation about C<module_information()> in
-L<Module::ThirdParty> for more details.
-
-=cut
-
-{ ### fetches the test reports for a certain module ###
- my %map = (
- name => 0,
- version => 1,
- extension => 2,
- );
-
- while ( my($type, $index) = each %map ) {
- my $name = 'package_' . $type;
-
- no strict 'refs';
- *$name = sub {
- my $self = shift;
- my $val = shift || $self->package;
- my @res = $self->parent->_split_package_string( package => $val );
-
- ### return the corresponding index from the result
- return $res[$index] if @res;
- return;
- };
- }
-
- sub package_is_perl_core {
- my $self = shift;
- my $cb = $self->parent;
-
- ### check if the package looks like a perl core package
- return 1 if $self->package_name eq PERL_CORE;
-
- ### address #44562: ::Module->package_is_perl_code : problem comparing
- ### version strings -- use $cb->_vcmp to avoid warnings when version
- ### have _ in them
-
- my $core = $self->module_is_supplied_with_perl_core;
- ### ok, so it's found in the core, BUT it could be dual-lifed
- if (defined $core) {
- ### if the package is newer than installed, then it's dual-lifed
- return if $cb->_vcmp($self->version, $self->installed_version) > 0;
-
- ### if the package is newer or equal to the corelist,
- ### then it's dual-lifed
- return if $cb->_vcmp( $self->version, $core ) >= 0;
-
- ### otherwise, it's older than corelist, thus unsuitable.
- return 1;
- }
-
- ### not in corelist, not a perl core package.
- return;
- }
-
- sub module_is_supplied_with_perl_core {
- my $self = shift;
- my $ver = shift || $];
-
- ### allow it to be called as a package function as well like:
- ### CPANPLUS::Module::module_is_supplied_with_perl_core('Config')
- ### so that we can check the status of modules that aren't released
- ### to CPAN, but are part of the core.
- my $name = ref $self ? $self->module : $self;
-
- ### check Module::CoreList to see if it's a core package
- require Module::CoreList;
-
- ### Address #41157: Module::module_is_supplied_with_perl_core()
- ### broken for perl 5.10: Module::CoreList's version key for the
- ### hash has a different number of trailing zero than $] aka
- ### $PERL_VERSION.
-
- my $core;
-
- if ( exists $Module::CoreList::version{ 0+$ver }->{ $name } ) {
- $core = $Module::CoreList::version{ 0+$ver }->{ $name };
- $core = 0 unless $core;
- }
- return $core;
- }
-
- ### make sure Bundle-Foo also gets flagged as bundle
- sub is_bundle {
- my $self = shift;
-
- ### cpan'd bundle
- return 1 if $self->module =~ /^bundle(?:-|::)/i;
-
- ### autobundle
- return 1 if $self->is_autobundle;
-
- ### neither
- return;
- }
-
- ### full path to a generated autobundle
- sub is_autobundle {
- my $self = shift;
- my $conf = $self->parent->configure_object;
- my $prefix = $conf->_get_build('autobundle_prefix');
-
- return 1 if $self->module eq $prefix;
- return;
- }
-
- sub is_third_party {
- my $self = shift;
-
- return unless can_load( modules => { 'Module::ThirdParty' => 0 } );
-
- return Module::ThirdParty::is_3rd_party( $self->name );
- }
-
- sub third_party_information {
- my $self = shift;
-
- return unless $self->is_third_party;
-
- return Module::ThirdParty::module_information( $self->name );
- }
-}
-
-=pod
-
-=head2 $clone = $self->clone
-
-Clones the current module object for tinkering with.
-It will have a clean C<CPANPLUS::Module::Status> object, as well as
-a fake C<CPANPLUS::Module::Author> object.
-
-=cut
-
-{ ### accessors dont change during run time, so only compute once
- my @acc = grep !/status/, __PACKAGE__->accessors();
-
- sub clone {
- my $self = shift;
-
- ### clone the object ###
- my %data = map { $_ => $self->$_ } @acc;
-
- my $obj = CPANPLUS::Module::Fake->new( %data );
-
- return $obj;
- }
-}
-
-=pod
-
-=head2 $where = $self->fetch
-
-Fetches the module from a CPAN mirror.
-Look at L<CPANPLUS::Internals::Fetch::_fetch()> for details on the
-options you can pass.
-
-=cut
-
-sub fetch {
- my $self = shift;
- my $cb = $self->parent;
-
- ### custom args
- my %args = ( module => $self );
-
- ### if a custom fetch location got specified before, add that here
- $args{fetch_from} = $self->status->_fetch_from
- if $self->status->_fetch_from;
-
- my $where = $cb->_fetch( @_, %args ) or return;
-
- ### do an md5 check ###
- if( !$self->status->_fetch_from and
- $cb->configure_object->get_conf('md5') and
- $self->package ne CHECKSUMS
- ) {
- unless( $self->_validate_checksum ) {
- error( loc( "Checksum error for '%1' -- will not trust package",
- $self->package) );
- return;
- }
- }
-
- return $where;
-}
-
-=pod
-
-=head2 $path = $self->extract
-
-Extracts the fetched module.
-Look at L<CPANPLUS::Internals::Extract::_extract()> for details on
-the options you can pass.
-
-=cut
-
-sub extract {
- my $self = shift;
- my $cb = $self->parent;
-
- unless( $self->status->fetch ) {
- error( loc( "You have not fetched '%1' yet -- cannot extract",
- $self->module) );
- return;
- }
-
- ### can't extract these, so just use the basedir for the file
- if( $self->is_autobundle ) {
-
- ### this is expected to be set after an extract call
- $self->get_installer_type;
-
- return $self->status->extract( dirname( $self->status->fetch ) );
- }
-
- return $cb->_extract( @_, module => $self );
-}
-
-=head2 $type = $self->get_installer_type([prefer_makefile => BOOL])
-
-Gets the installer type for this module. This may either be C<build> or
-C<makemaker>. If C<Module::Build> is unavailable or no installer type
-is available, it will fall back to C<makemaker>. If both are available,
-it will pick the one indicated by your config, or by the
-C<prefer_makefile> option you can pass to this function.
-
-Returns the installer type on success, and false on error.
-
-=cut
-
-sub get_installer_type {
- my $self = shift;
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my ($prefer_makefile,$verbose);
- my $tmpl = {
- prefer_makefile => { default => $conf->get_conf('prefer_makefile'),
- store => \$prefer_makefile, allow => BOOLEANS },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- };
-
- check( $tmpl, \%hash ) or return;
-
- my $type;
-
- ### autobundles use their own installer, so return that
- if( $self->is_autobundle ) {
- $type = INSTALLER_AUTOBUNDLE;
-
- } else {
- my $extract = $self->status->extract();
- unless( $extract ) {
- error(loc(
- "Cannot determine installer type of unextracted module '%1'",
- $self->module
- ));
- return;
- }
-
- ### check if it's a makemaker or a module::build type dist ###
- my $found_build = -e BUILD_PL->( $extract );
- my $found_makefile = -e MAKEFILE_PL->( $extract );
-
- $type = INSTALLER_BUILD if !$prefer_makefile && $found_build;
- $type = INSTALLER_BUILD if $found_build && !$found_makefile;
- $type = INSTALLER_MM if $prefer_makefile && $found_makefile;
- $type = INSTALLER_MM if $found_makefile && !$found_build;
- # Special case Module::Build to always use INSTALLER_MM
- $type = INSTALLER_MM if $self->package =~ m{^Module-Build-\d};
-
- }
-
- ### ok, so it's a 'build' installer, but you don't /have/ module build
- ### XXX duplicated from CPANPLUS::Selfupdate. fix somehow?
- if( $type and $type eq INSTALLER_BUILD and (
- not CPANPLUS::Dist->has_dist_type( INSTALLER_BUILD )
- or not $cb->module_tree( INSTALLER_BUILD )
- ->is_uptodate( version => '0.60' )
- ) ) {
-
- ### XXX this is for recording purposes only. We *have* to install
- ### these before even creating a dist object, or we'll get an error
- ### saying 'no such dist type';
- ### XXX duplicated from CPANPLUS::Selfupdate. fix somehow?
- my $href = $self->status->configure_requires || {};
- my $deps = { INSTALLER_BUILD, '0.60', %$href };
-
- $self->status->configure_requires( $deps );
-
- msg(loc("This module requires '%1' and '%2' to be installed first. ".
- "Adding these modules to your prerequisites list",
- 'Module::Build', INSTALLER_BUILD
- ), $verbose );
-
-
- ### ok, actually we found neither ###
- } elsif ( !$type ) {
- error( loc( "Unable to find '%1' or '%2' for '%3'; ".
- "Will default to '%4' but might be unable ".
- "to install!", BUILD_PL->(), MAKEFILE_PL->(),
- $self->module, INSTALLER_MM ) );
- $type = INSTALLER_MM;
- }
-
- return $self->status->installer_type( $type ) if $type;
- return;
-}
-
-=pod
-
-=head2 $dist = $self->dist([target => 'prepare|create', format => DISTRIBUTION_TYPE, args => {key => val}]);
-
-Create a distribution object, ready to be installed.
-Distribution type defaults to your config settings
-
-The optional C<args> hashref is passed on to the specific distribution
-types' C<create> method after being dereferenced.
-
-Returns a distribution object on success, false on failure.
-
-See C<CPANPLUS::Dist> for details.
-
-=cut
-
-sub dist {
- my $self = shift;
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- ### have you determined your installer type yet? if not, do it here,
- ### we need the info
- $self->get_installer_type unless $self->status->installer_type;
-
- my($type,$args,$target);
- my $tmpl = {
- format => { default => $conf->get_conf('dist_type') ||
- $self->status->installer_type,
- store => \$type },
- target => { default => TARGET_CREATE, store => \$target },
- args => { default => {}, store => \$args },
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### ok, check for $type. Do we have it?
- unless( CPANPLUS::Dist->has_dist_type( $type ) ) {
-
- ### ok, we don't have it. Is it C::D::Build? if so we can install the
- ### whole thing now
- ### XXX we _could_ do this for any type we dont have actually...
- if( $type eq INSTALLER_BUILD ) {
- msg(loc("Bootstrapping installer '%1'", $type));
-
- ### don't propagate the format, it's the one we're trying to
- ### bootstrap, so it'll be an infinite loop if we do
-
- $cb->module_tree( $type )->install( target => $target, %$args ) or
- do {
- error(loc("Could not bootstrap installer '%1' -- ".
- "can not continue", $type));
- return;
- };
-
- ### re-scan for available modules now
- CPANPLUS::Dist->rescan_dist_types;
-
- unless( CPANPLUS::Dist->has_dist_type( $type ) ) {
- error(loc("Newly installed installer type '%1' should be ".
- "available, but is not! -- aborting", $type));
- return;
- } else {
- msg(loc("Installer '%1' successfully bootstrapped", $type));
- }
-
- ### some other plugin you dont have. Abort
- } else {
- error(loc("Installer type '%1' not found. Please verify your ".
- "installation -- aborting", $type ));
- return;
- }
- }
-
- ### make sure we don't overwrite it, just in case we came
- ### back from a ->save_state. This allows restoration to
- ### work correctly
- my( $dist, $dist_cpan );
-
- unless( $dist = $self->status->dist ) {
- $dist = $type->new( module => $self ) or return;
- $self->status->dist( $dist );
- }
-
- unless( $dist_cpan = $self->status->dist_cpan ) {
-
- $dist_cpan = $type eq $self->status->installer_type
- ? $self->status->dist
- : $self->status->installer_type->new( module => $self );
-
-
- $self->status->dist_cpan( $dist_cpan );
- }
-
-
- DIST: {
- ### just wanted the $dist object?
- last DIST if $target eq TARGET_INIT;
-
- ### first prepare the dist
- $dist->prepare( %$args ) or return;
- $self->status->prepared(1);
-
- ### you just wanted us to prepare?
- last DIST if $target eq TARGET_PREPARE;
-
- $dist->create( %$args ) or return;
- $self->status->created(1);
- }
-
- return $dist;
-}
-
-=pod
-
-=head2 $bool = $mod->prepare( )
-
-Convenience method around C<install()> that prepares a module
-without actually building it. This is equivalent to invoking C<install>
-with C<target> set to C<prepare>
-
-Returns true on success, false on failure.
-
-=cut
-
-sub prepare {
- my $self = shift;
- return $self->install( @_, target => TARGET_PREPARE );
-}
-
-=head2 $bool = $mod->create( )
-
-Convenience method around C<install()> that creates a module.
-This is equivalent to invoking C<install> with C<target> set to
-C<create>
-
-Returns true on success, false on failure.
-
-=cut
-
-sub create {
- my $self = shift;
- return $self->install( @_, target => TARGET_CREATE );
-}
-
-=head2 $bool = $mod->test( )
-
-Convenience wrapper around C<install()> that tests a module, without
-installing it.
-It's the equivalent to invoking C<install()> with C<target> set to
-C<create> and C<skiptest> set to C<0>.
-
-Returns true on success, false on failure.
-
-=cut
-
-sub test {
- my $self = shift;
- return $self->install( @_, target => TARGET_CREATE, skiptest => 0 );
-}
-
-=pod
-
-=head2 $bool = $self->install([ target => 'init|prepare|create|install', format => FORMAT_TYPE, extractdir => DIRECTORY, fetchdir => DIRECTORY, prefer_bin => BOOL, force => BOOL, verbose => BOOL, ..... ]);
-
-Installs the current module. This includes fetching it and extracting
-it, if this hasn't been done yet, as well as creating a distribution
-object for it.
-
-This means you can pass it more arguments than described above, which
-will be passed on to the relevant methods as they are called.
-
-See C<CPANPLUS::Internals::Fetch>, C<CPANPLUS::Internals::Extract> and
-C<CPANPLUS::Dist> for details.
-
-Returns true on success, false on failure.
-
-=cut
-
-sub install {
- my $self = shift;
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my $args; my $target; my $format;
- { ### so we can use the rest of the args to the create calls etc ###
- local $Params::Check::NO_DUPLICATES = 1;
- local $Params::Check::ALLOW_UNKNOWN = 1;
-
- ### targets 'dist' and 'test' are now completely ignored ###
- my $tmpl = {
- ### match this allow list with Dist->_resolve_prereqs
- target => { default => TARGET_INSTALL, store => \$target,
- allow => [TARGET_PREPARE, TARGET_CREATE,
- TARGET_INSTALL, TARGET_INIT ] },
- force => { default => $conf->get_conf('force'), },
- verbose => { default => $conf->get_conf('verbose'), },
- format => { default => $conf->get_conf('dist_type'),
- store => \$format },
- };
-
- $args = check( $tmpl, \%hash ) or return;
- }
-
-
- ### if this target isn't 'install', we will need to at least 'create'
- ### every prereq, so it can build
- ### XXX prereq_target of 'prepare' will do weird things here, and is
- ### not supported.
- $args->{'prereq_target'} ||= TARGET_CREATE if $target ne TARGET_INSTALL;
-
- ### check if it's already upto date ###
- if( $target eq TARGET_INSTALL and !$args->{'force'} and
- !$self->package_is_perl_core() and # separate rules apply
- ( $self->status->installed() or $self->is_uptodate ) and
- !INSTALL_VIA_PACKAGE_MANAGER->($format)
- ) {
- msg(loc("Module '%1' already up to date, won't install without force",
- $self->module), $args->{'verbose'} );
- return $self->status->installed(1);
- }
-
- # if it's a non-installable core package, abort the install.
- if( $self->package_is_perl_core() ) {
- # if the installed is newer, say so.
- if( $self->installed_version > $self->version ) {
- error(loc("The core Perl %1 module '%2' (%3) is more ".
- "recent than the latest release on CPAN (%4). ".
- "Aborting install.",
- $], $self->module, $self->installed_version,
- $self->version ) );
- # if the installed matches, say so.
- } elsif( $self->installed_version == $self->version ) {
- error(loc("The core Perl %1 module '%2' (%3) can only ".
- "be installed by Perl itself. ".
- "Aborting install.",
- $], $self->module, $self->installed_version ) );
- # otherwise, the installed is older; say so.
- } else {
- error(loc("The core Perl %1 module '%2' can only be ".
- "upgraded from %3 to %4 by Perl itself (%5). ".
- "Aborting install.",
- $], $self->module, $self->installed_version,
- $self->version, $self->package ) );
- }
- return;
-
- ### it might be a known 3rd party module
- } elsif ( $self->is_third_party ) {
- my $info = $self->third_party_information;
- error(loc(
- "%1 is a known third-party module.\n\n".
- "As it isn't available on the CPAN, CPANPLUS can't install " .
- "it automatically. Therefore you need to install it manually " .
- "before proceeding.\n\n".
- "%2 is part of %3, published by %4, and should be available ".
- "for download at the following address:\n\t%5",
- $self->name, $self->name, $info->{name}, $info->{author},
- $info->{url}
- ));
-
- return;
- }
-
- ### fetch it if need be ###
- unless( $self->status->fetch ) {
- my $params;
- for (qw[prefer_bin fetchdir]) {
- $params->{$_} = $args->{$_} if exists $args->{$_};
- }
- for (qw[force verbose]) {
- $params->{$_} = $args->{$_} if defined $args->{$_};
- }
- $self->fetch( %$params ) or return;
- }
-
- ### extract it if need be ###
- unless( $self->status->extract ) {
- my $params;
- for (qw[prefer_bin extractdir]) {
- $params->{$_} = $args->{$_} if exists $args->{$_};
- }
- for (qw[force verbose]) {
- $params->{$_} = $args->{$_} if defined $args->{$_};
- }
- $self->extract( %$params ) or return;
- }
-
- $args->{'prereq_format'} = $format if $format;
- $format ||= $self->status->installer_type;
-
- unless( $format ) {
- error( loc( "Don't know what installer to use; " .
- "Couldn't find either '%1' or '%2' in the extraction " .
- "directory '%3' -- will be unable to install",
- BUILD_PL->(), MAKEFILE_PL->(), $self->status->extract ) );
-
- $self->status->installed(0);
- return;
- }
-
-
- ### do SIGNATURE checks? ###
- ### XXX check status and not recheck EVERY time?
- if( $conf->get_conf('signature') ) {
- unless( $self->check_signature( verbose => $args->{verbose} ) ) {
- error( loc( "Signature check failed for module '%1' ".
- "-- Not trusting this module, aborting install",
- $self->module ) );
- $self->status->signature(0);
-
- ### send out test report on broken sig
- if( $conf->get_conf('cpantest') ) {
- $cb->_send_report(
- module => $self,
- failed => 1,
- buffer => CPANPLUS::Error->stack_as_string,
- verbose => $args->{verbose},
- force => $args->{force},
- ) or error(loc("Failed to send test report for '%1'",
- $self->module ) );
- }
-
- return;
-
- } else {
- ### signature OK ###
- $self->status->signature(1);
- }
- }
-
- ### a target of 'create' basically means not to run make test ###
- ### eh, no it /doesn't/.. skiptest => 1 means skiptest => 1.
- #$args->{'skiptest'} = 1 if $target eq 'create';
-
- ### bundle rules apply ###
- if( $self->is_bundle ) {
- ### check what we need to install ###
- my @prereqs = $self->bundle_modules();
- unless( @prereqs ) {
- error( loc( "Bundle '%1' does not specify any modules to install",
- $self->module ) );
-
- ### XXX mark an error here? ###
- }
- }
-
- my $dist = $self->dist( format => $format,
- target => $target,
- args => $args );
- unless( $dist ) {
- error( loc( "Unable to create a new distribution object for '%1' " .
- "-- cannot continue", $self->module ) );
- return;
- }
-
- return 1 if $target ne TARGET_INSTALL;
-
- my $ok = $dist->install( %$args ) ? 1 : 0;
-
- $self->status->installed($ok);
-
- return 1 if $ok;
- return;
-}
-
-=pod @list = $self->bundle_modules()
-
-Returns a list of module objects the Bundle specifies.
-
-This requires you to have extracted the bundle already, using the
-C<extract()> method.
-
-Returns false on error.
-
-=cut
-
-sub bundle_modules {
- my $self = shift;
- my $cb = $self->parent;
-
- unless( $self->is_bundle ) {
- error( loc("'%1' is not a bundle", $self->module ) );
- return;
- }
-
- my @files;
-
- ### autobundles are special files generated by CPANPLUS. If we can
- ### read the file, we can determine the prereqs
- if( $self->is_autobundle ) {
- my $where;
- unless( $where = $self->status->fetch ) {
- error(loc("Don't know where '%1' was fetched to", $self->package));
- return;
- }
-
- push @files, $where
-
- ### regular bundle::* upload
- } else {
- my $dir;
- unless( $dir = $self->status->extract ) {
- error(loc("Don't know where '%1' was extracted to", $self->module));
- return;
- }
-
- find( {
- wanted => sub { push @files, File::Spec->rel2abs($_) if /\.pm/i },
- no_chdir => 1,
- }, $dir );
- }
-
- my $prereqs = {}; my @list; my $seen = {};
- for my $file ( @files ) {
- my $fh = FileHandle->new($file)
- or( error(loc("Could not open '%1' for reading: %2",
- $file,$!)), next );
-
- my $flag;
- while( local $_ = <$fh> ) {
- ### quick hack to read past the header of the file ###
- last if $flag && m|^=head|i;
-
- ### from perldoc cpan:
- ### =head1 CONTENTS
- ### In this pod section each line obeys the format
- ### Module_Name [Version_String] [- optional text]
- $flag = 1 if m|^=head1 CONTENTS|i;
-
- if ($flag && /^(?!=)(\S+)\s*(\S+)?/) {
- my $module = $1;
- my $version = $cb->_version_to_number( version => $2 );
-
- my $obj = $cb->module_tree($module);
-
- unless( $obj ) {
- error(loc("Cannot find bundled module '%1'", $module),
- loc("-- it does not seem to exist") );
- next;
- }
-
- ### make sure we list no duplicates ###
- unless( $seen->{ $obj->module }++ ) {
- push @list, $obj;
- $prereqs->{ $module } =
- $cb->_version_to_number( version => $version );
- }
- }
- }
- }
-
- ### store the prereqs we just found ###
- $self->status->prereqs( $prereqs );
-
- return @list;
-}
-
-=pod
-
-=head2 $text = $self->readme
-
-Fetches the readme belonging to this module and stores it under
-C<< $obj->status->readme >>. Returns the readme as a string on
-success and returns false on failure.
-
-=cut
-
-sub readme {
- my $self = shift;
- my $conf = $self->parent->configure_object;
-
- ### did we already dl the readme once? ###
- return $self->status->readme() if $self->status->readme();
-
- ### this should be core ###
- return unless can_load( modules => { FileHandle => '0.0' },
- verbose => 1,
- );
-
- ### get a clone of the current object, with a fresh status ###
- my $obj = $self->clone or return;
-
- ### munge the package name
- my $pkg = README->( $obj );
- $obj->package($pkg);
-
- my $file;
- { ### disable checksum fetches on readme downloads
-
- my $tmp = $conf->get_conf( 'md5' );
- $conf->set_conf( md5 => 0 );
-
- $file = $obj->fetch;
-
- $conf->set_conf( md5 => $tmp );
-
- return unless $file;
- }
-
- ### read the file into a scalar, to store in the original object ###
- my $fh = new FileHandle;
- unless( $fh->open($file) ) {
- error( loc( "Could not open file '%1': %2", $file, $! ) );
- return;
- }
-
- my $in = do{ local $/; <$fh> };
- $fh->close;
-
- return $self->status->readme( $in );
-}
-
-=pod
-
-=head2 $version = $self->installed_version()
-
-Returns the currently installed version of this module, if any.
-
-=head2 $where = $self->installed_file()
-
-Returns the location of the currently installed file of this module,
-if any.
-
-=head2 $dir = $self->installed_dir()
-
-Returns the directory (or more accurately, the C<@INC> handle) from
-which this module was loaded, if any.
-
-=head2 $bool = $self->is_uptodate([version => VERSION_NUMBER])
-
-Returns a boolean indicating if this module is uptodate or not.
-
-=cut
-
-### uptodate/installed functions
-{ my $map = { # hashkey, alternate rv
- installed_version => ['version', 0 ],
- installed_file => ['file', ''],
- installed_dir => ['dir', ''],
- is_uptodate => ['uptodate', 0 ],
- };
-
- while( my($method, $aref) = each %$map ) {
- my($key,$alt_rv) = @$aref;
-
- no strict 'refs';
- *$method = sub {
- ### never use the @INC hooks to find installed versions of
- ### modules -- they're just there in case they're not on the
- ### perl install, but the user shouldn't trust them for *other*
- ### modules!
- ### XXX CPANPLUS::inc is now obsolete, so this should not
- ### be needed anymore
- #local @INC = CPANPLUS::inc->original_inc;
-
- my $self = shift;
-
- ### make sure check_install is not looking in %INC, as
- ### that may contain some of our sneakily loaded modules
- ### that aren't installed as such. -- kane
- local $Module::Load::Conditional::CHECK_INC_HASH = 0;
- ### this should all that is required for deprecated core modules
- local $Module::Load::Conditional::DEPRECATED = 1;
- my $href = check_install(
- module => $self->module,
- version => $self->version,
- @_,
- );
-
- ### Don't trust modules which are the result of @INC hooks
- ### FatPacker uses this trickery and it causes WTF moments
- return $alt_rv if defined $href->{dir} && ref $href->{dir};
-
- return $href->{$key} || $alt_rv;
- }
- }
-}
-
-
-
-=pod
-
-=head2 $href = $self->details()
-
-Returns a hashref with key/value pairs offering more information about
-a particular module. For example, for C<Time::HiRes> it might look like
-this:
-
- Author Jarkko Hietaniemi (jhi@iki.fi)
- Description High resolution time, sleep, and alarm
- Development Stage Released
- Installed File /usr/local/perl/lib/Time/Hires.pm
- Interface Style plain Functions, no references used
- Language Used C and perl, a C compiler will be needed
- Package Time-HiRes-1.65.tar.gz
- Public License Unknown
- Support Level Developer
- Version Installed 1.52
- Version on CPAN 1.65
-
-=cut
-
-sub details {
- my $self = shift;
- my $conf = $self->parent->configure_object();
- my $cb = $self->parent;
- my %hash = @_;
-
- my $res = {
- Author => loc("%1 (%2)", $self->author->author(),
- $self->author->email() ),
- Package => $self->package,
- Description => $self->description || loc('None given'),
- 'Version on CPAN' => $self->version,
- };
-
- ### check if we have the module installed
- ### if so, add version have and version on cpan
- $res->{'Version Installed'} = $self->installed_version
- if $self->installed_version;
- $res->{'Installed File'} = $self->installed_file if $self->installed_file;
-
- my $i = 0;
- for my $item( split '', $self->dslip ) {
- $res->{ $cb->_dslip_defs->[$i]->[0] } =
- $cb->_dslip_defs->[$i]->[1]->{$item} || loc('Unknown');
- $i++;
- }
-
- return $res;
-}
-
-=head2 @list = $self->contains()
-
-Returns a list of module objects that represent the modules also
-present in the package of this module.
-
-For example, for C<Archive::Tar> this might return:
-
- Archive::Tar
- Archive::Tar::Constant
- Archive::Tar::File
-
-=cut
-
-sub contains {
- my $self = shift;
- my $cb = $self->parent;
- my $pkg = $self->package;
-
- my @mods = $cb->search( type => 'package', allow => [qr/^$pkg$/] );
-
- return @mods;
-}
-
-=pod
-
-=head2 @list_of_hrefs = $self->fetch_report()
-
-This function queries the CPAN testers database at
-I<http://testers.cpan.org/> for test results of specified module
-objects, module names or distributions.
-
-Look at L<CPANPLUS::Internals::Report::_query_report()> for details on
-the options you can pass and the return value to expect.
-
-=cut
-
-sub fetch_report {
- my $self = shift;
- my $cb = $self->parent;
-
- return $cb->_query_report( @_, module => $self );
-}
-
-=pod
-
-=head2 $bool = $self->uninstall([type => [all|man|prog])
-
-This function uninstalls the specified module object.
-
-You can install 2 types of files, either C<man> pages or C<prog>ram
-files. Alternately you can specify C<all> to uninstall both (which
-is the default).
-
-Returns true on success and false on failure.
-
-Do note that this does an uninstall via the so-called C<.packlist>,
-so if you used a module installer like say, C<ports> or C<apt>, you
-should not use this, but use your package manager instead.
-
-=cut
-
-sub uninstall {
- my $self = shift;
- my $conf = $self->parent->configure_object();
- my %hash = @_;
-
- my ($type,$verbose);
- my $tmpl = {
- type => { default => 'all', allow => [qw|man prog all|],
- store => \$type },
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- force => { default => $conf->get_conf('force') },
- };
-
- ### XXX add a warning here if your default install dist isn't
- ### makefile or build -- that means you are using a package manager
- ### and this will not do what you think!
-
- my $args = check( $tmpl, \%hash ) or return;
-
- if( $conf->get_conf('dist_type') and (
- ($conf->get_conf('dist_type') ne INSTALLER_BUILD) or
- ($conf->get_conf('dist_type') ne INSTALLER_MM))
- ) {
- msg(loc("You have a default installer type set (%1) ".
- "-- you should probably use that package manager to " .
- "uninstall modules", $conf->get_conf('dist_type')), $verbose);
- }
-
- ### check if we even have the module installed -- no point in continuing
- ### otherwise
- unless( $self->installed_version ) {
- error( loc( "Module '%1' is not installed, so cannot uninstall",
- $self->module ) );
- return;
- }
-
- ### nothing to uninstall ###
- my $files = $self->files( type => $type ) or return;
- my $dirs = $self->directory_tree( type => $type ) or return;
- my $sudo = $conf->get_program('sudo');
-
- ### just in case there's no file; M::B doesn't provide .packlists yet ###
- my $pack = $self->packlist;
- $pack = $pack->[0]->packlist_file() if $pack;
-
- ### first remove the files, then the dirs if they are empty ###
- my $flag = 0;
- for my $file( @$files, $pack ) {
- next unless defined $file && -f $file;
-
- msg(loc("Unlinking '%1'", $file), $verbose);
-
- my @cmd = ($^X, "-eunlink+q[$file]");
- unshift @cmd, $sudo if $sudo;
-
- my $buffer;
- unless ( run( command => \@cmd,
- verbose => $verbose,
- buffer => \$buffer )
- ) {
- error(loc("Failed to unlink '%1': '%2'",$file, $buffer));
- $flag++;
- }
- }
-
- for my $dir ( sort @$dirs ) {
- local *DIR;
- opendir DIR, $dir or next;
- my @count = readdir(DIR);
- close DIR;
-
- next unless @count == 2; # . and ..
-
- msg(loc("Removing '%1'", $dir), $verbose);
-
- ### this fails on my win2k machines.. it indeed leaves the
- ### dir, but it's not a critical error, since the files have
- ### been removed. --kane
- #unless( rmdir $dir ) {
- # error( loc( "Could not remove '%1': %2", $dir, $! ) )
- # unless $^O eq 'MSWin32';
- #}
-
- my @cmd = ($^X, "-e", "rmdir q[$dir]");
- unshift @cmd, $sudo if $sudo;
-
- my $buffer;
- unless ( run( command => \@cmd,
- verbose => $verbose,
- buffer => \$buffer )
- ) {
- error(loc("Failed to rmdir '%1': %2",$dir,$buffer));
- $flag++;
- }
- }
-
- $self->status->uninstall(!$flag);
- $self->status->installed( $flag ? 1 : undef);
-
- return !$flag;
-}
-
-=pod
-
-=head2 @modobj = $self->distributions()
-
-Returns a list of module objects representing all releases for this
-module on success, false on failure.
-
-=cut
-
-sub distributions {
- my $self = shift;
- my %hash = @_;
-
- my @list = $self->author->distributions( %hash, module => $self ) or return;
-
- ### it's another release then by the same author ###
- return grep { $_->package_name eq $self->package_name } @list;
-}
-
-=pod
-
-=head2 @list = $self->files ()
-
-Returns a list of files used by this module, if it is installed.
-
-=head2 @list = $self->directory_tree ()
-
-Returns a list of directories used by this module.
-
-=head2 @list = $self->packlist ()
-
-Returns the C<ExtUtils::Packlist> object for this module.
-
-=head2 @list = $self->validate ()
-
-Returns a list of files that are missing for this modules, but
-are present in the .packlist file.
-
-=cut
-
-for my $sub (qw[files directory_tree packlist validate]) {
- no strict 'refs';
- *$sub = sub {
- return shift->_extutils_installed( @_, method => $sub );
- }
-}
-
-### generic method to call an ExtUtils::Installed method ###
-sub _extutils_installed {
- my $self = shift;
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
- my $home = $cb->_home_dir; # may be needed to fix up prefixes
- my %hash = @_;
-
- my ($verbose,$type,$method);
- my $tmpl = {
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose, },
- type => { default => 'all',
- allow => [qw|prog man all|],
- store => \$type, },
- method => { required => 1,
- store => \$method,
- allow => [qw|files directory_tree packlist
- validate|],
- },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- ### old versions of cygwin + perl < 5.8 are buggy here. bail out if we
- ### find we're being used by them
- { my $err = ON_OLD_CYGWIN;
- if($err) { error($err); return };
- }
-
- return unless can_load(
- modules => { 'ExtUtils::Installed' => '0.0' },
- verbose => $verbose,
- );
-
- my @config_names = (
- ### lib
- { lib => 'privlib', # perl-only
- arch => 'archlib', # compiled code
- prefix => 'prefix', # prefix to both
- },
- ### site
- { lib => 'sitelib',
- arch => 'sitearch',
- prefix => 'siteprefix',
- },
- ### vendor
- { lib => 'vendorlib',
- arch => 'vendorarch',
- prefix => 'vendorprefix',
- },
- );
-
- ### search in your regular @INC, and anything you added to your config.
- ### this lets EU::Installed find .packlists that are *not* in the standard
- ### compiled in @INC path. Requires EU::I 1.42 or up. this addresses #33438
- ### make sure the archname path is also added, as that's where the .packlist
- ### files are written
- my @libs;
- for my $lib ( @{ $conf->get_conf('lib') } ) {
- require Config;
-
- ### and just the standard dir
- push @libs, $lib;
-
- ### figure out what an MM prefix expands to. Basically, it's the
- ### site install target from %Config, ie: /opt/lib/perl5/site_perl/5.8.8
- ### minus the site wide prefix, ie: /opt
- ### this lets users add the dir they have set as their EU::MM PREFIX
- ### to our 'lib' config and it Just Works
- ### the arch specific dir, ie:
- ### /opt/lib/perl5/site_perl/5.8.8/darwin-2level
- ### XXX is this the right thing to do?
-
- ### we add all 6 dir combos for prefixes:
- ### /foo/lib
- ### /foo/lib/arch
- ### /foo/site/lib
- ### /foo/site/lib/arch
- ### /foo/vendor/lib
- ### /foo/vendor/lib/arch
- for my $href ( @config_names ) {
- for my $key ( qw[lib arch] ) {
-
- ### look up the config value -- use EXP for the EXPANDED
- ### version, so no ~ etc are found in there
- my $dir = $Config::Config{ $href->{ $key } .'exp' } or next;
- my $prefix = $Config::Config{ $href->{prefix} };
-
- ### prefix may be relative to home, and contain a ~
- ### if so, fix it up.
- $prefix =~ s/^~/$home/;
-
- ### remove the prefix from it, so we can append to our $lib
- $dir =~ s/^\Q$prefix\E//;
-
- ### do the appending
- push @libs, File::Spec->catdir( $lib, $dir );
-
- }
- }
- }
-
- my $inst;
- unless( $inst = ExtUtils::Installed->new( extra_libs => \@libs ) ) {
- error( loc("Could not create an '%1' object", 'ExtUtils::Installed' ) );
-
- ### in case it's being used directly... ###
- return;
- }
-
-
- { ### EU::Installed can die =/
- my @files;
- eval { @files = $inst->$method( $self->module, $type ) };
-
- if( $@ ) {
- chomp $@;
- error( loc("Could not get '%1' for '%2': %3",
- $method, $self->module, $@ ) );
- return;
- }
-
- return wantarray ? @files : \@files;
- }
-}
-
-=head2 $bool = $self->add_to_includepath;
-
-Adds the current modules path to C<@INC> and C<$PERL5LIB>. This allows
-you to add the module from its build dir to your path.
-
-It also adds the current modules C<bin> and/or C<script> paths to
-the PATH.
-
-You can reset C<$PATH>, C<@INC> and C<$PERL5LIB> to their original state when you
-started the program, by calling:
-
- $self->parent->flush('lib');
-
-=cut
-
-sub add_to_includepath {
- my $self = shift;
- my $cb = $self->parent;
-
- if( my $dir = $self->status->extract ) {
-
- $cb->_add_to_includepath(
- directories => [
- File::Spec->catdir(BLIB->($dir), LIB),
- File::Spec->catdir(BLIB->($dir), ARCH),
- BLIB->($dir),
- ]
- ) or return;
-
- $cb->_add_to_path(
- directories => [
- File::Spec->catdir(BLIB->($dir), SCRIPT),
- File::Spec->catdir(BLIB->($dir), BIN),
- ]
- ) or return;
-
- } else {
- error(loc( "No extract dir registered for '%1' -- can not add ".
- "add builddir to search path!", $self->module ));
- return;
- }
-
- return 1;
-
-}
-
-=pod
-
-=head2 $path = $self->best_path_to_module_build();
-
-B<OBSOLETE>
-
-If a newer version of Module::Build is found in your path, it will
-return this C<special> path. If the newest version of C<Module::Build>
-is found in your regular C<@INC>, the method will return false. This
-indicates you do not need to add a special directory to your C<@INC>.
-
-Note that this is only relevant if you're building your own
-C<CPANPLUS::Dist::*> plugin -- the built-in dist types already have
-this taken care of.
-
-=cut
-
-### make sure we're always running 'perl Build.PL' and friends
-### against the highest version of module::build available
-sub best_path_to_module_build {
- my $self = shift;
-
- ### Since M::B will actually shell out and run the Build.PL, we must
- ### make sure it refinds the proper version of M::B in the path.
- ### that may be either in our cp::inc or in site_perl, or even a
- ### new M::B being installed.
- ### don't add anything else here, as that might screw up prereq checks
-
- ### XXX this might be needed for Dist::MM too, if a makefile.pl is
- ### masquerading as a Build.PL
-
- ### did we find the most recent module::build in our installer path?
-
- ### XXX can't do changes to @INC, they're being ignored by
- ### new_from_context when writing a Build script. see ticket:
- ### #8826 Module::Build ignores changes to @INC when writing Build
- ### from new_from_context
- ### XXX applied schwern's patches (as seen on CPANPLUS::Devel 10/12/04)
- ### and upped the version to 0.26061 of the bundled version, and things
- ### work again
-
- ### this functionality is now obsolete -- prereqs should be installed
- ### and we no longer use the CPANPLUS::inc magic.. so comment this out.
-# require Module::Build;
-# if( CPANPLUS::inc->path_to('Module::Build') and (
-# CPANPLUS::inc->path_to('Module::Build') eq
-# CPANPLUS::inc->installer_path )
-# ) {
-#
-# ### if the module being installed is *not* Module::Build
-# ### itself -- as that would undoubtedly be newer -- add
-# ### the path to the installers to @INC
-# ### if it IS module::build itself, add 'lib' to its path,
-# ### as the Build.PL would do as well, but the API doesn't.
-# ### this makes self updates possible
-# return $self->module eq 'Module::Build'
-# ? 'lib'
-# : CPANPLUS::inc->installer_path;
-# }
-
- ### otherwise, the path was found through a 'normal' way of
- ### scanning @INC.
- return;
-}
-
-=pod
-
-=head1 BUG REPORTS
-
-Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>.
-
-=head1 AUTHOR
-
-This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
-
-=head1 COPYRIGHT
-
-The CPAN++ interface (of which this module is a part of) is copyright (c)
-2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved.
-
-This library is free software; you may redistribute and/or modify it
-under the same terms as Perl itself.
-
-=cut
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
-
-1;
-
-__END__
-
-todo:
-reports();
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Module/Author.pm b/cpan/CPANPLUS/lib/CPANPLUS/Module/Author.pm
deleted file mode 100644
index c95de4064c..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Module/Author.pm
+++ /dev/null
@@ -1,235 +0,0 @@
-package CPANPLUS::Module::Author;
-use deprecate;
-
-use strict;
-
-use CPANPLUS::Error;
-use CPANPLUS::Internals::Constants;
-use Params::Check qw[check];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-local $Params::Check::VERBOSE = 1;
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Module::Author - CPAN author object for CPANPLUS
-
-=head1 SYNOPSIS
-
- my $author = CPANPLUS::Module::Author->new(
- author => 'Jack Ashton',
- cpanid => 'JACKASH',
- _id => INTERNALS_OBJECT_ID,
- );
-
- $author->cpanid;
- $author->author;
- $author->email;
-
- @dists = $author->distributions;
- @mods = $author->modules;
-
- @accessors = CPANPLUS::Module::Author->accessors;
-
-=head1 DESCRIPTION
-
-C<CPANPLUS::Module::Author> creates objects from the information in the
-source files. These can then be used to query on.
-
-These objects should only be created internally. For C<fake> objects,
-there's the C<CPANPLUS::Module::Author::Fake> class.
-
-=head1 ACCESSORS
-
-An objects of this class has the following accessors:
-
-=over 4
-
-=item author
-
-Name of the author.
-
-=item cpanid
-
-The CPAN id of the author.
-
-=item email
-
-The email address of the author, which defaults to '' if not provided.
-
-=item parent
-
-The C<CPANPLUS::Internals::Object> that spawned this module object.
-
-=back
-
-=cut
-
-my $tmpl = {
- author => { required => 1 }, # full name of the author
- cpanid => { required => 1 }, # cpan id
- email => { default => '' }, # email address of the author
- _id => { required => 1 }, # id of the Internals object that spawned us
-};
-
-### autogenerate accessors ###
-for my $key ( keys %$tmpl ) {
- no strict 'refs';
- *{__PACKAGE__."::$key"} = sub {
- my $self = shift;
- $self->{$key} = $_[0] if @_;
- return $self->{$key};
- }
-}
-
-sub parent {
- my $self = shift;
- my $obj = CPANPLUS::Internals->_retrieve_id( $self->_id );
-
- return $obj;
-}
-
-=pod
-
-=head1 METHODS
-
-=head2 $auth = CPANPLUS::Module::Author->new( author => AUTHOR_NAME, cpanid => CPAN_ID, _id => INTERNALS_ID [, email => AUTHOR_EMAIL] )
-
-This method returns a C<CPANPLUS::Module::Author> object, based on the given
-parameters.
-
-Returns false on failure.
-
-=cut
-
-sub new {
- my $class = shift;
- my %hash = @_;
-
- ### don't check the template for sanity
- ### -- we know it's good and saves a lot of performance
- local $Params::Check::SANITY_CHECK_TEMPLATE = 0;
-
- my $object = check( $tmpl, \%hash ) or return;
-
- return bless $object, $class;
-}
-
-=pod
-
-=head2 @mod_objs = $auth->modules()
-
-Return a list of module objects this author has released.
-
-=cut
-
-sub modules {
- my $self = shift;
- my $cb = $self->parent;
-
- my $aref = $cb->_search_module_tree(
- type => 'author',
- ### XXX, depending on backend, this is either an object
- ### or the cpanid string. Don't know an elegant way to
- ### solve this right now, so passing both
- allow => [$self, $self->cpanid],
- );
- return @$aref if $aref;
- return;
-}
-
-=pod
-
-=head2 @dists = $auth->distributions()
-
-Returns a list of module objects representing all the distributions
-this author has released.
-
-=cut
-
-sub distributions {
- my $self = shift;
- my %hash = @_;
-
- local $Params::Check::ALLOW_UNKNOWN = 1;
- local $Params::Check::NO_DUPLICATES = 1;
-
- my $mod;
- my $tmpl = {
- module => { default => '', store => \$mod },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- ### if we didn't get a module object passed, we'll find one ourselves ###
- unless( $mod ) {
- my @list = $self->modules;
- if( @list ) {
- $mod = $list[0];
- } else {
- error( loc( "This author has released no modules" ) );
- return;
- }
- }
-
- my $file = $mod->checksums( %hash );
- my $href = $mod->_parse_checksums_file( file => $file ) or return;
-
- my @rv;
- for my $name ( keys %$href ) {
-
- ### shortcut asap, so we avoid extra ops. On big checksums files
- ### the call to clone() takes up a lot of time.
- ### .meta files are now also in the checksums file,
- ### which means we have to filter out things that dont
- ### match our regex
- next if $mod->package_extension( $name ) eq META_EXT;
-
- ### used to do this wiht ->clone. However, that calls ->dslip,
- ### (which is wrong anyway, as we're doing a different module),
- ### which in turn calls ->contains, which scans the entire
- ### module tree using _search_module_tree, which uses P::C
- ### and is therefor VERY VERY slow.
- ### so let's do this the direct way for speed ups.
- my $dist = CPANPLUS::Module::Fake->new(
- module => do { my $m = $mod->package_name( $name );
- $m =~ s/-/::/g; $m;
- },
- version => $mod->package_version( $name ),
- package => $name,
- path => $mod->path, # same author after all
- author => $mod->author, # same author after all
- mtime => $href->{$name}->{'mtime'}, # release date
- );
-
- push @rv, $dist;
- }
-
- return @rv;
-}
-
-
-=pod
-
-=head1 CLASS METHODS
-
-=head2 accessors ()
-
-Returns a list of all accessor methods to the object
-
-=cut
-
-sub accessors { return keys %$tmpl };
-
-1;
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Module/Author/Fake.pm b/cpan/CPANPLUS/lib/CPANPLUS/Module/Author/Fake.pm
deleted file mode 100644
index 15de66b0dc..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Module/Author/Fake.pm
+++ /dev/null
@@ -1,83 +0,0 @@
-package CPANPLUS::Module::Author::Fake;
-use deprecate;
-
-
-use CPANPLUS::Module::Author;
-use CPANPLUS::Internals;
-use CPANPLUS::Error;
-
-use strict;
-use vars qw[@ISA $VERSION];
-use Params::Check qw[check];
-
-$VERSION = "0.9135";
-
-@ISA = qw[CPANPLUS::Module::Author];
-
-$Params::Check::VERBOSE = 1;
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Module::Author::Fake - dummy author object for CPANPLUS
-
-=head1 SYNOPSIS
-
- my $auth = CPANPLUS::Module::Author::Fake->new(
- author => 'Foo Bar',
- email => 'luser@foo.com',
- cpanid => 'FOO',
- _id => $cpan->id,
- );
-
-=head1 DESCRIPTION
-
-A class for creating fake author objects, for shortcut use internally
-by CPANPLUS.
-
-Inherits from C<CPANPLUS::Module::Author>.
-
-=head1 METHODS
-
-=head2 new( _id => DIGIT )
-
-Creates a dummy author object. It can take the same options as
-C<< CPANPLUS::Module::Author->new >>, but will fill in default ones
-if none are provided. Only the _id key is required.
-
-=cut
-
-sub new {
- my $class = shift;
- my %hash = @_;
-
- my $tmpl = {
- author => { default => 'CPANPLUS Internals' },
- email => { default => 'cpanplus-info@lists.sf.net' },
- cpanid => { default => 'CPANPLUS' },
- _id => { default => CPANPLUS::Internals->_last_id },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- my $obj = CPANPLUS::Module::Author->new( %$args ) or return;
-
- unless( $obj->_id ) {
- error(loc("No '%1' specified -- No CPANPLUS object associated!",'_id'));
- return;
- }
-
- ### rebless object ###
- return bless $obj, $class;
-}
-
-1;
-
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Module/Checksums.pm b/cpan/CPANPLUS/lib/CPANPLUS/Module/Checksums.pm
deleted file mode 100644
index 51263b4d25..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Module/Checksums.pm
+++ /dev/null
@@ -1,260 +0,0 @@
-package CPANPLUS::Module::Checksums;
-use deprecate;
-
-use strict;
-use vars qw[@ISA $VERSION];
-
-use CPANPLUS::Error;
-use CPANPLUS::Internals::Constants;
-
-use FileHandle;
-
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-use Params::Check qw[check];
-use Module::Load::Conditional qw[can_load];
-
-$Params::Check::VERBOSE = 1;
-
-@ISA = qw[ CPANPLUS::Module::Signature ];
-$VERSION = "0.9135";
-
-=head1 NAME
-
-CPANPLUS::Module::Checksums - checking the checksum of a distribution
-
-=head1 SYNOPSIS
-
- $file = $modobj->checksums;
- $bool = $mobobj->_validate_checksum;
-
-=head1 DESCRIPTION
-
-This is a class that provides functions for checking the checksum
-of a distribution. Should not be loaded directly, but used via the
-interface provided via C<CPANPLUS::Module>.
-
-=head1 METHODS
-
-=head2 $mod->checksums
-
-Fetches the checksums file for this module object.
-For the options it can take, see C<CPANPLUS::Module::fetch()>.
-
-Returns the location of the checksums file on success and false
-on error.
-
-The location of the checksums file is also stored as
-
- $mod->status->checksums
-
-=cut
-
-sub checksums {
- my $mod = shift or return;
-
- my $file = $mod->_get_checksums_file( @_ );
-
- return $mod->status->checksums( $file ) if $file;
-
- return;
-}
-
-### checks if the package checksum matches the one
-### from the checksums file
-sub _validate_checksum {
- my $self = shift; #must be isa CPANPLUS::Module
- my $conf = $self->parent->configure_object;
- my %hash = @_;
-
- my $verbose;
- my $tmpl = {
- verbose => { default => $conf->get_conf('verbose'),
- store => \$verbose },
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### if we can't check it, we must assume it's ok ###
- return $self->status->checksum_ok(1)
- unless can_load( modules => { 'Digest::SHA' => '0.0' } );
- #class CPANPLUS::Module::Status is runtime-generated
-
- my $file = $self->_get_checksums_file( verbose => $verbose ) or (
- error(loc(q[Could not fetch '%1' file], CHECKSUMS)), return );
-
- $self->_check_signature_for_checksum_file( file => $file ) or (
- error(loc(q[Could not verify '%1' file], CHECKSUMS)), return );
- #for whole CHECKSUMS file
-
- my $href = $self->_parse_checksums_file( file => $file ) or (
- error(loc(q[Could not parse '%1' file], CHECKSUMS)), return );
-
- my $size = $href->{ $self->package }->{'size'};
-
- ### the checksums file tells us the size of the archive
- ### but the downloaded file is of different size
- if( defined $size ) {
- if( not (-s $self->status->fetch == $size) ) {
- error(loc( "Archive size does not match for '%1': " .
- "size is '%2' but should be '%3'",
- $self->package, -s $self->status->fetch, $size));
- return $self->status->checksum_ok(0);
- }
- } else {
- msg(loc("Archive size is not known for '%1'",$self->package),$verbose);
- }
-
- my $sha = $href->{ $self->package }->{'sha256'};
-
- unless( defined $sha ) {
- msg(loc("No 'sha256' checksum known for '%1'",$self->package),$verbose);
-
- return $self->status->checksum_ok(1);
- }
-
- $self->status->checksum_value($sha);
-
-
- my $fh = FileHandle->new( $self->status->fetch ) or return;
- binmode $fh;
-
- my $ctx = Digest::SHA->new(256);
- $ctx->addfile( $fh );
-
- my $hexdigest = $ctx->hexdigest;
- my $flag = $hexdigest eq $sha;
- $flag
- ? msg(loc("Checksum matches for '%1'", $self->package),$verbose)
- : error(loc("Checksum does not match for '%1': " .
- "SHA256 is '%2' but should be '%3'",
- $self->package, $hexdigest, $sha),$verbose);
-
-
- return $self->status->checksum_ok(1) if $flag;
- return $self->status->checksum_ok(0);
-}
-
-
-### fetches the module objects checksum file ###
-sub _get_checksums_file {
- my $self = shift;
- my %hash = @_;
-
- my $clone = $self->clone;
- $clone->package( CHECKSUMS );
-
- # If the user specified a fetchdir, then every CHECKSUMS file will always
- # be stored there, not in an author-specific subdir. Thus, in this case,
- # we need to always re-fetch the CHECKSUMS file and hence need to set the
- # TTL to something small.
- my $have_fetchdir =
- $self->parent->configure_object->get_conf('fetchdir') ne '';
- my $ttl = $have_fetchdir ? 0.001 : 3600;
- my $file = $clone->fetch( ttl => $ttl, %hash ) or return;
-
- return $file;
-}
-
-sub _parse_checksums_file {
- my $self = shift;
- my %hash = @_;
-
- my $file;
- my $tmpl = {
- file => { required => 1, allow => FILE_READABLE, store => \$file },
- };
- my $args = check( $tmpl, \%hash );
-
- my $fh = OPEN_FILE->( $file ) or return;
-
- ### loop over the header, there might be a pgp signature ###
- my $signed;
- while (local $_ = <$fh>) {
- last if /^\$cksum = \{\s*$/; # skip till this line
- my $header = PGP_HEADER; # but be tolerant of whitespace
- $signed = 1 if /^${header}\s*$/;# due to crossplatform linebreaks
- }
-
- ### read the filehandle, parse it rather than eval it, even though it
- ### *should* be valid perl code
- my $dist;
- my $cksum = {};
- while (local $_ = <$fh>) {
-
- if (/^\s*'([^']+)' => \{\s*$/) {
- $dist = $1;
-
- } elsif (/^\s*'([^']+)' => '?([^'\n]+)'?,?\s*$/ and defined $dist) {
- $cksum->{$dist}{$1} = $2;
-
- } elsif (/^\s*}[,;]?\s*$/) {
- undef $dist;
-
- } elsif (/^__END__\s*$/) {
- last;
-
- } else {
- error( loc("Malformed %1 line: %2", CHECKSUMS, $_) );
- }
- }
-
- return $cksum;
-}
-
-sub _check_signature_for_checksum_file {
- my $self = shift;
-
- my $conf = $self->parent->configure_object;
- my %hash = @_;
-
- ### you don't want to check signatures,
- ### so let's just return true;
- return 1 unless $conf->get_conf('signature');
-
- my($force,$file,$verbose);
- my $tmpl = {
- file => { required => 1, allow => FILE_READABLE, store => \$file },
- force => { default => $conf->get_conf('force'), store => \$force },
- verbose => { default => $conf->get_conf('verbose'), store => \$verbose },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- my $fh = OPEN_FILE->($file) or return;
-
- my $signed;
- while (local $_ = <$fh>) {
- my $header = PGP_HEADER;
- $signed = 1 if /^$header$/;
- }
-
- if ( !$signed ) {
- msg(loc("No signature found in %1 file '%2'",
- CHECKSUMS, $file), $verbose);
-
- return 1 unless $force;
-
- error( loc( "%1 file '%2' is not signed -- aborting",
- CHECKSUMS, $file ) );
- return;
-
- }
-
- if( can_load( modules => { 'Module::Signature' => '0.06' } ) ) {
- # local $Module::Signature::SIGNATURE = $file;
- # ... check signatures ...
- }
-
- return 1;
-}
-
-
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
-
-1;
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Module/Fake.pm b/cpan/CPANPLUS/lib/CPANPLUS/Module/Fake.pm
deleted file mode 100644
index d6c94a50e0..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Module/Fake.pm
+++ /dev/null
@@ -1,88 +0,0 @@
-package CPANPLUS::Module::Fake;
-use deprecate;
-
-
-use CPANPLUS::Error;
-use CPANPLUS::Module;
-use CPANPLUS::Module::Author::Fake;
-use CPANPLUS::Internals;
-
-use strict;
-use vars qw[@ISA $VERSION];
-use Params::Check qw[check];
-
-$VERSION = "0.9135";
-@ISA = qw[CPANPLUS::Module];
-$Params::Check::VERBOSE = 1;
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Module::Fake - fake module object for internal use
-
-=head1 SYNOPSIS
-
- my $obj = CPANPLUS::Module::Fake->new(
- module => 'Foo',
- path => 'ftp/path/to/foo',
- author => CPANPLUS::Module::Author::Fake->new,
- package => 'fake-1.1.tgz',
- _id => $cpan->_id,
- );
-
-=head1 DESCRIPTION
-
-A class for creating fake module objects, for shortcut use internally
-by CPANPLUS.
-
-Inherits from C<CPANPLUS::Module>.
-
-=head1 METHODS
-
-=head2 new( module => $mod, path => $path, package => $pkg, [_id => DIGIT] )
-
-Creates a dummy module object from the above parameters. It can
-take more options (same as C<< CPANPLUS::Module->new >> but the above
-are required.
-
-=cut
-
-sub new {
- my $class = shift;
- my %hash = @_;
-
- local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- module => { required => 1 },
- path => { required => 1 },
- package => { required => 1 },
- _id => { default => CPANPLUS::Internals->_last_id },
- author => { default => '' },
- };
-
- my $args = check( $tmpl, \%hash ) or return;
-
- $args->{author} ||= CPANPLUS::Module::Author::Fake->new(
- _id => $args->{_id} );
-
- my $obj = CPANPLUS::Module->new( %$args ) or return;
-
- unless( $obj->_id ) {
- error(loc("No '%1' specified -- No CPANPLUS object associated!",'_id'));
- return;
- }
-
- ### rebless object ###
- return bless $obj, $class;
-}
-
-1;
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Module/Signature.pm b/cpan/CPANPLUS/lib/CPANPLUS/Module/Signature.pm
deleted file mode 100644
index 802d8cc2a6..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Module/Signature.pm
+++ /dev/null
@@ -1,66 +0,0 @@
-package CPANPLUS::Module::Signature;
-use deprecate;
-
-use strict;
-
-use Cwd;
-use CPANPLUS::Error;
-use Params::Check qw[check];
-use Module::Load::Conditional qw[can_load];
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-### detached sig, not actually used afaik --kane ###
-#sub get_signature {
-# my $self = shift;
-#
-# my $clone = $self->clone;
-# $clone->package( $self->package . '.sig' );
-#
-# return $clone->fetch;
-#}
-
-sub check_signature {
- my $self = shift;
- my $cb = $self->parent;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my $verbose;
- my $tmpl = {
- verbose => {default => $conf->get_conf('verbose'), store => \$verbose},
- };
-
- check( $tmpl, \%hash ) or return;
-
- my $dir = $self->status->extract or (
- error( loc( "Do not know what dir '%1' was extracted to; ".
- "Cannot check signature", $self->module ) ),
- return );
-
- my $cwd = cwd();
- unless( $cb->_chdir( dir => $dir ) ) {
- error(loc( "Could not chdir to '%1', cannot verify distribution '%2'",
- $dir, $self->module ));
- return;
- }
-
-
- ### check prerequisites
- my $flag;
- my $use_list = { 'Module::Signature' => '0.06' };
- if( can_load( modules => $use_list, verbose => 1 ) ) {
- my $rv = Module::Signature::verify();
-
- unless ($rv eq Module::Signature::SIGNATURE_OK() or
- $rv eq Module::Signature::SIGNATURE_MISSING()
- ) {
- $flag++; # whoops, bad sig
- }
- }
-
- $cb->_chdir( dir => $cwd );
- return $flag ? 0 : 1;
-}
-
-1;
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Selfupdate.pm b/cpan/CPANPLUS/lib/CPANPLUS/Selfupdate.pm
deleted file mode 100644
index 8915712179..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Selfupdate.pm
+++ /dev/null
@@ -1,554 +0,0 @@
-package CPANPLUS::Selfupdate;
-use deprecate;
-
-use strict;
-use Params::Check qw[check];
-use IPC::Cmd qw[can_run];
-use CPANPLUS::Error qw[error msg];
-use Module::Load::Conditional qw[check_install];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-use CPANPLUS::Internals::Constants;
-
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-$Params::Check::VERBOSE = 1;
-
-=head1 NAME
-
-CPANPLUS::Selfupdate - self-updating for CPANPLUS
-
-=head1 SYNOPSIS
-
- $su = $cb->selfupdate_object;
-
- @feats = $su->list_features;
- @feats = $su->list_enabled_features;
-
- @mods = map { $su->modules_for_feature( $_ ) } @feats;
- @mods = $su->list_core_dependencies;
- @mods = $su->list_core_modules;
-
- for ( @mods ) {
- print $_->name " should be version " . $_->version_required;
- print "Installed version is not uptodate!"
- unless $_->is_installed_version_sufficient;
- }
-
- $ok = $su->selfupdate( update => 'all', latest => 0 );
-
-=cut
-
-### a config has describing our deps etc
-{
-
- my $Modules = {
- dependencies => {
- 'File::Fetch' => '0.15_02', # lynx & 404 handling
- 'File::Spec' => '0.82',
- 'IPC::Cmd' => '0.36', # 5.6.2 compat: 2-arg open
- 'Locale::Maketext::Simple' => '0.01',
- 'Log::Message' => '0.01',
- 'Module::Load' => '0.10',
- 'Module::Load::Conditional' => '0.50', # returns dir for loaded
- # modules
- 'version' => '0.77', # needed for M::L::C
- # addresses #24630 and
- # #24675
- # Address ~0 overflow issue
- 'Params::Check' => '0.36',
- 'Package::Constants' => '0.01',
- 'Term::UI' => '0.18', # option parsing
- 'Test::Harness' => '2.62', # due to bug #19505
- # only 2.58 and 2.60 are bad
- 'Test::More' => '0.47', # to run our tests
- 'Archive::Extract' => '0.16', # ./Dir bug fix
- 'Archive::Tar' => '1.23',
- 'IO::Zlib' => '1.04', # needed for Archive::Tar
- 'Object::Accessor' => '0.44', # mk_aliases support
- 'Module::CoreList' => '2.22', # deprecated core modules
- 'Module::Pluggable' => '2.4',
- 'Module::Loaded' => '0.01',
- 'Parse::CPAN::Meta' => '1.4200', # config_requires support
- 'ExtUtils::Install' => '1.42', # uninstall outside @INC
- ( check_install( module => 'CPANPLUS::Dist::Build' )
- ? ( 'CPANPLUS::Dist::Build' => '0.60' ) : () ),
- },
-
- features => {
- # config_key_name => [
- # sub { } to list module key/value pairs
- # sub { } to check if feature is enabled
- # ]
- prefer_makefile => [
- sub {
- my $cb = shift;
- $cb->configure_object->get_conf('prefer_makefile')
- ? { }
- : { 'CPANPLUS::Dist::Build' => '0.60' };
- },
- sub { return 1 }, # always enabled
- ],
- cpantest => [
- { 'Test::Reporter' => '1.34',
- 'Parse::CPAN::Meta' => '1.4200'
- },
- sub {
- my $cb = shift;
- return $cb->configure_object->get_conf('cpantest');
- },
- ],
- dist_type => [
- sub {
- my $cb = shift;
- my $dist = $cb->configure_object->get_conf('dist_type');
- return { $dist => '0.0' } if $dist;
- return;
- },
- sub {
- my $cb = shift;
- return $cb->configure_object->get_conf('dist_type');
- },
- ],
-
- md5 => [
- {
- 'Digest::SHA' => '0.0',
- },
- sub {
- my $cb = shift;
- return $cb->configure_object->get_conf('md5');
- },
- ],
- shell => [
- sub {
- my $cb = shift;
- my $dist = $cb->configure_object->get_conf('shell');
-
- ### we bundle these shells, so don't bother having a dep
- ### on them... If we don't do this, CPAN.pm actually detects
- ### a recursive dependency and breaks (see #26077).
- ### This is not an issue for CPANPLUS itself, it handles
- ### it smartly.
- return if $dist eq SHELL_DEFAULT or $dist eq SHELL_CLASSIC;
- return { $dist => '0.0' } if $dist;
- return;
- },
- sub { return 1 },
- ],
- signature => [
- sub {
- my $cb = shift;
- return {
- 'Module::Signature' => '0.06',
- } if can_run('gpg');
- ### leave this out -- Crypt::OpenPGP is fairly
- ### painful to install, and broken on some platforms
- ### so we'll just always fall back to gpg. It may
- ### issue a warning or 2, but that's about it.
- ### this change due to this ticket: #26914
- # and $cb->configure_object->get_conf('prefer_bin');
-
- return {
- 'Crypt::OpenPGP' => '0.0',
- 'Module::Signature' => '0.06',
- };
- },
- sub {
- my $cb = shift;
- return $cb->configure_object->get_conf('signature');
- },
- ],
- storable => [
- { 'Storable' => '0.0' },
- sub {
- my $cb = shift;
- return $cb->configure_object->get_conf('storable');
- },
- ],
- sqlite_backend => [
- { 'DBIx::Simple' => '0.0',
- 'DBD::SQLite' => '0.0',
- },
- sub {
- my $cb = shift;
- my $conf = $cb->configure_object;
- return $conf->get_conf('source_engine')
- eq 'CPANPLUS::Internals::Source::SQLite'
- },
- ],
- },
- core => {
- 'CPANPLUS' => '0.0',
- },
- };
-
- sub _get_config { return $Modules }
-}
-
-=head1 METHODS
-
-=head2 $self = CPANPLUS::Selfupdate->new( $backend_object );
-
-Sets up a new selfupdate object. Called automatically when
-a new backend object is created.
-
-=cut
-
-sub new {
- my $class = shift;
- my $cb = shift or return;
- return bless sub { $cb }, $class;
-}
-
-
-{ ### cache to find the relevant modules
- my $cache = {
- core
- => sub { my $self = shift;
- core => [ $self->list_core_modules ] },
-
- dependencies
- => sub { my $self = shift;
- dependencies => [ $self->list_core_dependencies ] },
-
- enabled_features
- => sub { my $self = shift;
- map { $_ => [ $self->modules_for_feature( $_ ) ] }
- $self->list_enabled_features
- },
- features
- => sub { my $self = shift;
- map { $_ => [ $self->modules_for_feature( $_ ) ] }
- $self->list_features
- },
- ### make sure to do 'core' first, in case
- ### we are out of date ourselves
- all => [ qw|core dependencies enabled_features| ],
- };
-
-
-=head2 @cat = $self->list_categories
-
-Returns a list of categories that the C<selfupdate> method accepts.
-
-See C<selfupdate> for details.
-
-=cut
-
- sub list_categories { return sort keys %$cache }
-
-=head2 %list = $self->list_modules_to_update( update => "core|dependencies|enabled_features|features|all", [latest => BOOL] )
-
-List which modules C<selfupdate> would upgrade. You can update either
-the core (CPANPLUS itself), the core dependencies, all features you have
-currently turned on, or all features available, or everything.
-
-The C<latest> option determines whether it should update to the latest
-version on CPAN, or if the minimal required version for CPANPLUS is
-good enough.
-
-Returns a hash of feature names and lists of module objects to be
-upgraded based on the category you provided. For example:
-
- %list = $self->list_modules_to_update( update => 'core' );
-
-Would return:
-
- ( core => [ $module_object_for_cpanplus ] );
-
-=cut
-
- sub list_modules_to_update {
- my $self = shift;
- my $cb = $self->();
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my($type, $latest);
- my $tmpl = {
- update => { required => 1, store => \$type,
- allow => [ keys %$cache ], },
- latest => { default => 0, store => \$latest, allow => BOOLEANS },
- };
-
- { local $Params::Check::ALLOW_UNKNOWN = 1;
- check( $tmpl, \%hash ) or return;
- }
-
- my $ref = $cache->{$type};
-
- ### a list of ( feature1 => \@mods, feature2 => \@mods, etc )
- my %list = UNIVERSAL::isa( $ref, 'ARRAY' )
- ? map { $cache->{$_}->( $self ) } @$ref
- : $ref->( $self );
-
- ### filter based on whether we need the latest ones or not
- for my $aref ( values %list ) {
- $aref = [ $latest
- ? grep { !$_->is_uptodate } @$aref
- : grep { !$_->is_installed_version_sufficient } @$aref
- ];
- }
-
- return %list;
- }
-
-=head2 $bool = $self->selfupdate( update => "core|dependencies|enabled_features|features|all", [latest => BOOL, force => BOOL] )
-
-Selfupdate CPANPLUS. You can update either the core (CPANPLUS itself),
-the core dependencies, all features you have currently turned on, or
-all features available, or everything.
-
-The C<latest> option determines whether it should update to the latest
-version on CPAN, or if the minimal required version for CPANPLUS is
-good enough.
-
-Returns true on success, false on error.
-
-=cut
-
- sub selfupdate {
- my $self = shift;
- my $cb = $self->();
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my $force;
- my $tmpl = {
- force => { default => $conf->get_conf('force'), store => \$force },
- };
-
- { local $Params::Check::ALLOW_UNKNOWN = 1;
- check( $tmpl, \%hash ) or return;
- }
-
- my %list = $self->list_modules_to_update( %hash ) or return;
-
- ### just the modules please
- my @mods = map { @$_ } values %list;
-
- my $flag;
- for my $mod ( @mods ) {
- unless( $mod->install( force => $force ) ) {
- $flag++;
- error(loc("Failed to update module '%1'", $mod->name));
- }
- }
-
- return if $flag;
- return 1;
- }
-
-}
-
-=head2 @features = $self->list_features
-
-Returns a list of features that are supported by CPANPLUS.
-
-=cut
-
-sub list_features {
- my $self = shift;
- return keys %{ $self->_get_config->{'features'} };
-}
-
-=head2 @features = $self->list_enabled_features
-
-Returns a list of features that are enabled in your current
-CPANPLUS installation.
-
-=cut
-
-sub list_enabled_features {
- my $self = shift;
- my $cb = $self->();
-
- my @enabled;
- for my $feat ( $self->list_features ) {
- my $ref = $self->_get_config->{'features'}->{$feat}->[1];
- push @enabled, $feat if $ref->($cb);
- }
-
- return @enabled;
-}
-
-=head2 @mods = $self->modules_for_feature( FEATURE [,AS_HASH] )
-
-Returns a list of C<CPANPLUS::Selfupdate::Module> objects which
-represent the modules required to support this feature.
-
-For a list of features, call the C<list_features> method.
-
-If the C<AS_HASH> argument is provided, no module objects are
-returned, but a hashref where the keys are names of the modules,
-and values are their minimum versions.
-
-=cut
-
-sub modules_for_feature {
- my $self = shift;
- my $feature = shift or return;
- my $as_hash = shift || 0;
- my $cb = $self->();
-
- unless( exists $self->_get_config->{'features'}->{$feature} ) {
- error(loc("Unknown feature '%1'", $feature));
- return;
- }
-
- my $ref = $self->_get_config->{'features'}->{$feature}->[0];
-
- ### it's either a list of modules/versions or a subroutine that
- ### returns a list of modules/versions
- my $href = UNIVERSAL::isa( $ref, 'HASH' ) ? $ref : $ref->( $cb );
-
- return unless $href; # nothing needed for the feature?
-
- return $href if $as_hash;
- return $self->_hashref_to_module( $href );
-}
-
-
-=head2 @mods = $self->list_core_dependencies( [AS_HASH] )
-
-Returns a list of C<CPANPLUS::Selfupdate::Module> objects which
-represent the modules that comprise the core dependencies of CPANPLUS.
-
-If the C<AS_HASH> argument is provided, no module objects are
-returned, but a hashref where the keys are names of the modules,
-and values are their minimum versions.
-
-=cut
-
-sub list_core_dependencies {
- my $self = shift;
- my $as_hash = shift || 0;
- my $cb = $self->();
- my $href = $self->_get_config->{'dependencies'};
-
- return $href if $as_hash;
- return $self->_hashref_to_module( $href );
-}
-
-=head2 @mods = $self->list_core_modules( [AS_HASH] )
-
-Returns a list of C<CPANPLUS::Selfupdate::Module> objects which
-represent the modules that comprise the core of CPANPLUS.
-
-If the C<AS_HASH> argument is provided, no module objects are
-returned, but a hashref where the keys are names of the modules,
-and values are their minimum versions.
-
-=cut
-
-sub list_core_modules {
- my $self = shift;
- my $as_hash = shift || 0;
- my $cb = $self->();
- my $href = $self->_get_config->{'core'};
-
- return $href if $as_hash;
- return $self->_hashref_to_module( $href );
-}
-
-sub _hashref_to_module {
- my $self = shift;
- my $cb = $self->();
- my $href = shift or return;
-
- return map {
- CPANPLUS::Selfupdate::Module->new(
- $cb->module_tree($_) => $href->{$_}
- )
- } keys %$href;
-}
-
-
-=head1 CPANPLUS::Selfupdate::Module
-
-C<CPANPLUS::Selfupdate::Module> extends C<CPANPLUS::Module> objects
-by providing accessors to aid in selfupdating CPANPLUS.
-
-These objects are returned by all methods of C<CPANPLUS::Selfupdate>
-that return module objects.
-
-=cut
-
-{ package CPANPLUS::Selfupdate::Module;
- use base 'CPANPLUS::Module';
-
- ### stores module name -> cpanplus required version
- ### XXX only can deal with 1 pair!
- my %Cache = ();
- my $Acc = 'version_required';
-
- sub new {
- my $class = shift;
- my $mod = shift or return;
- my $ver = shift; return unless defined $ver;
-
- my $obj = $mod->clone; # clone the module object
- bless $obj, $class; # rebless it to our class
-
- $obj->$Acc( $ver );
-
- return $obj;
- }
-
-=head2 $version = $mod->version_required
-
-Returns the version of this module required for CPANPLUS.
-
-=cut
-
- sub version_required {
- my $self = shift;
- $Cache{ $self->name } = shift() if @_;
- return $Cache{ $self->name };
- }
-
-=head2 $bool = $mod->is_installed_version_sufficient
-
-Returns true if the installed version of this module is sufficient
-for CPANPLUS, or false if it is not.
-
-=cut
-
-
- sub is_installed_version_sufficient {
- my $self = shift;
- return $self->is_uptodate( version => $self->$Acc );
- }
-
-}
-
-1;
-
-=pod
-
-=head1 BUG REPORTS
-
-Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>.
-
-=head1 AUTHOR
-
-This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
-
-=head1 COPYRIGHT
-
-The CPAN++ interface (of which this module is a part of) is copyright (c)
-2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved.
-
-This library is free software; you may redistribute and/or modify it
-under the same terms as Perl itself.
-
-=cut
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Shell.pm b/cpan/CPANPLUS/lib/CPANPLUS/Shell.pm
deleted file mode 100644
index bf7482d3da..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Shell.pm
+++ /dev/null
@@ -1,343 +0,0 @@
-package CPANPLUS::Shell;
-use deprecate;
-
-use strict;
-
-use CPANPLUS::Error;
-use CPANPLUS::Configure;
-use CPANPLUS::Internals::Constants;
-
-use Module::Load qw[load];
-use Params::Check qw[check];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-$Params::Check::VERBOSE = 1;
-
-use vars qw[@ISA $SHELL $DEFAULT $VERSION];
-
-$VERSION = "0.9135";
-$DEFAULT = SHELL_DEFAULT;
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Shell - base class for CPANPLUS shells
-
-=head1 SYNOPSIS
-
- use CPANPLUS::Shell; # load the shell indicated by your
- # config -- defaults to
- # CPANPLUS::Shell::Default
-
- use CPANPLUS::Shell qw[Classic] # load CPANPLUS::Shell::Classic;
-
- my $ui = CPANPLUS::Shell->new();
- my $name = $ui->which; # Find out what shell you loaded
-
- $ui->shell; # run the ui shell
-
-
-=head1 DESCRIPTION
-
-This module is the generic loading (and base class) for all C<CPANPLUS>
-shells. Through this module you can load any installed C<CPANPLUS>
-shell.
-
-Just about all the functionality is provided by the shell that you have
-loaded, and not by this class (which merely functions as a generic
-loading class), so please consult the documentation of your shell of
-choice.
-
-=cut
-
-sub import {
- my $class = shift;
- my $option = shift;
-
- ### find out what shell we're supposed to load ###
- $SHELL = $option
- ? $class . '::' . $option
- : do { ### XXX this should offer to reconfigure
- ### CPANPLUS, somehow. --rs
- ### XXX load Configure only if we really have to
- ### as that means any $Conf passed later on will
- ### be ignored in favour of the one that was
- ### retrieved via ->new --kane
- my $conf = CPANPLUS::Configure->new() or
- die loc("No configuration available -- aborting") . $/;
- $conf->get_conf('shell') || $DEFAULT;
- };
-
- ### load the shell, fall back to the default if required
- ### and die if even that doesn't work
- EVAL: {
- eval { load $SHELL };
-
- if( $@ ) {
- my $err = $@;
-
- die loc("Your default shell '%1' is not available: %2",
- $DEFAULT, $err) .
- loc("Check your installation!") . "\n"
- if $SHELL eq $DEFAULT;
-
- warn loc("Failed to use '%1': %2", $SHELL, $err),
- loc("Switching back to the default shell '%1'", $DEFAULT),
- "\n";
-
- $SHELL = $DEFAULT;
- redo EVAL;
- }
- }
- @ISA = ($SHELL);
-}
-
-sub which { return $SHELL }
-
-1;
-
-###########################################################################
-### abstracted out subroutines available to programmers of other shells ###
-###########################################################################
-
-package CPANPLUS::Shell::_Base::ReadLine;
-
-use strict;
-use vars qw($AUTOLOAD $TMPL);
-
-use FileHandle;
-use CPANPLUS::Error;
-use Params::Check qw[check];
-use Module::Load::Conditional qw[can_load];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-$Params::Check::VERBOSE = 1;
-
-
-$TMPL = {
- brand => { default => '', strict_type => 1 },
- prompt => { default => '> ', strict_type => 1 },
- pager => { default => '' },
- backend => { default => '' },
- term => { default => '' },
- format => { default => '' },
- dist_format => { default => '' },
- remote => { default => undef },
- noninteractive => { default => '' },
- cache => { default => [ ] },
- settings => { default => { install_all_prereqs => undef },
- no_override => 1 },
- _old_sigpipe => { default => '', no_override => 1 },
- _old_outfh => { default => '', no_override => 1 },
- _signals => { default => { INT => { } }, no_override => 1 },
-};
-
-### autogenerate accessors ###
-for my $key ( keys %$TMPL ) {
- no strict 'refs';
- *{__PACKAGE__."::$key"} = sub {
- my $self = shift;
- $self->{$key} = $_[0] if @_;
- return $self->{$key};
- }
-}
-
-sub _init {
- my $class = shift;
- my %hash = @_;
-
- my $self = check( $TMPL, \%hash ) or return;
-
- bless $self, $class;
-
- ### signal handler ###
- $SIG{INT} = $self->_signals->{INT}->{handler} =
- sub {
- unless ( $self->_signals->{INT}->{count}++ ) {
- warn loc("Caught SIGINT"), "\n";
- } else {
- warn loc("Got another SIGINT"), "\n"; die;
- }
- };
- ### end sig handler ###
-
- return $self;
-}
-
-### display shell's banner, takes the Backend object as argument
-sub _show_banner {
- my $self = shift;
- my $cpan = $self->backend;
- my $term = $self->term;
-
- ### Tries to probe for our ReadLine support status
- # a) under an interactive shell?
- my $rl_avail = (!$term->isa('CPANPLUS::Shell::_Faked'))
- # b) do we have a tty terminal?
- ? (-t STDIN)
- # c) should we enable the term?
- ? (!$self->__is_bad_terminal($term))
- # d) external modules available?
- ? ($term->ReadLine ne "Term::ReadLine::Stub")
- # a+b+c+d => "Smart" terminal
- ? loc("enabled")
- # a+b+c => "Stub" terminal
- : loc("available (try 'i Term::ReadLine::Perl')")
- # a+b => "Bad" terminal
- : loc("disabled")
- # a => "Dumb" terminal
- : loc("suppressed")
- # none => "Faked" terminal
- : loc("suppressed in batch mode");
-
- $rl_avail = loc("ReadLine support %1.", $rl_avail);
- $rl_avail = "\n*** $rl_avail" if (length($rl_avail) > 45);
-
- $self->__print(
- loc("%1 -- CPAN exploration and module installation (v%2)",
- $self->which, $self->which->VERSION()), "\n",
- loc("*** Please report bugs to <bug-cpanplus\@rt.cpan.org>."), "\n",
- loc("*** Using CPANPLUS::Backend v%1. %2",
- $cpan->VERSION, $rl_avail), "\n\n"
- );
-}
-
-### checks whether the Term::ReadLine is broken and needs to fallback to Stub
-sub __is_bad_terminal {
- my $self = shift;
- my $term = $self->term;
-
- return unless $^O eq 'MSWin32';
-
- ### replace the term with the default (stub) one
- return $self->term(Term::ReadLine::Stub->new( $self->brand ) );
-}
-
-### open a pager handle
-sub _pager_open {
- my $self = shift;
- my $cpan = $self->backend;
- my $cmd = $cpan->configure_object->get_program('pager') or return;
-
- $self->_old_sigpipe( $SIG{PIPE} );
- $SIG{PIPE} = 'IGNORE';
-
- my $fh = new FileHandle;
- unless ( $fh->open("| $cmd") ) {
- error(loc("could not pipe to %1: %2\n", $cmd, $!) );
- return;
- }
-
- $fh->autoflush(1);
-
- $self->pager( $fh );
- $self->_old_outfh( select $fh );
-
- return $fh;
-}
-
-### print to the current pager handle, or STDOUT if it's not opened
-sub _pager_close {
- my $self = shift;
- my $pager = $self->pager or return;
-
- $pager->close if (ref($pager) and $pager->can('close'));
-
- $self->pager( undef );
-
- select $self->_old_outfh;
- $SIG{PIPE} = $self->_old_sigpipe;
-
- return 1;
-}
-
-
-
-{
- my $win32_console;
-
- ### determines row count of current terminal; defaults to 25.
- ### used by the pager functions
- sub _term_rowcount {
- my $self = shift;
- my $cpan = $self->backend;
- my %hash = @_;
-
- my $default;
- my $tmpl = {
- default => { default => 25, allow => qr/^\d$/,
- store => \$default }
- };
-
- check( $tmpl, \%hash ) or return;
-
- if ( $^O eq 'MSWin32' ) {
- if ( can_load( modules => { 'Win32::Console' => '0.0' } ) ) {
- $win32_console ||= Win32::Console->new();
- my $rows = ($win32_console->Info)[-1];
- return $rows;
- }
-
- } else {
- local $Module::Load::Conditional::VERBOSE = 0;
- if ( can_load(modules => {'Term::Size' => '0.0'}) ) {
- my ($cols, $rows) = Term::Size::chars();
- return $rows;
- }
- }
- return $default;
- }
-}
-
-### Custom print routines, mainly to be able to catch output
-### in test cases, or redirect it if need be
-{ sub __print {
- my $self = shift;
- print @_;
- }
-
- sub __printf {
- my $self = shift;
- my $fmt = shift;
-
- ### MUST specify $fmt as a separate param, and not as part
- ### of @_, as it will then miss the $fmt and return the
- ### number of elements in the list... =/ --kane
- $self->__print( sprintf( $fmt, @_ ) );
- }
-}
-
-1;
-
-=pod
-
-=head1 BUG REPORTS
-
-Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>.
-
-=head1 AUTHOR
-
-This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
-
-=head1 COPYRIGHT
-
-The CPAN++ interface (of which this module is a part of) is copyright (c)
-2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved.
-
-This library is free software; you may redistribute and/or modify it
-under the same terms as Perl itself.
-
-=head1 SEE ALSO
-
-L<CPANPLUS::Shell::Default>, L<CPANPLUS::Shell::Classic>, L<cpanp>
-
-=cut
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
-
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Shell/Classic.pm b/cpan/CPANPLUS/lib/CPANPLUS/Shell/Classic.pm
deleted file mode 100644
index 6cdc6f69cc..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Shell/Classic.pm
+++ /dev/null
@@ -1,1269 +0,0 @@
-##################################################
-### CPANPLUS/Shell/Classic.pm ###
-### Backwards compatible shell for CPAN++ ###
-### Written 08-04-2002 by Jos Boumans ###
-##################################################
-
-package CPANPLUS::Shell::Classic;
-use deprecate;
-
-use strict;
-
-
-use CPANPLUS::Error;
-use CPANPLUS::Backend;
-use CPANPLUS::Configure::Setup;
-use CPANPLUS::Internals::Constants;
-
-use Cwd;
-use IPC::Cmd;
-use Term::UI;
-use Data::Dumper;
-use Term::ReadLine;
-
-use Module::Load qw[load];
-use Params::Check qw[check];
-use Module::Load::Conditional qw[can_load];
-
-$Params::Check::VERBOSE = 1;
-$Params::Check::ALLOW_UNKNOWN = 1;
-
-BEGIN {
- use vars qw[ $VERSION @ISA ];
- @ISA = qw[ CPANPLUS::Shell::_Base::ReadLine ];
- $VERSION = "0.9135";
-}
-
-load CPANPLUS::Shell;
-
-
-### our command set ###
-my $map = {
- a => '_author',
- b => '_bundle',
- d => '_distribution',
- 'm' => '_module',
- i => '_find_all',
- r => '_uptodate',
- u => '_not_supported',
- ls => '_ls',
- get => '_fetch',
- make => '_install',
- test => '_install',
- install => '_install',
- clean => '_not_supported',
- look => '_shell',
- readme => '_readme',
- h => '_help',
- '?' => '_help',
- o => '_set_conf',
- reload => '_reload',
- autobundle => '_autobundle',
- '!' => '_bang',
- #'q' => '_quit', # done it the loop itself
-};
-
-### the shell object, scoped to the file ###
-my $Shell;
-my $Brand = 'cpan';
-my $Prompt = $Brand . '> ';
-
-sub new {
- my $class = shift;
-
- my $cb = new CPANPLUS::Backend;
- my $self = $class->SUPER::_init(
- brand => $Brand,
- term => Term::ReadLine->new( $Brand ),
- prompt => $Prompt,
- backend => $cb,
- format => "%5s %-50s %8s %-10s\n",
- );
- ### make it available package wide ###
- $Shell = $self;
-
- ### enable verbose, it's the cpan.pm way
- $cb->configure_object->set_conf( verbose => 1 );
-
-
- ### register install callback ###
- $cb->_register_callback(
- name => 'install_prerequisite',
- code => \&__ask_about_install,
- );
-
- ### register test report callback ###
- $cb->_register_callback(
- name => 'edit_test_report',
- code => \&__ask_about_test_report,
- );
-
- if (my $histfile = $self->configure_object->get_conf( 'histfile' )) {
- my $term = $self->term;
- if ($term->can('AddHistory')) {
- if (open my $fh, '<', $histfile) {
- local $/ = "\n";
- while (my $line = <$fh>) {
- chomp($line);
- $term->AddHistory($line);
- }
- close($fh);
- }
- }
- }
-
- return $self;
-}
-
-sub shell {
- my $self = shift;
- my $term = $self->term;
-
- $self->_show_banner;
- $self->_input_loop && print "\n";
- $self->_quit;
-}
-
-sub _input_loop {
- my $self = shift;
- my $term = $self->term;
- my $cb = $self->backend;
-
- my $normal_quit = 0;
- while (
- defined (my $input = eval { $term->readline($self->prompt) } )
- or $self->_signals->{INT}{count} == 1
- ) {
- ### re-initiate all signal handlers
- while (my ($sig, $entry) = each %{$self->_signals} ) {
- $SIG{$sig} = $entry->{handler} if exists($entry->{handler});
- }
-
- last if $self->_dispatch_on_input( input => $input );
-
- ### flush the lib cache ###
- $cb->_flush( list => [qw|lib load|] );
-
- } continue {
- $self->_signals->{INT}{count}--
- if $self->_signals->{INT}{count}; # clear the sigint count
- }
-
- return 1;
-}
-
-sub _dispatch_on_input {
- my $self = shift;
- my $conf = $self->backend->configure_object();
- my $term = $self->term;
- my %hash = @_;
-
- my $string;
- my $tmpl = {
- input => { required => 1, store => \$string }
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### the original force setting;
- my $force_store = $conf->get_conf( 'force' );
-
- ### parse the input: the first part before the space
- ### is the command, followed by arguments.
- ### see the usage below
- my $key;
- PARSE_INPUT: {
- $string =~ s|^\s*([\w\?\!]+)\s*||;
- chomp $string;
- $key = lc($1);
- }
-
- ### you prefixed the input with 'force'
- ### that means we set the force flag, and
- ### reparse the input...
- ### YAY goto block :)
- if( $key eq 'force' ) {
- $conf->set_conf( force => 1 );
- goto PARSE_INPUT;
- }
-
- ### you want to quit
- return 1 if $key =~ /^q/;
-
- my $method = $map->{$key};
- unless( $self->can( $method ) ) {
- print "Unknown command '$key'. Type ? for help.\n";
- return;
- }
-
- ### dispatch the method call
- eval { $self->$method(
- command => $key,
- result => [ split /\s+/, $string ],
- input => $string );
- };
- warn $@ if $@;
-
- return;
-}
-
-### displays quit message
-sub _quit {
- my $self = shift;
- my $term = $self->term;
-
- if ($term->can('GetHistory')) {
- my @history = $term->GetHistory;
-
- my $histfile = $self->configure_object->get_conf('histfile');
-
- if (open my $fh, '>', $histfile) {
- foreach my $line (@history) {
- print {$fh} "$line\n";
- }
- close($fh);
- }
- else {
- warn "Cannot open history file '$histfile' - $!";
- }
- }
-
- ### well, that's what CPAN.pm says...
- print "Lockfile removed\n";
-}
-
-sub _not_supported {
- my $self = shift;
- my %hash = @_;
-
- my $cmd;
- my $tmpl = {
- command => { required => 1, store => \$cmd }
- };
-
- check( $tmpl, \%hash ) or return;
-
- print "Sorry, the command '$cmd' is not supported\n";
-
- return;
-}
-
-sub _fetch {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my($aref, $input);
- my $tmpl = {
- result => { store => \$aref, default => [] },
- input => { default => 'all', store => \$input },
- };
-
- check( $tmpl, \%hash ) or return;
-
- for my $mod (@$aref) {
- my $obj;
-
- unless( $obj = $cb->module_tree($mod) ) {
- print "Warning: Cannot get $input, don't know what it is\n";
- print "Try the command\n\n";
- print "\ti /$mod/\n\n";
- print "to find objects with matching identifiers.\n";
-
- next;
- }
-
- $obj->fetch && $obj->extract;
- }
-
- return $aref;
-}
-
-sub _install {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my $mapping = {
- make => { target => TARGET_CREATE, skiptest => 1 },
- test => { target => TARGET_CREATE },
- install => { target => TARGET_INSTALL },
- };
-
- my($aref,$cmd);
- my $tmpl = {
- result => { store => \$aref, default => [] },
- command => { required => 1, store => \$cmd, allow => [keys %$mapping] },
- };
-
- check( $tmpl, \%hash ) or return;
-
- for my $mod (@$aref) {
- my $obj = $cb->module_tree( $mod );
-
- unless( $obj ) {
- print "No such module '$mod'\n";
- next;
- }
-
- my $opts = $mapping->{$cmd};
- $obj->install( %$opts );
- }
-
- return $aref;
-}
-
-sub _shell {
- my $self = shift;
- my $cb = $self->backend;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my($aref, $cmd);
- my $tmpl = {
- result => { store => \$aref, default => [] },
- command => { required => 1, store => \$cmd },
-
- };
-
- check( $tmpl, \%hash ) or return;
-
-
- my $shell = $conf->get_program('shell');
- unless( $shell ) {
- print "Your configuration does not define a value for subshells.\n".
- qq[Please define it with "o conf shell <your shell>"\n];
- return;
- }
-
- my $cwd = Cwd::cwd();
-
- for my $mod (@$aref) {
- print "Running $cmd for $mod\n";
-
- my $obj = $cb->module_tree( $mod ) or next;
- $obj->fetch or next;
- $obj->extract or next;
-
- $cb->_chdir( dir => $obj->status->extract ) or next;
-
- #local $ENV{PERL5OPT} = CPANPLUS::inc->original_perl5opt;
- if( system($shell) and $! ) {
- print "Error executing your subshell '$shell': $!\n";
- next;
- }
- }
- $cb->_chdir( dir => $cwd );
-
- return $aref;
-}
-
-sub _readme {
- my $self = shift;
- my $cb = $self->backend;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my($aref, $cmd);
- my $tmpl = {
- result => { store => \$aref, default => [] },
- command => { required => 1, store => \$cmd },
-
- };
-
- check( $tmpl, \%hash ) or return;
-
- for my $mod (@$aref) {
- my $obj = $cb->module_tree( $mod ) or next;
-
- if( my $readme = $obj->readme ) {
-
- $self->_pager_open;
- print $readme;
- $self->_pager_close;
- }
- }
-
- return 1;
-}
-
-sub _reload {
- my $self = shift;
- my $cb = $self->backend;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my($input, $cmd);
- my $tmpl = {
- input => { default => 'all', store => \$input },
- command => { required => 1, store => \$cmd },
-
- };
-
- check( $tmpl, \%hash ) or return;
-
- if ( $input =~ /cpan/i ) {
- print qq[You want to reload the CPAN code\n];
- print qq[Just type 'q' and then restart... ] .
- qq[Trust me, it is MUCH safer\n];
-
- } elsif ( $input =~ /index/i ) {
- $cb->reload_indices(update_source => 1);
-
- } else {
- print qq[cpan re-evals the CPANPLUS.pm file\n];
- print qq[index re-reads the index files\n];
- }
-
- return 1;
-}
-
-sub _autobundle {
- my $self = shift;
- my $cb = $self->backend;
-
- print qq[Writing bundle file... This may take a while\n];
-
- my $where = $cb->autobundle();
-
- print $where
- ? qq[\nWrote autobundle to $where\n]
- : qq[\nCould not create autobundle\n];
-
- return 1;
-}
-
-sub _set_conf {
- my $self = shift;
- my $cb = $self->backend;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my($aref, $input);
- my $tmpl = {
- result => { store => \$aref, default => [] },
- input => { default => 'all', store => \$input },
- };
-
- check( $tmpl, \%hash ) or return;
-
- my $type = shift @$aref;
-
- if( $type eq 'debug' ) {
- print qq[Sorry you cannot set debug options through ] .
- qq[this shell in CPANPLUS\n];
- return;
-
- } elsif ( $type eq 'conf' ) {
-
- ### from CPAN.pm :o)
- # CPAN::Shell::o and CPAN::Config::edit are closely related. 'o conf'
- # should have been called set and 'o debug' maybe 'set debug'
-
- # commit Commit changes to disk
- # defaults Reload defaults from disk
- # init Interactive setting of all options
-
- my $name = shift @$aref;
- my $value = "@$aref";
-
- if( $name eq 'init' ) {
- my $setup = CPANPLUS::Configure::Setup->new(
- conf => $cb->configure_object,
- term => $self->term,
- backend => $cb,
- );
- return $setup->init;
-
- } elsif ($name eq 'commit' ) {;
- $cb->configure_object->save;
- print "Your CPAN++ configuration info has been saved!\n\n";
- return;
-
- } elsif ($name eq 'defaults' ) {
- print qq[Sorry, CPANPLUS cannot restore default for you.\n] .
- qq[Perhaps you should run the interactive setup again.\n] .
- qq[\ttry running 'o conf init'\n];
- return;
-
- ### we're just supplying things in the 'conf' section now,
- ### not the program section.. it's a bit of a hassle to make that
- ### work cleanly with the original CPAN.pm interface, so we'll fix
- ### it when people start complaining, which is hopefully never.
- } else {
- unless( $name ) {
- my @list = grep { $_ ne 'hosts' }
- $conf->options( type => $type );
-
- my $method = 'get_' . $type;
-
- local $Data::Dumper::Indent = 0;
- for my $name ( @list ) {
- my $val = $conf->$method($name);
- ($val) = ref($val)
- ? (Data::Dumper::Dumper($val) =~ /= (.*);$/)
- : "'$val'";
- printf " %-25s %s\n", $name, $val;
- }
-
- } elsif ( $name eq 'hosts' ) {
- print "Setting hosts is not trivial.\n" .
- "It is suggested you edit the " .
- "configuration file manually";
-
- } else {
- my $method = 'set_' . $type;
- if( $conf->$method($name => defined $value ? $value : '') ) {
- my $set_to = defined $value ? $value : 'EMPTY STRING';
- print "Key '$name' was set to '$set_to'\n";
- }
- }
- }
- } else {
- print qq[Known options:\n] .
- qq[ conf set or get configuration variables\n] .
- qq[ debug set or get debugging options\n];
- }
-
- return;
-}
-
-########################
-### search functions ###
-########################
-
-sub _author {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my($aref, $short, $input, $class);
- my $tmpl = {
- result => { store => \$aref, default => ['/./'] },
- short => { default => 0, store => \$short },
- input => { default => 'all', store => \$input },
- class => { default => 'Author', no_override => 1,
- store => \$class },
- };
-
- check( $tmpl, \%hash ) or return;
-
- my @regexes = map { m|/(.+)/| ? qr/$1/ : $_ } @$aref;
-
-
- my @rv;
- for my $type (qw[author cpanid]) {
- push @rv, $cb->search( type => $type, allow => \@regexes );
- }
-
- unless( @rv ) {
- print "No object of type $class found for argument $input\n"
- unless $short;
- return;
- }
-
- return $self->_pp_author(
- result => \@rv,
- class => $class,
- short => $short,
- input => $input );
-
-}
-
-### find all modules matching a query ###
-sub _module {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my($aref, $short, $input, $class);
- my $tmpl = {
- result => { store => \$aref, default => ['/./'] },
- short => { default => 0, store => \$short },
- input => { default => 'all', store => \$input },
- class => { default => 'Module', no_override => 1,
- store => \$class },
- };
-
- check( $tmpl, \%hash ) or return;
-
- my @rv;
- for my $module (@$aref) {
- if( $module =~ m|/(.+)/| ) {
- push @rv, $cb->search( type => 'module',
- allow => [qr/$1/i] );
- } else {
- my $obj = $cb->module_tree( $module ) or next;
- push @rv, $obj;
- }
- }
-
- return $self->_pp_module(
- result => \@rv,
- class => $class,
- short => $short,
- input => $input );
-}
-
-### find all bundles matching a query ###
-sub _bundle {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my($aref, $short, $input, $class);
- my $tmpl = {
- result => { store => \$aref, default => ['/./'] },
- short => { default => 0, store => \$short },
- input => { default => 'all', store => \$input },
- class => { default => 'Bundle', no_override => 1,
- store => \$class },
- };
-
- check( $tmpl, \%hash ) or return;
-
- my @rv;
- for my $bundle (@$aref) {
- if( $bundle =~ m|/(.+)/| ) {
- push @rv, $cb->search( type => 'module',
- allow => [qr/Bundle::.*?$1/i] );
- } else {
- my $obj = $cb->module_tree( "Bundle::${bundle}" ) or next;
- push @rv, $obj;
- }
- }
-
- return $self->_pp_module(
- result => \@rv,
- class => $class,
- short => $short,
- input => $input );
-}
-
-sub _distribution {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my($aref, $short, $input, $class);
- my $tmpl = {
- result => { store => \$aref, default => ['/./'] },
- short => { default => 0, store => \$short },
- input => { default => 'all', store => \$input },
- class => { default => 'Distribution', no_override => 1,
- store => \$class },
- };
-
- check( $tmpl, \%hash ) or return;
-
- my @rv;
- for my $module (@$aref) {
- ### if it's a regex... ###
- if ( my ($match) = $module =~ m|^/(.+)/$|) {
-
- ### something like /FOO/Bar.tar.gz/ was entered
- if (my ($path,$package) = $match =~ m|^/?(.+)/(.+)$|) {
- my $seen;
-
- my @data = $cb->search( type => 'package',
- allow => [qr/$package/i] );
-
- my @list = $cb->search( type => 'path',
- allow => [qr/$path/i],
- data => \@data );
-
- ### make sure we dont list the same dist twice
- for my $val ( @list ) {
- next if $seen->{$val->package}++;
-
- push @rv, $val;
- }
-
- ### something like /FOO/ or /Bar.tgz/ was entered
- ### so we look both in the path, as well as in the package name
- } else {
- my $seen;
- { my @list = $cb->search( type => 'package',
- allow => [qr/$match/i] );
-
- ### make sure we dont list the same dist twice
- for my $val ( @list ) {
- next if $seen->{$val->package}++;
-
- push @rv, $val;
- }
- }
-
- { my @list = $cb->search( type => 'path',
- allow => [qr/$match/i] );
-
- ### make sure we dont list the same dist twice
- for my $val ( @list ) {
- next if $seen->{$val->package}++;
-
- push @rv, $val;
- }
-
- }
- }
-
- } else {
-
- ### user entered a full dist, like: R/RC/RCAPUTO/POE-0.19.tar.gz
- if (my ($path,$package) = $module =~ m|^/?(.+)/(.+)$|) {
- my @data = $cb->search( type => 'package',
- allow => [qr/^$package$/] );
- my @list = $cb->search( type => 'path',
- allow => [qr/$path$/i],
- data => \@data);
-
- ### make sure we dont list the same dist twice
- my $seen;
- for my $val ( @list ) {
- next if $seen->{$val->package}++;
-
- push @rv, $val;
- }
- }
- }
- }
-
- return $self->_pp_distribution(
- result => \@rv,
- class => $class,
- short => $short,
- input => $input );
-}
-
-sub _find_all {
- my $self = shift;
-
- my @rv;
- for my $method (qw[_author _bundle _module _distribution]) {
- my $aref = $self->$method( @_, short => 1 );
-
- push @rv, @$aref if $aref;
- }
-
- print scalar(@rv). " items found\n"
-}
-
-sub _uptodate {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my($aref, $short, $input, $class);
- my $tmpl = {
- result => { store => \$aref, default => ['/./'] },
- short => { default => 0, store => \$short },
- input => { default => 'all', store => \$input },
- class => { default => 'Uptodate', no_override => 1,
- store => \$class },
- };
-
- check( $tmpl, \%hash ) or return;
-
-
- my @rv;
- if( @$aref) {
- for my $module (@$aref) {
- if( $module =~ m|/(.+)/| ) {
- my @list = $cb->search( type => 'module',
- allow => [qr/$1/i] );
-
- ### only add those that are installed and not core
- push @rv, grep { not $_->package_is_perl_core }
- grep { $_->installed_file }
- @list;
-
- } else {
- my $obj = $cb->module_tree( $module ) or next;
- push @rv, $obj;
- }
- }
- } else {
- @rv = @{$cb->_all_installed};
- }
-
- return $self->_pp_uptodate(
- result => \@rv,
- class => $class,
- short => $short,
- input => $input );
-}
-
-sub _ls {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my($aref, $short, $input, $class);
- my $tmpl = {
- result => { store => \$aref, default => [] },
- short => { default => 0, store => \$short },
- input => { default => 'all', store => \$input },
- class => { default => 'Uptodate', no_override => 1,
- store => \$class },
- };
-
- check( $tmpl, \%hash ) or return;
-
- my @rv;
- for my $name (@$aref) {
- my $auth = $cb->author_tree( uc $name );
-
- unless( $auth ) {
- print qq[ls command rejects argument $name: not an author\n];
- next;
- }
-
- push @rv, $auth->distributions;
- }
-
- return $self->_pp_ls(
- result => \@rv,
- class => $class,
- short => $short,
- input => $input );
-}
-
-############################
-### pretty printing subs ###
-############################
-
-
-sub _pp_author {
- my $self = shift;
- my %hash = @_;
-
- my( $aref, $short, $class, $input );
- my $tmpl = {
- result => { required => 1, default => [], strict_type => 1,
- store => \$aref },
- short => { default => 0, store => \$short },
- class => { required => 1, store => \$class },
- input => { required => 1, store => \$input },
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### no results
- if( !@$aref ) {
- print "No objects of type $class found for argument $input\n"
- unless $short;
-
- ### one result, long output desired;
- } elsif( @$aref == 1 and !$short ) {
-
- ### should look like this:
- #cpan> a KANE
- #Author id = KANE
- # EMAIL boumans@frg.eur.nl
- # FULLNAME Jos Boumans
-
- my $obj = shift @$aref;
-
- print "$class id = ", $obj->cpanid(), "\n";
- printf " %-12s %s\n", 'EMAIL', $obj->email();
- printf " %-12s %s%s\n", 'FULLNAME', $obj->author();
-
- } else {
-
- ### should look like this:
- #Author KANE (Jos Boumans)
- #Author LBROCARD (Leon Brocard)
- #2 items found
-
- for my $obj ( @$aref ) {
- printf qq[%-15s %s ("%s" (%s))\n],
- $class, $obj->cpanid, $obj->author, $obj->email;
- }
- print scalar(@$aref)." items found\n" unless $short;
- }
-
- return $aref;
-}
-
-sub _pp_module {
- my $self = shift;
- my %hash = @_;
-
- my( $aref, $short, $class, $input );
- my $tmpl = {
- result => { required => 1, default => [], strict_type => 1,
- store => \$aref },
- short => { default => 0, store => \$short },
- class => { required => 1, store => \$class },
- input => { required => 1, store => \$input },
- };
-
- check( $tmpl, \%hash ) or return;
-
-
- ### no results
- if( !@$aref ) {
- print "No objects of type $class found for argument $input\n"
- unless $short;
-
- ### one result, long output desired;
- } elsif( @$aref == 1 and !$short ) {
-
-
- ### should look like this:
- #Module id = LWP
- # DESCRIPTION Libwww-perl
- # CPAN_USERID GAAS (Gisle Aas <gisle@ActiveState.com>)
- # CPAN_VERSION 5.64
- # CPAN_FILE G/GA/GAAS/libwww-perl-5.64.tar.gz
- # DSLI_STATUS RmpO (released,mailing-list,perl,object-oriented)
- # MANPAGE LWP - The World-Wide Web library for Perl
- # INST_FILE C:\Perl\site\lib\LWP.pm
- # INST_VERSION 5.62
-
- my $obj = shift @$aref;
- my $aut_obj = $obj->author;
- my $format = " %-12s %s%s\n";
-
- print "$class id = ", $obj->module(), "\n";
- printf $format, 'DESCRIPTION', $obj->description()
- if $obj->description();
-
- printf $format, 'CPAN_USERID', $aut_obj->cpanid() . " (" .
- $aut_obj->author() . " <" . $aut_obj->email() . ">)";
-
- printf $format, 'CPAN_VERSION', $obj->version();
- printf $format, 'CPAN_FILE', $obj->path() . '/' . $obj->package();
-
- printf $format, 'DSLI_STATUS', $self->_pp_dslip($obj->dslip)
- if $obj->dslip() =~ /\w/;
-
- #printf $format, 'MANPAGE', $obj->foo();
- ### this is for bundles... CPAN.pm downloads them,
- #printf $format, 'CONATAINS,
- # parses and goes from there...
-
- printf $format, 'INST_FILE', $obj->installed_file ||
- '(not installed)';
- printf $format, 'INST_VERSION', $obj->installed_version;
-
-
-
- } else {
-
- ### should look like this:
- #Module LWP (G/GA/GAAS/libwww-perl-5.64.tar.gz)
- #Module POE (R/RC/RCAPUTO/POE-0.19.tar.gz)
- #2 items found
-
- for my $obj ( @$aref ) {
- printf "%-15s %-15s (%s)\n", $class, $obj->module(),
- $obj->path() .'/'. $obj->package();
- }
- print scalar(@$aref). " items found\n" unless $short;
- }
-
- return $aref;
-}
-
-sub _pp_dslip {
- my $self = shift;
- my $dslip = shift or return;
-
- my (%_statusD, %_statusS, %_statusL, %_statusI);
-
- @_statusD{qw(? i c a b R M S)} =
- qw(unknown idea pre-alpha alpha beta released mature standard);
-
- @_statusS{qw(? m d u n)} =
- qw(unknown mailing-list developer comp.lang.perl.* none);
-
- @_statusL{qw(? p c + o h)} = qw(unknown perl C C++ other hybrid);
- @_statusI{qw(? f r O h)} =
- qw(unknown functions references+ties object-oriented hybrid);
-
- my @status = split("", $dslip);
-
- my $results = sprintf( "%s (%s,%s,%s,%s)",
- $dslip,
- $_statusD{$status[0]},
- $_statusS{$status[1]},
- $_statusL{$status[2]},
- $_statusI{$status[3]}
- );
-
- return $results;
-}
-
-sub _pp_distribution {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my( $aref, $short, $class, $input );
- my $tmpl = {
- result => { required => 1, default => [], strict_type => 1,
- store => \$aref },
- short => { default => 0, store => \$short },
- class => { required => 1, store => \$class },
- input => { required => 1, store => \$input },
- };
-
- check( $tmpl, \%hash ) or return;
-
-
- ### no results
- if( !@$aref ) {
- print "No objects of type $class found for argument $input\n"
- unless $short;
-
- ### one result, long output desired;
- } elsif( @$aref == 1 and !$short ) {
-
-
- ### should look like this:
- #Distribution id = S/SA/SABECK/POE-Component-Client-POP3-0.02.tar.gz
- # CPAN_USERID SABECK (Scott Beck <scott@gossamer-threads.com>)
- # CONTAINSMODS POE::Component::Client::POP3
-
- my $obj = shift @$aref;
- my $aut_obj = $obj->author;
- my $pkg = $obj->package;
- my $format = " %-12s %s\n";
-
- my @list = $cb->search( type => 'package',
- allow => [qr/^$pkg$/] );
-
-
- print "$class id = ", $obj->path(), '/', $obj->package(), "\n";
- printf $format, 'CPAN_USERID',
- $aut_obj->cpanid .' ('. $aut_obj->author .
- ' '. $aut_obj->email .')';
-
- ### yes i know it's ugly, but it's what cpan.pm does
- printf $format, 'CONTAINSMODS', join (' ', map { $_->module } @list);
-
- } else {
-
- ### should look like this:
- #Distribution LWP (G/GA/GAAS/libwww-perl-5.64.tar.gz)
- #Distribution POE (R/RC/RCAPUTO/POE-0.19.tar.gz)
- #2 items found
-
- for my $obj ( @$aref ) {
- printf "%-15s %s\n", $class, $obj->path() .'/'. $obj->package();
- }
-
- print scalar(@$aref). " items found\n" unless $short;
- }
-
- return $aref;
-}
-
-sub _pp_uptodate {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my( $aref, $short, $class, $input );
- my $tmpl = {
- result => { required => 1, default => [], strict_type => 1,
- store => \$aref },
- short => { default => 0, store => \$short },
- class => { required => 1, store => \$class },
- input => { required => 1, store => \$input },
- };
-
- check( $tmpl, \%hash ) or return;
-
- my $format = "%-25s %9s %9s %s\n";
-
- my @not_uptodate;
- my $no_version;
-
- my %seen;
- for my $mod (@$aref) {
- next if $mod->package_is_perl_core;
- next if $seen{ $mod->package }++;
-
-
- if( $mod->installed_file and not $mod->installed_version ) {
- $no_version++;
- next;
- }
-
- push @not_uptodate, $mod unless $mod->is_uptodate;
- }
-
- unless( @not_uptodate ) {
- my $string = $input
- ? "for $input"
- : '';
- print "All modules are up to date $string\n";
- return;
-
- } else {
- printf $format, ( 'Package namespace',
- 'installed',
- 'latest',
- 'in CPAN file'
- );
- }
-
- for my $mod ( sort { $a->module cmp $b->module } @not_uptodate ) {
- printf $format, ( $mod->module,
- $mod->installed_version,
- $mod->version,
- $mod->path .'/'. $mod->package,
- );
- }
-
- print "$no_version installed modules have no (parsable) version number\n"
- if $no_version;
-
- return \@not_uptodate;
-}
-
-sub _pp_ls {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my( $aref, $short, $class, $input );
- my $tmpl = {
- result => { required => 1, default => [], strict_type => 1,
- store => \$aref },
- short => { default => 0, store => \$short },
- class => { required => 1, store => \$class },
- input => { required => 1, store => \$input },
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### should look something like this:
- #6272 2002-05-12 KANE/Acme-Comment-1.00.tar.gz
- #8171 2002-08-13 KANE/Acme-Comment-1.01.zip
- #7110 2002-09-04 KANE/Acme-Comment-1.02.tar.gz
- #7571 2002-09-08 KANE/Acme-Intraweb-1.01.tar.gz
- #6625 2001-08-23 KANE/Acme-POE-Knee-1.10.zip
- #3058 2003-10-05 KANE/Acme-Test-0.02.tar.gz
-
- ### don't know size or mtime
- #my $format = "%8d %10s %s/%s\n";
-
- for my $mod ( sort { $a->package cmp $b->package } @$aref ) {
- print "\t" . $mod->package . "\n";
- }
-
- return $aref;
-}
-
-
-#############################
-### end pretty print subs ###
-#############################
-
-
-sub _bang {
- my $self = shift;
- my %hash = @_;
-
- my( $input );
- my $tmpl = {
- input => { required => 1, store => \$input },
- };
-
- check( $tmpl, \%hash ) or return;
-
- eval $input;
- warn $@ if $@;
-
- print "\n";
-
- return;
-}
-
-sub _help {
- print qq[
-Display Information
- a authors
- b string display bundles
- d or info distributions
- m /regex/ about modules
- i or anything of above
- r none reinstall recommendations
- u uninstalled distributions
-
-Download, Test, Make, Install...
- get download
- make make (implies get)
- test modules, make test (implies make)
- install dists, bundles make install (implies test)
- clean make clean
- look open subshell in these dists' directories
- readme display these dists' README files
-
-Other
- h,? display this menu ! perl-code eval a perl command
- o conf [opt] set and query options q quit the cpan shell
- reload cpan load CPAN.pm again reload index load newer indices
- autobundle Snapshot force cmd unconditionally do cmd
-];
-
-}
-
-
-
-1;
-__END__
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Shell::Classic - CPAN.pm emulation for CPANPLUS
-
-=head1 DESCRIPTION
-
-The Classic shell is designed to provide the feel of the CPAN.pm shell
-using CPANPLUS underneath.
-
-For detailed documentation, refer to L<CPAN>.
-
-=head1 BUG REPORTS
-
-Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>.
-
-=head1 AUTHOR
-
-This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
-
-=head1 COPYRIGHT
-
-The CPAN++ interface (of which this module is a part of) is copyright (c)
-2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved.
-
-This library is free software; you may redistribute and/or modify it
-under the same terms as Perl itself.
-
-=head1 SEE ALSO
-
-L<CPANPLUS::Configure>, L<CPANPLUS::Module>, L<CPANPLUS::Module::Author>
-
-=cut
-
-
-=head1 SEE ALSO
-
-L<CPAN>
-
-=cut
-
-
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Shell/Default.pm b/cpan/CPANPLUS/lib/CPANPLUS/Shell/Default.pm
deleted file mode 100644
index 4c9991d529..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Shell/Default.pm
+++ /dev/null
@@ -1,1978 +0,0 @@
-package CPANPLUS::Shell::Default;
-use deprecate;
-
-use strict;
-
-
-use CPANPLUS::Error;
-use CPANPLUS::Backend;
-use CPANPLUS::Configure::Setup;
-use CPANPLUS::Internals::Constants;
-use CPANPLUS::Internals::Constants::Report qw[GRADE_FAIL];
-
-use Cwd;
-use IPC::Cmd;
-use Term::UI;
-use Data::Dumper;
-use Term::ReadLine;
-
-use Module::Load qw[load];
-use Params::Check qw[check];
-use Module::Load::Conditional qw[can_load check_install];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-local $Params::Check::VERBOSE = 1;
-local $Data::Dumper::Indent = 1; # for dumpering from !
-
-BEGIN {
- use vars qw[ $VERSION @ISA ];
- @ISA = qw[ CPANPLUS::Shell::_Base::ReadLine ];
- $VERSION = "0.9135";
-}
-
-load CPANPLUS::Shell;
-
-
-my $map = {
- 'm' => '_search_module',
- 'a' => '_search_author',
- '!' => '_bang',
- '?' => '_help',
- 'h' => '_help',
- 'q' => '_quit',
- 'r' => '_readme',
- 'v' => '_show_banner',
- 'w' => '__display_results',
- 'd' => '_fetch',
- 'z' => '_shell',
- 'f' => '_distributions',
- 'x' => '_reload_indices',
- 'i' => '_install',
- 't' => '_install',
- 'l' => '_details',
- 'p' => '_print',
- 's' => '_set_conf',
- 'o' => '_uptodate',
- 'b' => '_autobundle',
- 'u' => '_uninstall',
- '/' => '_meta', # undocumented for now
- 'c' => '_reports',
- 'e' => '_reload_shell',
-};
-### free letters: e g j k n y ###
-
-
-### will be filled if you have a .default-shell.rc and
-### Config::Auto installed
-my $rc = {};
-
-### the shell object, scoped to the file ###
-my $Shell;
-my $Brand = loc('CPAN Terminal');
-my $Prompt = $Brand . '> ';
-
-=pod
-
-=head1 NAME
-
-CPANPLUS::Shell::Default - the default CPANPLUS shell
-
-=head1 SYNOPSIS
-
- ### loading the shell:
- $ cpanp # run 'cpanp' from the command line
- $ perl -MCPANPLUS -eshell # load the shell from the command line
-
-
- use CPANPLUS::Shell qw[Default]; # load this shell via the API
- # always done via CPANPLUS::Shell
-
- my $ui = CPANPLUS::Shell->new;
- $ui->shell; # run the shell
- $ui->dispatch_on_input( input => 'x'); # update the source using the
- # dispatch method
-
- ### when in the shell:
- ### Note that all commands can also take options.
- ### Look at their underlying CPANPLUS::Backend methods to see
- ### what options those are.
- cpanp> h # show help messages
- cpanp> ? # show help messages
-
- cpanp> m Acme # find acme modules, allows regexes
- cpanp> a KANE # find modules by kane, allows regexes
- cpanp> f Acme::Foo # get a list of all releases of Acme::Foo
-
- cpanp> i Acme::Foo # install Acme::Foo
- cpanp> i Acme-Foo-1.3 # install version 1.3 of Acme::Foo
- cpanp> i <URI> # install from URI, like ftp://foo.com/X.tgz
- cpanp> i <DIR> # install from an absolute or relative directory
- cpanp> i 1 3..5 # install search results 1, 3, 4 and 5
- cpanp> i * # install all search results
- cpanp> a KANE; i *; # find modules by kane, install all results
- cpanp> t Acme::Foo # test Acme::Foo, without installing it
- cpanp> u Acme::Foo # uninstall Acme::Foo
- cpanp> d Acme::Foo # download Acme::Foo
- cpanp> z Acme::Foo # download & extract Acme::Foo, then open a
- # shell in the extraction directory
-
- cpanp> c Acme::Foo # get a list of test results for Acme::Foo
- cpanp> l Acme::Foo # view details about the Acme::Foo package
- cpanp> r Acme::Foo # view Acme::Foo's README file
- cpanp> o # get a list of all installed modules that
- # are out of date
- cpanp> o 1..3 # list uptodateness from a previous search
-
- cpanp> s conf # show config settings
- cpanp> s conf md5 1 # enable md5 checks
- cpanp> s program # show program settings
- cpanp> s edit # edit config file
- cpanp> s reconfigure # go through initial configuration again
- cpanp> s selfupdate # update your CPANPLUS install
- cpanp> s save # save config to disk
- cpanp> s mirrors # show currently selected mirrors
-
- cpanp> ! [PERL CODE] # execute the following perl code
-
- cpanp> b # create an autobundle for this computers
- # perl installation
- cpanp> x # reload index files (purges cache)
- cpanp> x --update_source # reload index files, get fresh source files
- cpanp> p [FILE] # print error stack (to a file)
- cpanp> v # show the banner
- cpanp> w # show last search results again
-
- cpanp> q # quit the shell
- cpanp> e # exit the shell and reload
-
- cpanp> /plugins # list available plugins
- cpanp> /? PLUGIN # list help test of <PLUGIN>
-
- ### common options:
- cpanp> i ... --skiptest # skip tests
- cpanp> i ... --force # force all operations
- cpanp> i ... --verbose # run in verbose mode
-
-=head1 DESCRIPTION
-
-This module provides the default user interface to C<CPANPLUS>. You
-can start it via the C<cpanp> binary, or as detailed in the L<SYNOPSIS>.
-
-=cut
-
-sub new {
- my $class = shift;
-
- my $cb = CPANPLUS::Backend->new( @_ );
- my $self = $class->SUPER::_init(
- brand => $Brand,
- term => Term::ReadLine->new( $Brand ),
- prompt => $Prompt,
- backend => $cb,
- format => "%4s %-55s %8s %-10s\n",
- dist_format => "%4s %-42s %-12s %8s %-10s\n",
- );
- ### make it available package wide ###
- $Shell = $self;
-
- my $rc_file = File::Spec->catfile(
- $cb->configure_object->get_conf('base'),
- DOT_SHELL_DEFAULT_RC,
- );
-
-
- if( -e $rc_file && -r _ ) {
- $rc = $self->_read_configuration_from_rc( $rc_file );
- }
-
- ### register install callback ###
- $cb->_register_callback(
- name => 'install_prerequisite',
- code => \&__ask_about_install,
- );
-
- ### execute any login commands specified ###
- $self->dispatch_on_input( input => $rc->{'login'} )
- if defined $rc->{'login'};
-
- ### register test report callbacks ###
- $cb->_register_callback(
- name => 'edit_test_report',
- code => \&__ask_about_edit_test_report,
- );
-
- $cb->_register_callback(
- name => 'send_test_report',
- code => \&__ask_about_send_test_report,
- );
-
- $cb->_register_callback(
- name => 'proceed_on_test_failure',
- code => \&__ask_about_test_failure,
- );
-
- ### load all the plugins
- $self->_plugins_init;
-
- if (my $histfile = $cb->configure_object->get_conf( 'histfile' )) {
- my $term = $self->term;
- if ($term->can('AddHistory')) {
- if (open my $fh, '<', $histfile) {
- local $/ = "\n";
- while (my $line = <$fh>) {
- chomp($line);
- $term->AddHistory($line);
- }
- close($fh);
- }
- }
- }
-
- return $self;
-}
-
-sub shell {
- my $self = shift;
- my $term = $self->term;
- my $conf = $self->backend->configure_object;
-
- $self->_show_banner;
- $self->__print( "*** Type 'p' now to show start up log\n" ); # XXX add to banner?
- $self->_show_random_tip if $conf->get_conf('show_startup_tip');
- $self->_input_loop && $self->__print( "\n" );
- $self->_quit;
-}
-
-sub _input_loop {
- my $self = shift;
- my $term = $self->term;
- my $cb = $self->backend;
-
- my $normal_quit = 0;
- while (
- defined (my $input = eval { $term->readline($self->prompt) } )
- or $self->_signals->{INT}{count} == 1
- ) {
- ### re-initiate all signal handlers
- while (my ($sig, $entry) = each %{$self->_signals} ) {
- $SIG{$sig} = $entry->{handler} if exists($entry->{handler});
- }
-
- $self->__print( "\n" );
- last if $self->dispatch_on_input( input => $input );
-
- ### flush the lib cache ###
- $cb->_flush( list => [qw|lib load|] );
-
- } continue {
- ### clear the sigint count
- $self->_signals->{INT}{count}--
- if $self->_signals->{INT}{count};
-
- ### reset the 'install prereq?' cached answer
- $self->settings->{'install_all_prereqs'} = undef;
-
- }
-
- return 1;
-}
-
-### return 1 to quit ###
-sub dispatch_on_input {
- my $self = shift;
- my $conf = $self->backend->configure_object();
- my $term = $self->term;
- my %hash = @_;
-
- my($string, $noninteractive);
- my $tmpl = {
- input => { required => 1, store => \$string },
- noninteractive => { required => 0, store => \$noninteractive },
- };
-
- check( $tmpl, \%hash ) or return;
-
- ### indicates whether or not the user will receive a shell
- ### prompt after the command has finished.
- $self->noninteractive($noninteractive) if defined $noninteractive;
-
- my $rv = 1;
-
- my @cmds = split ';', $string;
- while( my $input = shift @cmds ) {
-
- ### to send over the socket ###
- my $org_input = $input;
-
- my $key; my $options;
- { ### make whitespace not count when using special chars
- { $input =~ s|^\s*([!?/])|$1 |; }
-
- ### get the first letter of the input
- $input =~ s|^\s*([\w\?\!/])\w*||;
-
- chomp $input;
- $key = lc($1);
-
- ### we figured out what the command was...
- ### if we have more input, that DOES NOT start with a white
- ### space char, we misparsed.. like 'Test::Foo::Bar', which
- ### would turn into 't', '::Foo::Bar'...
- if( $input and $input !~ s/^\s+// ) {
- $self->__print( loc("Could not understand command: %1\n".
- "Possibly missing command before argument(s)?\n",
- $org_input) );
- return;
- }
-
- ### allow overrides from the config file ###
- if( defined $rc->{$key} ) {
- $input = $rc->{$key} . $input;
- }
-
- ### grab command line options like --no-force and --verbose ###
- ($options,$input) = $term->parse_options($input)
- unless $key eq '!';
- }
-
- ### emtpy line? ###
- return unless $key;
-
- ### time to quit ###
- return 1 if $key eq 'q';
-
- my $method = $map->{$key};
-
- ### dispatch meta locally at all times ###
- if( $key eq '/' ) {
- ### keep track of failures
- $rv *= length $self->$method(input => $input, options => $options);
- next;
- }
-
- ### flush unless we're trying to print the stack
- CPANPLUS::Error->flush unless $key eq 'p';
-
- ### connected over a socket? ###
- if( $self->remote ) {
-
- ### unsupported commands ###
- if( $key eq 'z' or
- ($key eq 's' and $input =~ /^\s*edit/)
- ) {
- $self->__print( "\n",
- loc( "Command '%1' not supported over remote connection",
- join ' ', $key, $input
- ), "\n\n" );
-
- } else {
- my($status,$buff) = $self->__send_remote_command($org_input);
-
- $self->__print( "\n", loc("Command failed!"), "\n\n" )
- unless $status;
-
- ### keep track of failures
- $rv *= length $status;
-
- $self->_pager_open if $buff =~ tr/\n// > $self->_term_rowcount;
- $self->__print( $buff );
- $self->_pager_close;
- }
-
- ### or just a plain local shell? ###
- } else {
-
- unless( $self->can($method) ) {
- $self->__print(loc("Unknown command '%1'. Usage:", $key), "\n");
- $self->_help;
-
- } else {
-
- ### some methods don't need modules ###
- my @mods;
- @mods = $self->_select_modules($input)
- unless grep {$key eq $_} qw[! m a v w x p s b / ? h];
-
- ### keep track of failures
- $rv *= defined eval { $self->$method(
- modules => \@mods,
- options => $options,
- input => $input,
- choice => $key )
- };
- error( $@ ) if $@;
- }
- }
- }
-
- ### outside the shell loop, we can return the actual return value;
- return $rv if $self->noninteractive;
-
- return;
-}
-
-sub _select_modules {
- my $self = shift;
- my $input = shift or return;
- my $cache = $self->cache;
- my $cb = $self->backend;
-
- ### expand .. in $input
- $input =~ s{\b(\d+)\s*\.\.\s*(\d+)\b}
- {join(' ', ($1 < 1 ? 1 : $1) .. ($2 > $#{$cache} ? $#{$cache} : $2))}eg;
-
- $input = join(' ', 1 .. $#{$cache}) if $input eq '*';
- $input =~ s/'/::/g; # perl 4 convention
-
- my @rv;
- for my $mod (split /\s+/, $input) {
-
- ### it's a cache look up ###
- if( $mod =~ /^\d+/ and $mod > 0 ) {
- unless( scalar @$cache ) {
- $self->__print( loc("No search was done yet!"), "\n" );
-
- } elsif ( my $obj = $cache->[$mod] ) {
- push @rv, $obj;
-
- } else {
- $self->__print( loc("No such module: %1", $mod), "\n" );
- }
-
- } else {
- my $obj = $cb->parse_module( module => $mod );
-
- unless( $obj ) {
- $self->__print( loc("No such module: %1", $mod), "\n" );
-
- } else {
- push @rv, $obj;
- }
- }
- }
-
- unless( scalar @rv ) {
- $self->__print( loc("No modules found to operate on!\n") );
- return;
- } else {
- return @rv;
- }
-}
-
-sub _format_version {
- my $self = shift;
- my $version = shift || 0;
-
- ### fudge $version into the 'optimal' format
- $version = 0 if $version eq 'undef';
- $version =~ s/_//g; # everything after gets stripped off otherwise
-
- ### allow 6 digits after the dot, as that's how perl stringifies
- ### x.y.z numbers.
- $version = sprintf('%3.6f', $version);
- $version = '' if $version == '0.00';
- $version =~ s/(00{0,3})$/' ' x (length $1)/e;
-
- return $version;
-}
-
-sub __display_results {
- my $self = shift;
- my $cache = $self->cache;
-
- my @rv = @$cache;
-
- if( scalar @rv ) {
-
- $self->_pager_open if $#{$cache} >= $self->_term_rowcount;
-
- my $i = 1;
- for my $mod (@rv) {
- next unless $mod; # first one is undef
- # humans start counting at 1
-
- ### for dists only -- we have checksum info
- if( $mod->mtime ) {
- $self->__printf(
- $self->dist_format,
- $i,
- $mod->module,
- $mod->mtime,
- $self->_format_version( $mod->version ),
- $mod->author->cpanid
- );
-
- } else {
- $self->__printf(
- $self->format,
- $i,
- $mod->module,
- $self->_format_version( $mod->version ),
- $mod->author->cpanid
- );
- }
- $i++;
- }
-
- $self->_pager_close;
-
- } else {
- $self->__print( loc("No results to display"), "\n" );
- }
-
- return 1;
-}
-
-
-sub _quit {
- my $self = shift;
- my $term = $self->term;
-
- $self->dispatch_on_input( input => $rc->{'logout'} )
- if defined $rc->{'logout'};
-
- if ($term->can('GetHistory')) {
- my @history = $term->GetHistory;
-
- my $histfile = $self->backend->configure_object->get_conf('histfile');
-
- if (open my $fh, '>', $histfile) {
- foreach my $line (@history) {
- print {$fh} "$line\n";
- }
- close($fh);
- }
- else {
- warn "Cannot open history file '$histfile' - $!";
- }
- }
-
- $self->__print( loc("Exiting CPANPLUS shell"), "\n" );
-
- return 1;
-}
-
-###########################
-### actual command subs ###
-###########################
-
-
-### print out the help message ###
-### perhaps, '?' should be a slightly different version ###
-{ my @help;
- sub _help {
- my $self = shift;
- my %hash = @_;
-
- my $input;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- input => { required => 0, store => \$input }
- };
-
- my $args = check( $tmpl, \%hash ) or return;
- }
-
- @help = (
-loc('[General]' ),
-loc(' h | ? # display help' ),
-loc(' q # exit' ),
-loc(' e # exit and reload' ),
-loc(' v # version information' ),
-loc('[Search]' ),
-loc(' a AUTHOR ... # search by author(s)' ),
-loc(' m MODULE ... # search by module(s)' ),
-loc(' f MODULE ... # list all releases of a module' ),
-loc(" o [ MODULE ... ] # list installed module(s) that aren't up to date" ),
-loc(' w # display the result of your last search again' ),
-loc('[Operations]' ),
-loc(' i MODULE | NUMBER ... # install module(s), by name or by search number' ),
-loc(' i URI | ... # install module(s), by URI (ie http://foo.com/X.tgz)' ),
-loc(' i DIR | ... # install module(s), by path (ie ./Module-1.0)' ),
-loc(' t MODULE | NUMBER ... # test module(s), by name or by search number' ),
-loc(' u MODULE | NUMBER ... # uninstall module(s), by name or by search number' ),
-loc(' d MODULE | NUMBER ... # download module(s)' ),
-loc(' l MODULE | NUMBER ... # display detailed information about module(s)' ),
-loc(' r MODULE | NUMBER ... # display README files of module(s)' ),
-loc(' c MODULE | NUMBER ... # check for module report(s) from cpan-testers' ),
-loc(' z MODULE | NUMBER ... # extract module(s) and open command prompt in it' ),
-loc('[Local Administration]' ),
-loc(' b # write a bundle file for your configuration' ),
-loc(' s program [OPT VALUE] # set program locations for this session' ),
-loc(' s conf [OPT VALUE] # set config options for this session' ),
-loc(' s mirrors # show currently selected mirrors' ),
-loc(' s reconfigure # reconfigure settings ' ),
-loc(' s selfupdate # update your CPANPLUS install '),
-loc(' s save [user|system] # save settings for this user or systemwide' ),
-loc(' s edit [user|system] # open configuration file in editor and reload' ),
-loc(' ! EXPR # evaluate a perl statement' ),
-loc(' p [FILE] # print the error stack (optionally to a file)' ),
-loc(' x # reload CPAN indices (purges cache)' ),
-loc(' x --update_source # reload CPAN indices, get fresh source files' ),
-loc('[Common Options]' ),
-loc(' i ... --skiptest # skip tests' ),
-loc(' i ... --force # force all operations' ),
-loc(' i ... --verbose # run in verbose mode' ),
-loc('[Plugins]' ),
-loc(' /plugins # list available plugins' ),
-loc(' /? [PLUGIN NAME] # show usage for (a particular) plugin(s)' ),
-
- ) unless @help;
-
- $self->_pager_open if (@help >= $self->_term_rowcount);
- ### XXX: functional placeholder for actual 'detailed' help.
- $self->__print( "Detailed help for the command '$input' is " .
- "not available.\n\n" ) if length $input;
- $self->__print( map {"$_\n"} @help );
- $self->__print( $/ );
- $self->_pager_close;
-
- return 1;
- }
-}
-
-### eval some code ###
-sub _bang {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
-
- my $input;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- input => { required => 1, store => \$input }
- };
-
- my $args = check( $tmpl, \%hash ) or return;
- }
-
- local $Data::Dumper::Indent = 1; # for dumpering from !
- eval $input;
- error( $@ ) if $@;
- $self->__print( "\n" );
-
- return if $@;
- return 1;
-}
-
-sub _search_module {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my $args;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- input => { required => 1, },
- options => { default => { } },
- };
-
- $args = check( $tmpl, \%hash ) or return;
- }
-
- my @regexes = map { qr/$_/i } split /\s+/, $args->{'input'};
-
- ### XXX this is rather slow, because (probably)
- ### of the many method calls
- ### XXX need to profile to speed it up =/
-
- ### find the modules ###
- my @rv = sort { $a->module cmp $b->module }
- $cb->search(
- %{$args->{'options'}},
- type => 'module',
- allow => \@regexes,
- );
-
- ### store the result in the cache ###
- $self->cache([undef,@rv]);
-
- $self->__display_results;
-
- return 1;
-}
-
-sub _search_author {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my $args;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- input => { required => 1, },
- options => { default => { } },
- };
-
- $args = check( $tmpl, \%hash ) or return;
- }
-
- my @regexes = map { qr/$_/i } split /\s+/, $args->{'input'};
-
- my @rv;
- for my $type (qw[author cpanid]) {
- push @rv, $cb->search(
- %{$args->{'options'}},
- type => $type,
- allow => \@regexes,
- );
- }
-
- my %seen;
- my @list = sort { $a->module cmp $b->module }
- grep { defined }
- map { $_->modules }
- grep { not $seen{$_}++ } @rv;
-
- $self->cache([undef,@list]);
-
- $self->__display_results;
- return 1;
-}
-
-sub _readme {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my $args; my $mods; my $opts;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- modules => { required => 1, store => \$mods },
- options => { default => { }, store => \$opts },
- };
-
- $args = check( $tmpl, \%hash ) or return;
- }
-
- return unless scalar @$mods;
-
- $self->_pager_open;
- for my $mod ( @$mods ) {
- $self->__print( $mod->readme( %$opts ) );
- }
-
- $self->_pager_close;
-
- return 1;
-}
-
-sub _fetch {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my $args; my $mods; my $opts;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- modules => { required => 1, store => \$mods },
- options => { default => { }, store => \$opts },
- };
-
- $args = check( $tmpl, \%hash ) or return;
- }
-
- $self->_pager_open if @$mods >= $self->_term_rowcount;
- my $rv = 1;
- for my $mod (@$mods) {
- my $where = $mod->fetch( %$opts );
-
- $rv *= length $where;
-
- $self->__print(
- $where
- ? loc("Successfully fetched '%1' to '%2'",
- $mod->module, $where )
- : loc("Failed to fetch '%1'", $mod->module)
- );
- $self->__print( "\n" );
- }
- $self->_pager_close;
-
- return 1 if $rv;
- return;
-}
-
-sub _shell {
- my $self = shift;
- my $cb = $self->backend;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my $shell = $conf->get_program('shell');
- unless( $shell ) {
- $self->__print(
- loc("Your config does not specify a subshell!"), "\n",
- loc("Perhaps you need to re-run your setup?"), "\n"
- );
- return;
- }
-
- my $args; my $mods; my $opts;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- modules => { required => 1, store => \$mods },
- options => { default => { }, store => \$opts },
- };
-
- $args = check( $tmpl, \%hash ) or return;
- }
-
- my $cwd = Cwd::cwd();
- for my $mod (@$mods) {
- $mod->fetch( %$opts ) or next;
- $mod->extract( %$opts ) or next;
-
- $cb->_chdir( dir => $mod->status->extract() ) or next;
-
- #local $ENV{PERL5OPT} = CPANPLUS::inc->original_perl5opt;
-
- if( system($shell) and $! ) {
- $self->__print(
- loc("Error executing your subshell '%1': %2",
- $shell, $!),"\n"
- );
- next;
- }
- }
- $cb->_chdir( dir => $cwd );
-
- return 1;
-}
-
-sub _distributions {
- my $self = shift;
- my $cb = $self->backend;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my $args; my $mods; my $opts;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- modules => { required => 1, store => \$mods },
- options => { default => { }, store => \$opts },
- };
-
- $args = check( $tmpl, \%hash ) or return;
- }
-
- my @list;
- for my $mod (@$mods) {
- push @list, sort { $a->version <=> $b->version }
- grep { defined } $mod->distributions( %$opts );
- }
-
- my @rv = sort { $a->module cmp $b->module } @list;
-
- $self->cache([undef,@rv]);
- $self->__display_results;
-
- return 1;
-}
-
-sub _reload_indices {
- my $self = shift;
- my $cb = $self->backend;
- my %hash = @_;
-
- my $args; my $opts;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- options => { default => { }, store => \$opts },
- };
-
- $args = check( $tmpl, \%hash ) or return;
- }
-
- my $rv = $cb->reload_indices( %$opts );
-
- ### so the update failed, but you didnt give it any options either
- if( !$rv and !(keys %$opts) ) {
- $self->__print(
- "\nFailure may be due to corrupt source files\n" .
- "Try this:\n\tx --update_source\n\n" );
- }
-
- return $rv;
-
-}
-
-sub _install {
- my $self = shift;
- my $cb = $self->backend;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my $args; my $mods; my $opts; my $choice;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- modules => { required => 1, store => \$mods },
- options => { default => { }, store => \$opts },
- choice => { required => 1, store => \$choice,
- allow => [qw|i t|] },
- };
-
- $args = check( $tmpl, \%hash ) or return;
- }
-
- unless( scalar @$mods ) {
- $self->__print( loc("Nothing done\n") );
- return;
- }
-
- my $target = $choice eq 'i' ? TARGET_INSTALL : TARGET_CREATE;
- my $prompt = $choice eq 'i' ? loc('Installing ') : loc('Testing ');
- my $action = $choice eq 'i' ? 'install' : 'test';
-
- my $status = {};
- ### first loop over the mods to install them ###
- for my $mod (@$mods) {
- $self->__print( $prompt, $mod->module, " (".$mod->version.")", "\n" );
-
- my $log_length = length CPANPLUS::Error->stack_as_string;
-
- ### store the status for look up when we're done with all
- ### install calls
- $status->{$mod} = $mod->install( %$opts, target => $target );
-
- ### would you like a log file of what happened?
- if( $conf->get_conf('write_install_logs') ) {
-
- if ( ON_WIN32 and !check_install(
- module => 'IPC::Run', version => 0.55 )
- ) {
- error(loc("IPC::Run version '%1' is required on MSWin32"
- . " in order to capture buffers."
- . " The logfile generated may not contain"
- . " any useful data, until it is installed", 0.55));
- }
-
- my $dir = File::Spec->catdir(
- $conf->get_conf('base'),
- $conf->_get_build('install_log_dir'),
- );
- ### create the dir if it doesn't exit yet
- $cb->_mkdir( dir => $dir ) unless -d $dir;
-
- my $file = File::Spec->catfile(
- $dir,
- INSTALL_LOG_FILE->( $mod )
- );
- if ( open my $fh, ">$file" ) {
- my $stack = CPANPLUS::Error->stack_as_string;
- ### remove everything in the log that was there *before*
- ### we started this install
- substr( $stack, 0, $log_length, '' );
-
- print $fh $stack;
- close $fh;
-
- $self->__print(
- loc("*** Install log written to:\n %1\n\n", $file)
- );
- } else {
- warn "Could not open '$file': $!\n";
- next;
- }
- }
- }
-
- my $flag;
- ### then report whether all this went ok or not ###
- for my $mod (@$mods) {
- # if( $mod->status->installed ) {
- if( $status->{$mod} ) {
- $self->__print(
- loc("Module '%1' %tense(%2,past) successfully\n",
- $mod->module, $action)
- );
- } else {
- $flag++;
- $self->__print(
- loc("Error %tense(%1,present) '%2'\n", $action, $mod->module)
- );
- }
- }
-
-
-
- if( !$flag ) {
- $self->__print(
- loc("No errors %tense(%1,present) all modules", $action), "\n"
- );
- } else {
- $self->__print(
- loc("Problem %tense(%1,present) one or more modules", $action)
- );
- $self->__print( "\n" );
-
- $self->__print(
- loc("*** You can view the complete error buffer by pressing ".
- "'%1' ***\n", 'p')
- ) unless $conf->get_conf('verbose') || $self->noninteractive;
- }
- $self->__print( "\n" );
-
- return !$flag;
-}
-
-sub __ask_about_install {
- my $mod = shift or return;
- my $prereq = shift or return;
- my $term = $Shell->term;
-
- $Shell->__print( "\n" );
- $Shell->__print( loc("Module '%1' requires '%2' to be installed",
- $mod->module, $prereq->module ) );
- $Shell->__print( "\n\n" );
-
- ### previously cached answer?
- return $Shell->settings->{'install_all_prereqs'}
- if defined $Shell->settings->{'install_all_prereqs'};
-
-
- $Shell->__print(
- loc( "If you don't wish to see this question anymore\n".
- "you can disable it by entering the following ".
- "commands on the prompt:\n '%1'",
- 's conf prereqs 1; s save' ) );
- $Shell->__print("\n\n");
-
- my $yes = loc("Yes");
- my $no = loc("No");
- my $all = loc("Yes to all (for this module)");
- my $none = loc("No to all (for this module)");
-
- my $reply = $term->get_reply(
- prompt => loc("Should I install this module?"),
- choices => [ $yes, $no, $all, $none ],
- default => $yes,
- );
-
- ### if 'all' or 'none', save this, so we can apply it to
- ### other prereqs in this chain.
- $Shell->settings->{'install_all_prereqs'} =
- $reply eq $all ? 1 :
- $reply eq $none ? 0 :
- undef;
-
- ### if 'yes' or 'all', the user wants it installed
- return $reply eq $all ? 1 :
- $reply eq $yes ? 1 :
- 0;
-}
-
-sub __ask_about_send_test_report {
- my($mod, $grade) = @_;
- return 1 unless $grade eq GRADE_FAIL;
-
- my $term = $Shell->term;
-
- $Shell->__print( "\n" );
- $Shell->__print(
- loc("Test report prepared for module '%1'.\n Would you like to ".
- "send it? (You can edit it if you like)", $mod->module ) );
- $Shell->__print( "\n\n" );
- my $bool = $term->ask_yn(
- prompt => loc("Would you like to send the test report?"),
- default => 'n'
- );
-
- return $bool;
-}
-
-sub __ask_about_edit_test_report {
- my($mod, $grade) = @_;
- return 0 unless $grade eq GRADE_FAIL;
-
- my $term = $Shell->term;
-
- $Shell->__print( "\n" );
- $Shell->__print(
- loc("Test report prepared for module '%1'. You can edit this ".
- "report if you would like", $mod->module ) );
- $Shell->__print("\n\n");
- my $bool = $term->ask_yn(
- prompt => loc("Would you like to edit the test report?"),
- default => 'y'
- );
-
- return $bool;
-}
-
-sub __ask_about_test_failure {
- my $mod = shift;
- my $captured = shift || '';
- my $term = $Shell->term;
-
- $Shell->__print( "\n" );
- $Shell->__print(
- loc( "The tests for '%1' failed. Would you like me to proceed ".
- "anyway or should we abort?", $mod->module ) );
- $Shell->__print( "\n\n" );
-
- my $bool = $term->ask_yn(
- prompt => loc("Proceed anyway?"),
- default => 'n',
- );
-
- return $bool;
-}
-
-
-sub _details {
- my $self = shift;
- my $cb = $self->backend;
- my $conf = $cb->configure_object;
- my %hash = @_;
-
- my $args; my $mods; my $opts;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- modules => { required => 1, store => \$mods },
- options => { default => { }, store => \$opts },
- };
-
- $args = check( $tmpl, \%hash ) or return;
- }
-
- ### every module has about 10 lines of details
- ### maybe more later with Module::CPANTS etc
- $self->_pager_open if scalar @$mods * 10 > $self->_term_rowcount;
-
-
- my $format = "%-24s %-45s\n";
- my $cformat = "%-24s %-45s %-10s\n";
- for my $mod (@$mods) {
- my $href = $mod->details( %$opts );
- my @list = sort { $a->module cmp $b->module } $mod->contains;
-
- unless( $href ) {
- $self->__print(
- loc("No details for %1 - it might be outdated.",
- $mod->module), "\n" );
- next;
-
- } else {
- $self->__print( loc( "Details for '%1'\n", $mod->module ) );
- for my $item ( sort keys %$href ) {
- $self->__printf( $format, $item, $href->{$item} );
- }
-
- my $showed;
- for my $item ( @list ) {
- $self->__printf(
- $cformat, ($showed ? '' : 'Contains:'),
- $item->module, $item->version
- );
- $showed++;
- }
- $self->__print( "\n" );
- }
- }
- $self->_pager_close;
- $self->__print( "\n" );
-
- return 1;
-}
-
-sub _print {
- my $self = shift;
- my %hash = @_;
-
- my $args; my $opts; my $file;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- options => { default => { }, store => \$opts },
- input => { default => '', store => \$file },
- };
-
- $args = check( $tmpl, \%hash ) or return;
- }
-
- my $old; my $fh;
- if( $file ) {
- $fh = FileHandle->new( ">$file" )
- or( warn loc("Could not open '%1': '%2'", $file, $!),
- return
- );
- $old = select $fh;
- }
-
-
- $self->_pager_open if !$file;
-
- $self->__print( CPANPLUS::Error->stack_as_string );
-
- $self->_pager_close;
-
- select $old if $old;
- $self->__print( "\n" );
-
- return 1;
-}
-
-sub _set_conf {
- my $self = shift;
- my %hash = @_;
- my $cb = $self->backend;
- my $conf = $cb->configure_object;
-
- ### possible options
- ### XXX hard coded, not optimal :(
- my %types = (
- reconfigure => '',
- save => q([user | system | boxed]),
- edit => '',
- program => q([key => val]),
- conf => q([key => val]),
- mirrors => '',
- selfupdate => '', # XXX add all opts here?
- );
-
-
- my $args; my $opts; my $input;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- options => { default => { }, store => \$opts },
- input => { default => '', store => \$input },
- };
-
- $args = check( $tmpl, \%hash ) or return;
- }
-
- my ($type,$key,$value) = $input =~ m/(\w+)\s*(\w*)\s*(.*?)$/;
- $value =~ s/\s+$//g if $value;
- $type = '' unless defined $type;
- $type = lc $type;
-
- if( $type eq 'reconfigure' ) {
- my $setup = CPANPLUS::Configure::Setup->new(
- configure_object => $conf,
- term => $self->term,
- backend => $cb,
- );
- return $setup->init;
-
- } elsif ( $type eq 'save' ) {
- my $where = {
- user => CONFIG_USER,
- system => CONFIG_SYSTEM,
- boxed => CONFIG_BOXED,
- }->{ $key } || CONFIG_USER;
-
- ### boxed is special, so let's get its value from %INC
- ### so we can tell it where to save
- ### XXX perhaps this logic should be generic for all
- ### types, and put in the ->save() routine
- my $dir;
- if( $where eq CONFIG_BOXED ) {
- my $file = join( '/', split( '::', CONFIG_BOXED ) ) . '.pm';
- my $file_re = quotemeta($file);
-
- my $path = $INC{$file} || '';
- $path =~ s/$file_re$//;
- $dir = $path;
- }
-
- my $rv = $cb->configure_object->save( $where => $dir );
-
- $self->__print(
- $rv
- ? loc("Configuration successfully saved to %1\n (%2)\n",
- $where, $rv)
- : loc("Failed to save configuration\n" )
- );
- return $rv;
-
- } elsif ( $type eq 'edit' ) {
-
- my $editor = $conf->get_program('editor')
- or( print(loc("No editor specified")), return );
-
- my $where = {
- user => CONFIG_USER,
- system => CONFIG_SYSTEM,
- }->{ $key } || CONFIG_USER;
-
- my $file = $conf->_config_pm_to_file( $where );
- system($editor,$file);
-
- ### now reload it
- ### disable warnings for this
- { require Module::Loaded;
- Module::Loaded::mark_as_unloaded( $where );
-
- ### reinitialize the config
- local $^W;
- $conf->init;
- }
-
- return 1;
-
- } elsif ( $type eq 'mirrors' ) {
-
- $self->__print(
- loc("Readonly list of mirrors (in order of preference):\n\n" ) );
-
- my $i;
- for my $host ( @{$conf->get_conf('hosts')} ) {
- my $uri = $cb->_host_to_uri( %$host );
-
- $i++;
- $self->__print( "\t[$i] $uri\n" );
- }
-
- $self->__print(
- loc("\nTo edit this list, please type: '%1'\n", 's edit') );
-
- } elsif ( $type eq 'selfupdate' ) {
- my %valid = map { $_ => $_ }
- $cb->selfupdate_object->list_categories;
-
- unless( $valid{$key} ) {
- $self->__print(
- loc( "To update your current CPANPLUS installation, ".
- "choose one of the these options:\n%1",
- ( join $/, map {
- sprintf "\ts selfupdate %-17s " .
- "[--latest=0] [--dryrun]", $_
- } sort keys %valid )
- )
- );
- } else {
- my %update_args = (
- update => $key,
- latest => 1,
- %$opts
- );
-
-
- my %list = $cb->selfupdate_object
- ->list_modules_to_update( %update_args );
-
- $self->__print(loc("The following updates will take place:"),$/.$/);
-
- for my $feature ( sort keys %list ) {
- my $aref = $list{$feature};
-
- ### is it a 'feature' or a built in?
- $self->__print(
- $valid{$feature}
- ? " " . ucfirst($feature) . ":\n"
- : " Modules for '$feature' support:\n"
- );
-
- ### show what modules would be installed
- $self->__print(
- scalar @$aref
- ? map { sprintf " %-42s %-6s -> %-6s \n",
- $_->name, $_->installed_version, $_->version
- } @$aref
- : " No upgrades required\n"
- );
- $self->__print( $/ );
- }
-
-
- unless( $opts->{'dryrun'} ) {
- $self->__print( loc("Updating your CPANPLUS installation\n") );
- $cb->selfupdate_object->selfupdate( %update_args );
- }
- }
-
- } else {
-
- if ( $type eq 'program' or $type eq 'conf' ) {
-
- my $format = {
- conf => '%-25s %s',
- program => '%-12s %s',
- }->{ $type };
-
- unless( $key ) {
- my @list = grep { $_ ne 'hosts' }
- $conf->options( type => $type );
-
- my $method = 'get_' . $type;
-
- local $Data::Dumper::Indent = 0;
- for my $name ( @list ) {
- my $val = $conf->$method($name) || '';
- ($val) = ref($val)
- ? (Data::Dumper::Dumper($val) =~ /= (.*);$/)
- : "'$val'";
-
- $self->__printf( " $format\n", $name, $val );
- }
-
- } elsif ( $key eq 'hosts' or $key eq 'lib' ) {
- $self->__print(
- loc( "Setting %1 is not trivial.\n" .
- "It is suggested you use '%2' and edit the " .
- "configuration file manually", $key, 's edit')
- );
- } else {
- my $method = 'set_' . $type;
- $conf->$method( $key => defined $value ? $value : '' )
- and $self->__print( loc("Key '%1' was set to '%2'", $key,
- defined $value ? $value : 'EMPTY STRING') );
- }
-
- } else {
- $self->__print( loc("Unknown type '%1'",$type || 'EMPTY' ) );
- $self->__print( $/ );
- $self->__print( loc("Try one of the following:") );
- $self->__print( $/, join $/,
- map { sprintf "\t%-11s %s", $_, $types{$_} }
- sort keys %types );
- }
- }
- $self->__print( "\n" );
- return 1;
-}
-
-sub _uptodate {
- my $self = shift;
- my %hash = @_;
- my $cb = $self->backend;
- my $conf = $cb->configure_object;
-
- my $opts; my $mods;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- options => { default => { }, store => \$opts },
- modules => { required => 1, store => \$mods },
- };
-
- check( $tmpl, \%hash ) or return;
- }
-
- ### long listing? short is default ###
- my $long = $opts->{'long'} ? 1 : 0;
-
- my @list = scalar @$mods ? @$mods : @{$cb->_all_installed};
-
- my @rv; my %seen;
- for my $mod (@list) {
- ### skip this mod if it's up to date ###
- next if $mod->is_uptodate;
- ### skip this mod if it's core ###
- next if $mod->package_is_perl_core;
-
- if( $long or !$seen{$mod->package}++ ) {
- push @rv, $mod;
- }
- }
-
- @rv = sort { $a->module cmp $b->module } @rv;
-
- $self->cache([undef,@rv]);
-
- $self->_pager_open if scalar @rv >= $self->_term_rowcount;
-
- my $format = "%5s %12s %12s %-36s %-10s\n";
-
- my $i = 1;
- for my $mod ( @rv ) {
- $self->__printf(
- $format,
- $i,
- $self->_format_version($mod->installed_version) || 'Unparsable',
- $self->_format_version( $mod->version ),
- $mod->module,
- $mod->author->cpanid
- );
- $i++;
- }
- $self->_pager_close;
-
- return 1;
-}
-
-sub _autobundle {
- my $self = shift;
- my %hash = @_;
- my $cb = $self->backend;
- my $conf = $cb->configure_object;
-
- my $opts; my $input;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- options => { default => { }, store => \$opts },
- input => { default => '', store => \$input },
- };
-
- check( $tmpl, \%hash ) or return;
- }
-
- $opts->{'path'} = $input if $input;
-
- my $where = $cb->autobundle( %$opts );
-
- $self->__print(
- $where
- ? loc("Wrote autobundle to '%1'", $where)
- : loc("Could not create autobundle" )
- );
- $self->__print( "\n" );
-
- return $where ? 1 : 0;
-}
-
-sub _uninstall {
- my $self = shift;
- my %hash = @_;
- my $cb = $self->backend;
- my $term = $self->term;
- my $conf = $cb->configure_object;
-
- my $opts; my $mods;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- options => { default => { }, store => \$opts },
- modules => { default => [], store => \$mods },
- };
-
- check( $tmpl, \%hash ) or return;
- }
-
- my $force = $opts->{'force'} || $conf->get_conf('force');
-
- unless( $force ) {
- my $list = join "\n", map { ' ' . $_->module } @$mods;
-
- $self->__print( loc("
-This will uninstall the following modules:
-%1
-
-Note that if you installed them via a package manager, you probably
-should use the same package manager to uninstall them
-
-", $list) );
-
- return unless $term->ask_yn(
- prompt => loc("Are you sure you want to continue?"),
- default => 'n',
- );
- }
-
- ### first loop over all the modules to uninstall them ###
- for my $mod (@$mods) {
- $self->__print( loc("Uninstalling '%1'", $mod->module), "\n" );
-
- $mod->uninstall( %$opts );
- }
-
- my $flag;
- ### then report whether all this went ok or not ###
- for my $mod (@$mods) {
- if( $mod->status->uninstall ) {
- $self->__print(
- loc("Module '%1' %tense(uninstall,past) successfully\n",
- $mod->module ) );
- } else {
- $flag++;
- $self->__print(
- loc("Error %tense(uninstall,present) '%1'\n", $mod->module) );
- }
- }
-
- if( !$flag ) {
- $self->__print(
- loc("All modules %tense(uninstall,past) successfully"), "\n" );
- } else {
- $self->__print(
- loc("Problem %tense(uninstall,present) one or more modules" ),
- "\n" );
-
- $self->__print(
- loc("*** You can view the complete error buffer by pressing '%1'".
- "***\n", 'p') ) unless $conf->get_conf('verbose');
- }
- $self->__print( "\n" );
-
- return !$flag;
-}
-
-sub _reports {
- my $self = shift;
- my %hash = @_;
- my $cb = $self->backend;
- my $term = $self->term;
- my $conf = $cb->configure_object;
-
- my $opts; my $mods;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- options => { default => { }, store => \$opts },
- modules => { default => '', store => \$mods },
- };
-
- check( $tmpl, \%hash ) or return;
- }
-
- ### XXX might need to be conditional ###
- $self->_pager_open;
-
- for my $mod (@$mods) {
- my @list = $mod->fetch_report( %$opts )
- or( print(loc("No reports available for this distribution.")),
- next
- );
-
- @list = reverse
- map { $_->[0] }
- sort { $a->[1] cmp $b->[1] }
- map { [$_, $_->{'dist'}.':'.$_->{'platform'}] } @list;
-
-
-
- ### XXX this may need to be sorted better somehow ###
- my $url;
- my $format = "%8s %s %s\n";
-
- my %seen;
- for my $href (@list ) {
- $self->__print(
- "[" . $mod->author->cpanid .'/'. $href->{'dist'} . "]\n"
- ) unless $seen{ $href->{'dist'} }++;
-
- $self->__printf(
- $format,
- $href->{'grade'},
- $href->{'platform'},
- ($href->{'details'} ? '(*)' : '')
- );
-
- $url ||= $href->{'details'};
- }
-
- $self->__print( "\n==> $url\n" ) if $url;
- $self->__print( "\n" );
- }
- $self->_pager_close;
-
- return 1;
-}
-
-### Load plugins
-{ my @PluginModules;
- my %Dispatch = (
- showtip => [ __PACKAGE__, '_show_random_tip'],
- plugins => [ __PACKAGE__, '_list_plugins' ],
- '?' => [ __PACKAGE__, '_plugins_usage' ],
- );
-
- sub plugin_modules { return @PluginModules }
- sub plugin_table { return %Dispatch }
-
- my $init_done;
- sub _plugins_init {
-
- ### only initialize once
- return if $init_done++;
-
- ### find all plugins first
- if( check_install( module => 'Module::Pluggable', version => '2.4') ) {
- require Module::Pluggable;
-
- my $only_re = __PACKAGE__ . '::Plugins::\w+$';
-
- Module::Pluggable->import(
- sub_name => '_plugins',
- search_path => __PACKAGE__,
- only => qr/$only_re/,
- #except => [ INSTALLER_MM, INSTALLER_SAMPLE ]
- );
-
- push @PluginModules, __PACKAGE__->_plugins;
- }
-
- ### now try to load them
- for my $p ( __PACKAGE__->plugin_modules ) {
- my %map = eval { load $p; $p->import; $p->plugins };
- error(loc("Could not load plugin '$p': $@")), next if $@;
-
- ### register each plugin
- while( my($name, $func) = each %map ) {
-
- if( not length $name or not length $func ) {
- error(loc("Empty plugin name or dispatch function detected"));
- next;
- }
-
- if( exists( $Dispatch{$name} ) ) {
- error(loc("'%1' is already registered by '%2'",
- $name, $Dispatch{$name}->[0]));
- next;
- }
-
- ### register name, package and function
- $Dispatch{$name} = [ $p, $func ];
- }
- }
- }
-
- ### dispatch a plugin command to its function
- sub _meta {
- my $self = shift;
- my %hash = @_;
- my $cb = $self->backend;
- my $term = $self->term;
- my $conf = $cb->configure_object;
-
- my $opts; my $input;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- options => { default => { }, store => \$opts },
- input => { default => '', store => \$input },
- };
-
- check( $tmpl, \%hash ) or return;
- }
-
- $input =~ s/\s*(\S+)\s*//;
- my $cmd = $1;
-
- ### look up the command, or go to the default
- my $aref = $Dispatch{ $cmd } || [ __PACKAGE__, '_plugin_default' ];
-
- my($pkg,$func) = @$aref;
-
- my $rv = eval { $pkg->$func( $self, $cb, $cmd, $input, $opts ) };
-
- error( $@ ) if $@;
-
- ### return $rv instead, so input loop can be terminated?
- return 1;
- }
-
- sub _plugin_default { error(loc("No such plugin command")) }
-}
-
-### plugin commands
-{ my $help_format = " /%-21s # %s\n";
-
- sub _list_plugins {
- my $self = shift;
-
- $self->__print( loc("Available plugins:\n") );
- $self->__print( loc(" List usage by using: /? PLUGIN_NAME\n" ) );
- $self->__print( $/ );
-
- my %table = __PACKAGE__->plugin_table;
- for my $name( sort keys %table ) {
- my $pkg = $table{$name}->[0];
- my $this = __PACKAGE__;
-
- my $who = $pkg eq $this
- ? "Standard Plugin"
- : do { my $v = $self->_format_version($pkg->VERSION) || '';
- $pkg =~ s/^$this/../;
- sprintf "Provided by: %-30s %-10s", $pkg, $v;
- };
-
- $self->__printf( $help_format, $name, $who );
- }
-
- $self->__print( $/.$/ );
-
- $self->__print(
- " Write your own plugins? Read the documentation of:\n" .
- " CPANPLUS::Shell::Default::Plugins::HOWTO\n" );
-
- $self->__print( $/ );
- }
-
- sub _list_plugins_help {
- return sprintf $help_format, 'plugins', loc("lists available plugins");
- }
-
- ### registered as a plugin too
- sub _show_random_tip_help {
- return sprintf $help_format, 'showtip', loc("show usage tips" );
- }
-
- sub _plugins_usage {
- my $self = shift;
- my $shell = shift;
- my $cb = shift;
- my $cmd = shift;
- my $input = shift;
- my %table = $self->plugin_table;
-
- my @list = length $input ? split /\s+/, $input : sort keys %table;
-
- for my $name( @list ) {
-
- ### no such plugin? skip
- error(loc("No such plugin '$name'")), next unless $table{$name};
-
- my $pkg = $table{$name}->[0];
- my $func = $table{$name}->[1] . '_help';
-
- if ( my $sub = $pkg->can( $func ) ) {
- eval { $self->__print( $sub->() ) };
- error( $@ ) if $@;
-
- } else {
- $self->__print(" No usage for '$name' -- try perldoc $pkg");
- }
-
- $self->__print( $/ );
- }
-
- $self->__print( $/.$/ );
- }
-
- sub _plugins_usage_help {
- return sprintf $help_format, '? [NAME ...]',
- loc("show usage for plugins");
- }
-}
-
-### send a command to a remote host, retrieve the answer;
-sub __send_remote_command {
- my $self = shift;
- my $cmd = shift;
- my $remote = $self->remote or return;
- my $user = $remote->{'username'};
- my $pass = $remote->{'password'};
- my $conn = $remote->{'connection'};
- my $end = "\015\012";
- my $answer;
-
- my $send = join "\0", $user, $pass, $cmd;
-
- print $conn $send . $end;
-
- ### XXX why doesn't something like this just work?
- #1 while recv($conn, $answer, 1024, 0);
- while(1) {
- my $buff;
- $conn->recv( $buff, 1024, 0 );
- $answer .= $buff;
- last if $buff =~ /$end$/;
- }
-
- my($status,$buffer) = split "\0", $answer;
-
- return ($status, $buffer);
-}
-
-
-sub _read_configuration_from_rc {
- my $self = shift;
- my $rc_file = shift;
-
- my $href;
- if( can_load( modules => { 'Config::Auto' => '0.0' } ) ) {
- $Config::Auto::DisablePerl = 1;
-
- eval { $href = Config::Auto::parse( $rc_file, format => 'space' ) };
-
- $self->__print(
- loc( "Unable to read in config file '%1': %2", $rc_file, $@ )
- ) if $@;
- }
-
- return $href || {};
-}
-
-{ my @tips = (
- loc( "You can update CPANPLUS by running: '%1'", 's selfupdate' ),
- loc( "You can install modules by URL using '%1'", 'i URL' ),
- loc( "You can turn off these tips using '%1'",
- 's conf show_startup_tip 0' ),
- loc( "You can use wildcards like '%1' and '%2' on search results",
- '*', '2..5' ) ,
- loc( "You can use plugins. Type '%1' to list available plugins",
- '/plugins' ),
- loc( "You can show all your out of date modules using '%1'", 'o' ),
- loc( "Many operations take options, like '%1', '%2' or '%3'",
- '--verbose', '--force', '--skiptest' ),
- loc( "The documentation in %1 and %2 is very useful",
- "CPANPLUS::Module", "CPANPLUS::Backend" ),
- loc( "You can type '%1' for help and '%2' to exit", 'h', 'q' ),
- loc( "You can run an interactive setup using '%1'", 's reconfigure' ),
- loc( "You can add custom sources to your index. See '%1' for details",
- '/cs --help' ),
- loc( "CPANPLUS now has an experimental SQLite backend. You can enable ".
- "it via: '%1'. Update dependencies via '%2'",
- 's conf source_engine CPANPLUS::Internals::Source::SQLite; s save',
- 's selfupdate enabled_features ' ),
- );
-
- sub _show_random_tip {
- my $self = shift;
- $self->__print( $/, "Did you know...\n ",
- $tips[ int rand scalar @tips ], $/ );
- return 1;
- }
-}
-
-sub _reload_shell {
- { exec ($^X, '-MCPANPLUS', '-e', 'shell') }; print STDERR "couldn't exec foo: $!";
-}
-
-1;
-
-__END__
-
-=pod
-
-=head1 BUG REPORTS
-
-Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>.
-
-=head1 AUTHOR
-
-This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
-
-=head1 COPYRIGHT
-
-The CPAN++ interface (of which this module is a part of) is copyright (c)
-2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved.
-
-This library is free software; you may redistribute and/or modify it
-under the same terms as Perl itself.
-
-=head1 SEE ALSO
-
-L<CPANPLUS::Shell::Classic>, L<CPANPLUS::Shell>, L<cpanp>
-
-=cut
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
-
-__END__
-
-TODO:
- e => "_expand_inc", # scratch it, imho -- not used enough
-
-### free letters: g j k n y ###
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/CustomSource.pm b/cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/CustomSource.pm
deleted file mode 100644
index 1c77ae24f5..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/CustomSource.pm
+++ /dev/null
@@ -1,205 +0,0 @@
-package CPANPLUS::Shell::Default::Plugins::CustomSource;
-use deprecate;
-
-use strict;
-use CPANPLUS::Error qw[error msg];
-use CPANPLUS::Internals::Constants;
-
-use Data::Dumper;
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-=head1 NAME
-
-CPANPLUS::Shell::Default::Plugins::CustomSource - add custom sources to CPANPLUS
-
-=head1 SYNOPSIS
-
- ### elaborate help text
- CPAN Terminal> /? cs
-
- ### add a new custom source
- CPAN Terminal> /cs --add file:///path/to/releases
-
- ### list all your custom sources by
- CPAN Terminal> /cs --list
-
- ### display the contents of a custom source by URI or ID
- CPAN Terminal> /cs --contents file:///path/to/releases
- CPAN Terminal> /cs --contents 1
-
- ### Update a custom source by URI or ID
- CPAN Terminal> /cs --update file:///path/to/releases
- CPAN Terminal> /cs --update 1
-
- ### Remove a custom source by URI or ID
- CPAN Terminal> /cs --remove file:///path/to/releases
- CPAN Terminal> /cs --remove 1
-
- ### Write an index file for a custom source, to share
- ### with 3rd parties or remote users
- CPAN Terminal> /cs --write file:///path/to/releases
-
- ### Make sure to save your sources when adding/removing
- ### sources, so your changes are reflected in the cache:
- CPAN Terminal> x
-
-=head1 DESCRIPTION
-
-This is a C<CPANPLUS::Shell::Default> plugin that can add
-custom sources to your CPANPLUS installation. This is a
-wrapper around the C<custom module sources> code as outlined
-in L<CPANPLUS::Backend/CUSTOM MODULE SOURCES>.
-
-This allows you to extend your index of available modules
-beyond what's available on C<CPAN> with your own local
-distributions, or ones offered by third parties.
-
-=cut
-
-
-sub plugins {
- return ( cs => 'custom_source' )
-}
-
-my $Cb;
-my $Shell;
-my @Index = ();
-
-sub _uri_from_cache {
- my $self = shift;
- my $input = shift or return;
-
- ### you gave us a search number
- my $uri = $input =~ /^\d+$/
- ? $Index[ $input - 1 ] # remember, off by 1!
- : $input;
-
- my %files = reverse $Cb->list_custom_sources;
-
- ### it's an URI we know
- ### VMS can lower case all files, so make sure we check that too
- my $local = $files{ $uri };
- $local = $files{ lc $uri } if !$local && ON_VMS;
-
- if( $local ) {
- return wantarray
- ? ($uri, $local)
- : $uri;
- }
-
- ### couldn't resolve the input
- error(loc("Unknown URI/index: '%1'", $input));
- return;
-}
-
-sub _list_custom_sources {
- my $class = shift;
-
- my %files = $Cb->list_custom_sources;
-
- $Shell->__print( loc("Your remote sources:"), $/ ) if keys %files;
-
- my $i = 0;
- while(my($local,$remote) = each %files) {
- $Shell->__printf( " [%2d] %s\n", ++$i, $remote );
-
- ### remember, off by 1!
- push @Index, $remote;
- }
-
- $Shell->__print( $/ );
-}
-
-sub _list_contents {
- my $class = shift;
- my $input = shift;
-
- my ($uri,$local) = $class->_uri_from_cache( $input );
- unless( $uri ) {
- error(loc("--contents needs URI parameter"));
- return;
- }
-
- my $fh = OPEN_FILE->( $local ) or return;
-
- $Shell->__printf( " %s", $_ ) for sort <$fh>;
- $Shell->__print( $/ );
-}
-
-sub custom_source {
- my $class = shift;
- my $shell = shift; $Shell = $shell; # available to all methods now
- my $cb = shift; $Cb = $cb; # available to all methods now
- my $cmd = shift;
- my $input = shift || '';
- my $opts = shift || {};
-
- ### show a list
- if( $opts->{'list'} ) {
- $class->_list_custom_sources;
-
- } elsif ( $opts->{'contents'} ) {
- $class->_list_contents( $input );
-
- } elsif ( $opts->{'add'} ) {
- unless( $input ) {
- error(loc("--add needs URI parameter"));
- return;
- }
-
- $cb->add_custom_source( uri => $input )
- and $shell->__print(loc("Added remote source '%1'", $input), $/);
-
- $Shell->__print($/, loc("Remote source contains:"), $/, $/);
- $class->_list_contents( $input );
-
- } elsif ( $opts->{'remove'} ) {
- my($uri,$local) = $class->_uri_from_cache( $input );
- unless( $uri ) {
- error(loc("--remove needs URI parameter"));
- return;
- }
-
- 1 while unlink $local;
-
- $shell->__print( loc("Removed remote source '%1'", $uri), $/ );
-
- } elsif ( $opts->{'update'} ) {
- ### did we get input? if so, it's a remote part
- my $uri = $class->_uri_from_cache( $input );
-
- $cb->update_custom_source( $uri ? ( remote => $uri ) : () )
- and do { $shell->__print( loc("Updated remote sources"), $/ ) };
-
- } elsif ( $opts->{'write'} ) {
- $cb->write_custom_source_index( path => $input ) and
- $shell->__print( loc("Wrote remote source index for '%1'", $input), $/);
-
- } else {
- error(loc("Unrecognized command, see '%1' for help", '/? cs'));
- }
-
- return;
-}
-
-sub custom_source_help {
- return loc(
- $/ .
- ' # Plugin to manage custom sources from the default shell' . $/ .
- " # See the 'CUSTOM MODULE SOURCES' section in the " . $/ .
- ' # CPANPLUS::Backend documentation for details.' . $/ .
- ' /cs --list # list available sources' . $/ .
- ' /cs --add URI # add source' . $/ .
- ' /cs --remove URI | INDEX # remove source' . $/ .
- ' /cs --contents URI | INDEX # show packages from source'. $/ .
- ' /cs --update [URI | INDEX] # update source index' . $/ .
- ' /cs --write PATH # write source index' . $/
- );
-
-}
-
-1;
-
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/HOWTO.pod b/cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/HOWTO.pod
deleted file mode 100644
index 8000aac988..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/HOWTO.pod
+++ /dev/null
@@ -1,136 +0,0 @@
-=head1 NAME
-
-CPANPLUS::Shell::Default::Plugins::HOWTO -- documentation on how to write your own plugins
-
-=head1 SYNOPSIS
-
- package CPANPLUS::Shell::Default::Plugins::MyPlugin;
-
- ### return command => method mapping
- sub plugins { ( myplugin1 => 'mp1', myplugin2 => 'mp2' ) }
-
- ### method called when the command '/myplugin1' is issued
- sub mp1 { .... }
-
- ### method called when the command '/? myplugin1' is issued
- sub mp1_help { return "Help Text" }
-
-=head1 DESCRIPTION
-
-This pod text explains how to write your own plugins for
-C<CPANPLUS::Shell::Default>.
-
-=head1 HOWTO
-
-=head2 Registering Plugin Modules
-
-Plugins are detected by using C<Module::Pluggable>. Every module in
-the C<CPANPLUS::Shell::Default::Plugins::*> namespace is considered a
-plugin, and is attempted to be loaded.
-
-Therefor, any plugin must be declared in that namespace, in a corresponding
-C<.pm> file.
-
-=head2 Registering Plugin Commands
-
-To register any plugin commands, a list of key value pairs must be returned
-by a C<plugins> method in your package. The keys are the commands you wish
-to register, the values are the methods in the plugin package you wish to have
-called when the command is issued.
-
-For example, a simple 'Hello, World!' plugin:
-
- package CPANPLUS::Shell::Default::Plugins::HW;
-
- sub plugins { return ( helloworld => 'hw' ) };
-
- sub hw { print "Hello, world!\n" }
-
-When the user in the default shell now issues the C</helloworld> command,
-this command will be dispatched to the plugin, and its C<hw> method will
-be called
-
-=head2 Registering Plugin Help
-
-To provide usage information for your plugin, the user of the default shell
-can type C</? PLUGIN_COMMAND>. In that case, the function C<PLUGIN_COMMAND_help>
-will be called in your plugin package.
-
-For example, extending the above example, when a user calls C</? helloworld>,
-the function C<hw_help> will be called, which might look like this:
-
- sub hw_help { " /helloworld # prints "Hello, world!\n" }
-
-If you dont provide a corresponding _help function to your commands, the
-default shell will handle it gracefully, but the user will be stuck without
-usage information on your commands, so it's considered undesirable to omit
-the help functions.
-
-=head2 Arguments to Plugin Commands
-
-Any plugin function will receive the following arguments when called, which
-are all positional:
-
-=over 4
-
-=item Classname -- The name of your plugin class
-
-=item Shell -- The CPANPLUS::Shell::Default object
-
-=item Backend -- The CPANPLUS::Backend object
-
-=item Command -- The command issued by the user
-
-=item Input -- The input string from the user
-
-=item Options -- A hashref of options provided by the user
-
-=back
-
-For example, the following command:
-
- /helloworld bob --nofoo --bar=2 joe
-
-Would yield the following arguments:
-
- sub hw {
- my $class = shift; # CPANPLUS::Shell::Default::Plugins::HW
- my $shell = shift; # CPANPLUS::Shell::Default object
- my $cb = shift; # CPANPLUS::Backend object
- my $cmd = shift; # 'helloworld'
- my $input = shift; # 'bob joe'
- my $opts = shift; # { foo => 0, bar => 2 }
-
- ....
- }
-
-
-=head1 BUG REPORTS
-
-Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>.
-
-=head1 AUTHOR
-
-This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
-
-=head1 COPYRIGHT
-
-The CPAN++ interface (of which this module is a part of) is copyright (c)
-2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved.
-
-This library is free software; you may redistribute and/or modify it
-under the same terms as Perl itself.
-
-=head1 SEE ALSO
-
-L<CPANPLUS::Shell::Default>, L<CPANPLUS::Shell>, L<cpanp>
-
-=cut
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
-
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/Remote.pm b/cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/Remote.pm
deleted file mode 100644
index 0e749646c8..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/Remote.pm
+++ /dev/null
@@ -1,190 +0,0 @@
-package CPANPLUS::Shell::Default::Plugins::Remote;
-use deprecate;
-
-use strict;
-
-use Module::Load;
-use Params::Check qw[check];
-use CPANPLUS::Error qw[error msg];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-=head1 NAME
-
-CPANPLUS::Shell::Default::Plugins::Remote - connect to a remote CPANPLUS
-
-=head1 SYNOPSIS
-
- CPAN Terminal> /connect localhost 1337 --user=foo --pass=bar
- ...
- CPAN Terminal@localhost> /disconnect
-
-=head1 DESCRIPTION
-
-This is a C<CPANPLUS::Shell::Default> plugin that allows you to connect
-to a machine running an instance of C<CPANPLUS::Daemon>, allowing remote
-usage of the C<CPANPLUS Shell>.
-
-A sample session, updating all modules on a remote machine, might look
-like this:
-
- CPAN Terminal> /connect --user=my_user --pass=secret localhost 1337
-
- Connection accepted
-
- Successfully connected to 'localhost' on port '11337'
-
- Note that no output will appear until a command has completed
- -- this may take a while
-
-
- CPAN Terminal@localhost> o; i *
-
- [....]
-
- CPAN Terminal@localhost> /disconnect
-
- CPAN Terminal>
-
-=cut
-
-### store the original prompt here, so we can restore it on disconnect
-my $Saved_Prompt;
-
-sub plugins { ( connect => 'connect', disconnect => 'disconnect' ) }
-
-sub connect {
- my $class = shift;
- my $shell = shift;
- my $cb = shift;
- my $cmd = shift;
- my $input = shift || '';
- my $opts = shift || {};
- my $conf = $cb->configure_object;
-
- my $user; my $pass;
- { local $Params::Check::ALLOW_UNKNOWN = 1;
-
- my $tmpl = {
- user => { default => 'cpanpd', store => \$user },
- pass => { required => 1, store => \$pass },
- };
-
- check( $tmpl, $opts ) or return;
- }
-
- my @parts = split /\s+/, $input;
- my $host = shift @parts || 'localhost';
- my $port = shift @parts || '1337';
-
- load IO::Socket;
-
- my $remote = IO::Socket::INET->new(
- Proto => "tcp",
- PeerAddr => $host,
- PeerPort => $port,
- ) or (
- error( loc( "Cannot connect to port '%1' ".
- "on host '%2'", $port, $host ) ),
- return
- );
-
- my $con = {
- connection => $remote,
- username => $user,
- password => $pass,
- };
-
- ### store the connection
- $shell->remote( $con );
-
- my($status,$buffer) = $shell->__send_remote_command(
- "VERSION=$CPANPLUS::Shell::Default::VERSION");
-
- if( $status ) {
- print "\n$buffer\n\n";
-
- print loc( "Successfully connected to '%1' on port '%2'",
- $host, $port );
- print "\n\n";
- print loc( "Note that no output will appear until a command ".
- "has completed\n-- this may take a while" );
- print "\n\n";
-
- ### save the original prompt
- $Saved_Prompt = $shell->prompt;
-
- $shell->prompt( $shell->brand .'@'. $host .':'. $port .'> ' );
-
- } else {
- print "\n$buffer\n\n";
-
- print loc( "Failed to connect to '%1' on port '%2'",
- $host, $port );
- print "\n\n";
-
- $shell->remote( undef );
- }
-}
-
-sub disconnect {
- my $class = shift;
- my $shell = shift;
-
- print "\n", ( $shell->remote
- ? loc( "Disconnecting from remote host" )
- : loc( "Not connected to remote host" )
- ), "\n\n";
-
- $shell->remote( undef );
- $shell->prompt( $Saved_Prompt );
-}
-
-sub connect_help {
- return loc(
- " /connect [HOST PORT] # Connect to the remote machine,\n" .
- " # defaults taken from your config\n" .
- " --user=USER # Optional username\n" .
- " --pass=PASS # Optional password" );
-}
-
-sub disconnect_help {
- return loc(
- " /disconnect # Disconnect from the remote server" );
-}
-
-1;
-
-=pod
-
-=head1 BUG REPORTS
-
-Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>.
-
-=head1 AUTHOR
-
-This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
-
-=head1 COPYRIGHT
-
-The CPAN++ interface (of which this module is a part of) is copyright (c)
-2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved.
-
-This library is free software; you may redistribute and/or modify it
-under the same terms as Perl itself.
-
-=head1 SEE ALSO
-
-L<CPANPLUS::Shell::Default>, L<CPANPLUS::Shell>, L<cpanp>
-
-=cut
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
-
diff --git a/cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/Source.pm b/cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/Source.pm
deleted file mode 100644
index 30383398eb..0000000000
--- a/cpan/CPANPLUS/lib/CPANPLUS/Shell/Default/Plugins/Source.pm
+++ /dev/null
@@ -1,111 +0,0 @@
-package CPANPLUS::Shell::Default::Plugins::Source;
-use deprecate;
-
-use strict;
-use CPANPLUS::Error qw[error msg];
-use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
-
-use vars qw[$VERSION];
-$VERSION = "0.9135";
-
-=head1 NAME
-
-CPANPLUS::Shell::Default::Plugins::Source - read in CPANPLUS commands
-
-=head1 SYNOPSIS
-
- CPAN Terminal> /source /tmp/list_of_commands /tmp/more_commands
-
-=head1 DESCRIPTION
-
-This is a C<CPANPLUS::Shell::Default> plugin that works just like
-your unix shells source(1) command; it reads in a file that has
-commands in it to execute, and then executes them.
-
-A sample file might look like this:
-
- # first, update all the source files
- x --update_source
-
- # find all of my modules that are on the CPAN
- # test them, and store the error log
- a ^KANE$'
- t *
- p /home/kane/cpan-autotest/log
-
- # and inform us we're good to go
- ! print "Autotest complete, log stored; please enter your commands!"
-
-Note how empty lines, and lines starting with a '#' are being skipped
-in the execution.
-
-=cut
-
-
-sub plugins { return ( source => 'source' ) }
-
-sub source {
- my $class = shift;
- my $shell = shift;
- my $cb = shift;
- my $cmd = shift;
- my $input = shift || '';
- my $opts = shift || {};
- my $verbose = $cb->configure_object->get_conf('verbose');
-
- for my $file ( split /\s+/, $input ) {
- my $fh = FileHandle->new("$file") or(
- error(loc("Could not open file '%1': %2", $file, $!)),
- next
- );
-
- while( my $line = <$fh> ) {
- chomp $line;
-
- next if $line !~ /\S+/; # skip empty/whitespace only lines
- next if $line =~ /^#/; # skip comments
-
- msg(loc("Dispatching '%1'", $line), $verbose);
- return 1 if $shell->dispatch_on_input( input => $line );
- }
- }
-}
-
-sub source_help {
- return loc(' /source FILE [FILE ..] '.
- '# read in commands from the specified file' ),
-}
-
-1;
-
-=pod
-
-=head1 BUG REPORTS
-
-Please report bugs or other issues to E<lt>bug-cpanplus@rt.cpan.org<gt>.
-
-=head1 AUTHOR
-
-This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
-
-=head1 COPYRIGHT
-
-The CPAN++ interface (of which this module is a part of) is copyright (c)
-2001 - 2007, Jos Boumans E<lt>kane@cpan.orgE<gt>. All rights reserved.
-
-This library is free software; you may redistribute and/or modify it
-under the same terms as Perl itself.
-
-=head1 SEE ALSO
-
-L<CPANPLUS::Shell::Default>, L<CPANPLUS::Shell>, L<cpanp>
-
-=cut
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
-
diff --git a/cpan/CPANPLUS/t/00_CPANPLUS-Internals-Utils.t b/cpan/CPANPLUS/t/00_CPANPLUS-Internals-Utils.t
deleted file mode 100644
index e15dcb2fc0..0000000000
--- a/cpan/CPANPLUS/t/00_CPANPLUS-Internals-Utils.t
+++ /dev/null
@@ -1,185 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use strict;
-
-### make sure to keep the plan -- this is the only test
-### supported for 'older' T::H (pre 2.28) -- see Makefile.PL for details
-use Test::More tests => 48;
-
-use Cwd;
-use Data::Dumper;
-use File::Spec;
-use File::Basename;
-
-use CPANPLUS::Error;
-use CPANPLUS::Internals::Utils;
-
-# File::Spec and Cwd might return different values for a
-# symlinked directory, so we need to be careful.
-sub paths_are_same {
- my($have, $want, $name) = @_;
-
- $have = _resolve_symlinks($have);
- $want = _resolve_symlinks($want);
-
- my $builder = Test::More->builder;
- return $builder->like( $have, qr/\Q$want/i, $name );
-}
-
-# Resolve any symlinks in a path
-sub _resolve_symlinks {
- my $path = shift;
- my($vol, $dirs, $file) = File::Spec->splitpath($path);
-
- my $resolved = File::Spec->catpath( $vol, "", "" );
-
- for my $dir (File::Spec->splitdir($dirs)) {
- # Resolve the next part of the path
- my $next = File::Spec->catdir( $resolved, $dir );
- $next = eval { readlink $next } || $next;
-
- # If its absolute, use it.
- # Otherwise tack it onto the end of the previous path.
- $resolved = File::Spec->file_name_is_absolute($next)
- ? $next
- : File::Spec->catdir( $resolved, $next );
- }
-
- return File::Spec->catfile($resolved, $file);
-}
-
-my $Cwd = File::Spec->rel2abs(cwd());
-my $Class = 'CPANPLUS::Internals::Utils';
-my $Dir = 'foo';
-my $Move = 'bar';
-my $File = 'zot';
-
-rmdir $Move if -d $Move;
-rmdir $Dir if -d $Dir;
-
-### test _mdkir ###
-{ ok( $Class->_mkdir( dir => $Dir), "Created dir '$Dir'" );
- ok( -d $Dir, " '$Dir' is a dir" );
-}
-
-### test _chdir ###
-{ ok( $Class->_chdir( dir => $Dir), "Chdir to '$Dir'" );
-
- my $abs = File::Spec->rel2abs(File::Spec->catdir($Cwd,$Dir));
- paths_are_same( File::Spec->rel2abs(cwd()), $abs,
- " Cwd() is '$Dir'");
-
- ok( $Class->_chdir( dir => $Cwd), "Chdir back to '$Cwd'" );
- paths_are_same( File::Spec->rel2abs(cwd()), $Cwd,
- " Cwd() is '$Cwd'" );
-}
-
-### test _move ###
-{ ok( $Class->_move( file => $Dir, to => $Move ),
- "Move from '$Dir' to '$Move'" );
- ok( -d $Move, " Dir '$Move' exists" );
- ok( !-d $Dir, " Dir '$Dir' no longer exists" );
-
-
- { local $CPANPLUS::Error::ERROR_FH = output_handle();
-
- ### now try to move it somewhere it can't ###
- ok( !$Class->_move( file => $Move, to => 'inc' ),
- " Impossible move detected" );
- like( CPANPLUS::Error->stack_as_string, qr/Failed to move/,
- " Expected error found" );
- }
-}
-
-### test _rmdir ###
-{ ok( -d $Move, "Dir '$Move' exists" );
- ok( $Class->_rmdir( dir => $Move ), " Deleted dir '$Move'" );
- ok(!-d $Move, " Dir '$Move' no longer exists" );
-}
-
-### _get_file_contents tests ###
-{ my $contents = $Class->_get_file_contents( file => basename($0) );
- ok( $contents, "Got file contents" );
- like( $contents, qr/BEGIN/, " Proper contents found" );
- like( $contents, qr/CPANPLUS/, " Proper contents found" );
-}
-
-### _perl_version tests ###
-{ my $version = $Class->_perl_version( perl => $^X );
- ok( $version, "Perl version found" );
- like( $version, qr/\d.\d+.\d+/, " Looks like a proper version" );
-}
-
-### _version_to_number tests ###
-{ my $map = {
- '1' => '1',
- '1.2' => '1.2',
- '.2' => '.2',
- 'foo' => '0.0',
- 'a.1' => '0.0',
- '1.2.3' => '1.002003',
- 'v1.2.3' => '1.002003',
- 'v1.5' => '1.005000',
- '1.5-a' => '1.500',
- };
-
- while( my($try,$expect) = each %$map ) {
- my $ver = $Class->_version_to_number( version => $try );
- ok( $ver, "Version returned" );
- is( $ver, $expect, " Value as expected" );
- }
-}
-
-### _whoami tests ###
-{ sub foo {
- my $me = $Class->_whoami;
- ok( $me, "_whoami returned a result" );
- is( $me, 'foo', " Value as expected" );
- }
-
- foo();
-}
-
-### _mode_plus_w tests ###
-{ open my $fh, ">$File" or die "Could not open $File for writing: $!";
- close $fh;
-
- ### remove perms
- ok( -e $File, "File '$File' created" );
- ok( chmod( 000, $File ), " File permissions set to 000" );
-
- ok( $Class->_mode_plus_w( file => $File ),
- " File permissions set to +w" );
- ok( -w $File, " File is writable" );
-
- 1 while unlink $File;
-
- ok( !-e $File, " File removed" );
-}
-
-### uri encode/decode tests
-{ my $org = 'file://foo/bar';
-
- my $enc = $Class->_uri_encode( uri => $org );
-
- ok( $enc, "String '$org' encoded" );
- like( $enc, qr/%/, " Contents as expected" );
-
- my $dec = $Class->_uri_decode( uri => $enc );
- ok( $dec, "String '$enc' decoded" );
- is( $dec, $org, " Decoded properly" );
-}
-
-
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
-
diff --git a/cpan/CPANPLUS/t/01_CPANPLUS-Configure.t b/cpan/CPANPLUS/t/01_CPANPLUS-Configure.t
deleted file mode 100644
index 152a9ac632..0000000000
--- a/cpan/CPANPLUS/t/01_CPANPLUS-Configure.t
+++ /dev/null
@@ -1,136 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use Test::More 'no_plan';
-use Data::Dumper;
-use strict;
-use CPANPLUS::Internals::Constants;
-
-my $Config_pm = 'CPANPLUS/Config.pm';
-
-### DO NOT FLUSH TILL THE END!!! we depend on all warnings being logged..
-
-for my $mod (qw[CPANPLUS::Configure]) {
- use_ok($mod) or diag qq[Can't load $mod];
-}
-
-my $c = CPANPLUS::Configure->new();
-isa_ok($c, 'CPANPLUS::Configure');
-
-my $r = $c->conf;
-isa_ok( $r, 'CPANPLUS::Config' );
-
-
-### EU::AI compatibility test ###
-{ my $base = $c->_get_build('base');
- ok( defined($base), "Base retrieved by old compat API");
- is( $base, $c->get_conf('base'), " Value as expected" );
-}
-
-for my $cat ( $r->ls_accessors ) {
-
- ### what field can they take? ###
- my @options = $c->options( type => $cat );
-
- ### copy for use on the config object itself
- my $accessor = $cat;
- my $prepend = ($cat =~ s/^_//) ? '_' : '';
-
- my $getmeth = $prepend . 'get_'. $cat;
- my $setmeth = $prepend . 'set_'. $cat;
- my $addmeth = $prepend . 'add_'. $cat;
-
- ok( scalar(@options), "Possible options obtained" );
-
- ### test adding keys too ###
- { my $add_key = 'test_key';
- my $add_val = [1..3];
-
- my $found = grep { $add_key eq $_ } @options;
- ok( !$found, "Key '$add_key' not yet defined" );
- ok( $c->$addmeth( $add_key => $add_val ),
- " $addmeth('$add_key' => VAL)" );
-
- ### this one now also exists ###
- push @options, $add_key
- }
-
- ### poke in the object, get the actual hashref out ###
- my %hash = map {
- $_ => $r->$accessor->$_
- } $r->$accessor->ls_accessors;
-
- while( my ($key,$val) = each %hash ) {
- my $is = $c->$getmeth($key);
- is_deeply( $val, $is, "deep check for '$key'" );
- ok( $c->$setmeth($key => 1 ), " $setmeth('$key' => 1)" );
- is( $c->$getmeth($key), 1, " $getmeth('$key')" );
- ok( $c->$setmeth($key => $val), " $setmeth('$key' => ORGVAL)" );
- }
-
- ### now check if we found all the keys with options or not ###
- delete $hash{$_} for @options;
- ok( !(scalar keys %hash), "All possible keys found" );
-
-}
-
-
-### see if we can save the config ###
-{ my $dir = File::Spec->rel2abs('dummy-cpanplus');
- my $pm = 'CPANPLUS::Config::Test' . $$;
- my $file = $c->save( $pm, $dir );
-
- ok( $file, "Config $pm saved" );
- ok( -e $file, " File exists" );
- ok( -s $file, " File has size" );
-
- ### include our dummy dir when re-scanning
- { local @INC = ( $dir, @INC );
- ok( $c->init( rescan => 1 ),
- "Reran ->init()" );
- }
-
- ### make sure this file is now loaded
- ### XXX can't trust bloody dir separators on Win32 in %INC,
- ### so rather than an exact match, do a grep...
- my ($found) = grep /\bTest$$/, values %INC;
- ok( $found, " Found $file in \%INC" );
- ok( -e $file, " File exists" );
- 1 while unlink $file;
- ok(!-e $file, " File removed" );
-
-}
-
-{ my $env = ENV_CPANPLUS_CONFIG;
- local $ENV{$env} = $$;
- my $ok = $c->init;
- my $stack = CPANPLUS::Error->stack_as_string;
-
- ok( $ok, "Reran init again" );
- like( $stack, qr/Specifying a config file in your environment/,
- " Warning logged" );
-}
-
-
-{ CPANPLUS::Error->flush;
-
- { ### try a bogus method call
- my $x = $c->flubber('foo');
- my $err = CPANPLUS::Error->stack_as_string;
- is ($x, undef, "Bogus method call returns undef");
- like($err, "/flubber/", " Bogus method call recognized");
- }
-
- CPANPLUS::Error->flush;
-}
-
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/t/02_CPANPLUS-Internals.t b/cpan/CPANPLUS/t/02_CPANPLUS-Internals.t
deleted file mode 100644
index 46a7cb6e20..0000000000
--- a/cpan/CPANPLUS/t/02_CPANPLUS-Internals.t
+++ /dev/null
@@ -1,147 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use strict;
-use Test::More 'no_plan';
-
-use CPANPLUS::Configure;
-use CPANPLUS::Backend;
-use CPANPLUS::Internals::Constants;
-use Module::Load::Conditional qw[can_load];
-use Data::Dumper;
-
-my $cb = CPANPLUS::Backend->new( CPANPLUS::Configure->new() );
-
-isa_ok($cb, 'CPANPLUS::Internals');
-is($cb->_id, $cb->_last_id, "Comparing ID's");
-
-### delete/store/retrieve id tests ###
-{ my $del = $cb->_remove_id( $cb->_id );
- ok( $del, "ID deleted" );
- isa_ok( $del, "CPANPLUS::Internals" );
- is( $del, $cb, " Deleted ID matches last object" );
-
- my $id = $cb->_store_id( $del );
- ok( $id, "ID stored" );
- is( $id, $cb->_id, " Stored proper ID" );
-
- my $obj = $cb->_retrieve_id( $id );
- ok( $obj, "Object retrieved from ID" );
- isa_ok( $obj, 'CPANPLUS::Internals' );
- is( $obj->_id, $id, " Retrieved ID properly" );
-
- my @obs = $cb->_return_all_objects();
- ok( scalar(@obs), "Returned objects" );
- is( scalar(@obs), 1, " Proper amount of objects found" );
- is( $obs[0]->_id, $id, " Proper ID found on object" );
-
- my $lid = $cb->_last_id;
- ok( $lid, "Found last registered ID" );
- is( $lid, $id, " ID matches last object" );
-
- my $iid = $cb->_inc_id;
- ok( $iid, "Incremented ID" );
- is( $iid, $id+1, " ID matched last ID + 1" );
-}
-
-### host ok test ###
-{
- my $host = $cb->configure_object->get_conf('hosts')->[0];
-
- is( $cb->_host_ok( host => $host ), 1, "Host ok" );
- is( $cb->_add_fail_host(host => $host), 1, " Host now marked as bad" );
- is( $cb->_host_ok( host => $host ), 0, " Host still bad" );
- ok( $cb->_flush( list => ['hosts'] ), " Hosts flushed" );
- is( $cb->_host_ok( host => $host ), 1, " Host now ok again" );
-}
-
-### flush loads test
-{ my $mod = 'Benchmark';
- my $file = $mod . '.pm';
-
- ### XXX whitebox test -- mark this module as unloadable
- $Module::Load::Conditional::CACHE->{$mod}->{usable} = 0;
-
- ok( !can_load( modules => { $mod => 0 }, verbose => 0 ),
- "'$mod' not loaded" );
-
- ok( $cb->flush('load'), " 'load' cache flushed" );
- ok( can_load( modules => { $mod => 0 }, verbose => 0 ),
- " '$mod' loaded" );
-}
-
-### add to inc path tests
-{ my $meth = '_add_to_includepath';
- can_ok( $cb, $meth );
-
- my $p5lib = $ENV{PERL5LIB} || '';
- my $inc = "@INC";
- ok( $cb->$meth( directories => [$$] ),
- " CB->$meth( $$ )" );
-
- my $new_p5lib = $ENV{PERL5LIB};
- my $new_inc = "@INC";
- isnt( $p5lib, $new_p5lib, " PERL5LIB is now: $new_p5lib" );
- like( $new_p5lib, qr/$$/, " Matches $$" );
-
- isnt( $inc, $new_inc, ' @INC is expanded with: ' . $$ );
- like( $new_inc, qr/$$/, " Matches $$" );
-
- ok( $cb->$meth( directories => [$$] ),
- " CB->$meth( $$ ) again" );
- is( "@INC", $new_inc, ' @INC unchanged' );
- is( $new_p5lib, $ENV{PERL5LIB},
- " PERL5LIB unchanged" );
-}
-
-### callback registering tests ###
-{ my $callback_map = {
- ### name default value
- install_prerequisite => 1, # install prereqs when 'ask' is set?
- edit_test_report => 0, # edit the prepared test report?
- send_test_report => 1, # send the test report?
- munge_test_report => $$, # munge the test report
- filter_prereqs => $$, # limit prereqs
- proceed_on_test_failure => 0, # continue on failed 'make test'?
- munge_dist_metafile => $$, # munge the metailfe
- };
-
- for my $callback ( keys %$callback_map ) {
-
- { my $rv = $callback_map->{$callback};
-
- is( $rv, $cb->_callbacks->$callback->( $0, $$ ),
- "Default callback '$callback' called" );
- like( CPANPLUS::Error->stack_as_string, qr/DEFAULT '\S+' HANDLER/s,
- " Default handler warning recorded" );
- CPANPLUS::Error->flush;
- }
-
- ### try to register the callback
- my $ok = $cb->_register_callback(
- name => $callback,
- code => sub { return $callback }
- );
-
- ok( $ok, "Registered callback '$callback' ok" );
-
- my $sub = $cb->_callbacks->$callback;
- ok( $sub, " Retrieved callback" );
- ok( IS_CODEREF->($sub), " Callback is a sub" );
-
- my $rv = $sub->();
- ok( $rv, " Callback called ok" );
- is( $rv, $callback, " Got expected return value" );
- }
-}
-
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/t/03_CPANPLUS-Internals-Source.t b/cpan/CPANPLUS/t/03_CPANPLUS-Internals-Source.t
deleted file mode 100644
index d6ad2ea94f..0000000000
--- a/cpan/CPANPLUS/t/03_CPANPLUS-Internals-Source.t
+++ /dev/null
@@ -1,262 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use strict;
-
-use Module::Load;
-use Test::More eval {
- load $ENV{CPANPLUS_SOURCE_ENGINE} if $ENV{CPANPLUS_SOURCE_ENGINE}; 1
- } ? 'no_plan'
- : (skip_all => "SQLite engine not available");
-
-use CPANPLUS::Error;
-use CPANPLUS::Backend;
-use CPANPLUS::Internals::Constants;
-
-use Data::Dumper;
-use File::Basename qw[dirname];
-
-my $conf = gimme_conf();
-$conf->set_conf( enable_custom_sources => 1 );
-my $cb = CPANPLUS::Backend->new( $conf );
-
-### XXX temp
-# $conf->set_conf( verbose => 1 );
-
-isa_ok($cb, "CPANPLUS::Internals" );
-
-my $modname = TEST_CONF_MODULE;
-
-### test lookups
-{ my $mt = $cb->_module_tree;
- my $at = $cb->_author_tree;
-
- ### source files should be copied from the 'server' now
- for my $name (qw[auth mod dslip] ) {
- my $file = File::Spec->catfile(
- $conf->get_conf('base'),
- $conf->_get_source($name)
- );
- ok( (-e $file && -f _ && -s _), "$file exists" );
- }
-
- ok( $at, "Authortree loaded successfully" );
- ok( scalar keys %$at, " Authortree has items in it" );
- ok( $mt, "Moduletree loaded successfully" );
- ok( scalar keys %$mt, " Moduletree has items in it" );
-
- my $auth = $at->{'EUNOXS'};
- my $mod = $mt->{$modname};
-
- isa_ok( $auth, 'CPANPLUS::Module::Author' );
- isa_ok( $mod, 'CPANPLUS::Module' );
-}
-
-### save state tests
-SKIP: {
- skip "Save state tests for custom engine $ENV{CPANPLUS_SOURCE_ENGINE}", 7
- if $ENV{CPANPLUS_SOURCE_ENGINE};
-
- ok( 1, "Testing save state functionality" );
-
-
- ### check we dont have a status set yet
- { my $mod = $cb->_module_tree->{$modname};
- ok( !$mod->_status, " No status set yet in module object" );
- ok( $mod->status, " Status now set" );
- }
-
- ### now save this to disk
- { CPANPLUS::Error->flush;
-
- my $rv = $cb->save_state;
- ok( $rv, " State information saved" );
-
- like( CPANPLUS::Error->stack_as_string, qr/Writing compiled source/,
- " Diagnostics confirmed" );
- }
-
- ### now we rebuild the trees from disk and
- ### check if the module object has a status saved with it
- { CPANPLUS::Error->flush;
- ok( $cb->_build_trees( uptodate => 1, use_stored => 1),
- " Trees are rebuilt" );
-
- like( CPANPLUS::Error->stack_as_string, qr/Retrieving/,
- " Diagnostics confirmed" );
-
-
- my $mod = $cb->_module_tree->{$modname};
- ok( $mod->status, " Status now set in module object" );
- }
-}
-
-### check custom sources
-### XXX whitebox test
-SKIP: {
- ### first, find a file to serve as a source
- my $mod = $cb->_module_tree->{$modname};
- my $package = File::Spec->rel2abs(
- File::Spec->catfile(
- $FindBin::Bin,
- TEST_CONF_CPAN_DIR,
- $mod->path,
- $mod->package,
- )
- );
-
- ok( $package, "Found file for custom source" );
- ok( -e $package, " File '$package' exists" );
-
- ### remote uri
- my $uri = $cb->_host_to_uri(
- scheme => 'file',
- host => '',
- path => File::Spec->catfile( dirname($package) )
- );
-
- my $expected_file = $cb->__custom_module_source_index_file( uri => $uri );
-
- ok( $expected_file, "Sources should be written to '$uri'" );
-
- skip( "Index file size too long (>260 chars). Can't write to disk", 28 )
- if length $expected_file > 260 and ON_WIN32;
-
-
- ### local file
- ### 2 tests
- my $src_file = $cb->_add_custom_module_source( uri => $uri );
- ok( $src_file, "Sources written to '$src_file'" );
- ok( -e $src_file, " File exists" );
-
- ### and write the file
- ### 5 tests
- { my $meth = '__write_custom_module_index';
- can_ok( $cb, $meth );
-
- my $rv = $cb->$meth(
- path => dirname( $package ),
- to => $src_file
- );
-
- ok( $rv, " Sources written" );
- is( $rv, $src_file, " Written to expected file" );
- ok( -e $src_file, " Source file exists" );
- ok( -s $src_file, " File has non-zero size" );
- }
-
- ### let's see if we can find our custom files
- ### 3 tests
- { my $meth = '__list_custom_module_sources';
- can_ok( $cb, $meth );
-
- my %files = $cb->$meth;
- ok( scalar(keys(%files)),
- " Got list of sources" );
-
- ### on VMS, we can't predict the case unfortunately
- ### so grep for it instead;
- my $found = map {
- my $src_re = quotemeta($src_file);
- $_ =~ /$src_re/i;
- } keys %files;
-
- ok( $found, " Found proper entry for $src_file" );
- }
-
- ### now we can have it be loaded in
- ### 6 tests
- { my $meth = '__create_custom_module_entries';
- can_ok( $cb, $meth );
-
- ### now add our own sources
- ok( $cb->$meth, "Sources file loaded" );
-
- my $add_name = TEST_CONF_INST_MODULE;
- my $add = $cb->_module_tree->{$add_name};
- ok( $add, " Found added module" );
-
- ok( $add->status->_fetch_from,
- " Full download path set" );
- is( $add->author->cpanid, CUSTOM_AUTHOR_ID,
- " Attributed to custom author" );
-
- ### since we replaced an existing module, there should be
- ### a message on the stack
- like( CPANPLUS::Error->stack_as_string, qr/overwrite module tree/i,
- " Addition message recorded" );
- }
-
- ### test updating custom sources
- ### 3 tests
- { my $meth = '__update_custom_module_sources';
- can_ok( $cb, $meth );
-
- ### mark what time it is now, sleep 1 second for better measuring
- my $now = time;
- sleep 1;
-
- my $ok = $cb->$meth;
-
- ok( $ok, "Custom sources updated" );
- cmp_ok( [stat $src_file]->[9], '>=', $now,
- " Timestamp on sourcefile updated" );
- }
-
- ### now update it individually
- ### 3 tests
- { my $meth = '__update_custom_module_source';
- can_ok( $cb, $meth );
-
- ### mark what time it is now, sleep 1 second for better measuring
- my $now = time;
- sleep 1;
-
- my $ok = $cb->$meth( remote => $uri );
-
- ok( $ok, "Custom source for '$uri' updated" );
- cmp_ok( [stat $src_file]->[9], '>=', $now,
- " Timestamp on sourcefile updated" );
- }
-
- ### now update using the higher level API, see if it's part of the update
- ### 3 tests
- { CPANPLUS::Error->flush;
-
- ### mark what time it is now, sleep 1 second for better measuring
- my $now = time;
- sleep 1;
-
- my $ok = $cb->_build_trees(
- uptodate => 0,
- use_stored => 0,
- );
-
- ok( $ok, "All sources updated" );
- cmp_ok( [stat $src_file]->[9], '>=', $now,
- " Timestamp on sourcefile updated" );
-
- like( CPANPLUS::Error->stack_as_string, qr/Updating sources from/,
- " Update recorded in the log" );
- }
-
- ### now remove the index file;
- ### 3 tests
- { my $meth = '_remove_custom_module_source';
- can_ok( $cb, $meth );
-
- my $file = $cb->$meth( uri => $uri );
- ok( $file, "Index file removed" );
- ok( ! -e $file, " File '$file' no longer on disk" );
- }
-}
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/t/04_CPANPLUS-Module.t b/cpan/CPANPLUS/t/04_CPANPLUS-Module.t
deleted file mode 100644
index 1014e62bda..0000000000
--- a/cpan/CPANPLUS/t/04_CPANPLUS-Module.t
+++ /dev/null
@@ -1,360 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use strict;
-
-use CPANPLUS::Configure;
-use CPANPLUS::Backend;
-use CPANPLUS::Module::Fake;
-use CPANPLUS::Module::Author::Fake;
-use CPANPLUS::Internals::Constants;
-
-use Test::More 'no_plan';
-use Data::Dumper;
-use File::Spec;
-use File::Path ();
-
-my $Conf = gimme_conf();
-my $CB = CPANPLUS::Backend->new( $Conf );
-
-### start with fresh sources ###
-ok( $CB->reload_indices( update_source => 0 ), "Rebuilding trees" );
-
-my $AuthName = TEST_CONF_AUTHOR;
-my $Auth = $CB->author_tree( $AuthName );
-my $ModName = TEST_CONF_MODULE;
-my $Mod = $CB->module_tree( $ModName );
-my $CoreName = TEST_CONF_PREREQ;
-my $CoreMod = $CB->module_tree( $CoreName );
-
-isa_ok( $Auth, 'CPANPLUS::Module::Author' );
-isa_ok( $Mod, 'CPANPLUS::Module' );
-isa_ok( $CoreMod, 'CPANPLUS::Module' );
-
-### author accessors ###
-is( $Auth->author, 'ExtUtils::MakeMaker No XS Code',
- "Author name: " . $Auth->author );
-is( $Auth->cpanid, $AuthName, "Author CPANID: " . $Auth->cpanid );
-is( $Auth->email, DEFAULT_EMAIL,"Author email: " . $Auth->email );
-isa_ok( $Auth->parent, 'CPANPLUS::Backend' );
-
-### module accessors ###
-{ my %map = (
- ### method ### result
- module => $ModName,
- name => $ModName,
- comment => undef,
- package => 'Foo-Bar-0.01.tar.gz',
- path => 'authors/id/EUNOXS',
- version => '0.01',
- dslip => 'cdpO ',
- description => 'CPANPLUS Test Package',
- mtime => '',
- author => $Auth,
- );
-
- my @acc = $Mod->accessors;
- ok( scalar(@acc), "Retrieved module accessors" );
-
- ### remove private accessors
- is_deeply( [ sort keys %map ], [ sort grep { $_ !~ /^_/ } @acc ],
- " About to test all accessors" );
-
- ### check all the accessors
- while( my($meth,$res) = each %map ) {
- is( $Mod->$meth, $res, " Mod->$meth: " . ($res || '<empty>') );
- }
-
- ### check accessor objects ###
- isa_ok( $Mod->parent, 'CPANPLUS::Backend' );
- isa_ok( $Mod->author, 'CPANPLUS::Module::Author' );
- is( $Mod->author->author, $Auth->author,
- "Module eq Author" );
-}
-
-### convenience methods ###
-{ ok( 1, "Convenience functions" );
- is( $Mod->package_name, 'Foo-Bar', " Package name");
- is( $Mod->package_version, '0.01', " Package version");
- is( $Mod->package_extension, 'tar.gz', " Package extension");
- ok( !$Mod->package_is_perl_core, " Package not core");
- ok( !$Mod->module_is_supplied_with_perl_core, " Module not core" );
- ok( !$Mod->is_bundle, " Package not bundle");
-}
-
-### clone & status tests
-{ my $clone = $Mod->clone;
- ok( $clone, "Module cloned" );
- isa_ok( $clone, 'CPANPLUS::Module' );
-
- for my $acc ( $Mod->accessors ) {
- is( $clone->$acc, $Mod->$acc,
- " Clone->$acc matches Mod->$acc " );
- }
-
- ### XXX whitebox test
- ok( !$clone->_status, "Status object empty on start" );
-
- my $status = $clone->status;
- ok( $status, " Status object defined after query" );
- is( $status, $clone->_status,
- " Object stored as expected" );
- isa_ok( $status, 'Object::Accessor' );
-}
-
-{ ### extract + error test ###
- ok( !$Mod->extract(), "Cannot extract unfetched file" );
- like( CPANPLUS::Error->stack_as_string, qr/You have not fetched/,
- " Error properly logged" );
-}
-
-{ ### fetch tests ###
- ### enable signature checks for checksums ###
- my $old = $Conf->get_conf('signature');
- $Conf->set_conf(signature => 1);
-
- my $where = $Mod->fetch( force => 1 );
- ok( $where, "Module fetched" );
- ok( -f $where, " Module is a file" );
- ok( -s $where, " Module has size" );
-
- $Conf->set_conf( signature => $old );
-}
-
-{ ### extract tests ###
- my $dir = $Mod->extract( force => 1 );
- ok( $dir, "Module extracted" );
- ok( -d $dir, " Dir exsits" );
-}
-
-
-{ ### readme tests ###
- my $readme = $Mod->readme;
- ok( length $readme, "Readme found" );
- is( $readme, $Mod->status->readme,
- " Readme stored in module object" );
-}
-
-{ ### checksums tests ###
- SKIP: {
- skip(q[You chose not to enable checksum verification], 5)
- unless $Conf->get_conf('md5');
-
- my $cksum_file = $Mod->checksums;
- ok( $cksum_file, "Checksum file found" );
- is( $cksum_file, $Mod->status->checksums,
- " File stored in module object" );
- ok( -e $cksum_file, " File exists" );
- ok( -s $cksum_file, " File has size" );
-
- ### XXX test checksum_value if there's digest::md5 + config wants it
- ok( $Mod->status->checksum_ok,
- " Checksum is ok" );
-
- ### check ttl code for checksums; fetching it now means the cache
- ### should kick in
- { CPANPLUS::Error->flush;
- ok( $Mod->checksums,
- " Checksums re-fetched" );
- like( CPANPLUS::Error->stack_as_string, qr/Using cached file/,
- " Cached file used" );
- }
- }
-}
-
-
-{ ### installer type tests ###
- my $installer = $Mod->get_installer_type;
- ok( $installer, "Installer found" );
- is( $installer, INSTALLER_MM,
- " Proper installer found" );
-}
-
-{ ### check signature tests ###
- SKIP: {
- skip(q[You chose not to enable signature checks], 1)
- unless $Conf->get_conf('signature');
-
- ok( $Mod->check_signature,
- "Signature check OK" );
- }
-}
-
-### dslip & related
-{ my $dslip = $Mod->dslip;
- ok( $dslip, "Got dslip information from $ModName ($dslip)" );
-
- ### now find it for a submodule
- { my $submod = $CB->module_tree( TEST_CONF_MODULE_SUB );
- ok( $submod, " Found submodule " . $submod->name );
- ok( $submod->dslip, " Got dslip info (".$submod->dslip.")" );
- is( $submod->dslip, $dslip,
- " It's identical to $ModName" );
- }
-}
-
-{ ### details() test ###
- my $href = {
- 'Support Level' => 'Developer',
- 'Package' => $Mod->package,
- 'Description' => $Mod->description,
- 'Development Stage' =>
- 'under construction but pre-alpha (not yet released)',
- 'Author' => sprintf("%s (%s)", $Auth->author, $Auth->email),
- 'Version on CPAN' => $Mod->version,
- 'Language Used' =>
- 'Perl-only, no compiler needed, should be platform independent',
- 'Interface Style' =>
- 'Object oriented using blessed references and/or inheritance',
- 'Public License' => 'Unknown',
- ### XXX we can't really know what you have installed ###
- #'Version Installed' => '0.06',
- };
-
- my $res = $Mod->details;
-
- ### delete they key of which we don't know the value ###
- delete $res->{'Version Installed'};
-
- is_deeply( $res, $href, "Details OK" );
-}
-
-{ ### contians() test ###
- ### XXX ->contains works based on package name. in our sourcefiles
- ### we use 4x the same package name for different modules. So use
- ### the only unique package name here, which is the one for the core mod
- my @list = $CoreMod->contains;
-
- ok( scalar(@list), "Found modules contained in this one" );
- is_deeply( \@list, [$CoreMod],
- " Found all modules expected" );
-}
-
-{ ### testing distributions() ###
- my @mdists = $Mod->distributions;
- is( scalar @mdists, 1, "Distributions found via module" );
-
- my @adists = $Auth->distributions;
- is( scalar @adists, 3, "Distributions found via author" );
-}
-
-{ ### test status->flush ###
- ok( $Mod->status->mk_flush,
- "Status flushed" );
- ok(!$Mod->status->fetch," Fetch status empty" );
- ok(!$Mod->status->extract,
- " Extract status empty" );
- ok(!$Mod->status->checksums,
- " Checksums status empty" );
- ok(!$Mod->status->readme,
- " Readme status empty" );
-}
-
-{ ### testing bundles ###
- my $bundle = $CB->module_tree('Bundle::Foo::Bar');
- isa_ok( $bundle, 'CPANPLUS::Module' );
-
- ok( $bundle->is_bundle, " It's a Bundle:: module" );
- ok( $bundle->fetch, " Fetched the bundle" );
- ok( $bundle->extract, " Extracted the bundle" );
-
- my @objs = $bundle->bundle_modules;
- is( scalar(@objs), 5, " Found all prerequisites" );
-
- for( @objs ) {
- isa_ok( $_, 'CPANPLUS::Module',
- " Prereq " . $_->module );
- ok( defined $bundle->status->prereqs->{$_->module},
- " Prereq was registered" );
- }
-}
-
-{ ### testing autobundles
- my $file = File::Spec->catfile(
- dummy_cpan_dir(),
- $Conf->_get_build('autobundle'),
- 'Snapshot.pm'
- );
- my $uri = $CB->_host_to_uri( scheme => 'file', path => $file );
- my $bundle = $CB->parse_module( module => $uri );
-
- ok( -e $file, "Creating bundle from '$file'" );
- ok( $bundle, " Object created" );
- isa_ok( $bundle, 'CPANPLUS::Module',
- " Object" );
- ok( $bundle->is_bundle, " Recognized as bundle" );
- ok( $bundle->is_autobundle, " Recognized as autobundle" );
-
- my $type = $bundle->get_installer_type;
- ok( $type, " Found installer type" );
- is( $type, INSTALLER_AUTOBUNDLE,
- " Installer type is $type" );
-
- my $where = $bundle->fetch;
- ok( $where, " Autobundle fetched" );
- ok( -e $where, " File exists" );
-
-
- my @list = $bundle->bundle_modules;
- ok( scalar(@list), " Prereqs found" );
- is( scalar(@list), 1, " Right number of prereqs" );
- isa_ok( $list[0], 'CPANPLUS::Module',
- " Object" );
-
- ### skiptests to make sure we don't get any test header mismatches
- my $rv = $bundle->create( prereq_target => 'create', skiptest => 1 );
- ok( $rv, " Tested prereqs" );
-
-}
-
-### test module from perl core ###
-{ isa_ok( $CoreMod, 'CPANPLUS::Module',
- "Core module " . $CoreName );
- ok( $CoreMod->package_is_perl_core,
- " Package found in perl core" );
-
- ### check if it's core with 5.6.1
- { local $] = '5.006001';
- ok( $CoreMod->module_is_supplied_with_perl_core,
- " Module also found in perl core");
- }
-
- ok( !$CoreMod->install, " Package not installed" );
- like( CPANPLUS::Error->stack_as_string, qr/core Perl/,
- " Error properly logged" );
-}
-
-### test third-party modules
-SKIP: {
- skip "Module::ThirdParty not installed", 10
- unless eval { require Module::ThirdParty; 1 };
-
- ok( !$Mod->is_third_party,
- "Not a 3rd party module: ". $Mod->name );
-
- my $fake = $CB->parse_module( module => 'LOCAL/SVN-Core-1.0' );
- ok( $fake, "Created module object for ". $fake->name );
- ok( $fake->is_third_party,
- " It is a 3rd party module" );
-
- my $info = $fake->third_party_information;
- ok( $info, "Got 3rd party package information" );
- isa_ok( $info, 'HASH' );
-
- for my $item ( qw[name url author author_url] ) {
- ok( length($info->{$item}),
- " $item field is filled" );
- }
-}
-
-### testing EU::Installed methods in Dist::MM tests ###
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/t/05_CPANPLUS-Internals-Fetch.t b/cpan/CPANPLUS/t/05_CPANPLUS-Internals-Fetch.t
deleted file mode 100644
index 7a6b1acb86..0000000000
--- a/cpan/CPANPLUS/t/05_CPANPLUS-Internals-Fetch.t
+++ /dev/null
@@ -1,110 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use strict;
-
-use CPANPLUS::Backend;
-
-use Test::More 'no_plan';
-use Data::Dumper;
-use File::Spec;
-use Cwd;
-use File::Basename;
-use CPANPLUS::Internals::Constants;
-
-my $conf = gimme_conf();
-
-my $cb = CPANPLUS::Backend->new( $conf );
-isa_ok($cb, "CPANPLUS::Internals" );
-
-my $mod = $cb->module_tree( TEST_CONF_MODULE );
-isa_ok( $mod, 'CPANPLUS::Module' );
-
-### fail host tests ###
-{ my $host = {};
- my $rv = $cb->_add_fail_host( host => $host );
-
- ok( $rv, "Failed host added " );
- ok(!$cb->_host_ok( host => $host),
- " Host registered as failed" );
- ok( $cb->_host_ok( host => {} ),
- " Fresh host unregistered" );
-}
-
-### refetch, even if it's there already ###
-{ my $where = $cb->_fetch( module => $mod, force => 1 );
-
- ok( $where, "File downloaded to '$where'" );
- ok( -s $where, " File exists" );
- unlink $where;
- ok(!-e $where, " File removed" );
-}
-
-### try to fetch something that doesn't exist ###
-{ ### set up a bogus host first ###
- my $hosts = $conf->get_conf('hosts');
- my $fail = { scheme => 'file',
- path => "$0/$0" };
-
- unshift @$hosts, $fail;
- $conf->set_conf( hosts => $hosts );
-
- ### the fallback host will get it ###
- my $where = $cb->_fetch( module => $mod, force => 1, verbose => 0 );
- ok($where, "File downloaded to '$where'" );
- ok( -s $where, " File exists" );
-
- ### but the error should be recorded ###
- like( CPANPLUS::Error->stack_as_string, qr/Fetching of .*? failed/s,
- " Error recorded appropriately" );
-
- ### host marked as bad? ###
- ok(!$cb->_host_ok( host => $fail ),
- " Failed host logged properly" );
-
- ### restore the hosts ###
- shift @$hosts; $conf->set_conf( hosts => $hosts );
-}
-
-### try and fetch a URI
-{ my $base = basename($0);
-
- ### do an ON_UNIX test, cygwin will fail tests otherwise (#14553)
- ### create a file URI. Make sure to split it by LOCAL rules
- ### and JOIN by unix rules, so we get a proper file uri
- ### otherwise, we might break win32. See bug #18702
- my $cwd = cwd();
- my $in_file = $^O eq 'VMS'
- ? VMS::Filespec::unixify( File::Spec->catfile($cwd, $base) )
- : File::Spec::Unix->catfile(
- File::Spec::Unix->catdir( File::Spec->splitdir( $cwd ) ),
- $base
- );
-
- my $target = CREATE_FILE_URI->($in_file);
-
- my $fake = $cb->parse_module( module => $target );
-
- ok( IS_FAKE_MODOBJ->(mod => $fake),
- "Fake module created from $0" );
- is( $fake->status->_fetch_from, $target,
- " Fetch from set ok" );
-
- my $where = $fake->fetch;
- ok( $where, " $target fetched ok" );
- ok( -s $where, " $where exists" );
- like( $where, '/'. UNKNOWN_DL_LOCATION .'/',
- " Saved to proper location" );
- like( $where, qr/$base$/, " Saved with proper name" );
-}
-
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/t/06_CPANPLUS-Internals-Constants.t b/cpan/CPANPLUS/t/06_CPANPLUS-Internals-Constants.t
deleted file mode 100644
index 993b2dc4ac..0000000000
--- a/cpan/CPANPLUS/t/06_CPANPLUS-Internals-Constants.t
+++ /dev/null
@@ -1,73 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use strict;
-use Test::More 'no_plan';
-use Cwd;
-use Config;
-use File::Basename;
-
-use CPANPLUS::Internals::Constants;
-use CPANPLUS::Module::Fake;
-use CPANPLUS::Module::Author::Fake;
-use CPANPLUS::Configure;
-use CPANPLUS::Backend;
-
-my $conf = gimme_conf();
-
-my $cb = CPANPLUS::Backend->new( $conf );
-
-my $f_auth = CPANPLUS::Module::Author::Fake->new( _id => $cb->_id );
-ok( $f_auth, "Fake auth object created" );
-ok( IS_AUTHOBJ->( $f_auth ), " IS_AUTHOBJ recognizes it" );
-ok( IS_FAKE_AUTHOBJ->( $f_auth ), " IS_FAKE_AUTHOBJ recognizes it" );
-
-my $f_mod = CPANPLUS::Module::Fake->new(
- module => TEST_CONF_INST_MODULE ,
- path => 'some/where',
- package => 'Foo-Bar-1.2.tgz',
- _id => $cb->_id,
- );
-ok( $f_mod, "Fake mod object created" );
-ok( IS_MODOBJ->( $f_mod ), " IS_MODOBJ recognizes it" );
-ok( IS_FAKE_MODOBJ->( $f_mod ), " IS_FAKE_MODOJB recognizes it" );
-
-ok( IS_CONFOBJ->( conf => $conf ), "IS_CONFOBJ recognizes conf object" );
-
-ok( FILE_EXISTS->( file => basename($0) ), "FILE_EXISTS finds file" );
-ok( FILE_READABLE->( file => basename($0) ), "FILE_READABLE finds file" );
-ok( DIR_EXISTS->( dir => cwd() ), "DIR_EXISTS finds dir" );
-
-
-{ no strict 'refs';
-
- my $tmpl = {
- MAKEFILE_PL => 'Makefile.PL',
- BUILD_PL => 'Build.PL',
- BLIB => 'blib',
- MAKEFILE => do {
- ### On vms, it's a different name. See constants
- ### file for details
- (ON_VMS and $Config::Config{make} =~ /MM[S|K]/i)
- ? 'DESCRIP.MMS'
- : 'Makefile'
- },
- };
-
- while ( my($sub,$res) = each %$tmpl ) {
- is( &{$sub}->(), $res, "$sub returns proper result without args" );
-
- my $long = File::Spec->catfile( cwd(), $res );
- is( &{$sub}->( cwd() ), $long, "$sub returns proper result with args" );
- }
-}
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/t/07_CPANPLUS-Internals-Extract.t b/cpan/CPANPLUS/t/07_CPANPLUS-Internals-Extract.t
deleted file mode 100644
index 3c18a3b944..0000000000
--- a/cpan/CPANPLUS/t/07_CPANPLUS-Internals-Extract.t
+++ /dev/null
@@ -1,36 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use strict;
-
-use CPANPLUS::Configure;
-use CPANPLUS::Backend;
-use CPANPLUS::Internals::Constants;
-use Test::More 'no_plan';
-use Data::Dumper;
-
-my $conf = gimme_conf();
-
-my $cb = CPANPLUS::Backend->new( $conf );
-
-### XXX SOURCEFILES FIX
-my $mod = $cb->module_tree( TEST_CONF_MODULE );
-
-isa_ok( $mod, 'CPANPLUS::Module' );
-
-my $where = $mod->fetch;
-ok( $where, "Module fetched" );
-
-my $dir = $cb->_extract( module => $mod );
-ok( $dir, "Module extracted" );
-ok( DIR_EXISTS->($dir), " Dir exists" );
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/t/08_CPANPLUS-Backend.t b/cpan/CPANPLUS/t/08_CPANPLUS-Backend.t
deleted file mode 100644
index aba3a475f7..0000000000
--- a/cpan/CPANPLUS/t/08_CPANPLUS-Backend.t
+++ /dev/null
@@ -1,375 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use strict;
-use Test::More 'no_plan';
-use File::Basename 'dirname';
-
-use Data::Dumper;
-use CPANPLUS::Error;
-use CPANPLUS::Internals::Constants;
-
-my $conf = gimme_conf();
-
-my $Class = 'CPANPLUS::Backend';
-### D::C has troubles with the 'use_ok' -- it finds the wrong paths.
-### for now, do a 'use' instead
-#use_ok( $Class ) or diag "$Class not found";
-use CPANPLUS::Backend;
-
-my $cb = $Class->new( $conf );
-isa_ok( $cb, $Class );
-
-my $mt = $cb->module_tree;
-my $at = $cb->author_tree;
-ok( scalar keys %$mt, "Module tree has entries" );
-ok( scalar keys %$at, "Author tree has entries" );
-
-### module_tree tests ###
-my $Name = TEST_CONF_MODULE;
-my $mod = $cb->module_tree($Name);
-
-### XXX SOURCEFILES FIX
-{ my @mods = $cb->module_tree($Name,$Name);
- my $none = $cb->module_tree( TEST_CONF_INVALID_MODULE );
-
- ok( IS_MODOBJ->(mod => $mod), "Module object found" );
- is( scalar(@mods), 2, " Module list found" );
- ok( IS_MODOBJ->(mod => $mods[0]), " ISA module object" );
- ok( !IS_MODOBJ->(mod => $none), " Bogus module detected");
-}
-
-### author_tree tests ###
-{ my @auths = $cb->author_tree( $mod->author->cpanid,
- $mod->author->cpanid );
- my $none = $cb->author_tree( 'fnurk' );
-
- ok( IS_AUTHOBJ->(auth => $mod->author), "Author object found" );
- is( scalar(@auths), 2, " Author list found" );
- ok( IS_AUTHOBJ->( author => $auths[0] )," ISA author object" );
- is( $mod->author, $auths[0], " Objects are identical" );
- ok( !IS_AUTHOBJ->( author => $none ), " Bogus author detected" );
-}
-
-my $conf_obj = $cb->configure_object;
-ok( IS_CONFOBJ->(conf => $conf_obj), "Configure object found" );
-
-
-### parse_module tests ###
-{ my @map = (
- $Name => [
- $mod->author->cpanid, # author
- $mod->package_name, # package name
- $mod->version, # version
- ],
- $mod => [
- $mod->author->cpanid,
- $mod->package_name,
- $mod->version,
- ],
- 'Foo-Bar-EU-NOXS' => [
- $mod->author->cpanid,
- $mod->package_name,
- $mod->version,
- ],
- 'Foo-Bar-EU-NOXS-0.01' => [
- $mod->author->cpanid,
- $mod->package_name,
- '0.01',
- ],
- 'EUNOXS/Foo-Bar-EU-NOXS' => [
- 'EUNOXS',
- $mod->package_name,
- $mod->version,
- ],
- 'EUNOXS/Foo-Bar-EU-NOXS-0.01' => [
- 'EUNOXS',
- $mod->package_name,
- '0.01',
- ],
- ### existing module, no extension given
- ### this used to create a modobj with no package extension
- 'EUNOXS/Foo-Bar-0.02' => [
- 'EUNOXS',
- 'Foo-Bar',
- '0.02',
- ],
- 'Foo-Bar-EU-NOXS-0.09' => [
- $mod->author->cpanid,
- $mod->package_name,
- '0.09',
- ],
- 'MBXS/Foo-Bar-EU-NOXS-0.01' => [
- 'MBXS',
- $mod->package_name,
- '0.01',
- ],
- 'EUNOXS/Foo-Bar-EU-NOXS-0.09' => [
- 'EUNOXS',
- $mod->package_name,
- '0.09',
- ],
- 'EUNOXS/Foo-Bar-EU-NOXS-0.09.zip' => [
- 'EUNOXS',
- $mod->package_name,
- '0.09',
- ],
- 'FROO/Flub-Flob-1.1.zip' => [
- 'FROO',
- 'Flub-Flob',
- '1.1',
- ],
- 'G/GO/GOYALI/SMS_API_3_01.tar.gz' => [
- 'GOYALI',
- 'SMS_API',
- '3_01',
- ],
- 'E/EY/EYCK/Net/Lite/Net-Lite-FTP-0.091' => [
- 'EYCK',
- 'Net-Lite-FTP',
- '0.091',
- ],
- 'EYCK/Net/Lite/Net-Lite-FTP-0.091' => [
- 'EYCK',
- 'Net-Lite-FTP',
- '0.091',
- ],
- 'M/MA/MAXDB/DBD-MaxDB-7.5.0.24a' => [
- 'MAXDB',
- 'DBD-MaxDB',
- '7.5.0.24a',
- ],
- 'EUNOXS/perl5.005_03.tar.gz' => [
- 'EUNOXS',
- 'perl',
- '5.005_03',
- ],
- 'FROO/Flub-Flub-v1.1.0.tbz' => [
- 'FROO',
- 'Flub-Flub',
- 'v1.1.0',
- ],
- 'FROO/Flub-Flub-1.1_2.tbz' => [
- 'FROO',
- 'Flub-Flub',
- '1.1_2',
- ],
- 'LDS/CGI.pm-3.27.tar.gz' => [
- 'LDS',
- 'CGI',
- '3.27',
- ],
- 'FROO/Text-Tabs+Wrap-2006.1117.tar.gz' => [
- 'FROO',
- 'Text-Tabs+Wrap',
- '2006.1117',
- ],
- 'JETTERO/Crypt-PBC-0.7.20.0-0.4.9' => [
- 'JETTERO',
- 'Crypt-PBC',
- '0.7.20.0-0.4.9' ,
- ],
- 'GRICHTER/HTML-Embperl-1.2.1.tar.gz' => [
- 'GRICHTER',
- 'HTML-Embperl',
- '1.2.1',
- ],
- 'KANE/File-Fetch-0.15_03' => [
- 'KANE',
- 'File-Fetch',
- '0.15_03',
- ],
- 'AUSCHUTZ/IO-Stty-.02.tar.gz' => [
- 'AUSCHUTZ',
- 'IO-Stty',
- '.02',
- ],
- '.' => [
- 'CPANPLUS',
- 't',
- '',
- ],
- 'Foo/Bar.pm' => [
- $mod->author->cpanid, # author
- $mod->package_name, # package name
- $mod->version, # version
- ],
- );
-
- while ( my($guess, $attr) = splice @map, 0, 2 ) {
- my( $author, $pkg_name, $version ) = @$attr;
-
- ok( $guess, "Attempting to parse $guess" );
-
- my $obj = $cb->parse_module( module => $guess );
-
- ok( $obj, " Result returned" );
- ok( IS_MODOBJ->( mod => $obj ),
- " parse_module success by '$guess'" );
-
- is( $obj->version, $version,
- " Proper version found: $version" );
- is( $obj->package_version, $version,
- " Found in package_version as well" );
-
- ### VMS doesn't preserve case, so match them after normalizing case
- is( uc($obj->package_name), uc($pkg_name),
- " Proper package_name found: $pkg_name" );
- unlike( $obj->package_name, qr/\d/,
- " No digits in package name" );
- { my $ext = $obj->package_extension;
- ok( $ext, " Has extension as well: $ext" );
- }
-
- like( $obj->author->cpanid, "/$author/i",
- " Proper author found: $author");
- like( $obj->path, "/$author/i",
- " Proper path found: " . $obj->path );
- }
-
-
- ### test for things that look like real modules, but aren't ###
- { my @map = (
- [ $Name . $$ => [
- [qr/does not contain an author/,"Missing author part detected"],
- [qr/Cannot find .+? in the module tree/,"Unable to find module"]
- ] ],
- [ {}, => [
- [ qr/module string from reference/,"Unable to parse ref"]
- ] ],
- );
-
- for my $entry ( @map ) {
- my($mod,$aref) = @$entry;
-
- my $none = $cb->parse_module( module => $mod );
- ok( !IS_MODOBJ->(mod => $none),
- "Non-existent module detected" );
- ok( !IS_FAKE_MODOBJ->(mod => $none),
- "Non-existent fake module detected" );
-
- my $str = CPANPLUS::Error->stack_as_string;
- for my $pair (@$aref) {
- my($re,$diag) = @$pair;
- like( $str, $re," $diag" );
- }
- }
- }
-
- ### test parsing of arbitrary URI
- for my $guess ( qw[ http://foo/bar.gz
- http://a/b/c/d/e/f/g/h/i/j
- flub://floo ]
- ) {
- my $obj = $cb->parse_module( module => $guess );
- ok( IS_FAKE_MODOBJ->(mod => $obj),
- "parse_module success by '$guess'" );
- is( $obj->status->_fetch_from, $guess,
- " Fetch from set ok" );
- }
-}
-
-### RV tests ###
-{ my $method = 'readme';
- my %args = ( modules => [$Name] );
-
- my $rv = $cb->$method( %args );
- ok( IS_RVOBJ->( $rv ), "Got an RV object" );
- ok( $rv->ok, " Overall OK" );
- cmp_ok( $rv, '==', 1, " Overload OK" );
- is( $rv->function, $method, " Function stored OK" );
- is_deeply( $rv->args, \%args, " Arguments stored OK" );
- is( $rv->rv->{$Name}, $mod->readme, " RV as expected" );
-}
-
-### reload_indices tests ###
-{
- my $file = File::Spec->catfile( $conf->get_conf('base'),
- $conf->_get_source('mod'),
- );
-
- ok( $cb->reload_indices( update_source => 0 ), "Rebuilding trees" );
- my $age = -M $file;
-
- ### make sure we are 'newer' on faster machines with a sleep..
- ### apparently Win32's FAT isn't granual enough on intervals
- ### < 2 seconds, so it may give the same answer before and after
- ### the sleep, causing the test to fail. so sleep atleast 2 seconds.
- sleep 2;
- ok( $cb->reload_indices( update_source => 1 ),
- "Rebuilding and refetching trees" );
- cmp_ok( $age, '>', -M $file, " Source file '$file' updated" );
-}
-
-### flush tests ###
-{
- for my $cache( qw[methods hosts modules lib all] ) {
- ok( $cb->flush($cache), "Cache $cache flushed ok" );
- }
-}
-
-### installed tests ###
-{ ok( scalar($cb->installed), "Found list of installed modules" );
-}
-
-### autobudle tests ###
-{
- my $where = $cb->autobundle;
- ok( $where, "Autobundle written" );
- ok( -s $where, " File has size" );
-}
-
-### local_mirror tests ###
-{ ### turn off md5 checks for the 'fake' packages we have
- my $old_md5 = $conf->get_conf('md5');
- $conf->set_conf( md5 => 0 );
-
- ### otherwise 'status->fetch' might be undef! ###
- my $rv = $cb->local_mirror( path => 'dummy-localmirror' );
- ok( $rv, "Local mirror created" );
-
- for my $mod ( values %{ $cb->module_tree } ) {
- my $name = $mod->module;
-
- my $cksum = File::Spec->catfile(
- dirname($mod->status->fetch),
- CHECKSUMS );
- ok( -e $mod->status->fetch, " Module '$name' fetched" );
- ok( -s _, " Module '$name' has size" );
- ok( -e $cksum, " Checksum fetched for '$name'" );
- ok( -s _, " Checksum for '$name' has size" );
- }
-
- $conf->set_conf( md5 => $old_md5 );
-}
-
-### check ENV variable
-{ ### process id
- { my $name = 'PERL5_CPANPLUS_IS_RUNNING';
- ok( $ENV{$name}, "Env var '$name' set" );
- is( $ENV{$name}, $$, " Set to current process id" );
- }
-
- ### Version
- { my $name = 'PERL5_CPANPLUS_IS_VERSION';
- ok( $ENV{$name}, "Env var '$name' set" );
-
- ### version.pm formats ->VERSION output... *sigh*
- is( $ENV{$name}, $Class->VERSION,
- " Set to current process version" );
- }
-
-}
-
-__END__
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
-
diff --git a/cpan/CPANPLUS/t/09_CPANPLUS-Internals-Search.t b/cpan/CPANPLUS/t/09_CPANPLUS-Internals-Search.t
deleted file mode 100644
index e5ef37cb68..0000000000
--- a/cpan/CPANPLUS/t/09_CPANPLUS-Internals-Search.t
+++ /dev/null
@@ -1,83 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use strict;
-use Test::More 'no_plan';
-use Data::Dumper;
-use CPANPLUS::Backend;
-use CPANPLUS::Internals::Constants;
-
-my $Conf = gimme_conf();
-my $CB = CPANPLUS::Backend->new($Conf);
-my $ModName = TEST_CONF_MODULE;
-my $Mod = $CB->module_tree( $ModName );
-
-
-### search for modules ###
-for my $type ( CPANPLUS::Module->accessors() ) {
-
- ### don't muck around with references/objects
- ### or private identifiers
- next if ref $Mod->$type() or $type =~/^_/;
-
- my @aref = $CB->search(
- type => $type,
- allow => [$Mod->$type()],
- );
-
- ok( scalar @aref, "Module found by '$type'" );
- for( @aref ) {
- ok( IS_MODOBJ->($_)," Module isa module object" );
- }
-}
-
-### search for authors ###
-my $auth = $Mod->author;
-for my $type ( CPANPLUS::Module::Author->accessors() ) {
-
- ### don't muck around with references/objects
- ### or private identifiers
- next if ref $auth->$type() or $type =~/^_/;
-
- my @aref = $CB->search(
- type => $type,
- allow => [$auth->$type()],
- );
-
- ok( @aref, "Author found by '$type'" );
- for( @aref ) {
- ok( IS_AUTHOBJ->($_), " Author isa author object" );
- }
-}
-
-
-{ my $warning = '';
- local $SIG{__WARN__} = sub { $warning .= "@_"; };
-
- { ### try search that will yield nothing ###
- ### XXX SOURCEFILES FIX
- my @list = $CB->search( type => 'module',
- allow => [$ModName.$$] );
-
- is( scalar(@list), 0, "Valid search yields no results" );
- is( $warning, '', " No warnings issued" );
- }
-
- { ### try bogus arguments ###
- my @list = $CB->search( type => '', allow => ['foo'] );
-
- is( scalar(@list), 0, "Broken search yields no results" );
- like( $warning, qr/^Key 'type'.* is of invalid type for/,
- " Got a warning for wrong arguments" );
- }
-}
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/t/10_CPANPLUS-Error.t b/cpan/CPANPLUS/t/10_CPANPLUS-Error.t
deleted file mode 100644
index 355ca7aad4..0000000000
--- a/cpan/CPANPLUS/t/10_CPANPLUS-Error.t
+++ /dev/null
@@ -1,114 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use strict;
-use Test::More 'no_plan';
-use Data::Dumper;
-use FileHandle;
-use CPANPLUS::Error;
-
-my $conf = gimme_conf();
-
-my $map = {
- cp_msg => ["This is just a test message"],
- msg => ["This is just a test message"],
- cp_error => ["This is just a test error"],
- error => ["This is just a test error"],
-};
-
-### check if CPANPLUS::Error can do what we expect
-{ for my $name ( keys %$map ) {
- can_ok('CPANPLUS::Error', $name);
- can_ok('main', $name); # did it get exported?
- }
-}
-
-### make sure we start with an empty stack
-{ CPANPLUS::Error->flush;
- is( scalar(()=CPANPLUS::Error->stack), 0,
- "Starting with empty stack" );
-}
-
-### global variables test ###
-{ my $file = output_file();
-
- ### this *has* to be set, as we're testing the contents of the file
- ### to see if it matches what's stored in the buffer.
- local $CPANPLUS::Error::MSG_FH = output_handle();
- local $CPANPLUS::Error::ERROR_FH = output_handle();
-
- ok( -e $file, "Output redirect file exists" );
- ok( !-s $file, " Output file is empty" );
-
- ### print a msg & error ###
- for my $name ( keys %$map ) {
- my $sub = __PACKAGE__->can( $name );
-
- $sub->( $map->{$name}->[0], 1 );
- }
-
- ### must close it for Win32 tests!
- close output_handle;
-
- ok( -s $file, " Output file now has size" );
-
- my $fh = FileHandle->new( $file );
- ok( $fh, "Opened output file for reading " );
-
- my $contents = do { local $/; <$fh> };
- my $string = CPANPLUS::Error->stack_as_string;
- my $trace = CPANPLUS::Error->stack_as_string(1);
-
- ok( $contents, " Got the file contents" );
- ok( $string, "Got the error stack as string" );
-
-
- for my $type ( keys %$map ) {
- my $tag = $type; $tag =~ s/.+?_//g;
-
- for my $str (@{ $map->{$type} } ) {
- like( $contents, qr/\U\Q$tag/,
- " Contents matches for '$type'" );
- like( $contents, qr/\Q$str/,
- " Contents matches for '$type'" );
-
- like( $string, qr/\U\Q$tag/,
- " String matches for '$type'" );
- like( $string, qr/\Q$str/,
- " String matches for '$type'" );
-
- like( $trace, qr/\U\Q$tag/,
- " Trace matches for '$type'" );
- like( $trace, qr/\Q$str/,
- " Trace matches for '$type'" );
-
- ### extra trace tests ###
- like( $trace, qr/\Q$str\E.*?\Q$str/s,
- " Trace holds proper traceback" );
- like( $trace, qr/\Q$0/,
- " Trace holds program name" );
- like( $trace, qr/line/,
- " Trace holds line number information" );
- }
- }
-
- ### check the stack, flush it, check again ###
- is( scalar(()=CPANPLUS::Error->stack), scalar(keys(%$map)),
- "All items on stack" );
- is( scalar(()=CPANPLUS::Error->flush), scalar(keys(%$map)),
- "All items flushed" );
- is( scalar(()=CPANPLUS::Error->stack), 0,
- "No items on stack" );
-
-}
-
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/t/15_CPANPLUS-Shell.t b/cpan/CPANPLUS/t/15_CPANPLUS-Shell.t
deleted file mode 100644
index 51283c6727..0000000000
--- a/cpan/CPANPLUS/t/15_CPANPLUS-Shell.t
+++ /dev/null
@@ -1,152 +0,0 @@
-### the shell prints to STDOUT, so capture that here
-### and we can check the output
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-### this lets us capture output from the default shell
-{ no warnings 'redefine';
-
- my $out;
- *CPANPLUS::Shell::Default::__print = sub {
- my $self = shift;
- $out .= "@_";
- };
-
- sub _out { $out }
- sub _reset_out { $out = '' }
-}
-
-use strict;
-use Test::More 'no_plan';
-use CPANPLUS::Internals::Constants;
-
-### in some subprocesses, the Term::ReadKey code will go
-### balistic and die because it can't figure out terminal
-### dimensions. If we add these env vars, it'll use them
-### as a default and not die. Thanks to Slaven Rezic for
-### reporting this.
-local $ENV{'COLUMNS'} = 80 unless $ENV{'COLUMNS'};
-local $ENV{'LINES'} = 40 unless $ENV{'LINES'};
-
-my $Conf = gimme_conf();
-my $Class = 'CPANPLUS::Shell';
-my $Default = SHELL_DEFAULT;
-my $TestMod = TEST_CONF_MODULE;
-my $TestAuth= TEST_CONF_AUTHOR;
-
-unless ( -t ) {
- ok('We are not on a terminal');
- exit 0;
-}
-
-### basic load tests
-use_ok( $Class, 'Default' );
-is( $Class->which, SHELL_DEFAULT,
- "Default shell loaded" );
-### create an object
-my $Shell = $Class->new( $Conf );
-ok( $Shell, " New object created" );
-isa_ok( $Shell, $Default, " Object" );
-
-### method tests
-{
- ### uri to use for /cs tests
- my $cs_path = File::Spec->rel2abs(
- File::Spec->catfile(
- $FindBin::Bin,
- TEST_CONF_CPAN_DIR,
- )
- );
- my $cs_uri = $Shell->backend->_host_to_uri(
- scheme => 'file',
- host => '',
- path => $cs_path,
- );
-
- my $base = $Conf->get_conf('base');
-
- ### XXX have to keep the list ordered, as some methods only work as
- ### expected *after* others have run
- my @map = (
- 'v' => qr/CPANPLUS/,
- '! $self->__print($$)' => qr/$$/,
- '?' => qr/\[General\]/,
- 'h' => qr/\[General\]/,
- 's' => qr/Unknown type/,
- 's conf' => qr/$Default/,
- 's program' => qr/sudo/,
- 's mirrors' => do { my $re = TEST_CONF_CPAN_DIR; qr/$re/ },
- 's selfupdate' => qr/selfupdate/,
- 'b' => qr/autobundle/,
- "a $TestAuth" => qr/$TestAuth/,
- "m $TestMod" => qr/$TestMod/,
- "w" => qr/$TestMod/,
- "r 1" => qr/README/,
- "r $TestMod" => qr/README/,
- "f $TestMod" => qr/$TestAuth/,
- "d $TestMod" => qr/$TestMod/,
- ### XXX this one prints to stdout in a subprocess -- skipping this
- ### for now due to possible PERL_CORE issues
- #"t $TestMod" => qr/$TestMod.*tested successfully/i,
- "l $TestMod" => qr/$TestMod/,
- '! die $$; p' => qr/$$/,
- '/plugins' => qr/Available plugins:/i,
- '/? ?' => qr/usage/i,
-
- ### custom source plugin tests
- ### lower case path matching, as on VMS we can't predict case
- "/? cs" => qr|/cs|,
- "/cs --add $cs_uri" => qr/Added remote source/,
- "/cs --list" => do { my $re = quotemeta($cs_uri); qr/$re/i },
- "/cs --contents $cs_uri" => qr/$TestAuth/i,
- "/cs --update" => qr/Updated remote sources/,
- "/cs --update $cs_uri" => qr/Updated remote sources/,
-
- ### --write leaves a file that we should clean up, so make
- ### sure it's in the path that we clean up already anyway
- "/cs --write $base" => qr/Wrote remote source index/,
- "/cs --remove $cs_uri" => qr/Removed remote source/,
- );
-
- my $meth = 'dispatch_on_input';
- can_ok( $Shell, $meth );
-
- while( my($input,$out_re) = splice(@map, 0, 2) ) {
-
- ### empty output cache
- __PACKAGE__->_reset_out;
- CPANPLUS::Error->flush;
-
- ok( 1, "Testing '$input'" );
- $Shell->$meth( input => $input );
-
- my $out = __PACKAGE__->_out;
-
- ### XXX remove me
- #diag( $out );
-
- ok( $out, " Output received" );
- like( $out, $out_re, " Output matches '$out_re'" );
- }
-}
-
-__END__
-
-#### test separately, they have side effects
-'q' => qr/^$/, # no output!
-'s save boxed' => do { my $re = CONFIG_BOXED; qr/$re/ },
-### this doens't write any output
-'x --update_source' => qr/module tree/i,
-s edit
-s reconfigure
-'c' => '_reports',
-'i' => '_install',
-'u' => '_uninstall',
-'z' => '_shell',
-### might not have any out of date modules...
-'o' => '_uptodate',
-
-
diff --git a/cpan/CPANPLUS/t/19_CPANPLUS-Dist.t b/cpan/CPANPLUS/t/19_CPANPLUS-Dist.t
deleted file mode 100644
index b551741eef..0000000000
--- a/cpan/CPANPLUS/t/19_CPANPLUS-Dist.t
+++ /dev/null
@@ -1,441 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-### dummy class for testing dist api ###
-BEGIN {
-
- package CPANPLUS::Dist::_Test;
- use strict;
- use vars qw[$Available $Create $Install $Init $Prepare @ISA];
-
- @ISA = qw[CPANPLUS::Dist];
- $Available = 1;
- $Create = 1;
- $Install = 1;
- $Init = 1;
- $Prepare = 1;
-
- require CPANPLUS::Dist;
- CPANPLUS::Dist->_add_dist_types( __PACKAGE__ );
-
- sub init { $_[0]->status->mk_accessors(
- qw[prepared created installed
- _prepare_args _install_args _create_args]);
- return $Init };
- sub format_available { return $Available }
- sub prepare { return shift->status->prepared( $Prepare ) }
- sub create { return shift->status->created( $Create ) }
- sub install { return shift->status->installed( $Install ) }
-}
-
-use strict;
-
-use CPANPLUS::Configure;
-use CPANPLUS::Backend;
-use CPANPLUS::Internals::Constants;
-
-use Test::More 'no_plan';
-use Cwd;
-use Data::Dumper;
-use File::Basename ();
-use File::Spec ();
-use Module::Load::Conditional qw[check_install];
-
-my $conf = gimme_conf();
-my $cb = CPANPLUS::Backend->new( $conf );
-
-### obsolete
-#my $Format = '_test';
-my $Module = 'CPANPLUS::Dist::_Test';
-my $ModName = TEST_CONF_MODULE;
-my $ModPrereq = TEST_CONF_INST_MODULE;
-### XXX this version doesn't exist, but we don't check for it either ###
-my $Prereq = { $ModPrereq => '1000' };
-
-### since it's in this file, not in its own module file,
-### make M::L::C think it already was loaded
-$Module::Load::Conditional::CACHE->{$Module}->{usable} = 1;
-
-
-use_ok('CPANPLUS::Dist');
-
-### start with fresh sources ###
-ok( $cb->reload_indices( update_source => 0 ),
- "Rebuilding trees" );
-
-my $Mod = $cb->module_tree( $ModName );
-ok( $Mod, "Got module object" );
-
-
-### straight forward dist build - prepare, create, install
-{ my $dist = $Module->new( module => $Mod );
-
- ok( $dist, "New dist object created" );
- isa_ok( $dist, 'CPANPLUS::Dist' );
- isa_ok( $dist, $Module );
-
- my $status = $dist->status;
- ok( $status, "Status object found" );
- isa_ok( $status, "Object::Accessor" );
-
- ok( $dist->prepare, "Prepare call" );
- ok( $dist->status->prepared," Status registered OK" );
-
- ok( $dist->create, "Create call" );
- ok( $dist->status->created, " Status registered OK" );
-
- ok( $dist->install, "Install call" );
- ok( $dist->status->installed,
- " Status registered OK" );
-}
-
-### check 'sanity check' option ###
-{ local $CPANPLUS::Dist::_Test::Available = 0;
-
- ok( !$Module->format_available,
- "Format availability turned off" );
-
- { $conf->_set_build('sanity_check' => 0);
-
- my $dist = $Module->new( module => $Mod );
-
- ok( $dist, "Dist created with sanity check off" );
- isa_ok( $dist, $Module );
-
- }
-
- { $conf->_set_build('sanity_check' => 1);
-
- my $dist = $Module->new( module => $Mod );
-
- ok( !$dist, "Dist not created with sanity check on" );
- like( CPANPLUS::Error->stack_as_string,
- qr/Format '$Module' is not available/,
- " Error recorded as expected" );
- }
-}
-
-### undef the status hash, make sure it complains ###
-{ local $CPANPLUS::Dist::_Test::Init = 0;
-
- my $dist = $Module->new( module => $Mod );
-
- ok( !$dist, "No dist created by failed init" );
- like( CPANPLUS::Error->stack_as_string,
- qr/Dist initialization of '$Module' failed for/s,
- " Error recorded as expected" );
-}
-
-### configure_requires tests
-{ my $meta = META->( $Mod );
- ok( $meta, "Reading 'configure_requires' from '$meta'" );
-
- my $clone = $Mod->clone;
- ok( $clone, " Package cloned" );
-
- ### set the new location to fetch from
- $clone->package( $meta );
-
- my $file = $clone->fetch;
- ok( $file, " Meta file fetched" );
- ok( -e $file, " File '$file' exits" );
-
- my $dist = $Module->new( module => $Mod );
-
- ok( $dist, " Dist object created" );
-
- my $meth = 'find_configure_requires';
- can_ok( $dist, $meth );
-
- my $href = $dist->$meth( file => $file );
- ok( $href, " '$meth' returned hashref" );
-
- ok( scalar(keys(%$href)), " Contains entries" );
- ok( $href->{ +TEST_CONF_PREREQ },
- " Contains the right prereq" );
-}
-
-
-### test _resolve prereqs, in a somewhat simulated set of circumstances
-{ my $old_prereq = $conf->get_conf('prereqs');
-
- my $map = {
- 0 => {
- 'Previous install failed' => [
- sub { $cb->module_tree($ModPrereq)->status->installed(0);
- 'install' },
- sub { like( CPANPLUS::Error->stack_as_string,
- qr/failed to install before in this session/s,
- " Previous install failed recorded ok" ) },
- ],
-
- "Set $Module->prepare to false" => [
- sub { $CPANPLUS::Dist::_Test::Prepare = 0; 'install' },
- sub { like( CPANPLUS::Error->stack_as_string,
- qr/Unable to create a new distribution object/s,
- " Dist creation failed recorded ok" ) },
- sub { like( CPANPLUS::Error->stack_as_string,
- qr/Failed to install '$ModPrereq' as prerequisite/s,
- " Dist creation failed recorded ok" ) },
- ],
-
- "Set $Module->create to false" => [
- sub { $CPANPLUS::Dist::_Test::Create = 0; 'install' },
- sub { like( CPANPLUS::Error->stack_as_string,
- qr/Unable to create a new distribution object/s,
- " Dist creation failed recorded ok" ) },
- sub { like( CPANPLUS::Error->stack_as_string,
- qr/Failed to install '$ModPrereq' as prerequisite/s,
- " Dist creation failed recorded ok" ) },
- ],
-
- "Set $Module->install to false" => [
- sub { $CPANPLUS::Dist::_Test::Install = 0; 'install' },
- sub { like( CPANPLUS::Error->stack_as_string,
- qr/Failed to install '$ModPrereq' as/s,
- " Dist installation failed recorded ok" ) },
- ],
-
- 'Simple ignore' => [
- sub { 'ignore' },
- sub { ok( !$_[0]->status->prepared,
- " Module status says not prepared" ) },
- sub { ok( !$_[0]->status->created,
- " Module status says not created" ) },
- sub { ok( !$_[0]->status->installed,
- " Module status says not installed" ) },
- ],
- 'Ignore from conf' => [
- sub { $conf->set_conf(prereqs => PREREQ_IGNORE); '' },
- sub { ok( !$_[0]->status->prepared,
- " Module status says not prepared" ) },
- sub { ok( !$_[0]->status->created,
- " Module status says not created" ) },
- sub { ok( !$_[0]->status->installed,
- " Module status says not installed" ) },
- ### set the conf back ###
- sub { $conf->set_conf(prereqs => PREREQ_INSTALL); },
- ],
- 'Perl binary version too low' => [
- sub { $cb->module_tree( $ModName )
- ->status->prereqs({ PERL_CORE, 10000000000 }); '' },
- sub { like( CPANPLUS::Error->stack_as_string,
- qr/needs perl version/,
- " Perl version not high enough" ) },
- ],
- },
- 1 => {
- 'Simple create' => [
- sub { 'create' },
- sub { ok( $_[0]->status->prepared,
- " Module status says prepared" ) },
- sub { ok( $_[0]->status->created,
- " Module status says created" ) },
- sub { ok( !$_[0]->status->installed,
- " Module status says not installed" ) },
- ],
- 'Simple install' => [
- sub { 'install' },
- sub { ok( $_[0]->status->prepared,
- " Module status says prepared" ) },
- sub { ok( $_[0]->status->created,
- " Module status says created" ) },
- sub { ok( $_[0]->status->installed,
- " Module status says installed" ) },
- ],
-
- "Set dependency to be perl-core" => [
- sub { $cb->module_tree( $ModPrereq )->package(
- 'perl-5.8.1.tar.gz' ); 'install' },
- sub { like( CPANPLUS::Error->stack_as_string,
- qr/Prerequisite '$ModPrereq' is perl-core/s,
- " Dist installation failed recorded ok" ) },
- ],
-
- 'Install from conf' => [
- sub { $conf->set_conf(prereqs => PREREQ_INSTALL); '' },
- sub { ok( $_[0]->status->prepared,
- " Module status says prepared" ) },
- sub { ok( $_[0]->status->created,
- " Module status says created" ) },
- sub { ok( $_[0]->status->installed,
- " Module status says installed" ) },
- ],
- 'Create from conf' => [
- sub { $conf->set_conf(prereqs => PREREQ_BUILD); '' },
- sub { ok( $_[0]->status->prepared,
- " Module status says prepared" ) },
- sub { ok( $_[0]->status->created,
- " Module status says created" ) },
- sub { ok( !$_[0]->status->installed,
- " Module status says not installed" ) },
- ### set the conf back ###
- sub { $conf->set_conf(prereqs => PREREQ_INSTALL); },
- ],
-
- 'Ask from conf' => [
- sub { $cb->_register_callback(
- name => 'install_prerequisite',
- code => sub {1} );
- $conf->set_conf(prereqs => PREREQ_ASK); '' },
- sub { ok( $_[0]->status->prepared,
- " Module status says prepared" ) },
- sub { ok( $_[0]->status->created,
- " Module status says created" ) },
- sub { ok( $_[0]->status->installed,
- " Module status says installed" ) },
- ### set the conf back ###
- sub { $conf->set_conf(prereqs => PREREQ_INSTALL); },
-
- ],
-
- 'Ask from conf, but decline' => [
- sub { $cb->_register_callback(
- name => 'install_prerequisite',
- code => sub {0} );
- $conf->set_conf( prereqs => PREREQ_ASK); '' },
- sub { ok( !$_[0]->status->installed,
- " Module status says not installed" ) },
- sub { like( CPANPLUS::Error->stack_as_string,
- qr/Will not install prerequisite '$ModPrereq' -- Note/,
- " Install skipped, recorded ok" ) },
- ### set the conf back ###
- sub { $conf->set_conf(prereqs => PREREQ_INSTALL); },
- ],
-
- "Set recursive dependency" => [
- sub { $cb->_status->pending_prereqs({ $ModPrereq => 1 });
- 'install' },
- sub { like( CPANPLUS::Error->stack_as_string,
- qr/Recursive dependency detected/,
- " Recursive dependency recorded ok" ) },
- ],
- 'Perl binary version sufficient' => [
- sub { $cb->module_tree( $ModName )
- ->status->prereqs({ PERL_CORE, 1 }); '' },
- sub { unlike( CPANPLUS::Error->stack_as_string,
- qr/needs perl version/,
- " Perl version sufficient" ) },
- ],
- },
- };
-
- for my $bool ( sort keys %$map ) {
-
- diag("Running ". ($bool?'success':'fail') . " tests") if @ARGV;
-
- my $href = $map->{$bool};
- while ( my($txt,$aref) = each %$href ) {
-
- ### reset everything ###
- ok( $cb->reload_indices( update_source => 0 ),
- "Rebuilding trees" );
-
- $CPANPLUS::Dist::_Test::Available = 1;
- $CPANPLUS::Dist::_Test::Prepare = 1;
- $CPANPLUS::Dist::_Test::Create = 1;
- $CPANPLUS::Dist::_Test::Install = 1;
-
- CPANPLUS::Error->flush;
- $cb->_status->mk_flush;
-
- ### get a new dist from Text::Bastardize ###
- my $mod = $cb->module_tree( $ModName );
- my $dist = $Module->new( module => $mod );
-
- ### first sub returns target ###
- my $sub = shift @$aref;
- my $target = $sub->();
-
- my $flag = $dist->_resolve_prereqs(
- format => $Module,
- force => 1,
- target => $target,
- prereqs => ($mod->status->prereqs || $Prereq) );
-
- is( !!$flag, !!$bool, $txt );
-
- ### any extra tests ###
- $_->($cb->module_tree($ModPrereq)) for @$aref;
-
- }
- }
-}
-
-
-### prereq satisfied tests
-{ my $map = {
- # version regex
- 0 => undef,
- 1 => undef,
- 2 => qr/have to resolve/,
- };
-
- my $mod = CPANPLUS::Module::Fake->new(
- module => $$,
- package => $$,
- path => $$,
- version => 1 );
-
- ok( $mod, "Fake module created" );
- is( $mod->version, 1, " Version set correctly" );
-
- my $dist = $Module->new( module => $Mod );
-
- ok( $dist, "Dist object created" );
- isa_ok( $dist, $Module );
-
-
- ### scope it for the locals
- { local $^W; # quell sub redefined warnings;
-
- ### is_uptodate will need to return false for this test
- local *CPANPLUS::Module::Fake::is_uptodate = sub { return };
- local *CPANPLUS::Module::Fake::is_uptodate = sub { return };
- CPANPLUS::Error->flush;
-
-
- ### it's satisfied
- while( my($ver, $re) = each %$map ) {
-
- my $rv = $dist->prereq_satisfied(
- version => $ver,
- modobj => $mod );
-
- ok( 1, "Testing ver: $ver" );
- is( $rv, undef, " Return value as expected" );
-
- if( $re ) {
- like( CPANPLUS::Error->stack_as_string, $re,
- " Error as expected" );
- }
-
- CPANPLUS::Error->flush;
- }
- }
-}
-
-
-### dist_types tests
-{ can_ok( 'CPANPLUS::Dist', 'dist_types' );
-
- SKIP: {
- skip "You do not have Module::Pluggable installed", 2
- unless check_install( module => 'Module::Pluggable' );
-
- my @types = CPANPLUS::Dist->dist_types;
- ok( scalar(@types), " Dist types found" );
- ok( grep( /_Test/, @types), " Found our _Test dist type" );
- }
-}
-1;
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/t/20_CPANPLUS-Dist-MM.t b/cpan/CPANPLUS/t/20_CPANPLUS-Dist-MM.t
deleted file mode 100644
index 5bba137159..0000000000
--- a/cpan/CPANPLUS/t/20_CPANPLUS-Dist-MM.t
+++ /dev/null
@@ -1,430 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use strict;
-
-use CPANPLUS::Configure;
-use CPANPLUS::Backend;
-use CPANPLUS::Dist;
-use CPANPLUS::Dist::MM;
-use CPANPLUS::Internals::Constants;
-
-use Test::More 'no_plan';
-use Cwd;
-use Config;
-use Data::Dumper;
-use File::Basename ();
-use File::Spec ();
-
-my $conf = gimme_conf();
-my $cb = CPANPLUS::Backend->new( $conf );
-my $File = 'Bar.pm';
-
-### if we need sudo that's no guarantee we can actually run it
-### so set $noperms if sudo is required, as that may mean tests
-### fail if you're not allowed to execute sudo. This resolves
-### #29904: make test should not use sudo
-my $noperms = $conf->get_program('sudo') || #you need sudo
- $conf->get_conf('makemakerflags') || #you set some funky flags
- not -w $Config{installsitelib}; #cant write to install target
-
-#$IPC::Cmd::DEBUG = $Verbose;
-
-### Make sure we get the _EUMM_NOXS_ version
-my $ModName = TEST_CONF_MODULE;
-
-### This is the module name that gets /installed/
-my $InstName = TEST_CONF_INST_MODULE;
-
-### don't start sending test reports now... ###
-$cb->_callbacks->send_test_report( sub { 0 } );
-$conf->set_conf( cpantest => 0 );
-
-### Redirect errors to file ###
-*STDERR = output_handle() unless $conf->get_conf('verbose');
-
-### dont uncomment this, it screws up where STDOUT goes and makes
-### test::harness create test counter mismatches
-#*STDOUT = output_handle() unless @ARGV;
-### for the same test-output counter mismatch, we disable verbose
-### mode
-$conf->set_conf( allow_build_interactivity => 0 );
-
-### start with fresh sources ###
-ok( $cb->reload_indices( update_source => 0 ),
- "Rebuilding trees" );
-
-### we might need this Some Day when we're going to install into
-### our own sandbox dir.. but for now, no dice due to EU::I bug
-# $conf->set_program( sudo => '' );
-# $conf->set_conf( makemakerflags => TEST_INSTALL_EU_MM_FLAGS );
-
-### set alternate install dir ###
-### XXX rather pointless, since we can't uninstall them, due to a bug
-### in EU::Installed (6871). And therefor we can't test uninstall() or any of
-### the EU::Installed functions. So, let's just install into sitelib... =/
-#my $prefix = File::Spec->rel2abs( File::Spec->catdir(cwd(),'dummy-perl') );
-#my $rv = $cb->configure_object->set_conf( makemakerflags => "PREFIX=$prefix" );
-#ok( $rv, "Alternate install path set" );
-
-my $Mod = $cb->module_tree( $ModName );
-my $InstMod = $cb->module_tree( $InstName );
-ok( $Mod, "Loaded object for: " . $Mod->name );
-ok( $Mod, "Loaded object for: " . $InstMod->name );
-
-### format_available tests ###
-{ ok( CPANPLUS::Dist::MM->format_available,
- "Format is available" );
-
- ### whitebox test!
- { local $^W;
- local *CPANPLUS::Dist::MM::can_load = sub { 0 };
- ok(!CPANPLUS::Dist::MM->format_available,
- " Making format unavailable" );
- }
-
- ### test if the error got logged ok ###
- like( CPANPLUS::Error->stack_as_string,
- qr/You do not have .+?'CPANPLUS::Dist::MM' not available/s,
- " Format failure logged" );
-
- ### flush the stack ###
- CPANPLUS::Error->flush;
-}
-
-ok( $Mod->fetch, "Fetching module to ".$Mod->status->fetch );
-ok( $Mod->extract, "Extracting module to ".$Mod->status->extract );
-
-### test target => 'init'
-{ my $dist = $Mod->dist( target => TARGET_INIT );
- ok( $dist, "Dist created with target => " . TARGET_INIT );
- ok( !$dist->status->prepared,
- " Prepare was not run" );
-}
-
-ok( $Mod->test, "Testing module" );
-
-ok( $Mod->status->dist_cpan->status->test,
- " Test success registered as status" );
-ok( $Mod->status->dist_cpan->status->prepared,
- " Prepared status registered" );
-ok( $Mod->status->dist_cpan->status->created,
- " Created status registered" );
-is( $Mod->status->dist_cpan->status->distdir, $Mod->status->extract,
- " Distdir status registered properly" );
-
-### test the convenience methods
-ok( $Mod->prepare, "Preparing module" );
-ok( $Mod->create, "Creating module" );
-
-ok( $Mod->dist, "Building distribution" );
-ok( $Mod->status->dist_cpan, " Dist registered as status" );
-isa_ok( $Mod->status->dist_cpan, "CPANPLUS::Dist::MM" );
-
-### flush the lib cache
-### otherwise, cpanplus thinks the module's already installed
-### since the blib is already in @INC
-$cb->_flush( list => [qw|lib|] );
-
-SKIP: {
-
- skip(q[No install tests under core perl], 10) if $ENV{PERL_CORE};
- skip(q[Possibly no permission to install, skipping], 10) if $noperms;
-
- ### we now say 'no perms' if sudo is configured, as per #29904
- #diag(q[Note: 'sudo' might ask for your password to do the install test])
- # if $conf->get_program('sudo');
-
- ### make sure no options are set in PERL5_MM_OPT, as they might
- ### change the installation target and therefor will 1. mess up
- ### the tests and 2. leave an installed copy of our test module
- ### lying around. This addresses bug #29716: 20_CPANPLUS-Dist-MM.t
- ### fails (and leaves test files installed) when EUMM options
- ### include INSTALL_BASE
- { local $ENV{'PERL5_MM_OPT'}; local $ENV{'PERL_MM_OPT'};
-
- ### add the new dir to the configuration too, so eu::installed tests
- ### work as they should
- $conf->set_conf( lib => [ TEST_CONF_INSTALL_DIR ] );
-
- ok( $Mod->install( force => 1,
- makemakerflags => 'PREFIX='.TEST_CONF_INSTALL_DIR,
- ), "Installing module" );
- }
-
- ok( $Mod->status->installed," Module installed according to status" );
-
-
- SKIP: { ### EU::Installed tests ###
- ### EU::I sometimes fails. See:
- ### #43292: ~/CPANPLUS-0.85_04 fails t/20_CPANPLUS-Dist-MM.t
- ### #46890: ExtUtils::Installed + EU::MM PREFIX= don't always work
- ### well together
- skip( "ExtUtils::Installed issue #46890 prevents these tests from running reliably", 8 );
-
-
- skip( "Old perl on cygwin detected " .
- "-- tests will fail due to known bugs", 8
- ) if ON_OLD_CYGWIN;
-
- ### might need it Later when EU::I is fixed..
- #local @INC = ( TEST_INSTALL_DIR_LIB, @INC );
-
- { ### validate
- my @missing = $InstMod->validate;
-
- is_deeply( \@missing, [],
- "No missing files" );
- }
-
- { ### files
- my @files = $InstMod->files;
-
- ### number of files may vary from OS to OS
- ok( scalar(@files), "All files accounted for" );
- ok( grep( /$File/, @files),
- " Found the module" );
-
- ### XXX does this work on all OSs?
- #ok( grep( /man/, @files ),
- # " Found the manpage" );
- }
-
- { ### packlist
- my ($obj) = $InstMod->packlist;
- isa_ok( $obj, "ExtUtils::Packlist" );
- }
-
- { ### directory_tree
- my @dirs = $InstMod->directory_tree;
- ok( scalar(@dirs), "Directory tree obtained" );
-
- my $found;
- for my $dir (@dirs) {
- ok( -d $dir, " Directory exists" );
-
- my $file = File::Spec->catfile( $dir, $File );
- $found = $file if -e $file;
- }
-
- ok( -e $found, " Module found" );
- }
-
- SKIP: {
- skip("Probably no permissions to uninstall", 1)
- if $noperms;
-
- ok( $InstMod->uninstall,"Uninstalling module" );
- }
- }
-}
-
-### test exceptions in Dist::MM->create ###
-{ ok( $Mod->status->mk_flush, "Old status info flushed" );
- my $dist = INSTALLER_MM->new( module => $Mod );
-
- ok( $dist, "New dist object made" );
- ok(!$dist->prepare, " Dist->prepare failed" );
- like( CPANPLUS::Error->stack_as_string, qr/No dir found to operate on/,
- " Failure logged" );
-
- ### manually set the extract dir,
- $Mod->status->extract($0);
-
- ok(!$dist->create, " Dist->create failed" );
- like( CPANPLUS::Error->stack_as_string, qr/not successfully prepared/s,
- " Failure logged" );
-
- ### pretend we've been prepared ###
- $dist->status->prepared(1);
-
- ok(!$dist->create, " Dist->create failed" );
- like( CPANPLUS::Error->stack_as_string, qr/Could not chdir/s,
- " Failure logged" );
-}
-
-### writemakefile.pl tests ###
-{ ### remove old status info
- ok( $Mod->status->mk_flush, "Old status info flushed" );
- ok( $Mod->fetch, "Module fetched again" );
- ok( $Mod->extract, "Module extracted again" );
-
- ### cheat and add fake prereqs ###
- my $prereq = TEST_CONF_PREREQ;
-
- $Mod->status->prereqs( { $prereq => 0 } );
-
- my $makefile_pl = MAKEFILE_PL->( $Mod->status->extract );
- my $makefile = MAKEFILE->( $Mod->status->extract );
-
- my $dist = $Mod->dist;
- ok( $dist, "Dist object built" );
-
- ### check for a makefile.pl and 'write' one
- ok( -s $makefile_pl, " Makefile.PL present" );
- ok( $dist->write_makefile_pl( force => 0 ),
- " Makefile.PL written" );
- like( CPANPLUS::Error->stack_as_string, qr/Already created/,
- " Prior existence noted" );
-
- ### ok, unlink the makefile.pl, now really write one
- 1 while unlink $makefile;
-
- ### must do '1 while' for VMS
- { my $unlink_sts = unlink($makefile_pl);
- 1 while unlink $makefile_pl;
- ok( $unlink_sts, "Deleting Makefile.PL");
- }
-
- ok( !-s $makefile_pl, " Makefile.PL deleted" );
- ok( !-s $makefile, " Makefile deleted" );
- ok($dist->write_makefile_pl," Makefile.PL written" );
-
- ### see if we wrote anything sensible
- my $fh = OPEN_FILE->( $makefile_pl );
- ok( $fh, "Makefile.PL open for read" );
-
- my $str = do { local $/; <$fh> };
- like( $str, qr/### Auto-generated .+ by CPANPLUS ###/,
- " Autogeneration noted" );
- like( $str, '/'. $Mod->module .'/',
- " Contains module name" );
- like( $str, '/'. quotemeta($Mod->version) . '/',
- " Contains version" );
- like( $str, '/'. $Mod->author->author .'/',
- " Contains author" );
- like( $str, '/PREREQ_PM/', " Contains prereqs" );
- like( $str, qr/$prereq.+0/, " Contains prereqs" );
-
- close $fh;
-
- ### seems ok, now delete it again and go via install()
- ### to see if it picks up on the missing makefile.pl and
- ### does the right thing
- ### must do '1 while' for VMS
- { my $unlink_sts = unlink($makefile_pl);
- 1 while unlink $makefile_pl;
- ok( $unlink_sts, "Deleting Makefile.PL");
- }
- ok( !-s $makefile_pl, " Makefile.PL deleted" );
- ok( $dist->status->mk_flush,"Dist status flushed" );
- ok( $dist->prepare, " Dist->prepare run again" );
- ok( $dist->create, " Dist->create run again" );
- ok( -s $makefile_pl, " Makefile.PL present" );
- like( CPANPLUS::Error->stack_as_string,
- qr/attempting to generate one/,
- " Makefile.PL generation attempt logged" );
-
- ### now let's throw away the makefile.pl, flush the status and not
- ### write a makefile.pl
- { local $^W;
- local *CPANPLUS::Dist::MM::write_makefile_pl = sub { 1 };
-
- 1 while unlink $makefile_pl;
- 1 while unlink $makefile;
-
- ok(!-s $makefile_pl, "Makefile.PL deleted" );
- ok(!-s $makefile, "Makefile deleted" );
- ok( $dist->status->mk_flush,"Dist status flushed" );
- ok(!$dist->prepare, " Dist->prepare failed" );
- like( CPANPLUS::Error->stack_as_string,
- qr/Could not find 'Makefile.PL'/i,
- " Missing Makefile.PL noted" );
- is( $dist->status->makefile, 0,
- " Did not manage to create Makefile" );
- }
-
- ### now let's write a makefile.pl that just does 'die'
- { local $^W;
- local *CPANPLUS::Dist::MM::write_makefile_pl =
- __PACKAGE__->_custom_makefile_pl_sub( "exit 1;" );
-
- ### there's no makefile.pl now, since the previous test failed
- ### to create one
- #ok( -e $makefile_pl, "Makefile.PL exists" );
- #ok( unlink($makefile_pl), " Deleting Makefile.PL");
- ok(!-s $makefile_pl, "Makefile.PL deleted" );
- ok( $dist->status->mk_flush,"Dist status flushed" );
- ok(!$dist->prepare, " Dist->prepare failed" );
- like( CPANPLUS::Error->stack_as_string, qr/Could not run/s,
- " Logged failed 'perl Makefile.PL'" );
- is( $dist->status->makefile, 0,
- " Did not manage to create Makefile" );
- }
-
- ### clean up afterwards ###
- ### must do '1 while' for VMS
- { my $unlink_sts = unlink($makefile_pl);
- 1 while unlink $makefile_pl;
- ok( $unlink_sts, "Deleting Makefile.PL");
- }
-
- $dist->status->mk_flush;
-}
-
-### test ENV setting in Makefile.PL
-{ ### use print() not die() -- we're redirecting STDERR in tests!
- my $env = ENV_CPANPLUS_IS_EXECUTING;
- my $sub = __PACKAGE__->_custom_makefile_pl_sub(
- "print qq[ENV=\$ENV{$env}\n]; exit 1;" );
-
- my $clone = $Mod->clone;
- $clone->status->fetch( $Mod->status->fetch );
-
- ok( $clone, 'Testing ENV settings $dist->prepare' );
- ok( $clone->extract, ' Files extracted' );
- ok( $clone->prepare, ' $mod->prepare worked first time' );
-
- my $dist = $clone->status->dist;
- my $makefile_pl = MAKEFILE_PL->( $clone->status->extract );
-
- ok( $sub->($dist), " Custom Makefile.PL written" );
- ok( -e $makefile_pl, " File exists" );
-
- ### clear errors
- CPANPLUS::Error->flush;
-
- my $rv = $dist->prepare( force => 1, verbose => 0 );
- ok( !$rv, ' $dist->prepare failed' );
-
- SKIP: {
- skip( "Can't test ENV{$env} -- no buffers available", 1 )
- unless IPC::Cmd->can_capture_buffer;
-
- my $re = quotemeta( $makefile_pl );
- like( CPANPLUS::Error->stack_as_string, qr/ENV=$re/,
- " \$ENV $env set correctly during execution");
- }
-
- ### and the ENV var should no longer be set now
- ok( !$ENV{$env}, " ENV var now unset" );
-}
-
-sub _custom_makefile_pl_sub {
- my $pkg = shift;
- my $txt = shift or return;
-
- return sub {
- my $dist = shift;
- my $self = $dist->parent;
- my $fh = OPEN_FILE->(
- MAKEFILE_PL->($self->status->extract), '>' );
- print $fh $txt;
- close $fh;
-
- return 1;
- }
-}
-
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
-
-
diff --git a/cpan/CPANPLUS/t/21_CPANPLUS-Dist-No-Build.t b/cpan/CPANPLUS/t/21_CPANPLUS-Dist-No-Build.t
deleted file mode 100644
index 10a2745d80..0000000000
--- a/cpan/CPANPLUS/t/21_CPANPLUS-Dist-No-Build.t
+++ /dev/null
@@ -1,119 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use strict;
-use Test::More 'no_plan';
-use Module::Loaded;
-use Object::Accessor;
-
-use CPANPLUS::Dist;
-use CPANPLUS::Backend;
-use CPANPLUS::Error;
-use CPANPLUS::Internals::Constants;
-
-my $Conf = gimme_conf();
-my $CB = CPANPLUS::Backend->new( $Conf );
-my $Inst = INSTALLER_BUILD;
-
-### set the config so that we will ignore the build installer,
-### but prefer it anyway
-{ Module::Loaded::mark_as_loaded( $Inst );
- CPANPLUS::Dist->_ignore_dist_types( $Inst );
- $Conf->set_conf( prefer_makefile => 0 );
-}
-
-my $Mod = $CB->module_tree( 'Foo::Bar::MB::NOXS' );
-
-ok( $Mod, "Module object retrieved" );
-ok( not grep { $_ eq $Inst } CPANPLUS::Dist->dist_types,
- " $Inst installer not returned" );
-
-### fetch the file first
-{ my $where = $Mod->fetch;
- ok( -e $where, " Tarball '$where' exists" );
-}
-
-### extract it, silence warnings/messages
-{ my $where = $Mod->extract;
- ok( -e $where, " Tarball extracted to '$where'" );
-}
-
-### check the installer type
-{ is( $Mod->status->installer_type, $Inst,
- "Proper installer type found: $Inst" );
-
- my $href = $Mod->status->configure_requires;
- ok( scalar(keys(%$href)), " Dependencies recorded" );
-
- ok( defined $href->{$Inst}, " Dependency on $Inst" );
- cmp_ok( $href->{$Inst}, '>', 0,
- " Minimum version: $href->{$Inst}" );
-
- my $err = CPANPLUS::Error->stack_as_string;
- like( $err, qr/$Inst/, " Message mentions $Inst" );
- like( $err, qr/prerequisites list/,
- " Message mentions adding prerequisites" );
-}
-
-### now run the test, it should trigger the installation of the installer
-### XXX whitebox test
-{ no warnings 'redefine';
-
- ### bootstrapping creates a call to $cb->module_tree('c::d::build')->install
- ### we need to intercept that call
- my $org_mt = CPANPLUS::Backend->can('module_tree');
- local *CPANPLUS::Backend::module_tree = sub {
- my $self = shift;
- my $mod = shift;
-
- ### return a dummy object if this is the bootstrap call
- return CPANPLUS::Test::Module->new if $mod eq $Inst;
-
- ### otherwise do a regular call
- return $org_mt->( $self, $mod, @_ );
- };
-
- ### bootstrap install call will abort the ->create() call, so catch
- ### that here
- eval { $Mod->create( skiptest => 1) };
-
- ok( $@, "Create call aborted at bootstrap phase" );
- like( $@, qr/$Inst/, " Diagnostics confirmed" );
-
- my $diag = CPANPLUS::Error->stack_as_string;
- like( $diag, qr/This module requires.*$Inst/,
- " Dependency on $Inst recorded" );
- like( $diag, qr/Bootstrapping installer.*$Inst/,
- " Bootstrap notice recorded" );
- like( $diag, qr/Installer '$Inst' successfully bootstrapped/,
- " Successful bootstrap recorded" );
-}
-
-END { 1 while unlink output_file() }
-
-### place holder package to serve as a module object for C::D::Build
-{ package CPANPLUS::Test::Module;
- sub new { return bless {} }
- sub install {
- ### at load time we ignored C::D::Build. Reset the ignore here
- ### so a 'rescan' after the 'install' picks up C::D::Build
- CPANPLUS::Dist->_reset_dist_ignore;
- return 1;
- }
-}
-
-### test package for cpanplus::dist::build
-{ package CPANPLUS::Dist::Build;
- use base 'CPANPLUS::Dist::Base';
-
- ### shortcut out of the installation procedure
- sub new { die __PACKAGE__ };
- sub format_available { 1 }
- sub init { 1 }
- sub prepare { 1 }
- sub create { 1 }
- sub install { 1 }
-}
diff --git a/cpan/CPANPLUS/t/25_CPANPLUS.t b/cpan/CPANPLUS/t/25_CPANPLUS.t
deleted file mode 100644
index b6723d35c6..0000000000
--- a/cpan/CPANPLUS/t/25_CPANPLUS.t
+++ /dev/null
@@ -1,90 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use strict;
-use Test::More 'no_plan';
-use CPANPLUS::Error;
-use CPANPLUS::Backend;
-
-my $Class = 'CPANPLUS';
-my $ModName = TEST_CONF_MODULE;
-my $Conf = gimme_conf();
-my $CB = CPANPLUS::Backend->new( $Conf );
-
-### so we get an object with *our* configuration
-no warnings 'redefine';
-local *CPANPLUS::Backend::new = sub { $CB };
-
-use_ok( $Class );
-
-### install / get / fetch tests
-for my $meth ( qw[fetch get install] ) {
- my $sub = $Class->can( $meth );
- ok( $sub, "$Class->can( $meth )" );
-
- my %map = (
- 0 => qr/failed/,
- 1 => qr/successful/,
- );
-
- ok( 1, "Trying '$meth' in different configurations" );
-
- while( my($rv, $re) = each %map ) {
-
- ### don't actually install, just test logic
- no warnings 'redefine';
- local *CPANPLUS::Module::install = sub { $rv };
- local *CPANPLUS::Module::fetch = sub { $rv };
-
- CPANPLUS::Error->flush;
-
- my $ok = $sub->( $ModName );
- is( $ok, $rv, " Expected RV: $rv" );
- like( CPANPLUS::Error->stack_as_string, $re,
- " With expected diagnostic" );
- }
-
- ### does not take objects / references
- { CPANPLUS::Error->flush;
-
- my $ok = $sub->( [] );
- ok( !$ok, "'$meth' with reference does not work" );
- like( CPANPLUS::Error->stack_as_string, qr/object/,
- " Error as expected");
- }
-
- ### requires argument
- { CPANPLUS::Error->flush;
-
- my $ok = $sub->( );
- ok( !$ok, "'$meth' without argument does not work" );
- like( CPANPLUS::Error->stack_as_string, qr/No module specified/,
- " Error as expected");
- }
-}
-
-### shell tests
-{ my $meth = 'shell';
- my $sub = $Class->can( $meth );
-
- ok( $sub, "$Class->can( $meth )" );
-
- { ### test package for shell() method
- package CPANPLUS::Shell::Test;
-
- ### ->shell() looks in %INC
- use Module::Loaded qw[mark_as_loaded];
- mark_as_loaded( __PACKAGE__ );
-
- sub new { bless {}, __PACKAGE__ };
- sub shell { $$ };
- }
-
- my $rv = $sub->( 'Test' );
- ok( $rv, " Shell started" );
- is( $rv, $$, " Proper shell called" );
-}
-
diff --git a/cpan/CPANPLUS/t/30_CPANPLUS-Internals-Selfupdate.t b/cpan/CPANPLUS/t/30_CPANPLUS-Internals-Selfupdate.t
deleted file mode 100644
index 6347daa21c..0000000000
--- a/cpan/CPANPLUS/t/30_CPANPLUS-Internals-Selfupdate.t
+++ /dev/null
@@ -1,181 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use strict;
-
-use CPANPLUS::Backend;
-use CPANPLUS::Internals::Constants;
-use Test::More 'no_plan';
-use Data::Dumper;
-
-my $conf = gimme_conf();
-$conf->set_conf( verbose => 0 );
-
-my $Class = 'CPANPLUS::Selfupdate';
-my $ModClass = "CPANPLUS::Selfupdate::Module";
-my $CB = CPANPLUS::Backend->new( $conf );
-my $Acc = 'selfupdate_object';
-my $Conf = $Class->_get_config;
-my $Dep = TEST_CONF_PREREQ; # has to be in our package file && core!
-my $Feat = 'some_feature';
-my $Prereq = { $Dep => 0 };
-
-### test the object
-{ ok( $CB, "New backend object created" );
- can_ok( $CB, $Acc );
-
- ok( $Conf, "Got configuration hash" );
-
- my $su = $CB->$Acc;
- ok( $su, "Selfupdate object retrieved" );
- isa_ok( $su, $Class );
-}
-
-
-### check specifically if our bundled shells dont trigger a
-### dependency (see #26077).
-### do this _before_ changing the built in conf!
-{ my $meth = 'modules_for_feature';
- my $type = 'shell';
- my $cobj = $CB->configure_object;
- my $cur = $cobj->get_conf( $type );
-
- for my $shell ( SHELL_DEFAULT, SHELL_CLASSIC ) {
- ok( $cobj->set_conf( $type => $shell ),
- "Testing dependencies for '$shell'" );
-
- my $rv = $CB->$Acc->$meth( $type => 1);
- ok( !$rv, " No dependencies for '$shell' -- bundled" );
- }
-
- for my $shell ( 'CPANPLUS::Test::Shell' ) {
- ok( $cobj->set_conf( $type => $shell ),
- "Testing dependencies for '$shell'" );
-
- my $rv = $CB->$Acc->$meth( $type => 1 );
- ok( $rv, " Got prereq hash" );
- isa_ok( $rv, 'HASH',
- " Return value" );
- is_deeply( $rv, { $shell => '0.0' },
- " With the proper entries" );
- }
-}
-
-### test the feature list
-{ ### start with defining our OWN type of config, as not all mentioned
- ### modules will be present in our bundled package files.
- ### XXX WHITEBOX TEST!!!!
- { delete $Conf->{$_} for keys %$Conf;
- $Conf->{'dependencies'} = $Prereq;
- $Conf->{'core'} = $Prereq;
- $Conf->{'features'}->{$Feat} = [ $Prereq, sub { 1 } ];
- }
-
- is_deeply( $Conf, $Class->_get_config,
- "Config updated successfully" );
-
- my @cat = $CB->$Acc->list_categories;
- ok( scalar(@cat), "Category list returned" );
-
- my @feat = $CB->$Acc->list_features;
- ok( scalar(@feat), "Features list returned" );
-
- ### test if we get modules for each feature
- for my $feat (@feat) {
- my $meth = 'modules_for_feature';
- my @mods = $CB->$Acc->$meth( $feat );
-
- ok( $feat, "Testing feature '$feat'" );
- ok( scalar( @mods ), " Module list returned" );
-
- my $acc = 'is_installed_version_sufficient';
- for my $mod (@mods) {
- isa_ok( $mod, "CPANPLUS::Module" );
- isa_ok( $mod, $ModClass );
- can_ok( $mod, $acc );
- ok( $mod->$acc, " Module uptodate" );
- }
-
- ### check if we can get a hashref
- { my $href = $CB->$Acc->$meth( $feat, 1 );
- ok( $href, "Got result as hash" );
- isa_ok( $href, 'HASH' );
- is_deeply( $href, $Prereq,
- " With the proper entries" );
-
- }
- }
-
- ### see if we can get a list of modules to be updated
- { my $cat = 'core';
- my $meth = 'list_modules_to_update';
-
- ### XXX just test the mechanics, make sure is_uptodate
- ### returns false
- ### declare twice because warnings are hateful
- ### declare in a block to quelch 'sub redefined' warnings.
- { local *CPANPLUS::Selfupdate::Module::is_uptodate = sub { return }; }
- local *CPANPLUS::Selfupdate::Module::is_uptodate = sub { return };
-
- my %list = $CB->$Acc->$meth( update => $cat, latest => 1 );
-
- cmp_ok( scalar(keys(%list)), '==', 1,
- "Got modules for '$cat' from '$meth'" );
-
- my $aref = $list{$cat};
- ok( $aref, " Got module list" );
- cmp_ok( scalar(@$aref), '==', 1,
- " With right amount of modules" );
- isa_ok( $aref->[0], $ModClass );
- is( $aref->[0]->name, $Dep,
- " With the right name ($Dep)" );
- }
-
- ### find enabled features
- { my $meth = 'list_enabled_features';
- can_ok( $Class, $meth );
-
- my @list = $CB->$Acc->$meth;
- ok( scalar(@list), "Retrieved enabled features" );
- is_deeply( [$Feat], \@list,
- " Proper features found" );
- }
-
- ### find dependencies/core modules
- for my $meth ( qw[list_core_dependencies list_core_modules] ) {
- can_ok( $Class, $meth );
-
- my @list = $CB->$Acc->$meth;
- ok( scalar(@list), "Retrieved modules" );
- is( scalar(@list), 1, " 1 Found" );
- isa_ok( $list[0], $ModClass );
- is( $list[0]->name, $Dep,
- " Correct module found" );
-
- ### check if we can get a hashref
- { my $href = $CB->$Acc->$meth( 1 );
- ok( $href, "Got result as hash" );
- isa_ok( $href, 'HASH' );
- is_deeply( $href, $Prereq,
- " With the proper entries" );
- }
- }
-
-
- ### now selfupdate ourselves
- { ### XXX just test the mechanics, make sure install returns true
- ### declare twice because warnings are hateful
- ### declare in a block to quelch 'sub redefined' warnings.
- { local *CPANPLUS::Selfupdate::Module::install = sub { 1 }; }
- local *CPANPLUS::Selfupdate::Module::install = sub { 1 };
-
- my $meth = 'selfupdate';
- can_ok( $Class, $meth );
- ok( $CB->$Acc->$meth( update => 'all'),
- " Selfupdate successful" );
- }
-}
-
diff --git a/cpan/CPANPLUS/t/40_CPANPLUS-Internals-Report.t b/cpan/CPANPLUS/t/40_CPANPLUS-Internals-Report.t
deleted file mode 100644
index a8823351d1..0000000000
--- a/cpan/CPANPLUS/t/40_CPANPLUS-Internals-Report.t
+++ /dev/null
@@ -1,503 +0,0 @@
-### make sure we can find our conf.pl file
-BEGIN {
- use FindBin;
- require "$FindBin::Bin/inc/conf.pl";
-}
-
-use strict;
-use CPANPLUS::Backend;
-use CPANPLUS::Internals::Constants::Report;
-
-my $send_tests = 55;
-my $query_tests = 8;
-my $total_tests = $send_tests + $query_tests;
-
-use Test::More 'no_plan';
-use Module::Load::Conditional qw[can_load];
-
-use FileHandle;
-use Data::Dumper;
-
-use constant NOBODY => 'nobody@xs4all.nl';
-
-my $conf = gimme_conf();
-my $CB = CPANPLUS::Backend->new( $conf );
-my $ModName = TEST_CONF_MODULE;
-my $ModPrereq = TEST_CONF_PREREQ;
-
-### pick a high number, but not ~0 as possibly ~0 is unsigned, and we cause
-### an overflow, as happens to version.pm 0.7203 among others.
-### ANOTHER bug in version.pm, this time for 64bit:
-### https://rt.cpan.org/Ticket/Display.html?id=45241
-### so just use a 'big number'(tm) and go from there.
-my $HighVersion = 1234567890;
-my $Mod = $CB->module_tree($ModName);
-my $int_ver = $CPANPLUS::Internals::VERSION;
-
-### explicitly enable testing if possible ###
-$CB->configure_object->set_conf(cpantest =>1) if $ARGV[0];
-
-my $map = {
- all_ok => {
- buffer => '', # output from build process
- failed => 0, # indicate failure
- match => [qw|/PASS/|], # list of regexes for the output
- check => 0, # check if callbacks got called?
- },
- skipped_test => {
- buffer => '',
- failed => 0,
- match => ['/PASS/',
- '/tests for this module were skipped during this build/',
- ],
- check => 0,
- skiptests
- => 1, # did we skip the tests?
- },
- missing_prereq => {
- buffer => missing_prereq_buffer(),
- failed => 1,
- match => ['/The comments above are created mechanically/',
- '/computer-generated error report/',
- '/Below is the error stack from stage/',
- '/test suite seem to fail without these modules/',
- '/floo/',
- '/FAIL/',
- '/make test/',
- ],
- check => 1,
- },
- missing_tests => {
- buffer => missing_tests_buffer(),
- failed => 1,
- match => ['/The comments above are created mechanically/',
- '/computer-generated error report/',
- '/Below is the error stack from stage/',
- '/RECOMMENDATIONS/',
- '/UNKNOWN/',
- '/make test/',
- ],
- check => 0,
- },
- perl_version_too_low_mm => {
- buffer => perl_version_too_low_buffer_mm(),
- failed => 1,
- match => ['/This distribution has been tested/',
- '/http://testers.cpan.org/',
- '/NA/',
- ],
- check => 0,
- },
- perl_version_too_low_build1 => {
- buffer => perl_version_too_low_buffer_build(1),
- failed => 1,
- match => ['/This distribution has been tested/',
- '/http://testers.cpan.org/',
- '/NA/',
- ],
- check => 0,
- },
- perl_version_too_low_build2 => {
- buffer => perl_version_too_low_buffer_build(2),
- failed => 1,
- match => ['/This distribution has been tested/',
- '/http://testers.cpan.org/',
- '/NA/',
- ],
- check => 0,
- },
- prereq_versions_too_low => {
- ### set the prereq version incredibly high
- pre_hook => sub {
- my $mod = shift;
- my $clone = $mod->clone;
- $clone->status->prereqs({ $ModPrereq => $HighVersion });
- return $clone;
- },
- failed => 1,
- match => ['/This distribution has been tested/',
- '/http://testers.cpan.org/',
- '/NA/',
- ],
- check => 0,
- },
- prereq_not_on_cpan => {
- pre_hook => sub {
- my $mod = shift;
- my $clone = $mod->clone;
- $clone->status->prereqs(
- { TEST_CONF_INVALID_MODULE, 0 }
- );
- return $clone;
- },
- failed => 1,
- match => ['/This distribution has been tested/',
- '/http://testers.cpan.org/',
- '/NA/',
- ],
- check => 0,
- },
- prereq_not_on_cpan_but_core => {
- pre_hook => sub {
- my $mod = shift;
- my $clone = $mod->clone;
- $clone->status->prereqs(
- { TEST_CONF_PREREQ, 0 }
- );
- return $clone;
- },
- failed => 1,
- match => ['/This distribution has been tested/',
- '/http://testers.cpan.org/',
- '/UNKNOWN/',
- ],
- check => 0,
- },
-};
-
-### test config settings
-{ for my $opt ( qw[cpantest cpantest_mx] ) {
- my $warnings;
- local $SIG{__WARN__} = sub { $warnings .= "@_" };
-
- my $org = $conf->get_conf( $opt );
- ok( $conf->set_conf( $opt => $$ ),
- "Setting option $opt to $$" );
- is( $conf->get_conf( $opt ), $$,
- " Retrieved properly" );
- ok( $conf->set_conf( $opt => $org ),
- " Option $opt set back to original" );
- ok( !$warnings, " No warnings" );
- }
-}
-
-### test constants ###
-{ { my $to = CPAN_MAIL_ACCOUNT->('foo');
- is( $to, 'foo@cpan.org', "Got proper mail account" );
- }
-
- { ok(RELEVANT_TEST_RESULT->($Mod),"Test is relevant" );
-
- ### test non-relevant tests ###
- my $cp = $Mod->clone;
- $cp->module( ($^O eq 'beos' ? 'MSDOS' : 'Be') . '::' . $cp->module );
- ok(!RELEVANT_TEST_RESULT->($cp),"Test is irrelevant");
- }
-
- { my $support = "it works!";
- my @support = ( "No support for OS",
- "OS unsupported",
- "os unsupported",
- );
- ok(!UNSUPPORTED_OS->($support), "OS supported");
- ok( UNSUPPORTED_OS->($_), "OS not supported") for(@support);
- }
-
- { ok(PERL_VERSION_TOO_LOW->( perl_version_too_low_buffer_mm() ),
- "Perl version too low" );
- ok(PERL_VERSION_TOO_LOW->( perl_version_too_low_buffer_build(1) ),
- "Perl version too low" );
- ok(PERL_VERSION_TOO_LOW->( perl_version_too_low_buffer_build(2) ),
- "Perl version too low" );
- ok(!PERL_VERSION_TOO_LOW->('foo'),
- " Perl version adequate" );
- }
-
- { my $tests = "test.pl";
- my @none = ( "No tests defined for Foo extension.",
- "'No tests defined for Foo::Bar extension.'",
- "'No tests defined.'",
- );
- ok(!NO_TESTS_DEFINED->($tests), "Tests defined");
- ok( NO_TESTS_DEFINED->($_), "No tests defined") for(@none);
- }
-
- { my $fail = 'MAKE TEST'; my $unknown = 'foo';
- is( TEST_FAIL_STAGE->($fail), lc $fail,
- "Proper test fail stage found" );
- is( TEST_FAIL_STAGE->($unknown), 'fetch',
- "Proper test fail stage found" );
- }
-
- ### test missing prereqs
- { my $str = q[Can't locate Foo/Bar.pm in @INC];
-
- ### standard test
- { my @list = MISSING_PREREQS_LIST->( $str );
- is( scalar(@list), 1, " List of missing prereqs found" );
- is( $list[0], 'Foo::Bar', " Proper prereq found" );
- }
-
- ### multiple mentions of same prereq
- { my @list = MISSING_PREREQS_LIST->( $str . $str );
-
- is( scalar(@list), 1, " 1 result for multiple mentions" );
- is( $list[0], 'Foo::Bar', " Proper prereq found" );
- }
- }
-
- { # cp version, author
- my $header = REPORT_MESSAGE_HEADER->($int_ver,'foo');
- ok( $header, "Test header generated" );
- like( $header, qr/Dear foo,/, " Proper content found" );
- like( $header, qr/puter-gen/, " Proper content found" );
- like( $header, qr/CPANPLUS,/, " Proper content found" );
- like( $header, qr/ments may/, " Proper content found" );
- }
-
- { # stage, buffer
- my $header = REPORT_MESSAGE_FAIL_HEADER->('test','buffer');
- ok( $header, "Test header generated" );
- like( $header, qr/uploading/, " Proper content found" );
- like( $header, qr/RESULTS:/, " Proper content found" );
- like( $header, qr/stack/, " Proper content found" );
- like( $header, qr/buffer/, " Proper content found" );
- }
-
- { my $prereqs = REPORT_MISSING_PREREQS->('foo','bar@example.com','Foo::Bar');
- ok( $prereqs, "Test output generated" );
- like( $prereqs, qr/'foo \(bar\@example\.com\)'/,
- " Proper content found" );
- like( $prereqs, qr/Foo::Bar/, " Proper content found" );
- like( $prereqs, qr/prerequisi/, " Proper content found" );
- like( $prereqs, qr/PREREQ_PM/, " Proper content found" );
- }
-
- { my $prereqs = REPORT_MISSING_PREREQS->(undef,undef,'Foo::Bar');
- ok( $prereqs, "Test output generated" );
- like( $prereqs, qr/Your Name/, " Proper content found" );
- like( $prereqs, qr/Foo::Bar/, " Proper content found" );
- like( $prereqs, qr/prerequisi/, " Proper content found" );
- like( $prereqs, qr/PREREQ_PM/, " Proper content found" );
- }
-
- { my $missing = REPORT_MISSING_TESTS->();
- ok( $missing, "Missing test string generated" );
- like( $missing, qr/tests/, " Proper content found" );
- like( $missing, qr/Test::More/, " Proper content found" );
- }
-
- { my $missing = REPORT_MESSAGE_FOOTER->();
- ok( $missing, "Message footer string generated" );
- like( $missing, qr/NOTE/, " Proper content found" );
- like( $missing, qr/identical/, " Proper content found" );
- like( $missing, qr/mistaken/, " Proper content found" );
- like( $missing, qr/appreciate/, " Proper content found" );
- like( $missing, qr/Additional/, " Proper content found" );
- }
-
- { my @libs = MISSING_EXTLIBS_LIST->("No library found for -lfoo\nNo library found for -lbar");
- ok( @libs, "Missing external libraries found" );
- my @list = qw(foo bar);
- is_deeply( \@libs, \@list, " Proper content found" );
- }
-
- { my $clone = $Mod->clone;
-
- my $prereqs = { $ModPrereq => $HighVersion };
-
- $clone->status->prereqs( $prereqs );
-
- my $str = REPORT_LOADED_PREREQS->( $clone );
-
- like($str, qr/PREREQUISITES:/, "Listed loaded prerequisites" );
- like($str, qr/\! $ModPrereq\s+\S+\s+\S+/,
- " Proper content found" );
- }
-
- { my $clone = $Mod->clone;
-
- my $str = REPORT_TOOLCHAIN_VERSIONS->( $clone );
-
- like($str, qr/toolchain/, "Correct message in report" );
- use Cwd;
- like($str, qr/Cwd\s+\Q$Cwd::VERSION\E/,
- "Cwd has correct version in report" );
- }
-}
-
-### callback tests
-{ ### as reported in bug 13086, this callback returned the wrong item
- ### from the list:
- ### $self->_callbacks->munge_test_report->($Mod, $message, $grade);
- my $rv = $CB->_callbacks->munge_test_report->( 1..4 );
- is( $rv, 2, "Default 'munge_test_report' callback OK" );
-}
-
-
-### test creating test reports ###
-SKIP: {
- skip "You have chosen not to enable test reporting", $total_tests,
- unless $CB->configure_object->get_conf('cpantest');
-
- skip "No report send & query modules installed", $total_tests
- unless $CB->_have_query_report_modules(verbose => 0);
-
-
- SKIP: {
- my $mod = $CB->module_tree( TEST_CONF_PREREQ ); # is released to CPAN
- ok( $mod, "Module retrieved" );
-
- ### so we're not pinned down to this specific version of perl
- my @list = $mod->fetch_report( all_versions => 1 );
- skip "Possibly no net connection, or server down", 7 unless @list;
-
- my $href = $list[0];
- ok( scalar(@list), "Fetched test report" );
- is( ref $href, ref {}, " Return value has hashrefs" );
-
- ok( $href->{grade}, " Has a grade" );
-
- ### XXX use constants for grades?
- like( $href->{grade}, qr/pass|fail|unknown|na/i,
- " Grade as expected" );
-
- my $pkg_name = $mod->package_name;
- ok( $href->{dist}, " Has a dist" );
- like( $href->{dist}, qr/$pkg_name/, " Dist as expected" );
-
- ok( $href->{platform}, " Has a platform" );
- }
-
- skip "No report sending modules installed", $send_tests
- unless $CB->_have_send_report_modules(verbose => 0);
-
- for my $type ( keys %$map ) {
-
-
- ### never enter the editor for test reports
- ### but check if the callback actually gets called;
- my $called_edit; my $called_send;
- $CB->_register_callback(
- name => 'edit_test_report',
- code => sub { $called_edit++; 0 }
- );
-
- $CB->_register_callback(
- name => 'send_test_report',
- code => sub { $called_send++; 1 }
- );
-
- ### reset from earlier tests
- $CB->_register_callback(
- name => 'munge_test_report',
- code => sub { return $_[1] }
- );
-
- my $mod = $map->{$type}->{'pre_hook'}
- ? $map->{$type}->{'pre_hook'}->( $Mod )
- : $Mod;
-
- my $file = do {
- ### so T::R does not try to resolve our maildomain, which can
- ### lead to large timeouts for *every* invocation in T::R < 1.51_01
- ### see: http://code.google.com/p/test-reporter/issues/detail?id=15
- local $ENV{MAILDOMAIN} ||= 'example.com';
- $CB->_send_report(
- module => $mod,
- buffer => $map->{$type}{'buffer'},
- failed => $map->{$type}{'failed'},
- tests_skipped => ($map->{$type}{'skiptests'} ? 1 : 0),
- save => 1,
- );
- };
-
- ok( $file, "Type '$type' written to file" );
- ok( -e $file, " File exists" );
-
- my $fh = FileHandle->new($file);
- ok( $fh, " Opened file for reading" );
-
- my $in = do { local $/; <$fh> };
- ok( $in, " File has contents" );
-
- for my $regex ( @{$map->{$type}->{match}} ) {
- like( $in, $regex, " File contains expected contents" );
- }
-
- ### check if our registered callback got called ###
- if( $map->{$type}->{check} ) {
- ok( $called_edit, " Callback to edit was called" );
- ok( $called_send, " Callback to send was called" );
- }
-
- #unlink $file;
-
-
-### T::R tests don't even try to mail, let's not try and be smarter
-### ourselves
-# { ### use a dummy 'editor' and see if the editor
-# ### invocation doesn't break things
-# $conf->set_program( editor => "$^X -le1" );
-# $CB->_callbacks->edit_test_report( sub { 1 } );
-#
-# ### XXX whitebox test!!! Might change =/
-# ### this makes test::reporter not ask for what editor to use
-# ### XXX stupid lousy perl warnings;
-# local $Test::Reporter::MacApp = 1;
-# local $Test::Reporter::MacApp = 1;
-#
-# ### now try and mail the report to a /dev/null'd mailbox
-# my $ok = $CB->_send_report(
-# module => $Mod,
-# buffer => $map->{$type}->{'buffer'},
-# failed => $map->{$type}->{'failed'},
-# address => NOBODY,
-# );
-# ok( $ok, " Mailed report to NOBODY" );
-# }
- }
-}
-
-
-sub missing_prereq_buffer {
- return q[
-MAKE TEST:
-Can't locate floo.pm in @INC (@INC contains: /Users/kane/sources/p4/other/archive-extract/lib /Users/kane/sources/p4/other/file-fetch/lib /Users/kane/sources/p4/other/archive-tar-new/lib /Users/kane/sources/p4/other/carp-trace/lib /Users/kane/sources/p4/other/log-message/lib /Users/kane/sources/p4/other/module-load/lib /Users/kane/sources/p4/other/params-check/lib /Users/kane/sources/p4/other/qmail-checkpassword/lib /Users/kane/sources/p4/other/module-load-conditional/lib /Users/kane/sources/p4/other/term-ui/lib /Users/kane/sources/p4/other/ipc-cmd/lib /Users/kane/sources/p4/other/config-auto/lib /Users/kane/sources/NSA /Users/kane/sources/NSA/misc /Users/kane/sources/NSA/test /Users/kane/sources/beheer/perl /opt/lib/perl5/5.8.3/darwin-2level /opt/lib/perl5/5.8.3 /opt/lib/perl5/site_perl/5.8.3/darwin-2level /opt/lib/perl5/site_perl/5.8.3 /opt/lib/perl5/site_perl .).
-BEGIN failed--compilation aborted.
- ];
-}
-
-sub missing_tests_buffer {
- return q[
-cp lib/Acme/POE/Knee.pm blib/lib/Acme/POE/Knee.pm
-cp demo_race.pl blib/lib/Acme/POE/demo_race.pl
-cp demo_simple.pl blib/lib/Acme/POE/demo_simple.pl
-MAKE TEST:
-No tests defined for Acme::POE::Knee extension.
- ];
-}
-
-sub perl_version_too_low_buffer_mm {
- return q[
-Running [/usr/bin/perl5.8.1 Makefile.PL ]...
-Perl v5.8.3 required--this is only v5.8.1, stopped at Makefile.PL line 1.
-BEGIN failed--compilation aborted at Makefile.PL line 1.
-[ERROR] Could not run '/usr/bin/perl5.8.1 Makefile.PL': Perl v5.8.3 required--this is only v5.8.1, stopped at Makefile.PL line 1.
-BEGIN failed--compilation aborted at Makefile.PL line 1.
- -- cannot continue
- ];
-}
-
-sub perl_version_too_low_buffer_build {
- my $type = shift;
- return q[
-ERROR: perl: Version 5.006001 is installed, but we need version >= 5.008001
-ERROR: version: Prerequisite version isn't installed
-ERRORS/WARNINGS FOUND IN PREREQUISITES. You may wish to install the versions
- of the modules indicated above before proceeding with this installation.
- ] if($type == 1);
- return q[
-ERROR: Version 5.006001 of perl is installed, but we need version >= 5.008001
-ERROR: version: Prerequisite version isn't installed
-ERRORS/WARNINGS FOUND IN PREREQUISITES. You may wish to install the versions
- of the modules indicated above before proceeding with this installation.
- ] if($type == 2);
-}
-
-# Local variables:
-# c-indentation-style: bsd
-# c-basic-offset: 4
-# indent-tabs-mode: nil
-# End:
-# vim: expandtab shiftwidth=4:
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/01mailrc.txt.gz b/cpan/CPANPLUS/t/dummy-CPAN/authors/01mailrc.txt.gz
deleted file mode 100644
index 593556d3a0..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/01mailrc.txt.gz
+++ /dev/null
Binary files differ
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Bundle-Foo-Bar-0.01.tar.gz b/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Bundle-Foo-Bar-0.01.tar.gz
deleted file mode 100644
index 20d8e2c73d..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Bundle-Foo-Bar-0.01.tar.gz
+++ /dev/null
Binary files differ
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/CHECKSUMS b/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/CHECKSUMS
deleted file mode 100644
index ea9aa57313..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/CHECKSUMS
+++ /dev/null
@@ -1,35 +0,0 @@
-0&&<<''; # this PGP-signed message is also valid perl
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-# CHECKSUMS file written on Tue Jun 15 02:56:25 2004 by CPAN::Checksums (v1.016)
-$cksum = {
- 'Foo-Bar-0.01.tar.gz' => {
- 'mtime' => '1999-05-13',
- 'md5' => '5cfed19e324ef8379d092807f10e5903',
- 'size' => 1118
- },
- 'Foo-Bar-0.01.meta' => {
- 'mtime' => '1999-05-13',
- 'size' => '389',
- 'md5' => '6ca49cb8414b093e56515b1b65ccf718',
- },
- 'perl5.005_03.tar.gz' => {
- 'mtime' => '1999-05-13',
- 'md5' => '2b70961796a2ed7ca21fbf7e0c615643',
- 'size' => 119
- },
- 'Bundle-Foo-Bar-0.01.tar.gz' => {
- 'mtime' => '1999-05-13',
- 'md5' => '76f9c0eed0de9f533ed4d3922bac2f11',
- 'size' => 850
- },
-};
-__END__
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.2.3 (GNU/Linux)
-
-iD8DBQFAzmVZMo2oZ0UPiewRAv5MAJ9tajbtrg14echRtn4t940v7FpMfgCffvU1
-mAcaUP8yzmIvbpdn1cGUgpw=
-=rrmL
------END PGP SIGNATURE-----
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Foo-Bar-0.01.meta b/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Foo-Bar-0.01.meta
deleted file mode 100644
index 870d7b73f8..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Foo-Bar-0.01.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-# http://module-build.sourceforge.net/META-spec.html
-#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
-name: Foo-Bar
-version: 0.01
-version_from: lib/Foo/Bar.pm
-installdirs: site
-requires:
-# for configure_requires support
-configure_requires:
- Cwd: 0.01
-
-distribution_type: module
-generated_by: ExtUtils::MakeMaker version 6.25
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Foo-Bar-0.01.readme b/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Foo-Bar-0.01.readme
deleted file mode 100644
index ba8894c152..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Foo-Bar-0.01.readme
+++ /dev/null
@@ -1,2 +0,0 @@
-README
-
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Foo-Bar-0.01.tar.gz b/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Foo-Bar-0.01.tar.gz
deleted file mode 100644
index 0fa39972eb..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/Foo-Bar-0.01.tar.gz
+++ /dev/null
Binary files differ
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/perl5.005_03.tar.gz b/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/perl5.005_03.tar.gz
deleted file mode 100644
index 1d1e081ad6..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUNOXS/perl5.005_03.tar.gz
+++ /dev/null
Binary files differ
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUXS/CHECKSUMS b/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUXS/CHECKSUMS
deleted file mode 100644
index f124759db0..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUXS/CHECKSUMS
+++ /dev/null
@@ -1,20 +0,0 @@
-0&&<<''; # this PGP-signed message is also valid perl
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-# CHECKSUMS file written on Tue Jun 15 02:56:25 2004 by CPAN::Checksums (v1.016)
-$cksum = {
- 'Foo-Bar-0.01.tar.gz' => {
- 'mtime' => '1999-05-13',
- 'md5' => 'c7691a12e5faa70b3a0e83402d279bd6',
- 'size' => 1589
- },
-};
-__END__
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.2.3 (GNU/Linux)
-
-iD8DBQFAzmVZMo2oZ0UPiewRAv5MAJ9tajbtrg14echRtn4t940v7FpMfgCffvU1
-mAcaUP8yzmIvbpdn1cGUgpw=
-=rrmL
------END PGP SIGNATURE-----
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUXS/Foo-Bar-0.01.readme b/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUXS/Foo-Bar-0.01.readme
deleted file mode 100644
index ba8894c152..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUXS/Foo-Bar-0.01.readme
+++ /dev/null
@@ -1,2 +0,0 @@
-README
-
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUXS/Foo-Bar-0.01.tar.gz b/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUXS/Foo-Bar-0.01.tar.gz
deleted file mode 100644
index cef5d53455..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/EUXS/Foo-Bar-0.01.tar.gz
+++ /dev/null
Binary files differ
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBNOXS/CHECKSUMS b/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBNOXS/CHECKSUMS
deleted file mode 100644
index 042008cc56..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBNOXS/CHECKSUMS
+++ /dev/null
@@ -1,20 +0,0 @@
-0&&<<''; # this PGP-signed message is also valid perl
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-# CHECKSUMS file written on Tue Jun 15 02:56:25 2004 by CPAN::Checksums (v1.016)
-$cksum = {
- 'Foo-Bar-0.01.tar.gz' => {
- 'mtime' => '1999-05-13',
- 'md5' => '1f52c2e83140814f734c8674e8fae53f',
- 'size' => 867
- },
-};
-__END__
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.2.3 (GNU/Linux)
-
-iD8DBQFAzmVZMo2oZ0UPiewRAv5MAJ9tajbtrg14echRtn4t940v7FpMfgCffvU1
-mAcaUP8yzmIvbpdn1cGUgpw=
-=rrmL
------END PGP SIGNATURE-----
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBNOXS/Foo-Bar-0.01.readme b/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBNOXS/Foo-Bar-0.01.readme
deleted file mode 100644
index ba8894c152..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBNOXS/Foo-Bar-0.01.readme
+++ /dev/null
@@ -1,2 +0,0 @@
-README
-
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBNOXS/Foo-Bar-0.01.tar.gz b/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBNOXS/Foo-Bar-0.01.tar.gz
deleted file mode 100644
index 0d499cd40d..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBNOXS/Foo-Bar-0.01.tar.gz
+++ /dev/null
Binary files differ
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBXS/CHECKSUMS b/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBXS/CHECKSUMS
deleted file mode 100644
index 5d2a6d6ee3..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBXS/CHECKSUMS
+++ /dev/null
@@ -1,20 +0,0 @@
-0&&<<''; # this PGP-signed message is also valid perl
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-# CHECKSUMS file written on Tue Jun 15 02:56:25 2004 by CPAN::Checksums (v1.016)
-$cksum = {
- 'Foo-Bar-0.01.tar.gz' => {
- 'mtime' => '1999-05-13',
- 'md5' => '986e4316ac095d8a4d47d0d0dd2c408a',
- 'size' => 1541
- },
-};
-__END__
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.2.3 (GNU/Linux)
-
-iD8DBQFAzmVZMo2oZ0UPiewRAv5MAJ9tajbtrg14echRtn4t940v7FpMfgCffvU1
-mAcaUP8yzmIvbpdn1cGUgpw=
-=rrmL
------END PGP SIGNATURE-----
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBXS/Foo-Bar-0.01.readme b/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBXS/Foo-Bar-0.01.readme
deleted file mode 100644
index ba8894c152..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBXS/Foo-Bar-0.01.readme
+++ /dev/null
@@ -1,2 +0,0 @@
-README
-
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBXS/Foo-Bar-0.01.tar.gz b/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBXS/Foo-Bar-0.01.tar.gz
deleted file mode 100644
index a092523e36..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/authors/id/MBXS/Foo-Bar-0.01.tar.gz
+++ /dev/null
Binary files differ
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/autobundle/Snapshot.pm b/cpan/CPANPLUS/t/dummy-CPAN/autobundle/Snapshot.pm
deleted file mode 100644
index 5850371d78..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/autobundle/Snapshot.pm
+++ /dev/null
@@ -1,19 +0,0 @@
-package Snapshot;
-
-$VERSION = '0.01';
-
-1;
-
-__END__
-
-=head1 NAME
-
-Snapshot - Snapshot of your installation at Wed Jan 2 17:46:24 2008
-
-=head1 SYNOPSIS
-
-perl -MCPANPLUS -e "install Snapshot"
-
-=head1 CONTENTS
-
-Foo::Bar 0.01
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/modules/02packages.details.txt.gz b/cpan/CPANPLUS/t/dummy-CPAN/modules/02packages.details.txt.gz
deleted file mode 100644
index ec0f69d8cb..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/modules/02packages.details.txt.gz
+++ /dev/null
Binary files differ
diff --git a/cpan/CPANPLUS/t/dummy-CPAN/modules/03modlist.data.gz b/cpan/CPANPLUS/t/dummy-CPAN/modules/03modlist.data.gz
deleted file mode 100644
index 6574e158bd..0000000000
--- a/cpan/CPANPLUS/t/dummy-CPAN/modules/03modlist.data.gz
+++ /dev/null
Binary files differ
diff --git a/cpan/CPANPLUS/t/inc/conf.pl b/cpan/CPANPLUS/t/inc/conf.pl
deleted file mode 100644
index 4cce0efcb4..0000000000
--- a/cpan/CPANPLUS/t/inc/conf.pl
+++ /dev/null
@@ -1,304 +0,0 @@
-### On VMS, the ENV is not reset after the program terminates.
-### So reset it here explicitly
-my ($old_env_path, $old_env_perl5lib);
-BEGIN {
- use FindBin;
- use File::Spec;
-
- ### paths to our own 'lib' and 'inc' dirs
- ### include them, relative from t/
- my @paths = map { "$FindBin::Bin/$_" } qw[../lib inc];
-
- ### absolute'ify the paths in @INC;
- my @rel2abs = map { File::Spec->rel2abs( $_ ) }
- grep { not File::Spec->file_name_is_absolute( $_ ) } @INC;
-
- ### use require to make devel::cover happy
- require lib;
- for ( @paths, @rel2abs ) {
- my $l = 'lib';
- $l->import( $_ )
- }
-
- use Config;
-
- ### and add them to the environment, so shellouts get them
- $old_env_perl5lib = $ENV{'PERL5LIB'};
- $ENV{'PERL5LIB'} = join $Config{'path_sep'},
- grep { defined } $ENV{'PERL5LIB'}, @paths, @rel2abs;
-
- ### add our own path to the front of $ENV{PATH}, so that cpanp-run-perl
- ### and friends get picked up
- $old_env_path = $ENV{PATH};
- if ( $ENV{PERL_CORE} ) {
- $ENV{'PATH'} = join $Config{'path_sep'},
- grep { defined } "$FindBin::Bin/../../../utils", $ENV{'PATH'};
- }
- else {
- $ENV{'PATH'} = join $Config{'path_sep'},
- grep { defined } "$FindBin::Bin/../bin", $ENV{'PATH'};
- }
-
- ### Fix up the path to perl, as we're about to chdir
- ### but only under perlcore, or if the path contains delimiters,
- ### meaning it's relative, but not looked up in your $PATH
- $^X = File::Spec->rel2abs( $^X )
- if $ENV{PERL_CORE} or ( $^X =~ m|[/\\]| );
-
- ### chdir to our own test dir, so we know all files are relative
- ### to this point, no matter whether run from perlcore tests or
- ### regular CPAN installs
- chdir "$FindBin::Bin" if -d "$FindBin::Bin"
-}
-
-BEGIN {
- use IPC::Cmd;
-
- ### Win32 has issues with redirecting FD's properly in IPC::Run:
- ### Can't redirect fd #4 on Win32 at IPC/Run.pm line 2801
- $IPC::Cmd::USE_IPC_RUN = 0 if $^O eq 'MSWin32';
- $IPC::Cmd::USE_IPC_RUN = 0 if $^O eq 'MSWin32';
-}
-
-### Use a $^O comparison, as depending on module at this time
-### may cause weird errors/warnings
-END {
- if ($^O eq 'VMS') {
- ### VMS environment variables modified by this test need to be put back
- ### path is "magic" on VMS, we can not tell if it really existed before
- ### this was run, because VMS will magically pretend that a PATH
- ### environment variable exists set to the current working directory
- $ENV{PATH} = $old_env_path;
-
- if (defined $old_env_perl5lib) {
- $ENV{PERL5LIB} = $old_env_perl5lib;
- } else {
- delete $ENV{PERL5LIB};
- }
- }
-}
-
-use strict;
-use CPANPLUS::Configure;
-use CPANPLUS::Error ();
-
-use File::Path qw[rmtree];
-use FileHandle;
-use File::Basename qw[basename];
-
-{ ### Force the ignoring of .po files for L::M::S
- $INC{'Locale::Maketext::Lexicon.pm'} = __FILE__;
- $Locale::Maketext::Lexicon::VERSION = 0;
-}
-
-my $Env = 'PERL5_CPANPLUS_TEST_VERBOSE';
-
-# prereq has to be in our package file && core!
-use constant TEST_CONF_PREREQ => 'Cwd';
-use constant TEST_CONF_MODULE => 'Foo::Bar::EU::NOXS';
-use constant TEST_CONF_MODULE_SUB => 'Foo::Bar::EU::NOXS::Sub';
-use constant TEST_CONF_AUTHOR => 'EUNOXS';
-use constant TEST_CONF_INST_MODULE => 'Foo::Bar';
-use constant TEST_CONF_INVALID_MODULE => 'fnurk';
-use constant TEST_CONF_MIRROR_DIR => 'dummy-localmirror';
-use constant TEST_CONF_CPAN_DIR => 'dummy-CPAN';
-use constant TEST_CONF_CPANPLUS_DIR => 'dummy-cpanplus';
-use constant TEST_CONF_INSTALL_DIR => File::Spec->rel2abs(
- File::Spec->catdir(
- TEST_CONF_CPANPLUS_DIR,
- 'install'
- )
- );
-
-sub dummy_cpan_dir {
- ### VMS needs this in directory format for rel2abs
- my $test_dir = $^O eq 'VMS'
- ? File::Spec->catdir(TEST_CONF_CPAN_DIR)
- : TEST_CONF_CPAN_DIR;
-
- ### Convert to an absolute file specification
- my $abs_test_dir = File::Spec->rel2abs($test_dir);
-
- ### According to John M: the hosts path needs to be in UNIX format.
- ### File::Spec::Unix->rel2abs does not work at all on VMS
- $abs_test_dir = VMS::Filespec::unixify( $abs_test_dir ) if $^O eq 'VMS';
-
- return $abs_test_dir;
-}
-
-sub gimme_conf {
-
- ### don't load any other configs than the heuristic one
- ### during tests. They might hold broken/incorrect data
- ### for our test suite. Bug [perl #43629] showed this.
- local $ENV{PERL5_CPANPLUS_HOME} = '';
-
- my $conf = CPANPLUS::Configure->new( load_configs => 0 );
-
- my $dummy_cpan = dummy_cpan_dir();
-
- $conf->set_conf( hosts => [ {
- path => $dummy_cpan,
- scheme => 'file',
- } ],
- );
- $conf->set_conf( base => File::Spec->rel2abs(TEST_CONF_CPANPLUS_DIR));
- $conf->set_conf( dist_type => '' );
- $conf->set_conf( signature => 0 );
- $conf->set_conf( allow_unknown_prereqs => 1 ); # just to make sure, eh
- $conf->set_conf( verbose => 1 ) if $ENV{ $Env };
-
- ### never use a pager in the test suite
- $conf->set_program( pager => '' );
-
- $conf->set_conf( enable_custom_sources => 0 );
-
- ### dmq tells us that we should run with /nologo
- ### if using nmake, as it's very noisy otherwise.
- { my $make = $conf->get_program('make');
- if( $make and basename($make) =~ /^nmake/i ) {
- $conf->set_conf( makeflags => '/nologo' );
- }
- }
-
- ### CPANPLUS::Config checks 3 specific scenarios first
- ### when looking for cpanp-run-perl: parallel to cpanp,
- ### parallel to CPANPLUS.pm, or installed into a custom
- ### prefix like /tmp/foo. Only *THEN* does it check the
- ### the path.
- ### If the perl core is extracted to a directory that has
- ### cpanp-run-perl installed the same amount of 'uplevels'
- ### as the /tmp/foo prefix, we'll pull in the wrong script
- ### by accident.
- ### Since we set the path to cpanp-run-perl explicitly
- ### at the top of this script, it's best to update the config
- ### ourselves with a path lookup, rather than rely on its
- ### heuristics. Thanks to David Wheeler, Josh Jore and Vincent
- ### Pit for helping to track this down.
- if( $ENV{PERL_CORE} ) {
- $conf->set_program( "perlwrapper" => IPC::Cmd::can_run('cpanp-run-perl') );
- }
-
- $conf->set_conf( source_engine => $ENV{CPANPLUS_SOURCE_ENGINE} )
- if $ENV{CPANPLUS_SOURCE_ENGINE};
-
- _clean_test_dir( [
- $conf->get_conf('base'),
- TEST_CONF_MIRROR_DIR,
-# TEST_INSTALL_DIR_LIB,
-# TEST_INSTALL_DIR_BIN,
-# TEST_INSTALL_DIR_MAN1,
-# TEST_INSTALL_DIR_MAN3,
- ], ( $ENV{PERL_CORE} ? 0 : 1 ) );
-
- return $conf;
-};
-
-{
- my $fh;
- my $file = ".".basename($0).".output";
- sub output_handle {
- return $fh if $fh;
-
- $fh = FileHandle->new(">$file")
- or warn "Could not open output file '$file': $!";
-
- $fh->autoflush(1);
- return $fh;
- }
-
- sub output_file { return $file }
-
-
-
- ### redirect output from msg() and error() output to file
- unless( $ENV{$Env} ) {
-
- print "# To run tests in verbose mode, set ".
- "\$ENV{$Env} = 1\n" unless $ENV{PERL_CORE};
-
- 1 while unlink $file; # just in case
-
- $CPANPLUS::Error::ERROR_FH =
- $CPANPLUS::Error::ERROR_FH = output_handle();
-
- $CPANPLUS::Error::MSG_FH =
- $CPANPLUS::Error::MSG_FH = output_handle();
-
- }
-}
-
-
-### clean these files if we're under perl core
-END {
- if ( $ENV{PERL_CORE} ) {
- close output_handle(); 1 while unlink output_file();
-
- _clean_test_dir( [
- gimme_conf->get_conf('base'),
- TEST_CONF_MIRROR_DIR,
- # TEST_INSTALL_DIR_LIB,
- # TEST_INSTALL_DIR_BIN,
- # TEST_INSTALL_DIR_MAN1,
- # TEST_INSTALL_DIR_MAN3,
- ], 0 ); # DO NOT be verbose under perl core -- makes tests fail
- }
-}
-
-### whenever we start a new script, we want to clean out our
-### old files from the test '.cpanplus' dir..
-sub _clean_test_dir {
- my $dirs = shift || [];
- my $verbose = shift || 0;
-
- for my $dir ( @$dirs ) {
-
- ### no point if it doesn't exist;
- next unless -d $dir;
-
- my $dh;
- opendir $dh, $dir or die "Could not open basedir '$dir': $!";
- while( my $file = readdir $dh ) {
- next if $file =~ /^\./; # skip dot files
-
- my $path = File::Spec->catfile( $dir, $file );
-
- ### directory, rmtree it
- if( -d $path ) {
-
- ### John Malmberg reports yet another VMS issue:
- ### A directory name on VMS in VMS format ends with .dir
- ### when it is referenced as a file.
- ### In UNIX format traditionally PERL on VMS does not remove the
- ### '.dir', however the VMS C library conversion routines do
- ### remove the '.dir' and the VMS C library routines can not
- ### handle the '.dir' being present on UNIX format filenames.
- ### So code doing the fixup has on VMS has to be able to handle
- ### both UNIX format names and VMS format names.
-
- ### XXX See http://www.xray.mpe.mpg.de/
- ### mailing-lists/perl5-porters/2007-10/msg00064.html
- ### for details -- the below regex could use some touchups
- ### according to John. M.
- $file =~ s/\.dir$//i if $^O eq 'VMS';
-
- my $dirpath = File::Spec->catdir( $dir, $file );
-
- print "# Deleting directory '$dirpath'\n" if $verbose;
- eval { rmtree( $dirpath ) };
- warn "Could not delete '$dirpath' while cleaning up '$dir'"
- if $@;
-
- ### regular file
- } else {
- print "# Deleting file '$path'\n" if $verbose;
- 1 while unlink $path;
- }
- }
-
- close $dh;
- }
-
- return 1;
-}
-1;
diff --git a/installperl b/installperl
index e64b1c39bf..0e590e1e3a 100755
--- a/installperl
+++ b/installperl
@@ -691,7 +691,7 @@ sub installlib {
# lib/Archive/Tar/bin, the config_data script in lib/Module/Build/scripts
# and zipdetails in cpan/IO-Compress/bin
# (they're installed later with other utils)
- return if $name =~ /^(?:cpan|instmodsh|prove|corelist|ptar|cpan2dist|cpanp|cpanp-run-perl|ptardiff|ptargrep|config_data|zipdetails)\z/;
+ return if $name =~ /^(?:cpan|instmodsh|prove|corelist|ptar|ptardiff|ptargrep|config_data|zipdetails)\z/;
# ignore the Makefiles
return if $name =~ /^makefile$/i;
# ignore the test extensions
diff --git a/lib/.gitignore b/lib/.gitignore
index 6674b80104..367156c75f 100644
--- a/lib/.gitignore
+++ b/lib/.gitignore
@@ -54,56 +54,6 @@
/CPAN/Tarzip.pm
/CPAN/URL.pm
/CPAN/Version.pm
-/CPANPLUS.pm
-/CPANPLUS/Backend
-/CPANPLUS/Backend.pm
-/CPANPLUS/Backend/RV.pm
-/CPANPLUS/Config.pm
-/CPANPLUS/Config/HomeEnv.pm
-/CPANPLUS/Configure.pm
-/CPANPLUS/Configure/Setup.pm
-/CPANPLUS/Dist.pm
-/CPANPLUS/Dist/Autobundle.pm
-/CPANPLUS/Dist/Base.pm
-/CPANPLUS/Dist/MM.pm
-/CPANPLUS/Dist/Sample.pm
-/CPANPLUS/Error.pm
-/CPANPLUS/FAQ.pod
-/CPANPLUS/Hacking.pod
-/CPANPLUS/Internals.pm
-/CPANPLUS/Internals/Constants
-/CPANPLUS/Internals/Constants.pm
-/CPANPLUS/Internals/Constants/Report.pm
-/CPANPLUS/Internals/Extract.pm
-/CPANPLUS/Internals/Fetch.pm
-/CPANPLUS/Internals/Report.pm
-/CPANPLUS/Internals/Search.pm
-/CPANPLUS/Internals/Source
-/CPANPLUS/Internals/Source.pm
-/CPANPLUS/Internals/Source/Memory.pm
-/CPANPLUS/Internals/Source/SQLite
-/CPANPLUS/Internals/Source/SQLite.pm
-/CPANPLUS/Internals/Source/SQLite/Tie.pm
-/CPANPLUS/Internals/Utils
-/CPANPLUS/Internals/Utils.pm
-/CPANPLUS/Internals/Utils/Autoflush.pm
-/CPANPLUS/Module.pm
-/CPANPLUS/Module/Author
-/CPANPLUS/Module/Author.pm
-/CPANPLUS/Module/Author/Fake.pm
-/CPANPLUS/Module/Checksums.pm
-/CPANPLUS/Module/Fake.pm
-/CPANPLUS/Module/Signature.pm
-/CPANPLUS/Selfupdate.pm
-/CPANPLUS/Shell.pm
-/CPANPLUS/Shell/Classic.pm
-/CPANPLUS/Shell/Default
-/CPANPLUS/Shell/Default.pm
-/CPANPLUS/Shell/Default/Plugins
-/CPANPLUS/Shell/Default/Plugins/CustomSource.pm
-/CPANPLUS/Shell/Default/Plugins/HOWTO.pod
-/CPANPLUS/Shell/Default/Plugins/Remote.pm
-/CPANPLUS/Shell/Default/Plugins/Source.pm
/Carp.pm
/Carp/Heavy.pm
/Class/ISA.pm
diff --git a/pod/perlutil.pod b/pod/perlutil.pod
index 3f53ad0fa5..3d2b276a7c 100644
--- a/pod/perlutil.pod
+++ b/pod/perlutil.pod
@@ -278,18 +278,6 @@ a lot more. It is similar to the command line mode of the L<CPAN> module,
perl -MCPAN -e shell
-=item L<cpanp>
-
-F<cpanp> is, like F<cpan>, a command-line interface to the CPAN, using
-the C<CPANPLUS> module as a back-end. It can be used interactively or
-imperatively.
-
-=item L<cpan2dist>
-
-F<cpan2dist> is a tool to create distributions (or packages) from CPAN
-modules, then suitable for your package manager of choice. Support for
-specific formats are available from CPAN as C<CPANPLUS::Dist::*> modules.
-
=item L<instmodsh>
A little interface to ExtUtils::Installed to examine installed modules,
@@ -305,7 +293,7 @@ L<podchecker|podchecker>, L<splain|splain>, L<perldiag>,
C<roffitall|roffitall>, L<a2p|a2p>, L<s2p|s2p>, L<find2perl|find2perl>,
L<File::Find|File::Find>, L<pl2pm|pl2pm>, L<perlbug|perlbug>,
L<h2ph|h2ph>, L<c2ph|c2ph>, L<h2xs|h2xs>, L<enc2xs>, L<xsubpp>,
-L<cpan>, L<cpanp>, L<cpan2dist>, L<instmodsh>, L<piconv>, L<prove>,
+L<cpan>, L<instmodsh>, L<piconv>, L<prove>,
L<corelist>, L<ptar>, L<ptardiff>, L<shasum>, L<zipdetails>
=cut
diff --git a/t/harness b/t/harness
index fee5f9c57d..1ed70cb1d3 100644
--- a/t/harness
+++ b/t/harness
@@ -119,7 +119,6 @@ if (@ARGV) {
# par => [
# { seq => '../ext/DB_File/t/*' },
# { seq => '../ext/IO_Compress_Zlib/t/*' },
- # { seq => '../lib/CPANPLUS/*' },
# { seq => '../lib/ExtUtils/t/*' },
# '*'
# ]
diff --git a/t/porting/customized.dat b/t/porting/customized.dat
index bdb8eb2130..910b432829 100644
--- a/t/porting/customized.dat
+++ b/t/porting/customized.dat
@@ -9,7 +9,6 @@ Text::Balanced cpan/Text-Balanced/t/08_extvar.t 0776ef2cbdad5b1fbefb300541d07921
Text::Balanced cpan/Text-Balanced/t/09_gentag.t 42361b5dfb3bb728bce20f4fb0d92ccfb27c2ba7
Module::Build cpan/Module-Build/lib/Module/Build/ConfigData.pm 2f3f07fd889077ebd51791ad6e195d9164b4baf3
Test::Harness cpan/Test-Harness/t/source.t 884890970fb850874213159df263ba483bac62e9
-CPANPLUS cpan/CPANPLUS/Makefile.PL 5d533f6722af6aae73204755beb8d6c008fc0d4a
libnet cpan/libnet/Makefile.PL 5554b71464b45f5cc002e55f2464f7ff4abd05b6
podlators cpan/podlators/scripts/pod2man.PL f81acf53f3ff46cdcc5ebdd661c5d13eb35d20d6
podlators cpan/podlators/scripts/pod2text.PL b4693fcfe4a0a1b38a215cfb8985a65d5d025d69
diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat
index 6afa0495fa..93cc764350 100644
--- a/t/porting/known_pod_issues.dat
+++ b/t/porting/known_pod_issues.dat
@@ -31,6 +31,9 @@ Class::ISA
Class::PseudoHash
Classic::Perl
Clone
+cpan2dist(1)
+cpanp(1)
+CPANPLUS
Crypt::Random
curl(1)
Data::Entropy
@@ -219,11 +222,12 @@ pod/perlbook.pod Verbatim line length including indents exceeds 79 by 1
pod/perlcall.pod Verbatim line length including indents exceeds 79 by 2
pod/perlce.pod Verbatim line length including indents exceeds 79 by 2
pod/perlclib.pod Verbatim line length including indents exceeds 79 by 3
-pod/perlcygwin.pod Verbatim line length including indents exceeds 79 by 25
+pod/perlcygwin.pod Verbatim line length including indents exceeds 79 by 24
pod/perldbmfilter.pod Verbatim line length including indents exceeds 79 by 1
pod/perldebguts.pod Verbatim line length including indents exceeds 79 by 34
pod/perldebtut.pod Verbatim line length including indents exceeds 79 by 22
pod/perldebug.pod Verbatim line length including indents exceeds 79 by 3
+pod/perldelta.pod Apparent internal link is missing its forward slash 2
pod/perldiag.pod =item type mismatch 1
pod/perldiag.pod Verbatim line length including indents exceeds 79 by 1
pod/perldsc.pod Verbatim line length including indents exceeds 79 by 4
diff --git a/t/porting/utils.t b/t/porting/utils.t
index 13a164950b..ba8ba235aa 100644
--- a/t/porting/utils.t
+++ b/t/porting/utils.t
@@ -77,11 +77,6 @@ printf "1..%d\n", scalar @victims;
foreach my $victim (@victims) {
SKIP: {
- # Not clear to me *why* it needs the BEGIN block, given what it
- # does, but not in an easy position to change it.
- skip("$victim executes code in a BEGIN block which fails for empty \@ARGV")
- if $victim =~ m{^utils/cpanp-run-perl};
-
skip ("$victim uses $excuses{$victim}, so can't test with just core modules")
if $excuses{$victim};
diff --git a/utils.lst b/utils.lst
index 0278d8eed4..cb1dd47559 100644
--- a/utils.lst
+++ b/utils.lst
@@ -24,9 +24,6 @@ utils/prove
utils/ptar
utils/ptardiff
utils/ptargrep
-utils/cpanp-run-perl
-utils/cpanp
-utils/cpan2dist
utils/shasum
utils/splain
utils/xsubpp
diff --git a/utils/Makefile b/utils/Makefile
index bf6bc804a2..f8934e8623 100644
--- a/utils/Makefile
+++ b/utils/Makefile
@@ -10,9 +10,9 @@ RUN = # Used mainly cross-compilation setups.
# Files to be built with variable substitution after miniperl is
# available. Dependencies handled manually below (for now).
-pl = c2ph.PL config_data.PL corelist.PL cpan.PL h2ph.PL h2xs.PL instmodsh.PL json_pp.PL perlbug.PL perldoc.PL perlivp.PL pl2pm.PL prove.PL ptar.PL ptardiff.PL ptargrep.PL cpanp-run-perl.PL cpanp.PL cpan2dist.PL shasum.PL splain.PL libnetcfg.PL piconv.PL enc2xs.PL xsubpp.PL pod2html.PL zipdetails.PL
-plextract = c2ph config_data corelist cpan h2ph h2xs instmodsh json_pp perlbug perldoc perlivp pl2pm prove ptar ptardiff ptargrep cpanp-run-perl cpanp cpan2dist shasum splain libnetcfg piconv enc2xs xsubpp pod2html zipdetails
-plextractexe = ./c2ph ./config_data ./corelist ./cpan ./h2ph ./h2xs ./json_pp ./instmodsh ./perlbug ./perldoc ./perlivp ./pl2pm ./prove ./ptar ./ptardiff ./ptargrep ./cpanp-run-perl ./cpanp ./cpan2dist ./shasum ./splain ./libnetcfg ./piconv ./enc2xs ./xsubpp ./pod2html ./zipdetails
+pl = c2ph.PL config_data.PL corelist.PL cpan.PL h2ph.PL h2xs.PL instmodsh.PL json_pp.PL perlbug.PL perldoc.PL perlivp.PL pl2pm.PL prove.PL ptar.PL ptardiff.PL ptargrep.PL shasum.PL splain.PL libnetcfg.PL piconv.PL enc2xs.PL xsubpp.PL pod2html.PL zipdetails.PL
+plextract = c2ph config_data corelist cpan h2ph h2xs instmodsh json_pp perlbug perldoc perlivp pl2pm prove ptar ptardiff ptargrep shasum splain libnetcfg piconv enc2xs xsubpp pod2html zipdetails
+plextractexe = ./c2ph ./config_data ./corelist ./cpan ./h2ph ./h2xs ./json_pp ./instmodsh ./perlbug ./perldoc ./perlivp ./pl2pm ./prove ./ptar ./ptardiff ./ptargrep ./shasum ./splain ./libnetcfg ./piconv ./enc2xs ./xsubpp ./pod2html ./zipdetails
all: $(plextract)
@@ -49,12 +49,6 @@ ptardiff: ptardiff.PL ../config.sh
ptargrep: ptargrep.PL ../config.sh
-cpanp-run-perl: cpanp-run-perl.PL ../config.sh
-
-cpanp: cpanp.PL ../config.sh
-
-cpan2dist: cpan2dist.PL ../config.sh
-
pl2pm: pl2pm.PL ../config.sh
shasum: shasum.PL ../config.sh
diff --git a/utils/Makefile.SH b/utils/Makefile.SH
index ca683c2e14..a4a7e4a9d2 100644
--- a/utils/Makefile.SH
+++ b/utils/Makefile.SH
@@ -48,9 +48,9 @@ cat >>Makefile <<'!NO!SUBS!'
# Files to be built with variable substitution after miniperl is
# available. Dependencies handled manually below (for now).
-pl = c2ph.PL config_data.PL corelist.PL cpan.PL h2ph.PL h2xs.PL instmodsh.PL json_pp.PL perlbug.PL perldoc.PL perlivp.PL pl2pm.PL prove.PL ptar.PL ptardiff.PL ptargrep.PL cpanp-run-perl.PL cpanp.PL cpan2dist.PL shasum.PL splain.PL libnetcfg.PL piconv.PL enc2xs.PL xsubpp.PL pod2html.PL zipdetails.PL
-plextract = c2ph config_data corelist cpan h2ph h2xs instmodsh json_pp perlbug perldoc perlivp pl2pm prove ptar ptardiff ptargrep cpanp-run-perl cpanp cpan2dist shasum splain libnetcfg piconv enc2xs xsubpp pod2html zipdetails
-plextractexe = ./c2ph ./config_data ./corelist ./cpan ./h2ph ./h2xs ./json_pp ./instmodsh ./perlbug ./perldoc ./perlivp ./pl2pm ./prove ./ptar ./ptardiff ./ptargrep ./cpanp-run-perl ./cpanp ./cpan2dist ./shasum ./splain ./libnetcfg ./piconv ./enc2xs ./xsubpp ./pod2html ./zipdetails
+pl = c2ph.PL config_data.PL corelist.PL cpan.PL h2ph.PL h2xs.PL instmodsh.PL json_pp.PL perlbug.PL perldoc.PL perlivp.PL pl2pm.PL prove.PL ptar.PL ptardiff.PL ptargrep.PL shasum.PL splain.PL libnetcfg.PL piconv.PL enc2xs.PL xsubpp.PL pod2html.PL zipdetails.PL
+plextract = c2ph config_data corelist cpan h2ph h2xs instmodsh json_pp perlbug perldoc perlivp pl2pm prove ptar ptardiff ptargrep shasum splain libnetcfg piconv enc2xs xsubpp pod2html zipdetails
+plextractexe = ./c2ph ./config_data ./corelist ./cpan ./h2ph ./h2xs ./json_pp ./instmodsh ./perlbug ./perldoc ./perlivp ./pl2pm ./prove ./ptar ./ptardiff ./ptargrep ./shasum ./splain ./libnetcfg ./piconv ./enc2xs ./xsubpp ./pod2html ./zipdetails
all: $(plextract)
@@ -87,12 +87,6 @@ ptardiff: ptardiff.PL ../config.sh
ptargrep: ptargrep.PL ../config.sh
-cpanp-run-perl: cpanp-run-perl.PL ../config.sh
-
-cpanp: cpanp.PL ../config.sh
-
-cpan2dist: cpan2dist.PL ../config.sh
-
pl2pm: pl2pm.PL ../config.sh
shasum: shasum.PL ../config.sh
diff --git a/utils/cpan2dist.PL b/utils/cpan2dist.PL
deleted file mode 100644
index 0533a01e40..0000000000
--- a/utils/cpan2dist.PL
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-my $origdir = cwd;
-chdir dirname($0);
-my $file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-use File::Spec;
-
-my $script = File::Spec->catfile(
- File::Spec->catdir(
- File::Spec->updir, qw[ cpan CPANPLUS bin ]
- ), "cpan2dist");
-
-if (open(IN, $script)) {
- print OUT <IN>;
- close IN;
-} else {
- die "$0: cannot find '$script'\n";
-}
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/utils/cpanp-run-perl.PL b/utils/cpanp-run-perl.PL
deleted file mode 100644
index a72ac2b668..0000000000
--- a/utils/cpanp-run-perl.PL
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-my $origdir = cwd;
-chdir dirname($0);
-my $file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-use File::Spec;
-
-my $script = File::Spec->catfile(
- File::Spec->catdir(
- File::Spec->updir, qw[ cpan CPANPLUS bin ]
- ), "cpanp-run-perl");
-
-if (open(IN, $script)) {
- print OUT <IN>;
- close IN;
-} else {
- die "$0: cannot find '$script'\n";
-}
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/utils/cpanp.PL b/utils/cpanp.PL
deleted file mode 100644
index ea3b4399d3..0000000000
--- a/utils/cpanp.PL
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-my $origdir = cwd;
-chdir dirname($0);
-my $file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-use File::Spec;
-
-my $script = File::Spec->catfile(
- File::Spec->catdir(
- File::Spec->updir, qw[ cpan CPANPLUS bin ]
- ), "cpanp");
-
-if (open(IN, $script)) {
- print OUT <IN>;
- close IN;
-} else {
- die "$0: cannot find '$script'\n";
-}
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template
index 59c7c7cc72..607f1504ad 100644
--- a/vms/descrip_mms.template
+++ b/vms/descrip_mms.template
@@ -294,7 +294,7 @@ utils1 = [.utils]perldoc.com [.lib.ExtUtils]Miniperl.pm [.utils]c2ph.com [.utils
utils2 = [.utils]h2xs.com [.utils]libnetcfg.com [.lib]perlbug.com [.utils]json_pp.com
utils3 = [.utils]perlivp.com [.lib]splain.com [.utils]pl2pm.com [.utils]xsubpp.com [.utils]pod2html.com [.utils]instmodsh.com
utils4 = [.utils]enc2xs.com [.utils]piconv.com [.utils]cpan.com [.utils]prove.com [.utils]ptar.com [.utils]ptardiff.com [.utils]shasum.com
-utils5 = [.utils]corelist.com [.utils]config_data.com [.utils]cpanp.com [.utils]cpan2dist.com [.utils]cpanp-run-perl.com [.utils]ptargrep.com [.utils]zipdetails.com
+utils5 = [.utils]corelist.com [.utils]config_data.com [.utils]ptargrep.com [.utils]zipdetails.com
.ifdef NOX2P
all : base extras archcorefiles preplibrary [.pod]perltoc.pod
@@ -468,15 +468,6 @@ nonxsext : $(LIBPREREQ) preplibrary $(MINIPERL_EXE) [.pod]perlfunc.pod
[.utils]cpan.com : [.utils]cpan.PL $(ARCHDIR)Config.pm
$(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
-[.utils]cpanp.com : [.utils]cpanp.PL $(ARCHDIR)Config.pm
- $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
-
-[.utils]cpan2dist.com : [.utils]cpan2dist.PL $(ARCHDIR)Config.pm
- $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
-
-[.utils]cpanp-run-perl.com : [.utils]cpanp-run-perl.PL $(ARCHDIR)Config.pm
- $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
-
[.utils]prove.com : [.utils]prove.PL $(ARCHDIR)Config.pm
$(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
diff --git a/win32/Makefile b/win32/Makefile
index 2e724892c5..ffcdfa6f3b 100644
--- a/win32/Makefile
+++ b/win32/Makefile
@@ -607,9 +607,6 @@ UTILS = \
..\utils\ptardiff \
..\utils\ptargrep \
..\utils\zipdetails \
- ..\utils\cpanp-run-perl \
- ..\utils\cpanp \
- ..\utils\cpan2dist \
..\utils\shasum \
..\utils\instmodsh \
..\utils\json_pp \
@@ -1201,7 +1198,6 @@ distclean: realclean
-if exist $(LIBDIR)\B rmdir /s /q $(LIBDIR)\B
-if exist $(LIBDIR)\CGI rmdir /s /q $(LIBDIR)\CGI
-if exist $(LIBDIR)\CPAN rmdir /s /q $(LIBDIR)\CPAN
- -if exist $(LIBDIR)\CPANPLUS rmdir /s /q $(LIBDIR)\CPANPLUS
-if exist $(LIBDIR)\Compress rmdir /s /q $(LIBDIR)\Compress
-if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data
-if exist $(LIBDIR)\Devel rmdir /s /q $(LIBDIR)\Devel
@@ -1263,7 +1259,7 @@ distclean: realclean
perlvos.pod perlwin32.pod
-cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph pstruct h2xs \
perldoc perlivp libnetcfg enc2xs piconv cpan *.bat \
- xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep cpanp-run-perl cpanp cpan2dist shasum corelist config_data zipdetails
+ xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist config_data zipdetails
-cd ..\x2p && del /f find2perl s2p psed *.bat
-del /f ..\config.sh perlmain.c dlutils.c config.h.new \
perlmainst.c
diff --git a/win32/makefile.mk b/win32/makefile.mk
index c58ce63064..dd29549e2d 100644
--- a/win32/makefile.mk
+++ b/win32/makefile.mk
@@ -699,9 +699,6 @@ UTILS = \
..\utils\ptardiff \
..\utils\ptargrep \
..\utils\zipdetails \
- ..\utils\cpanp-run-perl \
- ..\utils\cpanp \
- ..\utils\cpan2dist \
..\utils\shasum \
..\utils\instmodsh \
..\utils\json_pp \
@@ -1380,7 +1377,6 @@ distclean: realclean
-if exist $(LIBDIR)\B rmdir /s /q $(LIBDIR)\B
-if exist $(LIBDIR)\CGI rmdir /s /q $(LIBDIR)\CGI
-if exist $(LIBDIR)\CPAN rmdir /s /q $(LIBDIR)\CPAN
- -if exist $(LIBDIR)\CPANPLUS rmdir /s /q $(LIBDIR)\CPANPLUS
-if exist $(LIBDIR)\Compress rmdir /s /q $(LIBDIR)\Compress
-if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data
-if exist $(LIBDIR)\Devel rmdir /s /q $(LIBDIR)\Devel
@@ -1442,7 +1438,7 @@ distclean: realclean
perlvos.pod perlwin32.pod
-cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph pstruct h2xs \
perldoc perlivp libnetcfg enc2xs piconv cpan *.bat \
- xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep cpanp-run-perl cpanp cpan2dist shasum corelist config_data zipdetails
+ xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist config_data zipdetails
-cd ..\x2p && del /f find2perl s2p psed *.bat
-del /f ..\config.sh perlmain.c dlutils.c config.h.new \
perlmainst.c