2000-10-25  Andreas J. Koenig  <andreas.koenig@anima.de>

	* shell: The $term||= from 2000-10-20 broke the re-detection of
	ReadLine for fresh installations. Fixed that again so that both
	ways are possible, desposing the Stub interface and re-using an
	interface that is better than Stub.

2000-10-21  Andreas J. Koenig  <andreas.koenig@anima.de>

	* CPAN::shell: Now takes two arguments, one is the Prompt string,
	the second is the default first command line.

	* Released this snapshot as 1.58_51

	* hosthard: applied a patch by Michael Dean
	<sysmwd@blackhole.detir.qld.gov.au> to support wget.

2000-10-20  Andreas J. Koenig  <andreas.koenig@anima.de>

	* CPAN::Distribution::containsmods: Did not return a value, now
	returns the contained modules

	* CPAN::Distribution::get: chdir back to initial CWD

	* CPAN::anycwd: new routine replaces all occurrences of replicated
	two-line code

	* shell: chdir-ing back to initial directory at end of CPAN::shell

	* CPAN::exists: added a config loader because everything depends
	on it. Will have to identify other places that need it.

	* shell: Assignment of a readline interface to term now is a "||="
	rather than a "=" in case somebody calls shell multiple times.

	* Moved the call to read_metadata_cache from shell to
	CPAN::Index::reload so that (1) it isn't called so early and (2)
	programmers can enjoy its availability too.

	* CPAN::Config::commit: die when you can't write the config file.
	We did only warn, but it is more frustrating to repeatedly get the
	same questions asked than to get at least a good error message.
	Will have to catch some error conditions earlier.

2000-10-18  Andreas J. Koenig  <andreas.koenig@anima.de>

	* CPAN::Module::as_string: up to now the MANPAGE attribute was
	only generated for installed modules. Now we try to read the
	manpage headline if a get has been issued so that a build_dir
	exists. This is helpful for exploring CPAN without installing
	anything, e.g. when you have no or only slow access to a WAIT

	* Releasing as 1.58

2000-10-15  Andreas J. Koenig  <andreas.koenig@anima.de>

	* FAQ: two new FAQ items added: autobundle and readline

2000-10-07  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Setting Version to 1.57_68RC

	* POD: numbering FAQ items; rewording of FAQ item 6 about bundles;
	introduced FAQ item 7 about CPAN::Site.

	* CPAN::FirstTime::init: Making cache_metadata default to 1.

	* missing_config_data: Making cache_metadata a reason to rerun

2000-09-29  Andreas J. Koenig  <andreas.koenig@anima.de>

	* CPAN::DESTROY: Protected the call to $gz->gzclose with an if
	defined $gz. Thanks to abigail for reporting the bug, apologies
	that I'm also not sure if this fixes the cause, or just the

	* has_inst: 2nd warning for not having installed Net::FTP
	silencified with a global (Thanks to Anno Siegel for the

2000-09-16  Andreas J. Koenig  <andreas.koenig@anima.de>

	* 1.57_67 is a release candidate.

	* FirstTime: rewording of the intro for the cache_metadata feature
	from experimental to beta. Leaving default to off. As it is still
	turned off, I do not add the feature to the "necessary" features
	in sub missing_config_data. Will do so when default changes to on.

	* untar: for running the pipe, the external programs gzip and tar
	are OK to use but for a pure uncompress I prefer to use our own
	method gunzip for maximum code reuse (fallback to external gzip is
	there anyway) and less use of system().

	* hosthard: after Jost has approved that the code now is much more
	defensive against the install-an-inexistent-distribution errors,
	now the funkyftp programs are disallowed to process C<file> URLs
	at all.

2000-09-12  Andreas J. Koenig  <andreas.koenig@anima.de>

	* get: userid "anon" if cpan_userid does not provide one.

	* 1.57_66 for the sole purpose of testing the error provoked by
	the old lynx version. Next version will disable lynx for file:
	URLs and thus will doubly guard against the bug.

	* untar and gtest: enabled gtest with Compress::Zlib again, now
	with a test if the file size and buffer size are equal. In that
	case gtest returns false. untar now also uses gtest ahead of
	decompression to catch the error condition provoked by

          DB<5> x system "echo -n | /bin/tar xvf -"
        0  0

	The fact that tar returns TRUE on zero byte input could lead us to
	believe that we were doing a successful untar while in reality we
	had an uncompressed file that was completely bogus.

	Once again a big thank you to Jost Krieger who discovered this bug
	by feeding an inexistent distribution name to install() while he
	had an old version of lynx installed that did not discover the
	mistake and created the file as textfile containing an error

2000-09-11  Andreas J. Koenig  <andreas.koenig@anima.de>

	* gtest: disabled Compress::Zlib because it seems to offer no
	method to test if a file is compressed or not. If a file was not
	compressed, it happily treats it "as expected" setting no error. I
	was so sure that I tested this when it was introduced. We really
	need a test harness.

	* get: New instance variable had_no_makefile_pl

	* get: New instance variable was_uncompressed to later use it for
	heuristics if we're on the wrong track.

	* If we write a Makefile.PL on our own, we now choose the NAME
	parameter more carefully.

	* Ask user if he wants to proceed if the CHECKSUM file does not
	contain data about a downloded file.

	* hosthard: Skip "file" URLs

	* hosthardest: eliminated unused code for is_reachable

2000-09-10  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Tarball 1.57_65 (63 and 64 were not uploaded because I found
	errors during testing)

	* Bundle::inst_file: cleanup

	* unsat_prereq: decision to accept any installed version if
	PREREQ_PM says 0 or "undef" or undef.

	* follow_prereqs: broke this new method out of make because I want
	to repeat it in test. Repeating the check in test has the
	advantage that the user is reminded in time that still some prereq
	is missing.

2000-09-09  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Tarball 1.57_63.

	* rd_modpacks: do not let bundles be both bundles and modules
	anymore. Seems like memory bloat without any value.

	* reload: $last_time was set too early to a new value. It seems to
	have never manifested itself as a bug, but we now do the more
	correct localizing of the newer timestamp until we have read all
	three index files and then set the timestamp globally.

	* reload and read_metadata_cache: extend the index protocol to
	memory so that whenever a new protocol is introduced, the index
	gets loaded into memory asap.

	* instance vs set: moved the code that creates the RO pointer from
	instance to set and commenting the set method to have this side
	effect. This was the cause for a very difficult to diagnose bug.
	Thanks to Jost Krieger for discovering wrong content in Metadata.

2000-09-08  Andreas J. Koenig  <andreas.koenig@anima.de>

	* read_metadata_cache: More sanity checks.

	* _u_r_common: Added informational message about the number of
	matches in the database.

	* checklock: Checking $fh for undef. Thanks to
	Slaven Rezic for the report.

2000-09-06  Andreas J. Koenig  <andreas.koenig@anima.de>

	* lib/CPAN.pm (expandany): Distributions always had the habit to
	spring into existence, that means, people could say

	    test A/AN/ANDK/CPAN-1.57_60.tar.gz

	and got that thing downloaded if it existed on CPAN. Jost
	discovered this was broken. Fixed by replacing an expand() by
	instance() for distributions in expandany.

2000-09-05  Andreas J. Koenig  <andreas.koenig@anima.de>

	* undelay: After a jumpqueue we must not continue because success
	is unlikely. We set $self->{later} and the queuerunner calls

	* Bundle::inst_file: reviewed the code after Jost pointed out that
	it was suspectly formatted. Re-enabled the newer, better code that
	allows for multi-level Bundle package names.

	* Distribution::install: improved wording for the case where make
	failed (Thanks To Jost Krieger for spotting)

	* Bundle::as_string: CONTAINS was rendered as ARRAY(...)

	* expandany: added a scan for bundles as one could not install
	bundles immediately after program start but only after a "b"
	command (Thanks to Jost Krieger for the bugreport)

	* color_cmd_tmps: protection against deep recursion with a panic

	* expand: temporary introduced the "=" hack to eval code on the
	command line repeatedly. Now disabled again to prevent surprise.
	But as a reminder, I did run this command successfully before

	cpan> m '=length($self->id)==16 && substr($self->id,12,2) eq "::"'
	Module          Bundle::HTML::EP (N/A)
	Module	        Games::Cards::Tk (A/AK/AKARGER/Games-Cards-1.45.tar.gz)
	Module          Games::Worms::PS (S/SB/SBURKE/Games-Worms-0.61.tar.gz)
	Module          Games::Worms::Tk (S/SB/SBURKE/Games-Worms-0.61.tar.gz)
	Module          Lingua::Stem::En (S/SN/SNOWHARE/Lingua-Stem-0.40.tar.gz)

	* color_cmd_tmps: we're now coloring all objects when they enter
	the queue and we uncolor them when a command is finished. We just
	need a hook now to check if we really uncolored them all. What
	should the hook be? i ="$self->{incommandcolor}>0"

2000-09-04  Andreas J. Koenig  <andreas.koenig@anima.de>

	* color_cmd_tmps: rename the method reset_badtestcnt to
	color_cmd_tmps because it turns out to be the right place to reset
	sponsored_mods and maybe install_failed too, and if we mark them
	as dirty when used and as clean when reset, we might even succeed
	to have a tidy kitchen.

	* untar: backed out the preference towards Archive::Tar. It seems
	from reports I get and one hiccups I witnessed myself that
	Archive::Tar is not stable (sorry, no bugreport available). With
	the current state of CPAN.pm we cannot afford the additional risk
	from an external source.

	* Queue: backed out the change from string based queue to object
	based queue. I made some mistakes during transition and everything
	stopped working. This seemed the easiest way out.

	* reset_testcnt: introduced attribute badtestcnt for Modules,
	Bundles, and Distributions and method reset_badtestcnt to get rid
	of that counter before and after a command. During the command we
	inc the counter on unsuccessful make test commands. But we do not
	reset unknown dependencies. During 'make test' we up this counter
	if test fails and consequently do not repeat the testing. This
	should now safe much time if, say LWP tests fail and we have all
	of WWW::RobotRules, File::Listing, LWP, HTTP::Negotiate,
	HTML::Form, and LWP::Simple in a Bundle or reach the stuff via a
	dependency. Former versions would have repeated the testing ad
	nauseam. We now refuse on the second occasion and the user may be
	required to run something to finish building.

	* prereq_pm: split of method needs_prereq into unsat_prereq_pm and
	prereq_pm and letting the prereq_pm be stored in the object

	* cpl: added readme and dump to the list of supported keywords for

	* POD: documented the dump command in the debugging section of the
	manpage. Simplified the debugging section.

	* changed queue to work with objects instead of object IDs
	making it more natural to deal with them. Having the string
	representation there bit me several times in the past. At the same
	time shuffled some code from the queue-running loop to the
	queue-constructing loop thus catching errors before starting to
	work on the queue.

	* renamed dotdot_onreload to paintdots_onreload. Changed $redef
	from global to lexical.

	* lib/CPAN.pm (dump): made dump more userfriendly by adding a
	print statement, it is now a regular command to type C<dump
	Net::FTP>. But still left undocumented to augment comments from
	those who read the ChangeLog (That's you:)

2000-09-03  Andreas J. Koenig  <andreas.koenig@anima.de>

	* heavy re-structuring of Metadata in memory with high potential
	for breakage. All metadata are now split into a readonly and a
	read-write part and all objects have a pointer to the readonly
	part. The Metadata cache logic stores only the readonly part, so
	that no session-specific data will ever be found again in a future

	* AUTOLOAD: removed the autoloader support that was never used and
	seems not very intersting anymore with today's hardware. RCS: 1.325

	* removed all the %vd comments.

	* shortened all lines longer than 80 characters to make future
	patches better readable.

	* read_metadata_cache: Introduced protocol version number for

	* removing a 'no strict' around the shell loop I do not recall the
	reason of.

	* lib/CPAN.pm: Folding two occurrances of use vars into one.

2000-09-01  Andreas J. Koenig  <andreas.koenig@anima.de>

	* lib/CPAN.pm (readable): After release spotted en error in the
	FAQ about not being root. Improved it a little, added another FAQ
	and gave it the VERSION 1.57_57.

	* Releasing as 1.57_56 as candidate for 5.7.0

	* missing_config_data and FirstTime: declared cache_metadata as
	not yet stable enough to turn it on per default. The reason is
	that I want the official external data from CPAN and the generated
	internal data from the current session clearly separated and this
	will take another working session that I cannot provide before

2000-08-31  Andreas J. Koenig  <andreas.koenig@anima.de>

	* POD: Added two FAQs about not being root and about the look

	* Replaced all backticks that were misused in documentation or
	dialogs as pretty left quotes by single ticks. I think it was
	Markus Kuhn who said so.

	* float2vv: added conversion of float to visible v-string for
	comparisons. Added some tests too.

	* MD5_check_file: Now die instead of print when the MD5 checksum

	* untar and unzip: preferring Archive::Tar now that it works
	again. Adding extra security check by testing for absolute path
	and updir.

	* unzip_me: made it symmetrical to untar_me and added a few Signal
	checkers to both.

	* hosteasy/hard/hardest: now checking for $Signal and giving up in
	several places within the download loop. Thanks for the suggestion
	to Johan Vromans. I'd be ready to ask a question where to continue
	but it turns out to need careful wording because the loop is
	deeply nested: method, host, and within the methods LWP/Net::FTP
	or lynx/ncftpget/ncftp. Simple wording might cause more grief than
	just giving up.

	* localize: now setting $ENV for proxies if config has values for
	them. Thanks for the bugreport to Johan Vromans.

	* checklock: changed comment in the code

2000-08-30  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Applied 2 doc patches by Elaine and Jarkko.

	* Call to force now wants a first argument and this was not there.
	This was the reason why force DIST didn't work. Thanks to Jost
	Krieger for the bugreport.

	* install /xyz/ always needlessly went down the wrong path of
	trying to download "/xyz/". We're now catching this mistake
	earlier. Thanks to Jost Krieger for he idea.

	* changed the messages on a failure of make in test and install
	from "Oops" to something much more certifying. Thanks to Jost
	Krieger for the idea.

	* in vcmp short circuit for equality for speedup. Thanks to Jost
	Krieger for the idea.

2000-08-27  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Releasing as 1.57_53 without enough testing in the hope that I
	can test more the next days and maybe others can test a little.

	* CPAN::Distribution did not handle the force_update attribute
	correctly: it was never reset to false. Tried to fix that at the
	end of sub install and by limiting the scope of the force_update
	attribute to install, not to make anymore. Thirdly, the places
	where we leave the make, test or install by means of the signal
	handler, we also reset force.

	* Added a test for CPAN::Version::vcmp.

	* lib/CPAN/FirstTime.pm (init): corrected spelling (Thanks to Ask
	B. Hansen)

2000-08-25  Andreas J. Koenig  <andreas.koenig@anima.de>

	* rd_modpacks: track deletes on every reread, otherwise the
	metadatacache won't forget a thing ever.

	* Fixing Distribution->clean which was broken in that it set
	"force_update" leading to a mess when the user later tried to
	build this dist again. Thanks to Jost Krieger for spotting this.

	* Minor cleanups

	* CPAN::Version::readable now picks the head of the string

	* Storable::store => nstore. Thanks to Tim Jenness for the hint

2000-08-21  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Detected code duplication in CPAN::Shell::o and
	CPAN::Config::edit. Moved everything to CPAN::Config::prettyprint

	* Introduced package CPAN::Version which fixed and extended the
	support for v-strings. Old perls should not be affected at all and
	new perls should be protected against broken displays. New perls
	should also "do the right thing" as soon as the index files write
	"v1.0" for the literal v1.0 . Seems now feature-complete to me.
	Next thing to do is upgrade PAUSE and see what happens.

	* Applied a patch by Slaven Rezic to allow cacheing of the
	metadata from the index files via Storable.

2000-08-16  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Fixed numerous chdir that were not checked for success.

2000-08-13  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Thought about v-strings and their impact. Marked the relevant
	places in the code with "%vd" and applied some more or less simple
	changes to try a few things out. See Todo for a few memo
	sentences. At least diagnostics.pm is now reported fine as 1.0

	* Added support for Archive::Zip. The less external programs
	needed the better (?)

2000-08-11  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Changed all occurrences of $ in regular expressions to (?!\n)\Z
	which is a 5.004-save equivalent of \z. Thus patch 5406 to the
	perl core is re-integrated after it had been thrown out on

	* isa_perl logic was duplicated in CPAN::Distribution::isa_perl
	and in CPAN::Shell::_binary_extensions. Made the latter use the
	former. Also extended the Distribution object with CPAN_COMMENT
	that can be set from the "02..." index file. If that comment
	matches /isa_perl\(.+?\)/, then it is a perl and $1 is the

2000-08-01  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Quick bugfix release 1.56. Thanks to Bruce Barnett <barnett
	birch.crd.ge.com> who showed me that I had forgotten debugging
	statements in the CPAN::Module::inst_version method reminding me
	also that unpatched 5.6.0 still produces warnings where it
	shouldn't. A quick fix is in and I release that as 1.56

2000-07-30  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Made completion output for a,b,d,m sorted. I have no idea when
	this sorting was lost or if it ever was there.

	* Set version number to 1.55 and going to release today or
	tomorrow after testing.

	* o conf was not prepared for hash refs.

	* Fixed propagation of error report during Bundle installation.
	Until now recursive bundles reported each bundle's faiures
	separately. Now callers in addition report what called bundles
	reported. This still doesn't seem perfect because the report can
	come too early but at least it is better now than it was and if
	one reruns the install command on a bundle, the report will be
	correct on the second run.

2000-07-29  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Applied a patch by Daniel MuiƱo <dmuino@afip.gov.ar> that was
	submitted to p5p where a my($msg) declaration was conditional.

	* Applied a patch by Anno Siegel who encountered a rarely seen bug
	in the download logic wrt. gzipped vs. not gzipped downloads. He
	cleaned up the variable names too in that area and I cleaned some
	more variable names after him. I believe, the variable names there
	were really inappropriate/misleading.

	* Following a suggestion by Michael G. Schwern, I made "ask" the
	default for prerequisites_policy. The old default of "follow"
	seemed to intimidate some new users, he said, and I agree, the
	default should be as little intrusive as possible while still
	being useful. "ask" seems the right choice for a first time user.

2000-06-23  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Replaced the undocumented old semantics of
	C<$CPAN::Dontload{"Compress::Zlib"} = undef;> in favor of the more
	natural C<$CPAN::Config->{"dontload_hash"}{"Compress::Zlib"} = 1;>
	and documented that.

	* Eliminated all occurrances of E<39> in the POD because
	pod2html has a bug that mistreats them and we do not really
	need them. Thanks to Daniel S. Lewart for reporting his.

2000-06-18  Andreas J. Koenig  <andreas.koenig@anima.de>

	* The "a" command now always converts its arguments to uppercase.

2000-06-17  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Introduced has_usable which is pickier than has_inst. Thanks to
	a report by Ian Phillipps who reported the Net::FTP/Net::Config
	connection: e.g. upgrading the processor deprecates Net::Config
	but not Net::FTP.

	* Applied a patch by Ben Tilly that changed the exception of
	isa_perl in CPAN::Distribution::make() from dying to warning so
	that bundles can continue if they contain core modules.

2000-04-15  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Thanks to "Magnus Ullberg" <mullberg@hotmail.com> who reported
	that configuring lynx with arguments actually works, so I
	documented it in the firewall section.

2000-03-28  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Change ${DISTVNAME} to $(DISTVNAME) in the Makefile.PL because
	nmake can't deal with the former. Thanks to David P. Mott
	<dpmott@sep.com> for the report.

2000-03-25  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Change all \z back to $ because \z is not in perl5.004_05.
	Thanks to Paul Schinder <schinder@pobox.com> for the report.
	Update: Later Ronald Kimball posted the better solution to P5P. He
	said "'\z' is equivalent to '(?!\n)\Z' and '\Z(?!\n)', which
	should work under 5.004."

2000-03-22  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Both Andrew Speer <andrew.speer@isolutions.com.au> and Michael
	G. Schwern <schwern@pobox.com> sent me a patch to the effect that
	version numbers in PREREQ_PM are honoured. Till now we installed
	the newest version for all PREREQ_PMs. I applied a mishmash of the
	two patches.

2000-03-20  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Found bug in the changes made on 03-14, the return value of
	&CPAN::Config::edit must be true.

2000-03-17  Andreas J. Koenig  <andreas.koenig@anima.de>

	* lib/CPAN.pm: no lib "."; since we do a lot of chdirs *and* do a
	lot of demand-loading, we need to prune the current directory. I
	wonder how everything could work so smoothely with the default
	INC path.

2000-03-14  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Editing the $CPAN::Config hashref had always tried to keep the
	type of hash values but that was errorprone. Switched to matching
	/list\z/ in the key instead.

	* Changing the urllist now triggers resetting of Thesite and
	Themethod. Maybe this needs a more general solution that resets
	any cache of any variable, but for testing the effect, I start
	with these two.

2000-03-11  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Added an FAQ section to the manpage. First 2 Fs deal with

2000-03-10  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Updated the isa_perl checks to match 5.6.0 style.

	* The 02modules... file is now verified against its Line-Count
	header. The other index files need new headers to verify them.

	* Without any net access we did not make it through the
	configuration dialog. Fixed now.

	* Apply patches 4416, 4419, 5406 and 5409 from perl-5.6.0

2000-01-08  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Releasing 1.52 which is a pure bugfix release. New functionality
	is there but not used or not documented. Should be very stable.

2000-01-03  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Added a CPAN::Distribution::containsmods method that lists all
	modules within a distribution.

	* reload index now removes the whole old index. No, wait a minute,
	that's stupid. We want to keep session info. This is just a
	temporary measure to improve debugging. What we need is "wipe
	index" or some such and we need it for debugging only. [Backed out]

	* Text::Wrapping output of "o debug".

	* Fixed an uninitialized warning in CPAN::Shell::expand()

	* Protected call to close() in DESTROY with "if defined".

	* Allow "#" comments in a bundle definition section.

	* Text::Wrapping bundle install summary.

2000-01-02  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Overhauled the help page that gets output on "h", documented
	"get", undocumented "install r", it never worked (Thanks to Peder
	Stray <pederst@ifi.uio.no> for spotting)

	* ncftpget made to work again by changing directory before
	downloading (spotted aeons ago by Jarkko Hietaniemi)

1999-12-31  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Applied a patch by Paul Schinder <schinder@pobox.com> which
	corrects the computation of disk usage on the Mac.

1999-12-29  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Increased 30 to 60 in FirstTime where we "protect" against old
	MIRRORED.BY files and protect against endless loop if MIRRORED.BY
	remains older. Thanks for spotting the bug to James P. Goltz
	* Applied patch from Doug MacEachern that implements cvs_import
	without documentation.

1999-10-26  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Joe Schell <jschell@peakss.com> sent me a fix that disabled
	processing of bundles on NT.

1999-10-15  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Fixed a typo reported by Stas Bekman <sbekman@iil.intel.com>

1999-10-01  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Added a posting by Larry as a comment to rethink use of

1999-08-01  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Applied a patch by 1999-06-13 Adrian Aichner
        (hosthardest): Initialize $netrcfile with $netrc->netrc.
        (untar): Attempt piping gzip output to tar irregardless of
	$OSNAME. Run commands separately in case of error.

	* Applied a patch from Ilya Zakharevich <ilya@math.ohio-state.edu>
	for unbuffering STDOUT and STDERR to get sane behavior in pipes.

1999-07-30  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Fixed a floating point issue that came up with DBD::ADO. See
	stringify comment in CPAN::Module::inst_version. Thanks to Lupe
	Christoph <lupe@lupe-christoph.de> and Michael G. Schwern
	<schwern@pobox.com> for the reports and Tim Bunce
	<Tim.Bunce@ig.co.uk> for the suggestion how to fix.

	* Fixed my email address in the manpage

1999-07-28  Andreas J. Koenig  <andreas.koenig@anima.de>

	* CPAN::Nox was broken, probably since 5.005's new AUTOLOAD
	behavior. Thanks to Marc Lehmann <pcg@goof.com> for the report.

1999-05-23  Andreas J. Koenig  <andreas.koenig@anima.de>

	* The force pragma no longer removes its record of prerequisites
	that it has already dealt with. This removes a potential for
	infinite loops when force is in effect.

	* Added a CPAN::InfoObj::dump method that can be used like so:
	! print expand("Distribution","JWIED/DBD-CSV-0.1021.tar.gz")->dump
	! print expand("Module","DBD::CSV")->dump
	Not particularly userfriendly, thus left undocumented.

	* Added a check if Makefile.PL really wrote a Makefile.

1999-05-22  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Applied another patch by Ilya for return value of gzreadline
	with regard to -1: <19990522144647.A15778@monk.mps.ohio-state.edu>

	* Applied Ilya's patch for MD5_check_file for READ returning -1.

1999-05-08  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Improved error message if cpan_home can't be created (bug report
	by Jarkko Hietaniemi <jhi@iki.fi>)

1999-04-19  Andreas J. Koenig  <andreas.koenig@anima.de>

	* Added a note about the correct format of file URLs

	* Added documentation to CPAN.pm for how to write cronjobs that
	watch The CPAN (thanks to Brian Moseley <ix@cp.net> for asking)

	* FirstTime: initialize urllist to be an empty array, because
	otherwise it could accidentally become a string

	* Renamed Changes file to ChangeLog and switched format to
	emacsens ChangeLog format

=head2 March 1999 after 1.48

FirstTime now detects empty MIRRORED.BY.

Updated documentation about private bundle definitions, reflecting the
new dependency capabilities.

Removed the documentation for keep_source which was a leftover from
very old times.

=head2 February 1999 after 1.47

Bundle::CPAN didn't reflect File::Spec, nor did the PREREQ_PM

Queue was not reset at the end of the shell loop. 

mkpath in Firsttime could let CPAN die. Is caught now.

Loading of config file now deferred till the first command calls
CPAN->all_objects. all_objects is the renamed method all() BTW. I
renamed it because I prefer to have method names that are not too
common words. If that causes any difficulties, please let me know.

Chris Nandor sent a patch to enable a look() replacement for the Mac
(which resides in MM_Mac.pm)

New feature: when Term::ReadLine::{Gnu,Perl} is not available, probe
for it repeatedly and if it's there use it immediately.

Finally support for T::R::Gnu added. On my installation, I now must
use ^J instead of RETURN because RETURN prints a ^M. I have no idea
who's to blame for that. Suggestions for patches welcome.

Probing for LWP::UserAgent instead of LWP before we run

=head2 January 1999 after 1.46

Robin Barker <rmb1@cise.npl.co.uk> sent me a patch to Firsttime.pm
where it had asked the wrong question (Cache instead of Policy).

=head2 January 1999 after 1.45

Chris Nandor sent me patches over 1.45 to make us MacOS compatible!

=head2 January 1999 after 1.44

Took a stab at dependencies. A separate package CPAN::Queue queues the
items to be built. Bundles work unaltered, mudules have the ability to
let others pass (queue jumping). Typically they let the prerequisites
go to the head of the queue before they try to make themselves. Seems
to work so far. I release a version 1.44_51 to let the community test
before I try to up the version number.

1.44_52 is a cleanup. The needs_prereq code now only returns the
prereqs u to the caller and doesn't contact the queue directly. That
way the caller can decide to queue them all and requeue himself what
he does. jump_queue now accepts an array of items. Code seems
compacter and easier to debug.

Checking $^O for C</win/i> and not for C<eq "Win32"> because
apparently some say Win32, others say MSWin32. Needs to be bugreported
to p5p.

1.44_53 fixes a bug found by Michael G. Schwern <schwern@pobox.com>:
Parsing of the PREREQ_PM in the Makefile fails if the module names
contain colons. As my patch to MakeMaker is being questioned, I also
back out the code for the future MakeMaker.

1.44_54 adds prerequisites_policy options and fixes a bug spottet by
Michael G. Schwern. Moreover, I abandoned the Safe compartement within
needs_prereqs and replaced it by a regular expression.

In 1.44_55: Spider Boardman <spider@Orb.Nashua.NH.US> sent me a patch
that fixes a problem he had with forking during inactivity_timeout
(Message-Id: <199809291706.NAA10786@Orb.Nashua.NH.US>).

Applied a typo patch by abigail@fnx.com sent to P5P.

Ater 1.44_55 Michael G. Schwern sent me a documentation patch for the
manpage to reflect the dependency tracking. He also reveiled the
nonsense in a sleep 2 statement that I consequently removed. And he
motivated me a little to write a comment on how I imagine that queuing
actually works. The comment is in the source code.

Cleaned up the needs_prereq routine, it had lots of unused code.

=head2 December 1998 after 1.43

Greg Ward <gward@ase.com> sent me a patch to make read_mirrored_by()
user-friendly. Selection of sites is now done in three layers for
continents, countries and sites separately.

Bharat Mediratta <bmedirat@calicotech.com> sent in a patch that
inserts a '<' file redirector in CPAN::Tarzip::untar which helped him
to work with a strangely broken gzip program on his Windows machine.
Later Eric Von Zee <evonzee@tritechnet.com> sent me a note that there
is a version of tar for Windows that doesn't work with pipes at all.
Changed that again, so that on windows we uncompress the file and then
untar it in another system() call.

Made a few formatting changes to help cperl-mode.

=head2 December 1998 after 1.42

1.42 had a debugging line in the middle of the code, so a very quick
1.43 had to go out.

Added a simple cpan script that calls the shell. Thanks to Jochen
Wiedmann <joe@ispsoft.de> for giving me the kick.

Applied patch by "Douglas L. Schrag" <doug@walker.schrag.mi.us> posted
to P5P as with Message-Id
that fixes a problem with using lynx as ftp back end.

=head2 December 1998 after 1.41

Win32 could not process 2>&1. Fixed now. Thanks to Randy Kobes
<randy@theory.uwinnipeg.ca> for the report.

'make test' seemed to hang because configuration was not yet done.
Changed the test to run without configuration.

=head2 July-November 1998 after 1.40

Added documentation by Graham Barr about perl on firewalls. Thanks,

Added documentation how I manage the populating of a perl freshly
installed perl.

Keep a backup copy of configuration files during commit.

Applied a patch by Norbert Goevert
<goevert@amaunet.informatik.uni-dortmund.de> to fix the "CPAN.pm
overwrites Bundle/CPAN.pm" bug. Thanks, Norbert!

Introduced a signal PIPE ignore in CPAN::FirstTime so that hitting 'q'
during sitelist cannot throw you out of the whole program. Thanks to
chris patti <cpatti@bur-po1.bbn.com> for the report.

Applied a patch by Slaven Rezic <eserte@cs.tu-berlin.de> to introduce
policies how often the cache is scanned for sizes. Currently
implemented "atstart' and 'never'. Interesting further options should
be 'after_install' (i.e. only after an install) and 'threaded' (i.e.
in a low priority thread).

Added a summary feedback at the end of a bundle install for easier
checking of what went wrong.

Don't require CPAN::Nox in CPAN::FirstTime::init if there is already
CPAN.pm loaded. Thanks to Albert Dvornik <bert@genscan.com> for the

=head2 July 1998 after perl5.005 is out which contains 1.3901

Improved documentation of Bundle::CPAN, upped version number to
prevent accident where CPAN.pm overwrites Bundle/CPAN.pm.

Added a warning when CPAN::Bundle->contains() returns zero entries.

Disabled a shortcut in find_bundle_file() that was responsible for the
C<CPAN.pm overwrites Bundle/CPAN.pm> bug.

Added C<h> to DSLI statuses C<L> and C<I>.

Added some blurb for CPAN::WAIT in the manpage.

Changed the shell loop to check for question marks with a regex
instead of eq().

=head2 July 1998 after 1.3901

Added support for ncftpget and don't use ncftp anymore if ncftpget is

In the routine hosthard, add an optional C< < /dev/null >, so that
ncftp doesn't hang. I fear this would introduce incompatibilities with
other OSes, so it must be turned on explicitly. [Left undocumented]

Larry Virden reports that nonsense files can result from bad user
input. Fix: Delete files after localize() if we didn't succeed.

=head2 July 1998 after 1.39

Insert a few C<local($/)="\n"> to work around a bug in threaded perl.
Sarathy puts this version into 5.004_72 as 1.3901

=head2 July 1998 after 1.38

Folded in Ilya's changes to the CPAN::FirstTime that comes with perl.

=head2 June 1998 after 1.37

Applied a patch by Lupe Christoph <lupe@alanya.m.isar.de> that fixed a
newly introduced bug in FirstTime due to the recent %Config "fix". The
recent fix introduced a check of %Config for external programs tar,
gzip, etc. This fix revealed that Config.pm does not check for many of
these externals but nonetheless defines them as "". Lupe introduced
more checks to guard against such Configs.

=head2 June 1998

Made help an alias for h (Thanks to Stig HackVan <stig@hackvan.com>
for the hint)

Constant functions in Compress::Zlib now called with FOO() instead of

"Preston L. Bannister" <preston@home.com> reported two Win32 problems
in CPAN::FirstTime: don't test for existance of exe files and try to
determine make from %Config. Fixed.

Following a suggestion by Tkil <tkil@scrye.com>, I made bye and exit
aliases for quit.

Thanks to a bug report by Andrew Johnson
<ajohnson@gpu.srv.ualberta.ca> tracked the buggy translation from
distribution names to authors' names after the authors' directories

Thanks to a suggestion by Jarkko Hietaniemi, added output of the
author's email address in several places, so the users can pester them
more easily.

=head2 May 1998

Courtesy Mark Conty <mark_conty@cargill.com> patch to let the funkyftp
programs deal with any protocol, not only ftp. We'll see how well this
works out.

=head2 April 1998

Disables Compress::Zlib with CPAN::Nox.

Added email address to ``Contact Author'' message, so they are
encouraged to write them immediately.

Suppressing ``There's a new CPAN.pm available'' when they are already
trying to install exactly that.

=head2 February 1998

Fixed the logic when to use Archive::Tar and when to use a system
call. Priority takes the system call because Archive::Tar is slow. If
tar or gzip isn't there, we use the modules. Besides, this fixes a
horrible bug in 1.35 that breaks havoc if Archive::Tar is there but
Compress::Zlib is missing. That's the reason why I make this release
so quickly. Thanks to D Roland Walker <walker@sky.nlm.nih.gov> for the

=head2 January 1998

Activated the code for Archive::Tar support. After Sarathy's updates
to Archive::Tar it seems ready for prime time.

Retrofit for 5.003 again.

FirstTime: Moved the configuration of proxies up, so they are
configured before the URLs come.

=head2 January 1998

Renamed packages CPAN::Gzip and CPAN::Tar to CPAN::Tarzip.

Discovered that version 1.33 was broken for modules that want to
implement a dialog in Makefile.PL. Released 1.34 with a step back to
calling system() for the 'perl Makefile.PL' call instead of the
proposed open(PIPE).

=head2 January 1998

Larry Virden reported: "cpan> install Image::Colorimetry" doesn't give
an answer at all. We are more verbose now.

Applied a patch by Ilya Zakharevich to improve the documentation.

Simplified CPAN::FirstTime for Newbies (automatic configuration
available), advanced users (the MIRRORED.BY list is available for
selecting CPAN sites) and myself (code overhaul).

Made the output of 'o conf' more verbose: now tells us which
Configuration files have been read.

Added a Gzip abstraction layer that works with Compress::Zlib as well
as with the previously used system().

Added support for Archive::Tar. I had to comment it out again, because
I found a bug in Archive::Tar.

Updated Bundle::CPAN to reflect Compress::Zlib and Archive::Tar.

Documented how the signal handling within the shell is supposed to

Added a Signal breakpoint to 'r' and 'u' command.

Changed the 'perl Makefile.PL' call from system() to open().

=head2 January 2, 1998: v1.32

This release fixes the most urgent bugs reported during the last 5
months. See the Todo file for unfixed bugs and planned features.
Please let me know if your bug report isn't addressed in one of the
"Changes" or "Todo" file. Let me know, if your favorite feature
request doesn't show up there. Maybe I've overlooked something. Thank

CPAN::Config::load no longer changes @INC (bug spotted by Ed Peschko)

Build a new perl only when C<force> is in effect or they asked for it
via the Distribution name. (Thanks to Ulrich Pfeifer and many others
for reporting this)

Reenabled the Cache Manager that was disabled for a long time, I don't
know why. Thanks to Paul-Joseph de Werk <Paul.deWerk@MCI.Com> and
Hallvard B Furuseth <h.b.furuseth@usit.uio.no> for spotting the bug.

Fixed a "Use of undefined value" warning in the completion when

Fixed the signal handling code to go back to the cpan prompt and not
leave the shell loop. Still a second ^C is interpreted as user panic
which causes a cleanup and bye bye. (Thanks to Tom, Jarkko and Ilya
for reporting the deficiency in the old code)

If LWP is present, Net::FTP is now being tried directly. It turned out
that some networks setups work well with only one of them, not the
other (Thanks for the reports from e.g. Alan Burlison, Stephen Zander,
Phil Aston, et al.).

If a package comes with a Makefile but no Makefile.PL, we now try to
use that Makefile. Previously we overwrote the delivered Makefile.
(Thanks to Larry Virden for spotting that)

The MANPAGE headline now gets extracted from a .pod file if the .pm
file doesn't contain any.

=head2 October, 1997

In CPAN::FTP::hosteasy no longer skip Net::FTP when LWP is available.
Thanks to Alan Burlison for the report.

=head2 September, 1997

Made it 5.003 compatible again.

Applied a *big* documentation patch by Larry Virden. Thank You, Larry!

=head2 September, 1997

Hugo van der Sanden sent me a patch to (a) ignore a SIGPIPE when in
the readme, and (b) enable the cache to be used as an incomplete CPAN
site that in turn offers its files via ftp. The index files are now
stored with their original names instead of the 8.3 counterparts. I
very much like this new feature. Thanks, Hugo!

=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
<vladimir@cs.ualberta.ca> 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 <ilya@math.ohio-state.edu> 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 AutoSplit.pm. 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. <rmaus@monmouth.com> 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 Foo.pm.gz files that can still be found on CPAN.

=head2 April 16 1997

Applied patch by Achim Bohnet to the TRL logic (To:
perl5-porters@perl.org Subject: CPAN & TRL-Gnu Date: Fri, 04 Apr 1997
10:09:03 +0200 From: Achim Bohnet <ach@rosat.mpe-garching.mpg.de>)
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 03modlist.data.txt 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" <mdb@cisco.com> for the hint!!!

=head2 Dec 1, 1996

Added security, evals of CHECKSUMS and 03modlist.data.gz 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 CPAN.pm,
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 CPAN.pm 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

	Local Variables: