Revision history for Perl extension CPAN.

Todo: How to live without CHECKSUM files? Security layer completely configurable make plugins configurable, adjust @ISA

=head2 still September, 1997

is_reachable had to go again, firewalls may not allow us to ping

sorting of hosts did lead to some use of undefined value warnings ->

Released as 1.3101

=head2 September, 1997

Fixed Bundle::Foo::Bar. More than one level deep nesting could not be
read. Thanks to Jarkko Hietaniemi for the hint.

STDOUT/STDERR abstraction layer introduced to allow a Tk frontend to
do its own output. Current output producing methods are myprint,
mywarn, mydie, myconfess. I don't know how many of these will
evolve. I'm coordinating this development with Nathan Patwardhan from
O'Reilly who is likely to produce something along Tk or so. There's a
routine print_ornamented where colorprinting may be turned on manually
to allow easy debugging. Please see the code. Please speak up if you
have an opinion on that matter.

Introduced the use of Net::Ping to check for reachability, because the
timeouts seem too long for Net::FTP or LWP::Protocol::ftp.

Allowing continuation lines in the shell.

Improved method readme for packages without a README, but still it
hurts to use ncftp and lynx. But still we can't be sure that we don't
need ncftp or lynx, e.g. for firewalls.

CPAN::FTP::localize broken into 4 routines that should be accessible
in any order. If we encounter the first successful download we
remember both method and host and try to stick with it. I'm not in
favor of making this accessible publicly as I regard it as heavily
session-dependent. (Thanks to Martijn Koster for the suggestion)

Fixed unnecessary recursion in has_inst(). An eval {require...} should
do in any case.

=head2 August 28, 1997

Jarkko's suggestion for a better message when they type an unknown
command: Unknown command "..." Type ? for help.

=head2 August 21, 1997

Always try file: URLs first (except for index files) to avoid traffic
when we have the file already on a CDROM somewhere.

=head2 August 11, 1997

Tidied up the inheritance of CPAN -> MM. In a future version this
inheritance will go away and MM will be just used statically.

Now delaying the require CPAN::WAIT until somebody really runs a w*

CPAN::Module::cpan_version now also returns the string "undef"
whenever we can't determine which version is out there.

Now trying to get files as gzipped files earlier immediately after we
fail to get a file and that file has no .gz suffix. Earlier versions
delayed this try until we had visited all hosts in the urllist.

=head2 August 2 1997

Retrofit for 5.003 again (thanks to Vladimir Alexiev
<> for the patch)

Touch files back to 1997. There were files with timestamps 2020 due to
an error on my side.

Protocol change in the file 02packages on CPAN. A version of 0 is OK
from now, a version of "undef" is an unrecognized version. This means
that with the upcoming release there will only few "undef" versions be
reported, because we have to tell CPAN to re-investigate all "0"
versions, and that'll probably take some time.

Fixed a bug in Bundle when we have no clue what Bundle they are
talking about.

Fixed completion for array options. Try ``o conf urllist TAB''.

Reordered sequence how we try to access an URL: first we try all URLs
with LWP and Net::FTP, then we switch to lynx and ncftp, last resort
is ftp. Introduced new subroutine talk_ftp to factor out some
duplicate code.

Made code clearer wrt gzip/gunzip during lynx and ncftp calls.

=head2 July 1997

Applied a patch by Ilya Zakharevich <> to use
binmode before checking the checksum.

Got "cwd" patch from Ilya and accomodated it by introducing CPAN::cwd
and CPAN::getcwd.

Eliminated the hasLWP, hasFTP, hasWAIT, hasMD5 routines in favor of a
runtime solution with a single has() method. This makes it possible
use the packages immediately after installation without restarting

Major code review under the light of a new AutoLoading
doesn't work yet, but we're closer, I hope.

Updated Bundle::CPAN to fit better current needs and changed the
initial prompt to suggest Bundle::CPAN instead of just the Term

Skipping lynx, ncftp, and other external programs if they aren't
defined or empty strings.

=head2 June 1997

After carefully checking which changes have been made in perl5.00401,
I dare to release what I'm currently working with as 1.25.

Many small improvements have been made, but several bigger things are
still missing.

=head2 May 1997

Richard L. Maus, Jr. <> patch that adds -c switch to

Improved CPAN::FirstTime to better check for valid options.

Removed a stupid -x check on external ftp programs that hindered
executing of programs in the PATH.

Improved debugging to inhibit "use of undefined..." messages.

Improved renaming to .bak files and renaming back in case we cannot
download for some reason.

Now advertise Bundle::libnet instead of Net::FTP.

Improved debugging and error checking of system calls, especially
added a test after a download if the file has >0 bytes (lynx returns
status 0 despite some errors).

Added support for files that can still be found on CPAN.

=head2 April 16 1997

Applied patch by Achim Bohnet to the TRL logic (To: Subject: CPAN & TRL-Gnu Date: Fri, 04 Apr 1997
10:09:03 +0200 From: Achim Bohnet <>)
which was already in 5.003_97e btw.

Fixed leading whitespace bug discovered by Karl Glazebrook

=head2 March 31 1997

Fix bug with Bundle files that are not in the distribution's root

Added tolerance when a file is available in an older version but
cannot be retrieved for some reason. (Suggested by Dale Amon and
Ulrich Pfeifer)

Fixed the duplicate writing of a Makefile and experimented with
alternatives in the inactivity_timeout code. Thanks to Randal Schwartz
and Larry Virden for continued heads up on this.

=head2 Feb and March 1997

Speedups during reading of the indices (Revision 1.125-128).

Tiny speedups of CacheMgr. Elimination of clean_cache and substituing
a call to force_clean_cache. Changed a couple of debugging statements.

Improved feedback upon the invocation of a FirstTime dialog: we tell
user which variables are missing.

Beautified spacing with the help of Ilya's newest cperl-mode.

Made the use of Cwd::cwd configurable. Default is ->cwd, but ->getcwd
makes sense on some non UNIX systems (hint by Dominic Dunlop).

Added an __END__

Improved message "don't know what it is" with a hint to try "i" command.

External programs are now run even more blindish. No check if they
look executable before we run them.

Released 1.22_01.

=head2 Feb 11, 1997

Wrong "Unknown argument" message when argument was lowercase fixed.

Better help for "reload".

Fixed the mysterious "loss of ReadLine" bug which was really a hidden
call to $Suppress_readline++ :-(.

Fixed Config->{wait_list} becoming larger and larger.

Reading with $/=undef now (Thanks to Dominic Dunlop
for the hint).

Added the somehow lost display of "CONTAINS" for bundles.

Released 1.21

=head2 Feb 5, 1997

Changed warn to print for the "Reading..." messages.

1.19 issued the ->load command too early, so inheritance was not yet
set up correctly. Now later.

Inserted the -Mops test suggested by Tim Bunce. Backed it out again,
because it caches too many Makefie.PLs. Restructured
CPAN::Distribution::make preparing for better (i.e. arbitrary) safety
handlers. Not yet finished.

Workaround for bug in _25: return statements at the end of

released 1.20

=head2 Feb 3, 1997

With ReadLine suppressed, CPAN didn't exit of EOF. Fix by Roderick
Schertler E<lt>roderick@gate.netE<gt> applied.

=head2 Feb 2, 1997

Ulrich Pfeifer reports another permission problem with the Config
file. Fixed.

Found another $^X problem and fixed that too.

We now try to give sensible diagnostics when the CHECKSUMS file is
missing or incomplete.

Included a Bundle::CPAN file.

Released 1.18.

=head2 Feb 2, 1997

Now fetching MIRRORED.BY whenever we get the first URL in the init
dialogue. Offering a loop to correct the URL. Reading MIRRORED.BY if
it is younger than 30 days.

Simplified the inheritance tree considerably: Replaced MY with MM,
left CPAN::Debug only in the leaves.

Globalized the $term variable to have at least a chance to debug why
we're losing connection to ReadLine when we run 'o conf init'.

We have no API yet, but we have a Plugin :-) Thanks to Ulrich Pfeifer
for WAIT. Try 'wh' to see what gives.

Released 1.17.

=head2 Jan 29, 1997

More feedback for non-cooperative users.

Several potentially undefined variables now initialized.

Added support for ncftp. It is said to have superb features for sites
behind firewalls. We're now trying to use lynx or ncftp _before_
ordinary ftp.

Added option 'o conf init' to set all Configuration options
interactively whenever needed. Cannot document yet, because it breaks
ReadLine. Somehow ReadLine loses the connection to STDIN.

=head2 Jan 24, 1997

New Makefile.PL asks only questions to the very first user (when there
are no CPAN::Config nor CPAN::MyConfig files to load).

Again improved debugging capabilities for external ftp and
the completeness of Configuration parameters (load_succeeded).

Released 1.15.

=head2 Jan 24, 1997

Larry Virden discovered his hundredth bug. When the .netrc file
contains an autologin routine with "cd" for a given host, we did not
cd to the right directory. Fixed and improved debugging for the
external ftp invocation.

=head2 Jan 22, 1997

Found more incompatibilities: ParseWords had a bug that needs a
workaround. ref() worked slightly different too.

Fixed a bug in CPAN::Config::edit which set any value to undefined
when we just wanted to query it.

Fixed CPAN::FirstTime to have a locally set $/.

Gave FirstTime an automatically increasing version number.

=head2 Jan 22, 1997

Made it compatible with 5.003 for testing purposes. Thanks for
precious hints go to Mark D. Baushke again!

Released 1.11

=head2 Jan 20, 1997

Made the proxy environment variables configurable in the Config hash
(once again ;-)

Added documentation for readme and look.

Added completion for readme and look and fixed it for force.

reload cpan now just counts the redefined subroutines instead of
writing all the warnings to the screen. Made waiting less painful by
printing single dots (".") for very slow phases of the game.

Released as 1.10.

=head2 Jan 17, 1997

Raphael Manfredi considerably improved the logic of the external ftp
program. No .netrc needed anymore.

Made the proxy environment variables configurable in the Config hash.

Introduced the "Don't be silly..." message when they try to make,
test or install an author.

MD5 is now checked earlier (before we unroll the tarball).


Finished the readme method _without documenting it_. Documentation
follows after a short testing period. This method just displays the
readme file through a pager.

Implemented the look method _without documenting it_. Documentation
follows after a short testing period. This method opens a subprocess
shell in the associated directory, e.g. for manual building or
inspection. (Thanks to Gisle for the idea!)

=head2 Dec 23, 1996

Implemented the external-ftp fallback. We're deep in UNIX land here
again, sorry for that. We'll see how it goes on UNIX, then we can find
OS dependent fallbacks.

Released that as 1.08.

Another big documentation fix.

Fixed big bug in the parsing code for .netrc.

=head2 Dec 22, 1996

An afternoon of intense email exchange with Mark D. Baushke
E<lt>mdb@cisco.comE<gt> helped to iron out some nits and make the
whole thing more robust. A big thank you to Mark.

The CPAN::Bundle class now knows about force.

File::Copy was not use()d but needed.

Documentation turned out to be wrong and contain references to dead
code. Especially the bundle() and the bundles() functions are now
removed. Muchly improved docu.

Made the whole source text friendlier to read by adding comments to
each subroutine hinting the package.

Inactivity timeout introduced that may kick in when a Makefile.PL
expects a response but doesn't get it.

Implemented a lynx fallback.

=head2 Dec 21, 1996

Improved bundle mechanism.

Eliminated the star "*" that should save us some memory but introduced
complications far beyond what its worth.

Checked over occurrences of rename(). Replaced the one that might fail
due to file system boundaries with File::Copy::copy.

Introduced Text::ParseWords::shellwords instead of split for the
parsed command lines. This means, you can now set variables to such
complicated things as

cpan> o conf make_install_args 'CC="gcc.96q1 -B/usr/ccs/bin/" UNINST=1'

Thanks to "Mark D. Baushke" <> for the hint!!!

=head2 Dec 1, 1996

Added security, evals of CHECKSUMS and now take
place in Safe compartements.

CacheMgr now skips symlinks.

Released 0.45a.

=head2 Nov 30, 1996

New module CPAN::Nox is a wrapper with same functionality as,
but it will not load XS modules. Useful in a situation where you get
caught by binary incomapatibility (Where nights are longest) of a new
perl installation and (say) MD5 kills your CPAN session. Makefile.PL
now uses CPAN::Nox.

New method recompile() recompiles all installed dynamically loadable
extensions in one go.

=head2 Nov 21, 1996

Introduced a few sanity checks on data in urllist in the Makefile.PL
to prevent bogus URLs being consulted over and over.

Doug sent me another patch because commit didn't work. Thank you, Doug!

Small fixes in read_modpacks: read all entries, even those without a +
sign; read all entries, even if we know them already, pay special
attention to the entry :-)

The output of C<u> seemed a bit boring with all those C<Contact
author..> entries. I'm skipping those for now and display only those
that have a distribution file associated.

Introduced 'clean'. Works just like test and install.

=head2 Nov 17, 1996

Doug MacEachern contributed a powerful suite of interactive
manipulation of $CPAN::Config variables. Try 'o conf urllist' to get
an impreesion of the feature. The interactive changes can even be
committed back into the Config file. Wow. Thanks, Doug!

CHECKSUMS files were never reused. Now CPAN checks if an existing
CHECKSUMS file contains the checksum we're looking for.

C<install> quite a few times too often answered with "Foo::Bar is up
to date". Should be fixed now.

index files were never refetched. Fixed now.

Renamed misleading configuration option C<cache_expire> to
C<index_expire>, C<more> to C<pager>, and C<inhibit-startup-message>
to C<inhibit_startup_message>.

If make install does not succeed we now check for permission problems
and suggest to become superuser. The feature was suggested by Jon
Orwant. This will need a bit more work: check for uid, let them become
superuser without leaving the program and such.

Improved help in several places.

Released 0.42a.

=head2 Oct 1, 1996

Implemented "force". Usage is simply:
    force make args...
    force test args...
    force install args...
This forces the fetch, untar, makefilepl, make and install even in
cases where CPAN thinks, the package is either up-to-date or cannot be
built or whatever.

=head2 Sep 28, 1996


cpan> ! install(CPAN::Shell->r)    # install all recommendations
cpan> ! install(CPAN::Shell->u)    # install all uninstalled

or if you prefer

cpan> ! install(grep(/^[F-I]/,CPAN::Shell->r)) # only install from File to IO :-)

following a Dale Amon suggestion. CPAN::Shell->r and u return the list
of module names that are printed on STDOUT.

Released 0.40a

=head2 Sep 26, 1996

Write Bundle/ (even if no previous call to "b" happened) whenever

Check for a "Configure" script before writing your own
Makefile.PL. Run ./configure if you find it.

Don't check for %Term::ReadLine::Perl::, because that may be defined
without a good reason. Better check for
Term::ReadLine::Perl::readline. That's still silly, but I don't
pretend it's clever. We need a way to determine if a readline
interface is governing us.

Checking if STDIN is a terminal and not running Term::ReadKey and
ReadLine if not. Saves time _and_ allows batchmode to forgive
keystrokes during program execution.

=head2 Sep 22, 1996

More friendly setting of debugging options.

More checking of write permissions.

Rename of bundles/ directory to Bundle/ (allows perldoc read the pods).

Simplified the code shared between "r" und "u" command, added

Deprecated "o index" because it isn't really an option but an action
and renamed it to "reload index". Added "reload cpan". Added "o update".

Released 0.35a.

=head2 Sep 17, 1996

Support for CHECKSUMS files that have been gzipped by your CPAN site
admin. Check if file is readable if it is a local file (and you are
your own CPAN site admin :-) Released 0.29.

Direct call of install/make/test/bundle etc. without shell was
broken. Fixed and relleased 0.28.

=head2 Sep 12, 1996

Release of 0.26a.

Local source cache was ignored, now working.

'perl Makefile.PL < /dev/null'  now possible.

After release of 26a: Limit depth of modules to two levels to save
memory. Release of 0.27a.

=head2 Sep 11, 1996

Isolated both the FTP and the Shell subroutines into their own packages.

Made debug a method in package CPAN::Debug.

Added command o for setting options.

Added a newline here or there.

Added Ulrich's support for proxies.

=head2 Sep 10, 1996

Releasing Version 0.14-alpha. Nearly everything has been
rewritten. Too numerous changes to remember. This version is shell
oriented not batch oriented. Batches should be possible though.

Dropped the recommendation to install LWP, dropped the dependance on
LWP completely for UNIX systems.

Introduced CPAN::Config->{keep_source_where} as a pointer to the
directory where we store the fetched sources locally.

Introduced CPAN::Config->{makeplarg}, arguments to the '$^X
Makefile.PL' call.

Check for Net::FTP even when LWP is available.

Remove the lockfile in a signal handler.

Motherhoodified the pod section ;-)

=head2 Apr 28, 1996

0.04-alpha version announced only to the porters

0.01  Mon Feb 19 15:06:30 1996
	- original version; created by h2xs 1.16