# ChangeLog for Portage; the Gentoo Linux ports system 
# Copyright 1999-2004 Gentoo Foundation; Distributed under the GPL v2
# $Id: ChangeLog.000,v 1.3 2004/10/04 13:58:57 vapier Exp $

  *** THIS IS FOR ARCHIVAL PURPOSES ONLY -- DO NOT MODIFY ***
  *** THIS IS FOR ARCHIVAL PURPOSES ONLY -- DO NOT MODIFY ***
  *** THIS IS FOR ARCHIVAL PURPOSES ONLY -- DO NOT MODIFY ***
  *** THIS IS FOR ARCHIVAL PURPOSES ONLY -- DO NOT MODIFY ***
  *** THIS IS FOR ARCHIVAL PURPOSES ONLY -- DO NOT MODIFY ***
  *** THIS IS FOR ARCHIVAL PURPOSES ONLY -- DO NOT MODIFY ***
  *** THIS IS FOR ARCHIVAL PURPOSES ONLY -- DO NOT MODIFY ***
  *** THIS IS FOR ARCHIVAL PURPOSES ONLY -- DO NOT MODIFY ***
  *** THIS IS FOR ARCHIVAL PURPOSES ONLY -- DO NOT MODIFY ***

  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: TGL's fixes
  for exec/child/wait problems. Unset GREP_OPTIONS GREP_COLOR. has() and use()
  no longer attempt to determine if they are to be quiet or noisy -- They
  default to noisy -- useq() and hasq() are the non-verbose versions.
  EBUILD_PHASE set to add a hack-ish way around global scope calls in
  eclasses -- NOTHING SHOULD BE CALLED IN THE GLOBAL SCOPE. Touchup to the
  inherit() code that should finally allow the removal of the ECLASS and
  INHERITED settings. Removed tty (use/has) calls. Removed dirname calls --
  portage.py handles setting the dbkey filename now.
  
  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> emerge: Ed Catmur's
  (with a  little TGL added in) patch for --ask. Added a 'metadata' target
  that skips the sync and only updates the cache. FEATURES="getbinpkg" added.
  TGL's exit code fixes. Fixed match code for -S so it doesn't complain about
  specific and double versions. Unmerge via dbpath fix. Rewrote rsync's
  options that supports --verbose and --quiet operation now and can force
  checksumming all files using --debug. Sort the files in the cache update
  so it's a little more predictable. 

  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> prepstrip: changed 
  --strip-debug to --strip-unneeded.

  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> getbinpkg.py: Updates to
  enable HTTP/HTTPS authentication.

  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> portage.py: best_from_dict
  added to grab the best entry from set of dicts using a list of the keys for
  priority. jstubb's patch to fix listdir -- splits it into a cache and list
  setup. jstubb's patch for varexpand to handle $VAR better. Latexer's patch
  for KernelVersion code to use Makefiles instead of the version.h. Modules
  are loaded from /etc/portage/modules or defaults, whichever works. Fixed
  the /etc/make.profile-is-missing traceback. Spawn can be given 3 pipes to
  redirect stdin,stdout,stderr to specific outputs, terminals, or files.
  TGL's patch for cache functions in portage.py so that they do not cache at
  inappropriate times. PORTAGE_TMPFS is now used if set as a temporary file
  operation area -- recommended to actually be a ramfs/tmpfs filesystem for
  speed. Genone enhanced the deprecated profile patch.

  31 Jan 2004; Masatomo Nakano <nakano@gentoo.org> emerge: Fixed --skipfirst
  bug. This closes #36880.

  29 Jan 2004; Masatomo Nakano <nakano@gentoo.org> emerge: TGL's patch
  for imporving overlay verbose. This closes #39765.

  27 Jan 2004; Masatomo Nakano <nakano@gentoo.org> portage.py: Fixed
  autouse bug. autouse were ignored.

  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> emerge: Output failed
  cache updates during emerge sync.

  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> *: VDB_PATH fixes.

  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> portage.py: Only use
  custom profiles when not called by repoman. ROOT never changes profile
  roots, only custom/system profiles var/cache/edb/virtuals. Sandbox fix
  where sandbox was creating an invalid logfile (not giving a summary)
  due to a '/' in SANDBOX_LOG. Turned down the Lockfile output. Double
  check the INCOMPLETE MERGE identifications as it can be caused by cache.

  24 Jan 2004; <nakano@gentoo.org> emerge: Improved timestamp check 
  when 'emerge sync'. Added catching amiguous error when unmerge.
  This closes #24325.

  23 Jan 2004; <nakano@gentoo.org> emerge, portage.py: Fixed 2 bugs. 
  Portage doesn't read local virtuals file, which happens on only cvs
  version. package is blocked by itself.

  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> portage.py, emerge:
  Fix from genone for emerge's direct reading of packages and his patch
  that also adds in /etc/portage/profile as a stacked profile.

  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> portage.py: Completed
  inheritence capabilities for portage.config reading some files. Moved a
  copy of the getvirtuals() function into settings to handle multiple
  profiles properly.

*portage-2.0.50_pre17/18/19 (21 Jan 2004): Modules for DBs and quick fixes

  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> *: Moved all references
  to var/db/pkg to portage.VDB_PATH --- This will change again -- NEED TO
  BE MOVED INTO A PATH/CONSTANTS SETUP.

  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> dosed: Quick fix for
  the basename missing/misplaced issue.

  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Added
  /dev/console to PREDICT to attempt a workaround for a serial console
  bug. dbkey is now set through portage.py/doebuild to allow for modular
  db code.

  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> emerge: regen doesn't
  require root anymore. Edited the timestamp check to be a little more
  friendly -- delete the portdir timestamp and it won't use the alternate.
  Fix some permission settings. Added some warnings in for cachedirs that
  are very likely to ruin your system. Cleaned out some of the eclass code
  that isnt valid any longer.

  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> portageq: Added vdb_path
  as a target to get the db directory. Quickpkg uses this.

  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> portage.py: Added
  load_mod() -- grabs a class/function from a module and passes it back
  without loading the module into the global scope. Added unique_array()
  which eliminates duplicates from an array. grab_stacked() operates like
  the other grab* and getconfig functions, but takes a filename and a set
  of paths that it will apply incrementally or clobbers -- for profile
  inheritance. getconfig no longer exits on non-existance returns None.
  Class config now should be passed a profile path and a set of incremental
  values instead of using the globals -- defaults to using the globals
  presently and print an error message. Adding support for module configs
  as a set of strings 'class.subclass.objectmodule':'module.to.use.object'
  for load_mod and the database modules. Profile inheritance started. Killed
  the eclass() super-function and replaced it with class eclass_cache that
  is visible and conceptually simpler -- Also uses the plugable modules.
  Cleaned out the sync calls for the DBs. MASSIVE simplification of the
  aux_get code -- removed memory-caching in favor of system cache (actually
  faster in all cases so far -- P100 and P4-2.2G). Lockfile usage around the
  cachefile.
  
  21 Jan 2004; Nicholas Jones <carpaski@gentoo.org> portage_db_*: Updated
  the API a little but to have permissions set properly. A little more
  reorganization and removed the keycount checks.

  21 Jan 2004; Masatomo Nakano <nakano@gentoo.org> emerge: download size 
  should not be displayed when the package is nomerge with --tree.

  20 Jan 2004; Masatomo Nakano <nakano@gentoo.org> portage.py: Reverted
  ambiguity package fix in cpv_expand().

  20 Jan 2004; Masatomo Nakano <nakano@gentoo.org> emerge: Moved
  backup timestamp.chk file from portage tree to PORTAGE_TMPDIR.

  20 Jan 2004; Masatomo Nakano <nakano@gentoo.org> emerge: Reverted the 
  backing up the timestamp.chk fix.

  20 Jan 2004; Masatomo Nakano <nakano@gentoo.org> emerge: Improved the
  list of --tree by TGL's patch. This should close #38070.

  20 Jan 2004; Masatomo Nakano <nakano@gentoo.org> emerge: Removed debug
  message without --debug. This should close #23840.

  19 Jan 2004; Masatomo Nakano <nakano@gentoo.org> emerge: Improved
  timestamp check of rsync. This should close #37403.

  19 Jan 2004; Masatomo Nakano <nakano@gentoo.org> portage.py: Improved
  regeneration ld.so.cache. This should close #37858.

  19 Jan 2004; Masatomo Nakano <nakano@gentoo.org> emerge: Fixed bug which
  emerge doesn't block same package but different version.
  (example: DEPEND="!<cat/pkg-1.0.0" in cat/pkg-1.0.0.ebuild)

  19 Jan 2004; Masatomo Nakano <nakano@gentoo.org> portage.py:
  Modified cpv_expand() to check package.mask. This should close #38592.

  19 Jan 2004; Masatomo Nakano <nakano@gentoo.org> portage.py: Escaped
  regualar expression for replace entry in fixdbentries().

  18 Jan 2004; Masatomo Nakano <nakano@gentoo.org> portage.py:
  Fixed AUTOCLEAN delay problem in .50pre* by TGL's patch. This close 
  #38189. Fixed unmerge failture bug when 'ebuild foo-1.0.0 unmerge'.
  These close #38189, #38366

  18 Jan 2004; Masatomo Nakano <nakano@gentoo.org> emerge, portage.py:
  Fixed "ebuild /foo/bar-1.0.0.ebuild unmerge" and "emerge bar-1.0.0 unmerge" 
  problems. This should close #38420.

  17 Jan 2004; Masatomo Nakano <nakano@gentoo.org> portage.py: Fixed
  "!<=" style block problem. Fixed symlink with absolute path 
  problem in treewalk().

*portage-2.0.50_pre16 (13 Jan 2004): Quick Fixes -- ~arch version

  13 Jan 2004; Nicholas Jones <carpaski@gentoo.org> portage.py: Removed an
  unnecessary depend call that double eclass-using ebuild's cache regen
  time.

*portage-2.0.50_pre15 (12 Jan 2004): Quick Fixes -- ~arch version

  12 Jan 2004; Nicholas Jones <carpaski@gentoo.org> portage.py: Unmerge
  traceback fix.

*portage-2.0.50_pre14 (12 Jan 2004): Quick Fixes -- ~arch version

  12 Jan 2004; Nicholas Jones <carpaski@gentoo.org> emerge: Fix for
  traceback on '-S'.

  12 Jan 2004; Nicholas Jones <carpaski@gentoo.org> repoman: Fix for
  traceback on --help.

  12 Jan 2004; Nicholas Jones <carpaski@gentoo.org> sandbox: Fix for
  sandboxpids.tmp file accesses.

  12 Jan 2004; Nicholas Jones <carpaski@gentoo.org> portage.py: Sandbox, as
  above. Catch invalid package names and print a sane message about it.

*portage-2.0.50_pre13 (11 Jan 2004): Fixes

  11 Jan 2004; Nicholas Jones <carpaski@gentoo.org> cnf/*: Updated the
  Advanced masking section to aid the reduction of user complaints and
  requests for unreasable usage of ACCEPT_KEYWORDS.
  
  11 Jan 2004; Nicholas Jones <carpaski@gentoo.org> portage.py: A counter
  fix was fixed to actually check the counters of all CP versions to ensure
  the new counter is higher than all existing ones. Modified the dblink
  class to have class lockfiles for the db and tmpdb dirs as well as lock
  other files before editing. Reorganization of the merge code in dblink
  so that the tmpdb is filled immediately after preinst and prior to the
  actual FS merging -- COUNTER and CONTENTS go directly into the tmpdb
  and not into the infodir.
  
*portage-2.0.50_pre11/12 (09 Dec 2003): repoman/binpkg/exit conditions

  09 Jan 2004; Nicholas Jones <carpaski@gentoo.org> emerge: getbinpkgonly
  fixes for emerge -G world, should behave properly now instead of using
  ebuild masks. Only downloads immediately before a merge -- fetchonly now
  applies to binary packages.

  08 Jan 2004; Masatomo Nakano <nakano@gentoo.org> repoman: Ignore other 
  arches check in repoman when --ignore-other-arches(-I).

*portage-2.0.50_pre10 (06 Dec 2003): API change + enhancements

  06 Jan 2004; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Fix for
  dyn_preinst being called before IMAGE was set -- IMAGE is now valid
  in pkg_preinst. Added suidctl for SELinux.

  06 Jan 2004; Nicholas Jones <carpaski@gentoo.org> emerge: Added -P to
  initial cvs checkout.

  06 Jan 2004; Nicholas Jones <carpaski@gentoo.org> quickpkg: Fix for
  the 'tar up /' problem.

  06 Jan 2004; Nicholas Jones <carpaski@gentoo.org> portage.py: Caught a
  traceback generated by bad depend atoms for repoman. Fixes from genone
  for package.*. Fixed the checks for doebuild calls in treewalk that was
  ignoring exit conditions for ebuilds.

  04 Jan 2004; Masatomo Nakano <nakano@gentoo.org> repoman: Added PDEPEND
  dependency check. This closes #24796

  04 Jan 2004; Masatomo Nakano <nakano@gentoo.org> repoman, portage.py:
  Added new dependency check to repoman. This closes #36887.

  03 Jan 2004; Masatomo Nakano <nakano@gentoo.org> emerge: Modified 
  to specific port number in emerge sync. This closes #36994

  02 Jan 2004; Masatomo Nakano <nakano@gentoo.org> portage.py: Fixed 
  a problem that emerge doesn't block package when it's required.
  It happens in .50_pre*.

  02 Jan 2004; Masatomo Nakano <nakano@gentoo.org> portage.py: Fixed 
  issue with getsize() when --debug.

  02 Jan 2004; Masatomo Nakano <nakano@gentoo.org> portage.py: Fixed 
  issue with virtual. This closes bug #9050, #22225, #29499.

  01 Jan 2004; Masatomo Nakano <nakano@gentoo.org> ebuild, emerge, portage.py:
  Fixed issue with not cleaning up temp directory. This closes bug #34967.

  31 Dec 2003; Masatomo Nakano <nakano@gentoo.org> emerge:
  Fixed 'emerge sync' issue which continuously connects to same host.

  31 Dec 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Found the line
  that was causing the package dir to be printed... It was a spawn call.

  31 Dec 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Fix for
  the symlink corruption in the db from the movefile() bug.

  29 Dec 2003; Masatomo Nakano <nakano@gentoo.org> portage.py:
  Fixed bug which emerge stops when no denpendencies exist in || ( ) 
  by USE flags. This closes #36568.

  29 Dec 2003; Masatomo Nakano <nakano@gentoo.org> emerge, portage.py:
  Added an ambiguity package check when emerge. This closes bug #22700.

*portage-2.0.50_pre9 (24 Dec 2003): API change + enhancements

  24 Dec 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Added
  PORTAGE_TMPDIR to SANDBOX_READ/WRITE to ensure it works. SpanKY's
  patch for use negation added (use !foo). pkg_setup doesn't die on
  a non-zero exit status.

  24 Dec 2003; Nicholas Jones <carpaski@gentoo.org> emerge: using os.uname
  instead of calling out to uname.

  24 Dec 2003; Nicholas Jones <carpaski@gentoo.org> quickpkg: Added SpanKY's
  patch for delayed exit/error conditions.
  
  24 Dec 2003; Nicholas Jones <carpaski@gentoo.org> xpak.py: chdir's added
  to the getcwd fix for missing dirs.

  24 Dec 2003; Masatomo Nakano <nakano@gentoo.org> emerge: Added OVERLAY
  directories display for --verbose.

*portage-2.0.50_pre8 (24 Dec 2003): API change + enhancements

  22 Dec 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Added
  /proc/self/maps to SANDBOX_PREDICT, and /dev/shm to read/write.
  
  22 Dec 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Added automake
  and autoconf versions to the output of emerge info.

  22 Dec 2003; Nicholas Jones <carpaski@gentoo.org> etc-update: Added
  edit merged file option -- defaults to EDITOR var or "nano -w".

  22 Dec 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Use
  os.uname instead of calling out to uname which might not exist.

*portage-2.0.50_pre7 (22 Dec 2003): API change + enhancements

  22 Dec 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: patch to
  quote most of the path operators that might involve spaces.

  22 Dec 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Fix for
  invalid entries in package.keywords. Character chopping on mirrors
  fixed again.

  21 Dec 2003; Masatomo Nakano <nakano@gentoo.org> bin/ebuild, bin/emerge,
  pym/portage.py: Changed to show disabled USE flags from use.mask when
  using emerge -vp. And fixed use.mask issue.

  20 Dec 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Rewrote
  match_from_list -- Simplified and made pkgcmp and match_from_list
  properly compare package names.

  20 Dec 2003; Nicholas Jones <carpaski@gentoo.org> repoman: Fix for mysigs
  traceback when signing.
  
  20 Dec 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Added
  PYTHONPATH to the specials list -- created a colon_seperated list.
  Fixed reset() in class config so that you can specify keeping the
  pkg dictionary when resetting the values.

  19 Dec 2003; Masatomo Nakano <nakano@gentoo.org> repoman: Added check 
  whether "ebuild foo.ebuild digest" succeeds.

  19 Dec 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Fix for
  pkg settings being maintained after an unmerge.

  19 Dec 2003; Nicholas Jones <carpaski@gentoo.org> pym/portage_db_*: Moved
  to using cPickle instead of marshal. More standardization of the API.

  18 Dec 2003; Masatomo Nakano <nakano@gentoo.org> repoman: Added virtual
  dependency check on each arch.

  17 Dec 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Fixed a
  permission issue involving $T and userpriv. Lockfile touchup.
  
  17  Dec 2003; Nicholas Jones <carpaski@gentoo.org> portage_db_*: Added
  templates and db for cache interfaces. Presently have a anydbm and a
  flat file interface working. See the test for operations.

  15 Dec 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Added a call
  to portageq that causes python to create optimized modules prior to it
  ending up inside the sandbox. Added more output and logging to sync.
  
  15 Dec 2003; Nicholas Jones <carpaski@gentoo.org> prepstrip: 'tree' is not
  the same as 'true'.
  
  15 Dec 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: invalid
  settings in package.keywords caused a traceback -- fixed with error message.
  
*portage-2.0.50_pre1 (12 Dec 2003): API change + enhancements

  10 Dec 2003; Nicholas Jones <carpaski@gentoo.org> chkcontents: Uses portage
  functions to do md5sum calcs.

  10 Dec 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Removed try()
  as it isn't used, and was deprecated for a long while. Genone's fetching
  size display added for --verbose. License display added. Added a little
  debug for IUSE so we can figure out the binary package --verbose IUSE
  issues that are randomly reported. XXXXXXXXXXXXXXXXXXX's 'buildsyspkg'
  patch for building only system packages into tbz2s. Unmerge fix for new
  settings instances. RSYNC_RATELIMIT added.
  
  10 Dec 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: ADA path
  variables added to specials for env_update. Error messaeg correction for
  make.defaults syntax errors. Unmerge now uses the environment file, if it
  exists, to get the complete environment back to perform unmerge operations.
  load_infodir() uses pkg settings completely now. Fixed the passing of
  settings in unmerge and dblink. Fixed an issue regarding unlinking lockfiles
  while inside of a sandbox.
  
  09 Dec 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh, *.sh:
  Moved helper scripts into bin/functions and made them sourceable -- they
  now will die in cases where sub-parts fail. dodoc and keepdir are now
  recursive-capable.

  09 Dec 2003; Nicholas Jones <carpaski@gentoo.org> emerge: emerge.log now
  set as portage:portage with 0660 perms. --debug now enables tracebacks
  for dep generation instead of moving code out of the try block.
  
  09 Dec 2003; Nicholas Jones <carpaski@gentoo.org> g-cpan.pl: rac's patch
  to get arch list from portage's list of arches in the profiles.
  
  09 Dec 2003; Nicholas Jones <carpaski@gentoo.org> repoman: Moved a bit of
  the existing gpg code around -- it might work as is, but requires 'sign'
  in features. Fixed a potential for repoman to miss updates that should
  get a new manifest and commit. Fixed digest/manifest generation for
  non-packagedir runs of repoman.
  
  09 Dec 2003; Nicholas Jones <carpaski@gentoo.org> emergehelp.py, make.conf,
  getbinpkg.py:  Message touch ups.
  
  09 Dec 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: load_infodir()
  uses pkg settings now instead of env and backup. Genone's custom mirror
  patch included. Added some missing 'strict' flags for recursion in digest*().
  Refixed the invalidentry stuff that was lost across patch merges. Fix for
  pkg-keywords from genone included. Genone's deprecated profile patch for
  reporting to a user that their current profile is deprecated. Message about
  missing arch.list instead of spouting invalid keywords messages.

  08 Dec 2003; Masatomo Nakano <nakano@gentoo.org> repoman:
  Added all arch dependency check. This closes bug #24160.

  07 Dec 2003; Masatomo Nakano <nakano@gentoo.org> emerge,portage.py:
  Fixed bugs. 1.--debug doesn't work 2.Portage breaks files
  in /var/db/*/*. 3.No stop if dependency problem happens.
  They are only cvs version problems.

  01 Dec 2003; Masatomo Nakano <nakano@gentoo.org> emerge: Fixed bug which 
  always remakes info dir file.

  29 Nov 2003; Masatomo Nakano <nakano@gentoo.org> portage.py: Fixed issue with
  ebuild name rule. Fixed typo with variable name.
  This closes bug #17172,#34666

  29 Nov 2003; Masatomo Nakano <nakano@gentoo.org> emerge: Fixed issue with 
  lacking the "setting" argument for pkgmerge()

  29 Nov 2003; Masatomo Nakano <nakano@gentoo.org> emerge: fixed rsync bug.
  This closes bug #34660.

  28 Nov 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Migration
  to non-global settings started -- class config has new functionality and
  is locked after portage is finished initializing -- changes cannot be made
  to the global instance of config 'settings' -- reset() is now functional,
  setcpv() loads PKGUSE from /etc/portage/package.use, load_infodir() loads
  all small files (under 4k) from the vardb directory of an installed package
  so that operations have the same post* settings as they had at merge time.
  Begin modifications to spawn() to allow for files/pipes to be used for
  IO instead of using getstatusoutput which does not take an environment
  parameter like execve(). check_config_instance() ensures that the provided
  parameter is a 'class config' instance -- for ensuring that everything is
  being passed properly with the changes. Fix for the local FS mirror issue
  where it removed the first '/' instead of the last one. doebuild() cleanups
  for readability and pkguse enhancements -- also remove getstatusoutput()
  usage for depend so that we don't have to modify the active environment.
  Fix for symlink mtime values returned from movefile. (Nakano) SLOTMOVE
  added to global update functionality to fix some issues where a package
  suddenly must become slotted. portdbapi takes a root parameter instead
  of using settings. Slightly more useful output from depend. binarytree()
  now takes a pkgdir instead of using settings. Portage will now die if
  ebuild.sh exits on a signal.
  
  Moved some functions around and renamed them for general use -- derived
  from match2 in class portagetree:
  match_to_list() find all atoms in a list that match a given package.
  best_match_to_list() determines the most specific match. Needs work.
  match_from_list() find all packages in a list that match a given atom.

  28 Nov 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Fixed an issue
  with searchdesc wanting root permissions if run as non-root. Migrated to
  the non-global config class. EMERGE_FROM added for the dyn_preinst patch
  -- Indicates if a merge is occuring from an ebuild or from a binary. Patch
  for rsync timestamp checking from Nakano.
  
  28 Nov 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Save PKGUSE.
  Pebeneto's patch for dyn_preinst and SELinux added as a fix for binary
  and ebuild merges. Added a kill for portage during the depend phase so
  that portage will actually die if you control-C.

  28 Nov 2003; Nicholas Jones <carpaski@gentoo.org> *: MASSIVE set of changes
  to start using locally defined 'class config' instances. This allows us to
  start working on some parallelism among other things. Created this way:
  mysettings = portage.config(clone=portage.settings)
  
  The Following functions now take a 'config' parameter:
  spawn(), fetch(), digestgen(), digestcheck(), spawnebuild(), doebuild(),
  merge(), dep_opconvert(), dep_check(), dblink.__init__()
  
  package.keywords is now implemented curtasy of genone/max. PKGUSE was
  rewritten for the global config killing and is also included. X11 man
  pages now found and zipped correctly. SYS.PATH fixes for the python
  migration -- issue actually only shows up on 2.2 systems because of how
  compiled modules are used if found regardless of the original source's
  existance.

  28 Nov 2003; Nicholas Jones <carpaski@gentoo.org> tabcheck.py: An easier
  way to make sure that all the python stuff is correctly using tabs and
  not mixing spaces.

  28 Nov 2003; Nicholas Jones <carpaski@gentoo.org> xpak, xpak.py: Fixes
  to ensure that it works if the current dir is missing and that the python
  path gets set properly.
  
  22 Nov 2003; Daniel Robbins <drobbins@gentoo.org> portage.py: Fixed
  calls in vartree method to invalidentry().... made them call call
  self.dbapi.invalidentry() (there were multiple wrong method calls.)
  
  10 Nov 2003; Nicholas Jones <carpaski@gentoo.org> md5check.py: Checks all
  digests and SRC_URIs for filenames and associated MD5s. Reports collisions
  between versions/packages, missing, and extra lines in digests.

*portage-2.0.49-r17/18 (10 Nov 2003): Fixes

  10 Nov 2003; Nicholas Jones <carpaski@gentoo.org> *: Changed portage to
  be the first path in sys.path for all python scripts. Also enabled
  optimizations from the scripts to ensure everything imported is built
  for speed. ebuild: applied fix for the '//' root breaking the db[].
  prepstrip: etdyn quickfix
  
  10 Nov 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: fix for
  RESTRICT=nouserpriv. GENTOO_MIRRORS can have paths set to take files
  from. Fixes for mishandled cache data regarding *pkgsplit(). Fixes for
  '*' being returned as part of a package split. An 'invalidentry()' fix
  for a traceback. Nakano's fixes for virtual removals not working properly,
  sandbox violations during pkg_nofetch, || depend selection. Genone's
  fixpackages speedup.

  10 Nov 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: PORTAGE_TMPDIR
  fix for distcc. Variable passing bug patch for export_functions. Exit 1
  added for nofetch to stop sandbox violation. Nakano's --tree patch added.
  Improved the unmerge messages to denote what kind of unmerge fails. Info
  pages regex pattern adjusted to allow most any name for a page.

  10 Nov 2003; Nicholas Jones <carpaski@gentoo.org> repoman: genone's xml
  linting additions.

  01 Nov 2003; Robin H. Johnson <robbat2@gentoo.org> pym/cvstree.py:
  fix bug #32071, by properly escaping a string to not be a regex. Checked
  thru entire *.py tree and found this is the only mis-use of strings that
  need to be escaped.

  31 Oct 2003; Daniel Robbins <drobbins@gentoo.org> portage.py: /lib/modules
  now gets "unmerge protection." This is half of the config protection
  functionality. It means that anything in /lib/modules will not be deleted
  when a package is unmerged (often automatically when a user merges a
  kernel module ebuild for a new kernel.) This solves the "my module
  disappeared!" issue. This closes bug #1477.
  
  31 Oct 2003; Daniel Robbins <drobbins@gentoo.org> emerge: Should no longer
  spit out wacky "!!! no match found" warnings when auto-cleaning.
  
  30 Oct 2003; Daniel Robbins <drobbins@gentoo.org> portage.py: Only run
  depscan.sh if it exists on disk. This allows Portage to run inside a stage1
  where /sbin/depscan.sh doesn't exist.
  
  30 Oct 2003; Daniel Robbins <drobbins@gentoo.org> portage.py: Applied fix to
  allow multi-level "use? (   )" in SRC_URI, closing bug #16159.

*portage-2.0.49-r15/16 (21 Oct 2003): Fixes

  21 Oct 2003; Nicholas Jones <carpaski@gentoo.org> fix-db.py: was broken
  for python2.3 -- fixed now.
  
  21 Oct 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Added
  lockfiles to prelink md5 checks. Fixed caching bug where cache objects
  were passed back as pointers instead of copies. Added 'invalidentry'
  function to handle lockfiles -- It tests/deletes them using unlockfile.
  Added fix-db.py to the 'databases is broken' messages.

  21 Oct 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: added CDPATH
  to unset. SELinux fix for sandbox.
  
*portage-2.0.49-r13/14 (10 Oct 2003): Fixes

  10 Oct 2003; Nicholas Jones <carpaski@gentoo.org> *: Full adaptations
  for python2.3 implemented. Installation setup for /usr/lib/portage/pym
  instead of site-packages. Fix for Old-Instance unmerging which stopped
  happening due to changed path names. Binaries shouldn't merge under
  fetchonly.

*portage-2.0.49-r11/12 (08 Oct 2003): Internal Only.

*portage-2.0.49-r10 (08 Oct 2003): Fixes

  08 Oct 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Fixed a
  seemingly random traceback involving lockfiles -- Categories weren't
  being created before a lockfile was attempted in the category directory.
  More enhancements to aid migration to python-2.3. Added writemsg() as
  a general function for outputting information -- Takes an argument that
  is interpreted as debug level and prints synchronisly to stderr. Yanked
  domenu pending a GLEP.

*portage-2.0.49-r9 (07 Oct 2003): Fixes

  07 Oct 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Atomic lock
  updates and self.create() fixes. Counter enhancements.

*portage-2.0.49-r8 (05 Oct 2003): 

  05 Oct 2003; Nicholas Jones <carpaski@gentoo.org> *: Changed #! line to
  use /usr/bin/python to aid in migration.
  
  05 Oct 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: More use/has
  output fixups.
  
  05 Oct 2003; Nicholas Jones <carpaski@gentoo.org> emerge: General cleanups.
  Added in baselayout info to emerge info. --skipfirst isn't a persistent
  option on resume anymore.
  
  05 Oct 2003; Nicholas Jones <carpaski@gentoo.org> fix-db.py: New script to
  aid in diagnosing and eventually fixing /var/db issues. It makes almost no
  modifications at the moment.
  
  05 Oct 2003; Nicholas Jones <carpaski@gentoo.org> prepstrip: Addition of
  a condition for etdyn binaries -- they list as shared objects but aren't.
  
  05 Oct 2003; Nicholas Jones <carpaski@gentoo.org> repoman: Added non-cvs
  patch -- repoman can be used outside of cvs trees for scanning/checking.
  Added a masking fix for packages that use 'arch?' dependencies. Permission
  fix on stats pickle.

  05 Oct 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Subversion
  directories are ignored along with CVS in listdir() when ignorecvs is set.
  USE_EXPAND is fixed. Global and package counter fixes. ATOMIC VARDB moves
  are now implemented -- Still need a way to recover broken operations.
  Counter functions are now implemented in dbapi only. vardbapi now implements
  aux_get for all possible files listed in the package's info directory. New
  functions: lockfile()/lockdir(), unlockfile()/unlockdir().
  
*portage-2.0.49-r7 (26 Sep 2003): Binary package fixes + spacing issues.

  26 Sep 2003; Nicholas Jones <carpaski@gentoo.org> emerge.sh: Spacing fixes
  for tab/space mixes. glob fix for getgccversion().
  
  26 Sep 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Fix for binary
  use flag tb.

  26 Sep 2003; Nicholas Jones <carpaski@gentoo.org> xpak.py: Fix for scan()
  tb when file is invalid or shorter than XPAK header length.

*portage-2.0.49-r6 (23 Sep 2003): SELinux, DistCC, and pretend output fixes.

  23 Sep 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: selinux context
  fixes -- using ${T} now. DISTCC_DIR added by default and given an addwrite.
  
  23 Sep 2003; Nicholas Jones <carpaski@gentoo.org> emerge: gccversion() added
  to help distcc and the version checking calls that break distcc permissions.
  Fix for create() and the useflag passing from binary packages. When using
  pkgs, is_newer_ver_installed() no longer trashes ebuild names. Don't look
  for fetch restrictions with binary packages. Included a modified patch that
  shows only in-slot versions for packages during pretend output -- In-slot
  now shows up exactly as a single-slot package would -- New slots show up
  as new packages -- proper output. Killed debug for everything except regen
  which now shows the deps being regenerated. Fixed regen to ignore keywords
  just like sync does already... should fix a few missing cache entry problems
  on rsync1 and speed up sync times all around.
  
  23 Sep 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Additions for
  distcc support.
  

*portage-2.0.49-r5 (19 Sep 2003): Fixes

  19 Sep 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Make
  DISTCC_DIR set if not defined.
  
  19 Sep 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Fix for -U
  introduced bugs with Str+None tracebacks. Mild change to log info -- Added
  short pkgname before ebuild. Eclassdb changes and flush/save calls.

  19 Sep 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Unregister
  signal handling after receiving the signal and resend the signal we got.
  Run depscan during env-update. Migrated eclass stuff into it's own pickle.
  Code for moving /var/cache/edb/dep into a pickle for each category added --
  disabled via hardcoded value presently. Removed some try blocks in favor
  of detecting the cause of an error first -- Hopefully gives a little speed
  up. Cache fixes and useful output added. A tbz2 moving bug where an error
  was printed about files the destination existing already is now fixed. The
  dircache is cleared on every unmerge now, to ensure the cache does not
  interfere. bzip2 is spawned with the quiet flag now. Update list is sorted
  for proper year/quarter order now. -arch isn't an invalid keywork anymore.
  Generic pickle reading and writing functions added.

*portage-2.0.49-r4 (10 Sep 2003): Fixes

  10 Sep 2003; Nicholas Jones <carpaski@gentoo.org> *: Added the facility
  to incorporate binary package use flags when calculating deps. Changes in
  -r2 and -r3 included quick fixes to SELinux code and the addition of
  LINGUAS to USE_EXPAND.

*portage-2.0.49-r1 (25 Aug 2003): Fixes

  25 Aug 2003; Nicholas Jones <carpaski@gentoo.org> emerge: -K traceback fix.
  Made fetchonly quit traversing the merge code after fetching.

  25 Aug 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Removed
  auxcache saving code -- A few bugs and caching problems need to be resolved.
  Moved a block of code in aux_get inside of an existing conditional -- Should
  provide a small speedup.

*portage-2.0.49 (22 Aug 2003): GRP downloading, Selinux, General Fixes

  22 Aug 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Make
  auxcache saving more friendly.

*portage-2.0.49_pre20/21 (20 Aug 2003): Fixes + security enhancements

  20 Aug 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Fix for
  auxcache saving.

*portage-2.0.49_pre19 (20 Aug 2003): Fixes + security enhancements

  20 Aug 2003; Nicholas Jones <carpaski@gentoo.org> *: Updates to Wayne's
  modifications on dispatch-conf.
  
  20 Aug 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: sfperms
  added to strip permissions if set in features. selinux context support.
  Nakano's cleanups for unmerge output. Added distcc and ccache versions
  into emerge info's output. 'autoaddcvs' FEATURE is documented in make.conf.
  
  20 Aug 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Selinux code
  added. No longer traceback on cp_list for categories. Added in a patch to
  use a pickle for auxcache storing. Should help slow IO boxes.

*portage-2.0.49_pre18 (15 Aug 2003): Fixes.

  15 Aug 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Nakano's
  fix for a glob expansion bug on a tar call.
  
  15 Aug 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Nakano's fixes
  for exiting on a signal and incorrect output for the unmerge screen.
  
  15 Aug 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Added in
  patch to shuffle thirdparty mirrors. Nakano's fixes for digests+fetching
  bugs/messages/errors. Virtual stripping fix.

  15 Aug 2003; Nicholas Jones <carpaski@gentoo.org> *: Fix to emerge -V
  and related output. Typo fixes. Parent thread no longer drops root in
  userpriv. 'autoaddcvs' feature now determines if portage will auto-add
  files to cvs. Virtuals fix for an empty key line. Added user categories
  file as /etc/portage/categories.

*portage-2.0.49_pre17 (30 Jul 2003): Resuming/wget GRP, Sandbox updates

  30 Jul 2003; Nicholas Jones <carpaski@gentoo.org> *: GRP updates to
  use RESUMECOMMAND to determine how to download GRP binaries. Adjustments
  to the portage.spawn() code to try and speed it up by eliminating the
  copy phase (copy-on-write forking). Massive messages for corrupt FS issues.
  Movefile() checks to ensure we actually complete the moves. Killed the
  broken pipe message for tbz2 extraction.

*portage-2.0.49_pre16 (29 Jul 2003): Touchups

  29 Jul 2003; Nicholas Jones <carpaski@gentoo.org> *: Clean up the debug
  output and quickfix downloading tbz2s.

*portage-2.0.49_pre15 (29 Jul 2003): Fixes

  29 Jul 2003; Nicholas Jones <carpaski@gentoo.org> repoman: imported time.
  
  29 Jul 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Corrected the
  logic used to determine whether a package or an ebuild is used when given
  the option.
  
  29 Jul 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Changed a
  lot of calls using 'print' into sys.stderr.write() calls. Added try/except
  around the source lstat to catch funky errors where the file doesn't really
  exist -- Presents descriptions to users about what to do. Added more catches
  for movefile() calls to ensure it dies on failures. Changed the tbz2
  extraction call to stop the 'cat: broken pipe' message.
  
*portage-2.0.49_pre14/48-r7 (24 Jul 2003): Fixes and getbinpkg caching

  22 Jul 2003; Nicholas Jones <carpaski@gentoo.org> *: Typo fixes for
  the ECLASS_DEPTH comparisons in ebuild.sh. Traceback fixes for blocking
  packages in depclean and in pretend. Caching added to getbinpkg code --
  generation of cache supported, but cachefile is staticly located. Langs
  patch from Nakano in bug #9988 included.
  
*portage-2.0.49_pre13 (22 Jul 2003): Fixes
  
  22 Jul 2003; Nicholas Jones <carpaski@gentoo.org> doman: Doesn't gzip
  .keep files now.

  22 Jul 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: USERLAND
  fix. ** ECLASS depth tracker and additions to the new depend code. **
  
  22 Jul 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Fetch restriction
  now adds a red F to the pretend output. Made the blockers message better.
  Added 'local' to rsync excludes to allow the category to be added for admins.

  22 Jul 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Fixed a TB
  caused by a missing 'strict' reference --- Needs to be fixed better. Fixed
  a typo in the populate code for bintree/getbinpkg.

*portage-2.0.49_pre11 (16 Jul 2003): GRP, General, VIDEO_CARDS/INPUT_DEVICES

  16 Jul 2003; Nicholas Jones <carpaski@gentoo.org> quickpkg: SpanKY's
  friendly edition now included.
  
  16 Jul 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: USE_EXPAND
  support for expanding bash variables into USE --- VIDEO_CARDS="blah"
  USE="video_cards_blah". Added a notice about fetching metadata so you
  can see that it's happening.

  16 Jul 2003; Nicholas Jones <carpaski@gentoo.org> make.globals*: Added
  default CHUNKSIZE for binhosts. Added defaults for USE_EXPAND which is
  used to expand variables into USE from the give names.

  16 Jul 2003; Nicholas Jones <carpaski@gentoo.org> *: Debug removal.

*portage-2.0.49_pre10 (16 Jul 2003): GRP and General Fixes

  16 Jul 2003; Nicholas Jones <carpaski@gentoo.org> *:
  Quick fix for a breakage in the GRP --getbinpkg code.

*portage-2.0.49_pre9 (16 Jul 2003): GRP and General Fixes

  16 Jul 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: add
  LDFLAGS and ASFLAGS. Exports are only done if vars are already set.

  16 Jul 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Added support for
  --getbinpkg and --getbinpkgonly --- GRP complement. Fixes for blocking-
  not-working  bug

  16 Jul 2003; Nicholas Jones <carpaski@gentoo.org> repoman: Patch to detect
  incomplete digests.
  
  16 Jul 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: ebuild fetch
  now checks md5sums (run from ebuild). Support for getbinpkg.

  16 Jul 2003; Nicholas Jones <carpaski@gentoo.org> xpak.py: Added more in-
  memory operations support.

  16 Jul 2003; Nicholas Jones <carpaski@gentoo.org> getbinpkg.py: Supporting
  code for binary package retrieval.

*portage-2.0.48-r2 (29 Jun 2003): Fixes and Multiple Overlays

  29 Jun 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Fixed the
  commands for tar.

  29 Jun 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Mode the chdir
  to fix the spanky bugs down to post_emerge to fix the "can't merge an
  ebuild file with an absolute path" bug.

  29 Jun 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Added function
  suffix_array(array,suffix) which takes an array and adds suffix to the end
  of each element. Added 'cd / ;' into the getstatusoutput() calls to ldconfig.
  Added a check so that portage doesn't try to add files/dir from a non-cvs
  directory. Added 'manifest' target to ebuild/portage to only adjust the
  manifest. Added Multiple overlay support -- Should be fairly thorough --
  needs more debug though. Fixed portdbapi::new_protect_filename().

*portage-2.0.48-r2 (29 Jun 2003): Cleanups and Fixes (testing)

  29 Jun 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Lots of
  consistency cleanups. Added more files to the var/db data for future
  use. Added more die conditions to failure points. Fixed/Hacked a fix
  into the inherit-not-dieing problem. Set TMPDIR and TMP globally. Added
  notice for multiple inheritance. Fixed inheritance problem with multiple
  inheritance clobbering previous list of eclasses. Basic support for
  multiple overlays added to ebuild.sh.
  
  29 Jun 2003; Nicholas Jones <carpaski@gentoo.org> emerge: SRC_URI fix for
  'rm /etc/*' problem. Spanky bug: chdir to / to avoid problems when merging
  from inside a builddir that gets deleted.
  
  29 Jun 2003; Nicholas Jones <carpaski@gentoo.org> etc-update: Added notice
  for symlinks in cfg_prot setups.
  
  29 Jun 2003; Nicholas Jones <carpaski@gentoo.org> repoman: complain if
  FEATURES=cvs not set.
  
  29 Jun 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Added in
  a work around for the 'USE=+useflag' users. Added support for nouserpriv
  via RESTRICT. Fix the bug with ROOTs with no previous file causing a TB
  from counter_tick(). Make symlinks follow config_protect just like normal
  files.
  
  10 Jun 2003; Daniel Robbins <drobbins@gentoo.org> ebuild.sh, portage.py,
  various commands in bin/, cnf/make.conf.mac, cnf/make.globals.mac: 
  Added preliminary Mac OS X/BSD support.

  06 Jun 2003; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: new eclass
  dependency implementation to totally isolate eclass dependency tweaks
  from in-ebuild dependency tweaks. eclasses now absolutely do not touch
  DEPEND and RDEPEND. Any dependencies added by eclasses are transferred
  to another variable and added in to DEPEND and RDEPEND after the entire
  ebuild has been processed, and after RDEPEND has optionally inherited a
  value from DEPEND due to it being unset. The result of this change is
  that inherit statements no longer need to be placed strategically in an
  ebuild so that they are after the DEPEND and RDEPEND, and fix a host of
  other eclass mis-use/side-effect bugs.

*portage-2.0.48-r1 (29 May 2003): Touchups.

  29 May 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Quick fixes
  to a couple of rare bugs. Added some quoting to $S. Removed the DISTCC
  hosts variable. Moved build-info's creation around so that it actually
  works for non-portage-compiled merges.
  
  29 May 2003; Nicholas Jones <carpaski@gentoo.org> repoman: Quick fix for
  the files-dir-not-added lack of notification. Added in a fix for a possible
  security problem with the repoman commit messages and symlink-attacks.
  
  29 May 2003; Nicholas Jones <carpaski@gentoo.org> cnf/*: Added in a diff
  from 'Danny' that contained a SYNC cleanup and expanded explanation. :)
  
  29 May 2003; Nicholas Jones <carpaski@gentoo.org> output.py: Fixed the
  TitleBar and unset TERM issues.
  
  29 May 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Added new
  functions to aid in determining virtuals. cpv_all() added to dbapi -- it
  displays all versions instead of just package names -- cp_all() now calls
  this function to gain it's data. get_provide() and get_all_provides() added
  to collect PROVIDE info from vartree packages. getallcpv() added to vartree
  to reference the dbapi call. Always set ignoring errors on findname now.
  Cleaned up the virtuals-trimming code. Don't mention the fixpackages script
  if the user doesn't have any packages.

*portage-2.0.48 (20 May 2003): Cleanups Release.

  20 May 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Tiny cleanups.
  Fixed the profile information in emerge -V for symlinks that have a
  trailing '/' in them. Fix 'emerge -s' filesize lookups to use a new
  function finddigest() from dbapi.

  20 May 2003; Nicholas Jones <carpaski@gentoo.org> emergehelp.py: Updated.

  20 May 2003; Nicholas Jones <carpaski@gentoo.org> etc-update: Small
  fixups for pager issues. Made the nothing-to-do exit message 'happier'.

  20 May 2003; Nicholas Jones <carpaski@gentoo.org> extra-functions.sh:
  Beat the debian-utils requirement out of the functions. Prefers them,
  but falls back to already-existing tools otherwise.

  20 May 2003; Nicholas Jones <carpaski@gentoo.org> fixpackages: 75%
  overhaul to match the new handling of update code.

  20 May 2003; Nicholas Jones <carpaski@gentoo.org> quickpkg: Understands
  "--help" as an option now.

  20 May 2003; Nicholas Jones <carpaski@gentoo.org> man/*: Simple updates.

  20 May 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: fetch()
  now calculates md5sums when doing a fetchonly. finddigest() added for
  finding digests -- gets overlay digests if existing. Binary packages
  are  only updated when explicitly requested via fixpackages as a command
  or a FEATURES setting. Clear the dircache after portage initializes  to
  reduce memory consumption.

*portage-2.0.48_pre6 (12 Apr 2003): General cleanups and fixes.

  12 May 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Additions
  to better handle overlay ebuilds with regard to metadata cache. aux_get
  calls findname2() which returns (location,in_overlay) -- findname() is
  a wrapper for findname2(). Extra debugging fixes for findname() issues.

  12 May 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Code
  cleanups and a chgrp/chown pass to move all portage-owned files to
  root ownership -- Two pass to leave specific-group and specific-owner
  settings alone.
  
  12 May 2003; Nicholas Jones <carpaski@gentoo.org> emerge: code cleanups
  and comment touchups.
  
  12 May 2003; Nicholas Jones <carpaski@gentoo.org> emergehelp.py: Updates
  for --debug, --digest, and --skipfirst.

  12 May 2003; Nicholas Jones <carpaski@gentoo.org> g-cpan.pl: Added more
  arches to the KEYWORDS. Made it copy files back to distfiles.

  12 May 2003; Nicholas Jones <carpaski@gentoo.org> prepstrip: Removed ${D}
  from the outputted filenames during stripping.
  
  12 May 2003; Nicholas Jones <carpaski@gentoo.org> man/* cnf/*:
  documentation updates.

*portage-2.0.48_pre5 (29 Apr 2003): Cleanups and polish.

  29 Apr 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Another
  typo fix.

*portage-2.0.48_pre4 (28 Apr 2003): Cleanups and polish.

  28 Apr 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Quick fix
  for a traceback/typo in the 'emerge -C' code.

*portage-2.0.48_pre3 (28 Apr 2003): Cleanups and polish.

  28 Apr 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: listdir()
  now takes care of non-existance errors instead of propagating them --- can
  take EmptyOnError=1 as a param to return [] instead of None. All calls to
  portage's listdir() have been updated to the new conventions. listdir()
  ignores .# files from cvs now when ignorecvs=1 is set. Fixes for another
  world-depleting bug. If findname() is passed a virtual, it now informs
  the user to report a bug, instead of weird tracebacks. Added code in
  dblink::unmerge() to remove stale virtual entries when set under trimworld.

  28 Apr 2003; Nicholas Jones <carpaski@gentoo.org> etc-update: enabled the
  diff pager again.

  28 Apr 2003; Nicholas Jones <carpaski@gentoo.org> emerge: --changelog
  implies --pretend. Spelling fixes. Added --skipfirst to allow the first
  package in a resume operation to be skipped over --- allows -e to rebuild
  almost everything, even under weird circumstances. Located another missed
  world-file-depleting bug in unmerge() calls. Included a patch to fix an
  off-by-one bug in depclean.

  27 Apr 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Fix for
  listdir() running on a non-existant dir -- returns None. Sets generated
  files to the portage group -- Manifest & digests. Some coloring additions.
  Handling of 'strict' features added. TEMPORARY addition of 'manifest' USE
  flag so this can go mainstream now. Fixes in doebuild() to get unmerge
  working again for ebuild. Debug code added to findname to help figuring
  out the seemingly random tracebacks -- suspect is pkgsplit(). Unmasking
  code for package.mask added in -- works just like mask, and can override
  specific versions or ranges -- One per line: /etc/portage/package.unmask.
  Security fix for python cPickle code -- mtimedb could create arbitrary
  execution of code bug. Global update notices/info. Fixes for loops over
  listdir() that depended upon raised errors to determine code flow.

  27 Apr 2003; Nicholas Jones <carpaski@gentoo.org> cvstree.py: Added in
  'removed' status checks.
  
  27 Apr 2003; Nicholas Jones <carpaski@gentoo.org> repoman: Added in more
  cvs checks. /space/cvsroot is now complained about.

  27 Apr 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Added in
  PORTAGE_CALLER support to identify it as a 'do_update()' candidate.

  27 Apr 2003; Nicholas Jones <carpaski@gentoo.org> dodoc: Check sizes to
  prevent 0 byte files from being added.

*portage-2.0.48_pre2 (10 Apr 2003): Digests & Repoman

  16 Apr 2003; Nicholas Jones <carpaski@gentoo.org> repoman: Added CVS/Root
  checks to ensure Manifests will be correct. Fixed local use-flag bug.
  Commented out the no-stable code, as it can't be implemented well as is.

  16 Apr 2003; Nicholas Jones <carpaski@gentoo.org> prepstrip: Fixed a
  problem where files were not being stripped.

  16 Apr 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Added in
  a call to 'make -n' when under the --debug flag.

*portage-2.0.48_pre1 (10 Apr 2003): Digests & Repoman

  10 Apr 2003; Nicholas Jones <carpaski@gentoo.org> prepstrip: fix it so
  that it actually strips and provides reasonable info.
  
  10 Apr 2003; Nicholas Jones <carpaski@gentoo.org> repoman: Added short
  option for pretend. Added pretend capability to the majority of the
  commit code. Bug fix for local IUSE code. Added in support for removed
  cvs files.
  
  10 Apr 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Changed
  'manifest' to 'Manifest'. Removed the requirement that Manifests exist --
  complain about it, but only die if 'strict' is set.

*portage-2.0.47-r15 (09 Apr 2003): New digests/manifests, touchups.

  09 Apr 2003; Nicholas Jones <carpaski@gentoo.org> bin/*: Fixes for Cross-
  compiling.
  
  09 Apr 2003; Nicholas Jones <carpaski@gentoo.org> repoman: Quick touchups
  in the category- and repository-level manifest calls.
  
  09 Apr 2003; Nicholas Jones <carpaski@gentoo.org> cnf/*: Added/sync'd
  PORTAGE_NICENESS.

  09 Apr 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Fixed hole
  in the listdir code that occured on cache expiration in the -r14 changes.

*portage-2.0.47-r14 (09 Apr 2003): 

  09 Apr 2003; Nicholas Jones <carpaski@gentoo.org> bin/*: Removed DEBUGBUILD
  in favor of FEATURES/RESTRICT settings of nostrip.
  
  09 Apr 2003; Nicholas Jones <carpaski@gentoo.org> ebuild: Removed root
  restriction so that digests can be made as non-root.
  
  09 Apr 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Added niceness
  
  09 Apr 2003; Nicholas Jones <carpaski@gentoo.org> repoman: Added the
  nostable/allmasked check in. Small cleanups. Move to 'manifests' instead
  of enhanced digests. Added filters on $Id and $Id. Fixed commitmsg
  and added short options.
  
  09 Apr 2003; Nicholas Jones <carpaski@gentoo.org> cvstree.py: More features
  added. pathdata() provides dir or file info. isadded() gives cvs status.
  
  09 Apr 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: listdir()
  enhancements. Debug removal. Broke up the digest creation functions to
  make them a little more generic. Added manifest code into the digest
  calls. Moved code in doebuild() around to allow for non-root calls for
  devs and repoman. Added 'PORTAGE_CALLER' env var to prevent repeated
  running of unnecessary functions.

*portage-2.0.47-r13 (02 Apr 2003): Fixes & Security -- Repoman+Digests

  02 Apr 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Added debug to
  the dep selection code in depgraph.

  02 Apr 2003; Nicholas Jones <carpaski@gentoo.org> cvstree.py: Added new
  module to handle cvs information without having to ask 'cvs status' many
  times to determine file locations.

  02 Apr 2003; Nicholas Jones <carpaski@gentoo.org> repoman: Major fix ups
  to ease the introduction of enhanced digests. Intelligent cvs queries
  and use of the new cvstree module for information about files in the tree.
  Auto-digests, auto-fetches trivial cvs changes,  detects changelogs that
  exist but have not been added to cvs, and detects '*' in KEYWORDS.

  02 Apr 2003; Nicholas Jones <carpaski@gentoo.org> *: A typo fix or two.
  prepstrip: fixup for sed's issues with '\000' (made it \001).

*portage-2.0.47-r12 (27 Mar 2003): Fixes & Security -- Repoman+Digests

  27 Mar 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Moved all
  initialization error messages to stderr.write() calls so that the output
  doesn't get mixed will called data. Added a warning about not being in
  the portage group. Color touchups. Digest path fixups.

  27 Mar 2003; Nicholas Jones <carpaski@gentoo.org> repoman: Significant
  additions to the commit code to nicely handle the changes for enhanced
  digests. Added --commitmsg and --commitmsgfile flags to allow easier
  scripting. Added a REPOMAN environment variable to prevent portage from
  running do_updates(). Added 'grouplist' which makes groupings of subparts
  from a list of parts. Added do* functions to manage the recursion into
  the dirs of the repository.

  27 Mar 2003; Nicholas Jones <carpaski@gentoo.org> xpak.py: Change from
  lstat to stat... We're not concerned with links. Return 0 on not found.

  27 Mar 2003; Nicholas Jones <carpaski@gentoo.org> portageq: added new
  functions: best_visible, mass_best_visible, all_best_visible.

  27 Mar 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Added '--digest'
  to force recreation of digests from the command line. Fixed portage version
  comparisions for the 'update portage please' notices.

  27 Mar 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Added an
  extra rm of the 'successful' file.

  26 Mar 2003; Alain Penders <alain@gentoo.org> portageq: added
  mass_best_version method to help GUIs resolve best versions.

*portage-2.0.47-r11 (22 Mar 2003): Fixes & Security -- Winding up 2.0 series.

  22 Mar 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: listdir()
  now is capable of recursive calls and listing only files. Used in new
  additions to digestgen() and digestcheck() for ebuilds and files/* --
  listdir(dir,recursive=0,filesonly=0). Digests now must contain all files
  from files/ and also the ebuild -- non-archives are prefixed with '/'.
  Full tbz2 fixes are now implemented... They can take a while to perform
  so status thingies are provided. update_ents() provides a batch-update
  as it would take rediculous amounts of time otherwise.

  22 Mar 2003; Nicholas Jones <carpaski@gentoo.org> : fixpackages calls
  portageexit() to save the mtimedb state so it actually works. :)

  22 Mar 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Added
  'xtermTitle' calls to emergelog to set the title during phases of merging.
  Added more emergelog calls to provide more specific information.

  22 Mar 2003; Nicholas Jones <carpaski@gentoo.org> : Added two scripts to
  aid portage. 'fixdbentries' takes (old, new, path) and does an inteligent
  sed on all the db entries that should be changed. Used by global moves and
  in the tbz2 fixes. 'fixpackages' expires the updates timestamp and reloads
  portage to force do_updates() to run. Added missing Header lines.

  22 Mar 2003; Nicholas Jones <carpaski@gentoo.org> xpak.py: Correct off-by-8
  bug in last commit. infosize does not contain the full size... Offset
  begins _after_ the marker -- Added xpaksize for complete offset from EOF.

  22 Mar 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Fix for
  die-on-wheel-group-missing bug. The logfiles don't cause the counter
  to be incremented and now match the merged package's COUNTER value.
  get_counter_tick_core(root) does not increment the counter. Sandbox is
  now working in all enabled cases, instead of just usersandbox. /var/db
  and binaries (assuming they are RW) are now updated to contain the proper
  info --- Added a 'fixdbentries' script to perform the updates to the data,
  and added a 'move_ent' function to class binarytree (not fakedbapi). Added
  a 'ebuild does not exist' error for the case of ebuilds in a wrongly named
  directory. Added a notice for invalid tbz2's. Removed the 'make.defaults'
  missing notice :-/. Duplicated the bintree creation so that it would be
  available for do_update(). Catch when 'updates' is missing from mtimedb.

  22 Mar 2003; Nicholas Jones <carpaski@gentoo.org> output.py: Added xterm
  title bar function to set the titles... xtermTitle(mystring). Only set
  if using color and terminal is [axE]term.

  22 Mar 2003; Nicholas Jones <carpaski@gentoo.org> repoman: Additions
  courtesy of Gerk and Vladamir... Checks all portage variables. Runs
  a check against invalid (but still parsable) syntax errors in names.
  Checks for invalid IUSE from use.desc and use.local.desc. Checks that
  licenses are valid. Checks for legal keywords with a default set or
  keywords.desc, if available. 'missingvar' tests moved to aux_get() calls.

  22 Mar 2003; Nicholas Jones <carpaski@gentoo.org> prepstrip: Added test
  to allow cross-compile-stripping to work properly. Rewrite the script to
  be whitespace-aware and recursively process directories at level 1.

  22 Mar 2003; Nicholas Jones <carpaski@gentoo.org> prepallstrip: Removed
  all code from this script and made it a call to "prepstrip $D".

  22 Mar 2003; Nicholas Jones <carpaski@gentoo.org> g-cpan.pl: Add in chomps
  for the portageq calls.

  22 Mar 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Allow
  --fetchonly of block'd packages.

  22 Mar 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Cleanups and
  corrections for sandbox which has been disabled and broken for a couple
  revisions now. use_{enable,with} die messages removed as they are in sub-
  shells when used and won't kill the merge --- Moved to echo >&2.

  21 Mar 2003; Nicholas Jones <carpaski@gentoo.org> xpak.py: Updates to make
  the xpak code self-sustaining. Added basic documentation to the functions
  and a description of the format in the comments at the top of the module.

*portage-2.0.47-r10 (13 Mar 2003): Fixes -- Winding up 2.0 series.

  13 Mar 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Less strict
  check of permissions when fixing permissions for userpriv -- only requires
  02070 and group portage instead of 02770 for check.

  13 Mar 2003; Nicholas Jones <carpaski@gentoo.org> g-cpan.pl: Fix to the
  call to portageq.
  
  13 Mar 2003; Nicholas Jones <carpaski@gentoo.org> etc-update: Fix for
  deleted files in a CONFIG_PROTECT situation.

  13 Mar 2003; Nicholas Jones <carpaski@gentoo.org> emerge: fix for keepwork
  and keeptemp ** MUST ENSURE THAT CLEAN CLEANS BEFORE A FULL MERGE. 

  12 Mar 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Added more
  conditions on rsync -- Proper error detection. Rsync failures will not
  cause a cache regeneration. Portage no longer considers masked portages
  candidates for 'An update to portage'.

*portage-2.0.47-r9 (10 Mar 2003): Fixes -- cvs-src, ebuild.sh, repoman

  10 Mar 2003; Nicholas Jones <carpaski@gentoo.org> make.conf*: Adjusted
  the LOGDIR message and change the default location to /var/log/portage.

  10 Mar 2003; Nicholas Jones <carpaski@gentoo.org> repoman: One more fix
  for the PORTDIR setting -- '/usr/portage' was matching '/usr/portage.cvs'.
  
  10 Mar 2003; Nicholas Jones <carpaski@gentoo.org> etc-update: Added the
  capability to automerge all files in the list -- with out without prompts.
  
  10 Mar 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Added messages
  on failure to create a depgraph -- Helps with bad DEPEND detection. Made
  'emerge sync' stop if it fails, and not update cache.
  
  10 Mar 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: added an
  external extra_functions.sh file with extra functions for portage --
  it is flag-o-matic and pieces of eutils presently. Removed libdir/incdir
  from einstall(). Added 'keepwork' to keep the source code after a package
  is merged. Removed the 'local' declaration of ROOT in dyn_install() --
  this fixes has_version in src_install(). Fixed the sourcing of environment
  so that variables are peristent across stages of a merge. Removed the
  SANDBOX vars from the environment file, as that upsets SANDBOX.
  
  10 Mar 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Fixes to
  permission problems with cvs-src and ccache (removed nested try's). Log
  counter fix -- One log per package now.

*portage-2.0.47-r8 (02 Mar 2003): Fixes -- cvs-src, ebuild.sh, repoman

  02 Mar 2003; Nicholas Jones <carpaski@gentoo.org> *: Fixes to eclass
  errors and messages -- raise on not found. emerge --debug works for
  ebuilds with syntax errors now -- needs better implimentation though,
  debug=0 in params can't be used due to scope limits.

  28 Feb 2003; Nicholas Jones <carpaski@gentoo.org> *: reorg ebuild.sh again
  to ensure that aliases are expanded properly. Repoman now determines the
  proper PORTDIR to set when loading portage to scan the cvs tree. portage.py
  fixes for cvs-src permission problems with userpriv.

*portage-2.0.47-r7 (27 Feb 2003): Quick fix for eerror() problem.

*portage-2.0.47-r6 (26 Feb 2003): Drop deprecated warnings for new syntax.

  26 Feb 2003; Alain Penders <alain@gentoo.org> emerge: Drop deprecated
  warnings for new syntax.  Don't make people switch to the new syntax
  until it's agreed on by everyone.

*portage-2.0.47-r5 (26 Feb 2003): Wicked Fast, BugFree v3.1, UserPriv

  26 Feb 2003; Nicholas Jones <carpaski@gentoo.org> *: Update docs and help
  again to drop --system and --world, and pull them from emerge's command
  line. General cleanups.
  
  26 Feb 2003; Nicholas Jones <carpaski@gentoo.org> emerge/portage.py: Fixes
  to the cache directory permissions -- all dirs are properly owned by group
  portage now. Add CCACHE_SIZE setting so we set a value for ccache. If the
  dirs are set to the wrong perms, make sure they get changed recursively.
  
  26 Feb 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Rearraged the
  code blocks so that they are easier to follow -- no more code in between
  functions. All code follows function definitions now.

*portage-2.0.47-r4 (25 Feb 2003): Wicked Fast, BugFree v3, UserPriv

  25 Feb 2003; Nicholas Jones <carpaski@gentoo.org> *: Update docs and help
  to match the deprecation of actions without '--' preceding them.

  25 Feb 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Message
  updates. Fix secpass for portage user. Set PORTAGE_GID for ebuild.sh to
  use regardless of GID in use (wheel/portage). Only try and delete things
  in PORTAGE_TMPDIR if we have perms to do it... see secpass note. Moved the
  cachedir creation after settings in created so that we can use spawn instead
  of system for the calls to 'chown/chmod -R'. Fix the note on make.defaults.
  Fix for the 404 catcher in the fetch code.

  25 Feb 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Move all actions
  into '--action' form -- Notify of deprecated usages. Moved the functions
  from the top of emerge down below the command line parser for readability.
  Kill FEATURES=noauto if we're running emerge -- it can break things. Make
  -U imply -u so people aren't confused. --debug now enables all debug
  variables in portage. Fix wheel/portage group requirements messages. Get
  the current portage version when doing rsync via the portage tree's files
  and not the loaded cache so that it is aware of changes immediately instead
  of the next run. 

  25 Feb 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Try to change
  to good a good path at the start of the ebuild to prevent operations from
  happening in places like home. After the ebuild's install phase, check to
  see if any unsafe perm combo's exist and die if they do. Fix permissions
  on the cachedir as we're changing them to root:portage. &> on environment
  file prevented it from actually creating the file -- changed to 2>. Change
  'true' to 'exit 0' to be a bit more explicit about what we're doing.

  24 Feb 2003; Alain Penders <alain@gentoo.org> repoman: Added nested/sub-shell
  die testing.

  23 Feb 2003; Alain Penders <alain@gentoo.org>: Added bin/portageq tool to
  provide access to portage internal information without using APIs that
  are changing.  All tools that currently access portage information by
  importing portage.py and poking around in it should switch to using this
  tool instead. Changed some tools in bin/ to use it, so those won't break
  either.

*portage-2.0.47-r3 (17 Feb 2003): Wicked Fast, BugFree v2, UserPriv

  22 Feb 2003; Nicholas Jones <carpaski@gentoo.org> bin/: added dispatch-conf
  and db-fix.pl to the bins. Looking at dispatch-conf to replace etc-update
  written by Jeremy Wohl (bug 14079). db-fix.pl is a rescue tool that Blizzy
  wrote up to recreate/repair counter files in the DB -- shouldn't be needed
  anymore as portage fixes the counter at every load of the counter, but we
  will hang on to it just in case.

  22 Feb 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: moved the
  wheelgid references to portage_gid references. Wheel is being deprecated.
  Added notice to baselayout message that group portage controls everything
  now. Killed the BASH_ENV settings -- moved the reference to /etc/portage/
  in case it's desired in some way -- This fixes AROUND ONE HUNDRED reports
  on 2.0.47-r2. Try/catch invalid tbz2's -- should fix a couple bad tarball
  bugs. Make the prelink call spawn'd without sandbox. buildpkg/userpriv
  fix via actionmap (Jasmin Buchert; bug 16106).

  22 Feb 2003; Nicholas Jones <carpaski@gentoo.org> emerge: --upgradeonly
  added from jrray's patch; added some slot handling. --deep got a short
  flag 'D'. 'info' can be run by non-root. '--quiet' kills all but package
  names on searches. Basic slot detection added to the pretend output so
  that it doesn't always say downgrade. Ignore block list when fetching.
  Can use RSYNC_EXCLUDEFROM to select a from for rsync to --exclude-from;
  (Michael Sterrett; Bug 15882). 'emerge rsync' deletes the dbcachedir
  before it begins updates. Catch  exceptions during rsync cache regen.

  22 Feb 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: General fixes
  to the spelling of things. 'cd $PORT_TMPDIR' corrected to the actual vars
  name. Stripping distcc from PATH if it is there before portage sets it.
  Same with ccache. If we try to compile with out unpacking, complain. Make
  sure to chown files to user portage. 

  22 Feb 2003; Nicholas Jones <carpaski@gentoo.org> cnf/*: CFLAGS notes,
  pentium4 breaks things. Added more descriptions for FEATURES. Added
  RSYNC_EXCLUDEFROM description.

  22 Feb 2003; Nicholas Jones <carpaski@gentoo.org> *: Updates to the
  copyright headers.
  
*portage-2.0.47-r2 (17 Feb 2003): Wicked Fast, BugFree, UserPriv

  18 Feb 2003; Alain Penders <alain@gentoo.org> portage-2.0.47-r2.ebuild:
  If $PORTAGE_TEST is set, skip the beeps/delay messages.  Needed to make
  the regression test scripts bearable :-)

  17 Feb 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Fixed the
  depcache code once again -- ebuild and cache were never set to the same
  mtimes. Removed last os.system() call.

  17 Feb 2003; Nicholas Jones <carpaski@gentoo.org> repoman: catdir fix.
  Added 'emerge-webrsync' from gentoolkit so users can use snapshots on
  initial installs.

  17 Feb 2003; Nicholas Jones <carpaski@gentoo.org> emergehelp.py: Updated
  it to the current calls and conventions. Added comments about etc-update
  and emerge-webrsync.

  17 Feb 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Changed the
  search code around to use compiled re's instead of .lower() searches.
  Trivial touchups in spacing. Only write worldfile if not --pretend. Fix
  losing-packages-to-be-merged during merge bug. Allow options to change
  in a --resume call so that --buildpkg and such may be added.
  
  17 Feb 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Added a
  PREROOTPATH to allow special paths to be added prior to root and ebuild's
  required pathes. ${S} is now generated prior to sourcing an ebuild so
  that it is available in the ebuild at source-time, as opposed to in the
  phases.

*portage-2.0.47-r1 (16 Feb 2003): Wicked Fast + UserPriv

  16 Feb 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Changed a
  few os.system calls to spawn calls. Added userpriv in features check to
  spawn. HOME is now placed in BUILD_PREFIX/homedir when userpriv is enabled.
  Valid command for doebuild() moved to the top of the function. Reorganized
  the directory creation code in doebuild(). HOME is cleaned for every merge
  if in userpriv. LOG_COUNTER fix for the per-ebuild logs -- Only one value
  is used per $PF now.

  16 Feb 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Adjusted options
  to remove --autoclean and make it on-by-default unless killed in FEATURES
  with 'noclean'. Removed debug for --resume. Added RSYNC_TIMEOUT as some
  dialup and other users are experiencing problems with rsync never finishing
  a connection. Added check at the end of an rsync to notify the user when
  a new version of portage is available. Added --pretend capability/fix to
  the --resume code. No resume data and a --resume is no longer a failure.

  16 Feb 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Updates to
  logic of ${T}/successful handling to allow proper cleaning. dyn_clean()
  will do a recursive dir removal after cleaning specific files. Recursive
  chown removed. CCACHE_DIR handled in portage.py now. Removed a few comments
  and unnecessary checks.

  16 Feb 2003; Nicholas Jones <carpaski@gentoo.org> cnf/*: added comments
  on FEATURES=noclean,noauto,userpriv,usersandbox

  15 Feb 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Alain changed
  the .config() call in the search class to a .settings[] -- Speedup.

  14 Feb 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Added
  resume to mtimedbkeys.
  
  14 Feb 2003; Nicholas Jones <carpaski@gentoo.org> emerge: --columns
  flag to support column output in --pretend. --resume support added
  to restart portage with the package list with which it stopped -- data
  is stored in mtimedb. Added '--verbose' to 'emerge info' to display
  all variables in settings.

  13 Feb 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Fix to
  distcc and ccache to prevent them from calling themselves if they
  catch themselves in the path -- double path problem.

  13 Feb 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Fixes to
  the aux_get() code for metacache updates to eclass deps. Debug output
  removal.

  13 Feb 2003; Nicholas Jones <carpaski@gentoo.org> emerge: More fixes
  to the calls to aux_get() for metacache code. Rearranged the option and
  action arrays. Added --nospinner flag.

  13 Feb 2003; Nicholas Jones <carpaski@gentoo.org> emerge: Reorg of flags.
  Addition of --noconfmem to prevent portage from yanking already-merged
  config files. Extra message in --version about missing gcc and sourcing
  /etc/profile to get it. Yanked the majority of the rsync cachedb update
  code -- Moved it to aux_get.
  
  13 Feb 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Typo fixes.
  aux_get() now has a metacachedb param for using metadata cache over the
  initial call to doebuild() -- Should speed up rsync users regen time.
  Added support for --noconfmem via settings["NOCONFMEM"] in treewalk().
  Added sys.exit(1) on failure to move files during merge. Comment
  realignment.
  
  11 Feb 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Fix the
  depcache code by adding in a missing stat call after regeneration.
  Call portageexit() in exithandler() so that mtimedb gets written out
  on cancelled runs. Add in --quiet option. Currently only kills the
  processing messages on emerge regen.
  
  11 Feb 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Fix the
  eclass code to remove the double inherits cause by eclasses managing
  that on their own.

*portage-2.0.46-r12 (07 Feb 2003): Fixups

  07 Feb 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Move
  logdir check/generation code so that it's created before 'clean'. Fix
  the usemask/archkeys bug and a related bug with the var enabled. Fix
  to movefile() code to ensure symlinks are handled properly.

  07 Feb 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Make per-
  ebuild logs use the counter to get a chronological list instead of a
  timestamp based one.
  
  07 Feb 2003; Nicholas Jones <carpaski@gentoo.org> emerge: If a package
  is requested to be updated but is not merged, still add it to world.
  
  07 Feb 2003; Nicholas Jones <carpaski@gentoo.org> *: Update to help.
  Mostly comments on --verbose. Clarification on make.conf* mirrorselect.
    
*portage-2.0.46-r11 (04 Feb 2003): Fixups

  04 Feb 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: distcc
  fixups along with ccache fixups from the bug 13897 effort. Added more
  varaibles to the build data output. Allow CC/CXX to be set if they are
  not set in environment.

  04 Feb 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Removed an
  unnecessary call to os.unlink() in movefile that resulted in it failing
  when moving files across devices. HTML 404 catcher -- if the distfile is
  a reasonable size, and it's got <title>.*(not found|404).*</title> in it
  it will be deleted and the next mirror persued.

*portage-2.0.46-r10 (03 Feb 2003): Feature/Function Cleanups

  03 Feb 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Added
  quotes to fallback checksum code to ensure it works on space-containing
  filenames. Error message added in writedict. Worldfile-depleeting bug
  fixed -- 'emerge -e world'+AUTOCLEAN would cause every package in world
  to be removed from the worldfile to be removed.

  03 Feb 2003; Nicholas Jones <carpaski@gentoo.org> make.conf: updated the
  commentary about AUTOCLEAN.

  03 Feb 2003; Nicholas Jones <carpaski@gentoo.org> etc-update: Added in
  automerge functionality for trivial changes. Comments and whitespace
  are just merged without asking when it's enabled.

  03 Feb 2003; Nicholas Jones <carpaski@gentoo.org> emerge: redundant cmd
  line flags warning. Show enabled/disabled USE flags on -vp (Masatomo
  Nakano). Missing changelog fix for --changelog. Added an rsync timeout
  of 60 seconds and a message on fail due to timeout.

  03 Feb 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: CC/CXX fix
  to override profile.env settings. FEATURES=distcc support to get past
  profile.env's CC settings/lockdown. If CBUILD is defined, it is appended
  to econf's output in a --build= statement. Added .unpacked marker to
  the unpack code to ensure a proper unpack phase.

  01 Feb 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Adjusted
  the arch.list code to be a general masking setup. /etc/make.profile/
  and /etc/portage/ have use.mask files that are concatenated. On fetch,
  if downloader reports failure, then check that filesize<digestfilesize
  and continue onto the next mirror before dying.

  27 Jan 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh/portage.py:
  eclass fixups for newdepend issues where newdepend operates on RDEPEND
  prior to it being set to default by ebuild.sh. Repoman fix for multi-
  arch failures by excluding /usr/portage/profiles/arch.list entries from
  consideration, excluding $ARCH.

*portage-2.0.46-r9 (14 Jan 2003): portage restart fix
  15 Jan 2003; Nicholas Jones <carpaski@gentoo.org> emerge: fixed the
  missing tabs from the cvs diff backport.

*portage-2.0.46-r8 (14 Jan 2003): touchup KV{,ERS} for public stable

*portage-2.0.46-r7 (14 Jan 2003): Backport from cvs and fixes.
  portage-2.0.46* :: EXCUDES ALL PORTIONS RELATING SPECIFICALLY TO USERPRIV

  14 Jan 2003; Nicholas Jones <carpaski@gentoo.org> portage.py: Persistant
  KV and KVERS on depend calls. Sandbox violation of do_upgrade() caught.

  14 Jan 2003; Nicholas Jones <carpaski@gentoo.org> emerge: --buildpkg
  touchups and forward porting of some of 2.0.46-r6. Restart on -r0/proper
  versions of portage due to VERSION not matching pkgsplit output fixed.

  14 Jan 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: 20% speedup
  in dep generation by removing all external app calls. Moved KVERS to
  portage to make it persistent during dep calls. Other code moved into
  conditionals based on $*!=depend. chmod's swaped with umask.

  11 Jan 2003; Jack Morgan <jmorgan@gentoo.org> cnf/make.conf.sparc:
  updated make.conf.sparc to add CFLAGS for sparc32 and sparc64

  08 Jan 2003; Nicholas Jones <carpaski@gentoo.org> bin/g-cpan.pl:
  Added from bug 3450 -- Creates and merges perl module ebuilds on-the-fly
  from cpan and merges them.

  08 Jan 2003; Mark Guertin <gerk@gentoo.org> cnf/make.conf.ppc:
  updated make.conf.ppc to remove G3 options for CFLAGS and other
  small tweaks

*portage-2.0.47 (06 Jan 2003): UserPriv

  06 Jan 2003; Nicholas Jones <carpaski@gentoo.org> portage.py:
  Forced HOME to BUILD_PREFIX regardless of user. Added in a 'rm -Rf' notice
  to readonly-fs/Full-Disk notices. Disabled the usepkg on buildpkg function
  of portage. digraph.hasallzeros() added -- Determines if tree is zero depth.
  
  06 Jan 2003; Nicholas Jones <carpaski@gentoo.org> cnf/*: Added in the
  PORT_LOGDIR option and description. Also added a GENTOO_MIRRORS section
  back into the make.conf* files so that users are aware that they need to
  specify ibiblio. Killed the linefeeds in the sparc conf.

  06 Jan 2003; Nicholas Jones <carpaski@gentoo.org> emerge: options and
  actions fixup. Added new short options and long options. --buildpkgonly
  now works and restricts the process to deplists of zero depth. Updated
  the help for portage, and created a seperate shorthelp function with
  the terse, options-only, versions of the regular help. Fixed the env_update
  call after --fetchonly runs.

  06 Jan 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh:
  touchups to the user priv and logging code to kill the invalid user
  messages when portage:portage doesn't exist on the system.

*portage-2.0.47_pre4 (03 Jan 2003): UserPriv Works + Per-Ebuild logging

  04 Jan 2003; Nicholas Jones <carpaski@gentoo.org> portage.py:
  tokenize() fixups to remedy the || reduce problems. 

  04 Jan 2003; Nicholas Jones <carpaski@gentoo.org> prepall:
  Fixup for '//' problem.

  03 Jan 2003; Nicholas Jones <carpaski@gentoo.org> ebuild.sh:
  Support for per-ebuild logging via PORT_LOGDIR variable. ebuild.sh
  now can do usermode compiles _and_ maintain the enviroment with a
  few minor restrictions like changing portage variables.

*portage-2.0.47_pre3 (02 Jan 2003): Forward port of fixes & New fixes

  02 Jan 2003; Nicholas Jones <carpaski@gentoo.org> emerge:
  tbz2 handling improved -- checks current, pkgdir/All/x, pkgdir/x.
  -r0 removal on current ver to stop people from complaining about it.
  More info added to 'emerge info' output.

  02 Jan 2003; Nicholas Jones <carpaski@gentoo.org> portage.py:
  Spaces in filenames fix for prelink-capable systems. Exception caused
  by invalid or unsatisfiable '||' dependancies caught and warned about.
  auxdbkey order fix. dbcachedir now ensures a '/' before the cache dir.

  02 Jan 2003; Nicholas Jones <carpaski@gentoo.org> prep*:
  Fixes from Azarah to make the included files more proper.

  26 Dec 2002; Phil Bordelon <sunflare@gentoo.org> man/emerge.1:
  Added documentation of the --deep option.

*portage-2.0.46-r5 (30 Dec 2002): Touchups and sparc confs

  30 Dec 2002; Nicholas Jones <carpaski@gentoo.org> *:
  fix for prelink unmerge problems. small touches to outputs.
  sparc configs added. Azarah's fixups for the prep* scripts.
  Changes to 'emerge info' output. tbz2 prefixes PKGDIR/All if the
  tbz2 doesn't exist in the current dir.

*portage-2.0.46-r3 (24 Dec 2002): Backport of fixes in 2.0.47_pre2

*portage-2.0.47_pre2 (24 Dec 2002): Feature: userpriv compiles

  Tokenizer fixup courtasy of Evgeny Roubinchtein. unalias -a in ebuild.sh.
  Moved the help() to emergehelp.py. prepallman fixup for missed symlinks.
  More info provided for portage-user-missing message. FEATURES=sandboxuser
  not provides sandbox in compile phase along with userpriv. mtimedb
  exception should actually be caught now.
  
*portage-2.0.47_pre1 (21 Dec 2002): Feature: userpriv compiles

  21 Dec 2002; Nicholas Jones <carpaski@gentoo.org> *:
  ebuild.sh: portage user setup. dyn_setup is always run before calls to
  unpack,compile,install. emerge: infodirs cleanup, traceback on invalid
  dir fix. Proper regen on info change. portage.py: uid/gid discovery and
  check code. PRELINK_PATH and PRELINK_PATH_MASK added and renamed. Made
  HOME set to BUILD_PREFIX when HOME is unset. Patched in UserPriv compile
  code and checks and complaints to ensure smooth integration. Reorganized
  chown calls to ensure things get set right for userpriv and not. Sandbox:
  UID check to prevent non-root errors patched in.

*portage-2.0.46-r2 (18 Dec 2002): Feature Stable Release Prelink + Bug Fixes

  18 Dec 2002; Nicholas Jones <carpaski@gentoo.org> portage.py, emerge:
  Traceback fix for blocking packages in the restart check in emerge. Added
  missing import for commands in portage.py.

*portage-2.0.46 (18 Dec 2002): Feature Stable Release Prelink + Bug Fixes

  18 Dec 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  PRELINK_MASK adds ignore paths for prelink.conf. Error message
  adjustments for appearance/readability. auxdbkey changes.

  18 Dec 2002; Nicholas Jones <carpaski@gentoo.org> emerge:
  --changelog displays changelogs of packages on update. gcc version
  fix for --version. Missing indent in masked output corrected. Some
  color additions. Prelink code removed -- Users can do it instead.

  18 Dec 2002; Nicholas Jones <carpaski@gentoo.org> ebuild.sh:
  use_{enable,with}() work now. Rearranged auxdbkeys again.
  
  17 Dec 2002; Martin Schlemmer <azarah@gentoo.org> bin/ebuild.sh:
  Regenerate /lib/cpp and /usr/bin/cc in pkg_setup if they are not
  files to ease the broken pkg_postrm() some gcc have.

*portage-2.0.46_pre2 (15 Dec 2002): Feature Prerelease: prelink

  15 Dec 2002; Nicholas Jones <carpaski@gentoo.org> emerge/portage.py:
  Fixups. PRELINK_MASK code. 'prelink -af' in post_emerge().

  15 Dec 2002; Mark Guertin <gerk@gentoo.org> cnf.make.conf.ppc:
  updated incorrect CFLAG option and appended -mabi=altivec info

*portage-2.0.46_pre1 (15 Dec 2002): Feature Prerelease: prelink

  15 Dec 2002; Nicholas Jones <carpaski@gentoo.org> portage.py: Counter
  fixups. Prelink code.

  15 Dec 2002; Nicholas Jones <carpaski@gentoo.org> bin/f*: Made them
  loop over multiple files instead of just doing one.

  13 Dec 2002; Nicholas Jones <carpaski@gentoo.org> emerge/portage.py:
  Added disabled prelink code. Needs a little more work. Gave portage the
  ability to restart on upgrades to the portage version. Ebuilds for prior
  versions will intentionally die on upgrade. USE=build disables it so
  bootstrap isn't affected.

*portage-2.0.45-r5 (13 Dec 2002): Feature addition: PDEPEND+fixes

  13 Dec 2002; Nicholas Jones <carpaski@gentoo.org> emerge/portage.py:
  Added restart on portage upgrade code and adjusted ebuild to accomplish
  this until version matches -r5.

*portage-2.0.45-r4 (11 Dec 2002): Feature addition: PDEPEND

  11 Dec 2002; Nicholas Jones <carpaski@gentoo.org> ebuild.sh/portage.py:
  Added [CDEPEND, PDEPEND, REBUILD] to auxdbkeys and updated ebuild.sh.
  Prevented autoclean on fetchonly.
  
  11 Dec 2002; Nicholas Jones <carpaski@gentoo.org> emerge:
  Added support for PDEPEND. Rewrote some dep handling variables for
  readability and ease of use.

*portage-2.0.45-r3 (09 Dec 2002): Touchups.

  09 Dec 2002; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Fixed
  use_enable() and use_with() so that they actually work -- also don't
  have to specify 2nd parameter, 1st is assumed. 
  
  09 Dec 2002; Nicholas Jones <carpaski@gentoo.org> emerge: Added previous
  version/downgrade messages to --pretend. Extra message to notify of dep
  calculation failure as bad deps can exit portage without error.

  09 Dec 2002; Nicholas Jones <carpaski@gentoo.org> portage.py: Attempt
  at fixing the sandbox-crashes-missing-HOME bug. Added a try/catch around
  the virts/'del x' code to prevent tracebacks on boxes without a virtuals
  file.

  06 Dec 2002; Nicholas Jones <carpaski@gentoo.org> emerge: Fixed 'xfrom'
  variable-used-before-assignment message on masked ebuilds.

  06 Dec 2002; Nicholas Jones <carpaski@gentoo.org> portage.py: Disabled
  writes to DBs when sandbox is enabled.

  03 Dec 2002; Nicholas Jones <carpaski@gentoo.org> portage.py: Fixed a
  nice bug where python was writing 'L' at the end of long() types for
  mtimes.

*portage-2.0.45 (02 Dec 2002): More bug fixes for stable.

  02 Dec 2002; Nicholas Jones <carpaski@gentoo.org> portage.py, output.py:
  Added several color options and functions to output.py. 'DO NOT EDIT'
  notices added to .env generated profile settings files. Touchups and
  nofetch() call for restricted fetches. Moved some file IO code for
  SLOTs into a try/catch. { mtimedb fixups. Eclass aux_get() error fix.
  aux_get() error fix via try/catch with magically-missing ebuild when
  doing stat on it. Enabled full eclass()/inherit code. Added code to
  flushmtimedb() entries by key name. } <-- aux_get() fixups. Made
  starttime into a long... time.time() is apparently overflowing int().
  
  02 Dec 2002; Nicholas Jones <carpaski@gentoo.org> bin/*:
  prep*: Fixed missed man pages and corrected loops to be fairly complete
  in the included files. quickpkg: Loop to do each in $@ (Peter Sharp).

  02 Dec 2002; Nicholas Jones <carpaski@gentoo.org> emerge:
  Yank '++' from searches and make it '\+\+' so that it works. Reformated
  'all ebuilds are masked' message to be a little more obvious. env_update()
  AFTER autoclean... not in autoclean -- Fixes ldconfig issues. Typo fixes.

  02 Dec 2002; Nicholas Jones <carpaski@gentoo.org> ebuild.sh:
  Added has(), general use()-like function -- 'has this_thing $VAR' returns
  shell true or false. Added has_version(), portage call to determine if
  a specified DEPEND-atom is installed -- 'has_version ">=mozilla-1.2"'
  returns shell true or false. Added best_version(), portage call to
  get the best/most-recently-merged version of a DEPEND-atom statement --
  'best_version ">=mozilla-1.0"' prints a string. pkg_nofetch() displays
  SRC_URIs by default on RESTRICT -- Can be redefined to display custom
  messages. die() on unpack() failure added. Courtasy of SpanKY: Added
  use_with() and use_enable() for --with-thing and --enable-thing.
  'use_with gd libgd' would print --with-libgd if gd was in USE and
  --without-libgd if not.

  19 Nov 2002; Martin Schlemmer <azarah@gentoo.org> cnf/etc-update.conf:
  Add 'menu' config item and note about it needing dev-utils/dialog, as
  a lot of users do not know about this nifty feature.

  14 Nov 2002; Phil Bordelon <sunflare@gentoo.org> man/emerge.1:
  Cleaned up the more recent edits to the man page to more closely
  match the previous format, fix various typos, and so on.  Expanded
  the REPORTING BUGS section, and made the PACKAGE MASKING part of the
  NOTES a stand-alone section.

*portage-2.0.44 (11 Nov 2002): bug fixes and 1.2 rescue/install setup

  11 Nov 2002; Nicholas Jones <carpaski@gentoo.org> *:
  bin/*: fixes for spaces-in-filename issues, lots of quotes added. conf/*:
  touched up comments and warning. Added RSYNC_RETRIES.  ebuild.sh: exit now
  reports the failing ebuild's $CATEGORY/$PF. Added EXTRA_ECONF to econf().
  emake: added EXTRA_EMAKE. emerge: RSYNC_RETRIES curtasy of Christopher
  Sharp. Random comment fixes. portage.py: Random touchups. KV extraction
  fixup for new ROOTs. ARCH missing in profile fix. Fix for packages/All
  missing dir traceback. INFOPATH/INFODIR fix. Added INFOPATH to specials.
  portage.py: Touchups to the mtimedb-touching code. Fixes for the broken
  os.path.normpath() leading '//' bug. Added a modified chuck of Phoen][x's
  dist size patch.

  09 Nov 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  Fixups for KV.

  08 Nov 2002; Nicholas Jones <carpaski@gentoo.org> emerge:
  Fix for missing-glibc-bug in --version.

  08 Nov 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  Fix for cfgdictfile traceback when ROOT != '/'. Fix for missing kernel
  headers -- checks usr/src/linux, then /usr/include, then if merging
  from sys-kernel ignore error.

  07 Nov 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  Fix (part 2) for the USE="-*" arch-missing problem.

  03 Nov 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  eclass() function uses a caching and cPickle storing method to determine
  currency of eclass-derived depcache entries. All previous methods are
  already removed. eclass_save() is called via store() now. Stripped some
  cruft from aux_get(). Error message touchups.

  03 Nov 2002; Nicholas Jones <carpaski@gentoo.org> emerge:
  A couple message touchups.

  29 Oct 2002; Nicholas Jones <carpaski@gentoo.org> emerge:
  Moved the autoclean section under the --pretend check so it doesn't flip
  out when running '-f'. Preliminary support for binary-only methods.
  --usepkgonly (implies --usepkg) to force errors is binaries don't exist.

  27 Oct 2002; Daniel Robbins <drobbins@gentoo.org> new*: changed "&&" to "||"
  to provide even better protection against mis-use of these commands.

*portage-2.0.43 (27 Oct 2002): Bug fix release

  27 Oct 2002; Nicholas Jones <carpaski@gentoo.org> emerge:
  AUTOCLEAN="yes" on by default. Added in a clean phase after the merge
  phase so clashing library versions do not remain installed when ldconfig
  is run. This should close up the symlinks-being-removed bugs.
  
  27 Oct 2002; Nicholas Jones <carpaski@gentoo.org> cnf/*:
  Miscelaneous typo fixes. Added PORTDIR_OVERLAY description in make.conf.

  26 Oct 2002; J Robert Ray <jrray@gentoo.org> portage.py:
  Don't act like the download failed if after successfully downloading
  a file its size doesn't match the file size in the digest.  Treat
  this as a mismatched digest condition instead.

  26 Oct 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  Reversed the defaults on env_update() so it does a full ldconfig instead
  of a non-symlink ldconfig. Fixed the typo in the 'invalid conf' notices.

*portage-2.0.42 (24 Oct 2002): Bug fix release

  24 Oct 2002; Nicholas Jones <carpaski@gentoo.org> make.defaults.5:
  Removed this file. It is horribly out of date and completely
  wrong to boot. Users shouldn't be modifying the 3 lines in this file
  anyway. They are obvious if you understand conf and defaults.

  24 Oct 2002; Nicholas Jones <carpaski@gentoo.org> emerge:
  Added missing return statements to select_dep() that caused unmet packages
  to be ignored. Touchups to 'emerge info' and 'emerge --version' output.
  Added --delete to --delete-after so that it actually deletes in rsync.

  24 Oct 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  Warning touchups. Replaced constants (9) to index("INHERITED").

  23 Oct 2002; Nicholas Jones <carpaski@gentoo.org> bin/new*:
  Fix for "running as a root user" bug... code does 'rm -rf /' if
  variables aren't defined in environment... That's a bad thing.

  23 Oct 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  Possible fix for the aux_get() issues and IUSE.

  22 Oct 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  noauto got lost in some weird conflicts of .38, added it back.

  22 Oct 2002; Nicholas Jones <carpaski@gentoo.org> emerge:
  Primitive logging via emergelog(). countdown(N,str) function does N second
  countdowns of the action 'str'. Error messages on dependency traceback
  via try/except on select_dep(). Removed the 'unavailable' warning. Message
  updates. Added logging of basic actions to /var/log/emerge.log. Added
  package/to-go counter. 'emerge info' displays a number of useful variables
  that is good for bug reports.

  22 Oct 2002; Nicholas Jones <carpaski@gentoo.org> prepallstrip:
  Bug 9508, fix for MSB architectures strip. Previous check assumed only
  LSB objects could/should be stripped. (*LSB -> *SB) [Joky@#gentoo-sparc]

*portage-2.0.41 (20 Oct 2002): Bug fix release

  20 Oct 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  stickies=[] lists the variables that will be kept/used as sticky vars,
  not yet implimented. Fixed several relative symlink bugs by adding
  abssymlink() to portage to determine real/absolute targets. env_update()
  modified to fix bug 9308 symlinks bug. Bug 8348, request for error messages
  instead of tracebacks/dies on parse errors, now caught on a per file basis
  for system config files, includes descriptive messages. Fix for missing
  profile traceback in new prepend'd-arch code. Typo fixes in symlink code.
  DISABLED 'KEYWORD="" == available' code, DEFAULT IS MASKED NOW. Major
  update to masking code, CONFIG_PROTECT can be layered with _MASKs, and
  update_protect() now sets the self.protect* variables. Condensed and
  reordered the unmerge code, now checks existance, cfgprotect, then mtimes.

  20 Oct 2002; Nicholas Jones <carpaski@gentoo.org> emerge:
  Bug 8767: Added 'buildpkg' to FEATURES to specify always-buildpkg.
  Updated the --version output to display profile and gcc version.
  Bug 8083: Eliminate spinner when terminal is not a tty. Bug 7688:
  fixed search vs. searchdesc differences by adding 'cat/pack' split.
  Bug 9308: Symlinks were being killed by ldconfig, fixed by changing
  how/when ldconfig was allowed to set symlinks.  rsync command touchups,
  --delete-after so that a failed rsync won't leave a user
  without/with-few packages in portage.  More warnings to depclean.

  20 Oct 2002; Nicholas Jones <carpaski@gentoo.org> ebuild.sh:
  Added die to gzip in unpack()

  20 Oct 2002; Nicholas Jones <carpaski@gentoo.org> make.conf*:
  Added in useful variables and descriptions+warnings of their uses.

  20 Oct 2002; Nicholas Jones <carpaski@gentoo.org> make.globals*:
  Added in large "do not edit" message.

  16 Oct 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  Fixed an mtimes issue. --update on a package might yank non-cfgprot
  files during the clean-phase because they didn't have mtimes updated.

  15 Oct 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  Added 'IUSE' to the auxdbkey list. Fixed random aux_get() errors
  caused by random empty files in the dep cache.

  15 Oct 2002; Nicholas Jones <carpaski@gentoo.org> ebuild.sh
  Actually committed the --host portion of econf.

  15 Oct 2002; Martin Schlemmer <azarah@gentoo.org> portage.py, missingos.c:
  Remove testsandbox.sh, and comment code in portage.py that still
  used it to no real use.  Add another '\' to the 'missingos_mknod__doc__'
  string in src/python-missingos/missingos.c to fix failure with gcc-3.3.

*portage-2.0.40 (13 Sep 2002): Bug fix release

  15 Oct 2002; Nicholas Jones <carpaski@gentoo.org> portage.py, emerge:
  emerge depclean -- Removes all packages that are not explicitly or
  dependency merged.

  15 Oct 2002; Nicholas Jones <carpaski@gentoo.org> ebuild.sh:
  depend now prints IUSE. Doesn't do anything with it yet.
  unpack() -- unzip silently overwrites files ().
  econf() -- now specifies '--host=${CHOST}'

  15 Oct 2002; Nicholas Jones <carpaski@gentoo.org> make.globals:
  Touch ups + warning.

  15 Oct 2002; Brandon Low <lostlogic@gentoo.org> etc-update:
  Make etc-update find all the same CONFIG_PROTECT files as portage
  by importing it's settings from portage.

*portage-2.0.39 (13 Sep 2002): Bug fix release

  13 Oct 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  Bug 5926 -- If the fetchonly AND pretend flags are specified, then
  portage should give a list of all the SRC_URIs so that they can be
  downloaded or sent into another app. Made sandbox display name in
  'ps' as '[$PF] sandbox'.

  13 Oct 2002; Nicholas Jones <carpaski@gentoo.org> emerge:
  Bug 5926 -- See portage.py for today. (emerge -pf)
  Typo fixes.

  13 Oct 2002; Nicholas Jones <carpaski@gentoo.org> ebuild.sh:
  Added -q to unzip to make it quiet like the others.
  Bug 6033 -- Fix for infinate loop in eclasses in portage overlay.

  12 Oct 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: fix for
  doebuild() so that our rsync mirror will contain full digests and not just
  partial digests for x86.

  12 Oct 2002; Nicholas Jones <carpaski@gentoo.org> emerge:
  Added --progress to rsync. This puts the file progress meters
  back on. Users have requested this, and it's not detrimental.
  Just creates a lot of output, as the man page says: "It gives
  bored users something to look at."

  12 Oct 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  Bug 6361 -- Added checking on directories to ensure that we can
  write to them before we try and traceback. Also added pieces to
  functions so that return conditions are propagated back to emerge
  so that it actually dies on errors. Message on condition details
  restart process.

  11 Oct 2002; Nicholas Jones <carpaski@gentoo.org> make*globals:
  Removed the tomcat configs from CONFIG_PROTECT

  11 Oct 2002; Nicholas Jones <carpaski@gentoo.org> doman:
  Bug 8208 -- Added flags and auto-location support for 'x' manpages.
  Added not-an-man-page message.

  11 Oct 2002; Nicholas Jones <carpaski@gentoo.org> dohtml:
  Bug 8208 -- Added 'js' to the include list, and added '-A' as an
  append flag. '-a' was a filter-down-to.

  11 Oct 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  Bug 8964 -- Fix for read-only traceback in digestgen().
  Bug 8949 -- Fix for read-only traceback in doebuild()
  Bug 8284 -- Prepend ARCH _after_ use order processing. Prevents -*
  from killing the ARCH flag. Bug 7596 -- Set an mtime of 0 into
  CONTENTS if the file already exists on the FS. Allows the entry
  to be in the CONTENTS file. Condensed the protect/protect-mask
  code into one function in class dblink. Revised code to allow
  multi-level protects and masks.

  10 Oct 2002; Nicholas Jones <carpaski@gentoo.org> emerge:
  Bug 8552 -- typo fixes

  10 Oct 2002; Mark Guertin <gerk@gentoo.org> cnf/make.conf.ppc :
  Fixed type in reccomended CFLAGS for generic ppc (was 02, corrected 
  to O2)

  09 Oct 2002; Nicholas Jones <carpaski@gentoo.org> portage.py:
  Fixed a bug where files less than 2 characters in /etc/env.d
  weren't checked correctly, and tracebacked env_update()

  07 Oct 2002; Martin Schlemmer <azarah@gentoo.org> ebuild.sh:
  Also set $TMP, as MDK among distros sets this, and it causes
  breakage during bootstrap.  This should close bug #8101.

  07 Oct 2002; Mark Guertin <gerk@gentoo.org> man/ebuild.5 :
  Updated the man page to include missing functions in portage

  05 Oct 2002; Mark Guertin <gerk@gentoo.org> cnf/make.conf cnf/make.conf.ppc:
  Fixed typo (missing "/") in make.conf and make.conf.ppc, bug #7944

  28 Sep 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: remove
  deprecated "ld.so" from newdepend.

*portage-2.0.38 (25 Sep 2002): Bug fix release 

  25 Sep 2002; Daniel Robbins <drobbins@gentoo.org> emerge: now "emerge world"
  and "emerge system" don't replace packages. This closes bug #8282.
  
  21 Sep 2002; Daniel Robbins <drobbins@gentoo.org> portage-2.0.38.ebuild:
  Added additional perm check for /var/cache/edb/dep dirs and fixed perm
  settings in the ebuild's pkg_postinst(); this should close bug #7719.
  
  21 Sep 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: Added
  carpaski's patch to add PF to the sandbox's argv[0], closing bug #8141.

  19 Sep 2002; Daniel Robbins <drobbins@gentoo.org> emerge: tweaked emerge so
  that "--pretend" displays don't show "N" all the time.

  19 Sep 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: tweaked help to
  not list deprecated options.

  25 Sep 2002; Maik Schreiber <blizzy@gentoo.org> cnf/make.globals,
  cnf/make.globals.ppc: Added /opt/jakarta/tomcat/conf to CONFIG_PROTECT. Note
  by drobbins: this will be removed soon when this gets moved to an /etc/env.d
  file in the tomcat package.

*portage-2.0.37 (19 Sep 2002): Gentoo Linux 1.4_rc1 version 

  10 Sep 2002; Mark Guertin <gerk@gentoo.org> cnf/make.conf.ppc : Backed down
  CFLAGS from -O3 to -O2 on ppc as -O3 has proven to be unreliable on all
  PowerPC-based machines

  09 Sep 2002; Daniel Robbins <drobbins@gentoo.org> emerge: new parameterized
  create() engine, security pass fixes ("emerge" as non-root doesn't print
  "root access required" but shows help instead), emerge --pretend output fixes
  ("to /" lines are dropped and only displayed if installation root != "/".)
  New (and currently unofficial and undocumented) "--deep" and "--selective"
  options that correspond to their respective create() parameters. Using
  "--deep" will enable "deep emerging" -- updating all deps even if the parent
  doesn't need updating. The new parametrized create() is also much cleaner
  than the previous incarnation.
  
  09 Sep 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: os.chdir() ->
  chdir() fix, enhanced fetch() digest corruption handling.

  06 Sep 2002; Mark Guertin <gerk@gentoo.org> cnf/make.globals.ppc :
  Updated make.globals.ppc to reflect new CFLAGS for 1.4 release

*portage-2.0.36 (04 Sep 2002): Gentoo Linux 1.4_rc1 version 

  04 Sep 2002; Daniel Robbins <drobbins@gentoo.org> emerge: "--onlydeps" was
  mostly broken since the most recent emerge code restructure. Now fixed,
  closing bug #7442.
  
  04 Sep 2002: Daniel Robbins <drobbins@gentoo.org> etc-update.conf: added
  missing etc-update config file.
  
  04 Sep 2002: Daniel Robbins <drobbins@gentoo.org> portage.py: removed error
  detection based on return value for pkg_preinst() and friends when called
  from merge() and unmerge(), since the value can be unreliable due to the &&
  shell construct, depmod -a returning a non-zero value, etc. Also fixed
  env_update() to treat CONFIG_PROTECT and CONFIG_PROTECT_MASK correctly.

*portage-2.0.35 (03 Sep 2002) 

  03 Sep 2002: Daniel Robbins <drobbins@gentoo.org> etc-update,
  man/etc-update.1: new program for updating config files.
  
  03 Sep 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: upgraded
  inherit() to support $PORTDIR_OVERLAY, closing bug #6033.
  
  03 Sep 2002; Daniel Robbins <drobbins@gentoo.org> emerge: calls to "cvs" now
  use "-z3" compression option, closing bug #5982.
  
  03 Sep 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: symlinks to
  .tbz2's in the $PKGDIR/All directory (from $PKGDIR/$CATEGORY) are now
  relative, closing bug #6881.

  03 Sep 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: einstall now
  sees "GNUmakefile", closing bug #4895.
  
  03 Sep 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: typo fixes,
  closing bug #7263.

  03 Sep 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: /var/tmp
  creation now works even if /tmp already exists, closing bug #7376.
  
  02 Sep 2002; Daniel Robbins <drobbins@gentoo.org> emerge: fixed a logic error
  that resulted in non-root emerge failure. This closes bug #7389.

*portage-2.0.34 (01 Sep 2002) 

  01 Sep 2002; Daniel Robbins <drobbins@gentoo.org>: portage.py, ebuild.sh:
  Azarah's ebuildsh() removed, various other little fixes like pkg_preinst and
  friends not dying on non-zero return codes.
  
  01 Sep 2002; Martin Schlemmer <azarah@gentoo.org> ebuild.sh: add a custom
  version of the esyslog() function to fix the "Red Star" bug if no logger is
  running.

*portage-2.0.33_p1 (30 Aug 2002): urgent fix

  31 Aug 2002; Dan Armak <danarmak@gentoo.org> ebuild.sh: comment out the if
  clause that only executed inherit() conditional on $PORTAGE_RESTORE_ENV. It
  didn't work and broke portage 2.0.33 as far as inheriting ebuilds goes.

*portage-2.0.33 (30 Aug 2002) 

  30 Aug 2002; Daniel Robbins <drobbins@gentoo.org> : some additional clean-ups
  for the make.conf(.ppc) files.
  
  30 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge: emerge search would
  die when aux_get() raised a KeyError; we now catch and handle this exception.
  This closes bug #7280.
  
  29 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: fixed typo in
  move_ent() code that messed up moving packages into previously non-existant
  category directories in /var/db/pkg.
  
  30 Aug 2002; Mark Guertin <gerk@gentoo.org> cnf/make.conf.ppc : Updated
  cnf/make.conf.ppc with new CFLAGS for 1.4 release

*portage-2.0.32 (29 Aug 2002)  
  
  29 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge: favorites weren't
  working since 2.0.30; they're working again now. This closes bug #7225.

  29 Aug 2002; Phil Bordelon <sunflare@gentoo.org> emerge.1: Added a small
  blurb regarding what to do when emerge --update [world|system] fails because
  of new features such as || and ?.  Hopefully this will assuage the fairly
  common questions regarding this.

*portage-2.0.31 (29 Aug 2002)

  28 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: fixed a config
  file protection logic bug detected and identified by Azarah. It basically
  broke most config file updates and has been broken for around six months.
  Very surprised no one had encountered this issue before.
  
  28 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge: improved error
  messages when an unsatisfiable dependency is encountered. Now lets you know
  if there are masked packages that would satisfy the dep.
  
  28 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge: emerging .tbz2
  packages and .ebuilds by name now works; this was broken in 2.0.30.

*portage-2.0.30 (28 Aug 2002)

  28 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: rewrote
  gettimeval() as cpv_counter() and updated it to handle corrupt COUNTER files,
  closing bug #6763.
  
  28 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge: "emerge search" now
  displays information for masked packages if possible, closing bug #6823.
  
  28 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge: fixed an old gbevin
  bug where "emerge search" wouldn't show packages whose version string was
  only one character long, ie. "foo-3". This closes bug #6800.
  
  28 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: added a missing
  call to flatten() in dep_check(), allowing recursive sublists in dependencies
  and SRC_URI variables to work; this closes bugs #7104, #7116, #7122.
  
  28 Aug 2002; Daniel Robbins <drobbins@gentoo.org> doman: fixed some typos,
  closing bug #7152.
  
  28 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: major
  work to emerge: reworked the internal code organization to make depgraph code
  easier to understand; unified two code paths so that ebuild/.tbz2 choices
  when "--usepkg" should now be eternally consistent; tweaked portage.py so
  that dep_expand()'s dbapi argument is optional. In the process of all this,
  isolated and fixed bug #4508.
  
  27 Aug 2002; Martin Schlemmer <azarah@gentoo.org> portage.py: if the dep
  cache is stale, it is possible that aux_get() will call doebuild(depend) to
  regenerate it again.  This call will cause $T to be set to "", which will
  break anything that needs $T to be set to a writable location inside the
  sandbox, so we need to set $T to a valid value again.

  27 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: improved error
  handling/detection of bad pkgsplit() and catpkgsplit() calls; should close
  bug #6803, #6853.
  
  26 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge: fix so that "emerge
  prune rsync" doesn't complain that you are trying to rsync and prune at the
  same time. This closes bug #6785.
  
  26 Aug 2002; Daniel Robbins <drobbins@gentoo.org> doman fixes; should work
  for pre-gzipped man-pages and man-pages with multiple "."s in their name.
  Closes bugs #6770, #6917
  
  25 Aug 2002; Martin Schlemmer <azarah@gentoo.org> emerge: fixed an
  indentation problem of the 'else:' at line 1304. 

  20 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge: removed stray
  "DEBUG:" output, closing bug #6732.

*portage-2.0.29 (18 Aug 2002)

  18 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge, portage.py,
  ebuild.sh: making some effort to make output cleaner and less cluttered,
  particularly with error handling.
  
  18 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge: updated so that
  "emerge --inject foo-1.0" fails instead of injecting "null/foo-1.0"; fixed
  error in help; "emerge --inject" and "emerge" with no specified files or
  package classes prints out a small warning and exits. Closes bug #6353.
  
  18 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: movefile()
  didn't like bind mounts due to a peculiar quality -- according to their
  ST_DEV stat() information, they are on the same filesystem, so rename()
  should work, but it doesn't. We now fall back to copy if rename() doesn't
  work. Closes bug #6468.
  
  18 Aug 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: made significant
  enhancements and fixes to ebuild.sh's error-handling code. Errors in
  src_unpack(), src_compile(), src_install() and others should now be correctly
  detected. Also downgraded our use() function since we are not implementing
  extended USE functionality. Closes bug #6393.
  
  18 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: portdb's
  cp_all() now skips "CVS" directories, closing bug #6662. 
 
  18 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: aux_get():
  exception handler to print informative message when encountering wacky cache
  entries that we just can't fix (for some reason.)
 
  17 Aug 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: removed
  deprecated "ld.so" dependency from Dan Armak's newdepend() function.
  
  17 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: doebuild()
  running in "depend" mode will set $T to "" to prevent a parent's $T from
  being inherited; this is important when we run custom portage code from
  inside an ebuild (such as pkg_postinst)... it allows dep caching to not
  break. Closes bug #6484.

*portage-2.0.28 (17 Aug 2002)

  16 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge: return errors when
  two actions like "world" and "system" are specified on the command-line, or
  when "system" or "world" are combined with package names. Closes bug #6492.
  
  16 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: bad string was
  causing pkg_prerm() and pkg_postrm() to not be called; now fixed.  This
  closes bug #6493.
  
  16 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge: now calls
  env-update() after an unmerge() run (to fix library paths, links, etc.)
  Closes bug #6511.
  
  16 Aug 2002; Daniel Robbins <drobbins@gentoo.org> doman: now handles already-
  gzipped man pages correctly, closing bug #6544.
  
  16 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge: fixed a bug where a
  dep specified on the command-line with --usepkg would use an old package if
  it happened to match the dep. Now, it will use the ebuild instead, just like
  how deps of deps are treated.

*portage-2.0.27 (06 Aug 2002)

  07 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: removed some
  beta extended USE functionality to speed up regenerate(); as we are likely
  not going to need extended USE for a good while.
  
  07 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: ebuild.sh now
  supports "config" (pkg_config) again.

  06 Aug 2002; Dan Armak <danarmak@gentoo.org> ebuild.sh: change debug-print()
  to exit if $T is not defined, i.e. if emerge is running in dependency
  detection mode and isn't actually emerging everything. This fixes bug #4932
  (the "eclass-debug.log is created in /" problem).

  06 Aug 2002; Nicholas Jones <carpaski@gentoo.org> ebuild.sh: Fixed a
  case-check problem that prevented tar.Z from being un-tar'd. This closes bug
  #6126.

  06 Aug 2002; Martin Schlemmer <azarah@gentoo.org> portage.py, ebuild.sh:
  Remove "setup" from 'sandboxactive' in portage.py, as we are not running
  pkg_setup() in a sandbox anymore.  Move the restoring of the old env code
  to be the first thing in ebuild.sh, just to ensure we dont mess anything
  up when greping/awking during saving it.

*portage-2.0.26 (06 Aug 2002)

  06 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: on unmerge,
  entries are now removed from the world file if 1) the dependency refers to
  the cat/pkg being unmerged, and 2) the dependency matches the current version
  being unmerged, and 3) unmerging this package will leave no other packages on
  this system that will match this world entry.  This closes bug #3409.
  
  06 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: new global
  update support.  You can now add an entry to a file in
  /usr/portage/profiles/updates/, something like "move x11-base/xfree
  x11-base/xfree86".  Portage will then update the /var/db/pkg db on user's
  boxes so that any xfree packages are renamed to xfree86; it will also update
  the world and virtuals files appropriately.  We are naming the update files
  "3Q-2002", etc.  -- for third quarter in 2002.  This way, we don't bog
  Portage down by having it run through all our directives.  It will only look
  at update files whose mtimes have changed.  Closes bug #4753, #5463, 
  
  06 Aug 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: tweaked Azarah's
  environment-saving patch to not be enabled when $T is not defined -- this
  closes bug #6070 and should speed up dep calculations too.  Also tweaked
  ebuild.sh so that pkg_setup() is run *outside* of the sandbox.  This is
  important because piping stuff around tends to require temp files to be
  created; pkg_setup() being in the sandbox prevents this from happening.
  
  06 Aug 2002; Martin Schlemmer <azarah@gentoo.org> ebuild.sh : Unset
  esave_ebuild_env in esave_ebuild_env(), otherwise the sourced copy messes
  saving of the environment.
  
  05 Aug 2002; Phil Bordelon <sunflare@gentoo.org> emerge.1: Updated the man
  page to match the current version of 2.0.25.
  
  05 Aug 2002; Phil Bordelon <sunflare@gentoo.org> emerge.1: Updated the man
  page to match the current version of 2.0.25.

*portage-2.0.25 (05 Aug 2002)

  05 Aug 2002; Daniel Robbins <drobbins@gentoo.org> src/sandbox/Makefile:
  removed -march=i386 added in Azarah's patch; breaks things for PPC, Sparc.
  
  05 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge: logic error fix for
  description searching, closing bug #6031.

*portage-2.0.24 (04 Aug 2002)

  04 Aug 2002; Daniel Robbins <drobbins@gentoo.org> output.py, emerge: rewrote
  our output.py module (it was weird) and tweaked emerge so that colorization
  will be disabled if NOCOLOR is set to "yes" or "true" *or* if sys.stdout isn't
  a tty.  This means that if you pipe things to "less", colorization will get
  automatically disabled.  Yay!  This closes bug #5714, 
  
  04 Aug 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: default
  src_compile now properly uses "die" instead of "return 1."  This closes bug
  #2981.
  
  04 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: "=foo/bar-1.0*"
  now matches "foo/bar-1.0_{alpha|beta|pre|rc}{int}" but not
  "foo/bar-1.1_{alpha_beta_pre_rc}{int}".  This closes bug #5874; gcc-3.2_pre
  is now considered a "3.2" rather than a very late "3.1" when doing "*"
  matching.
  
  04 Aug 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: Applied
  carpaski's patch to allow "unpack" to also handle regular .gz or .bz2 files;
  in which case the unpacked files are placed directly in ${WORKDIR}.  Closing
  bug #5867.

  04 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: tweaked
  exithandler() to only do its sandbox clean-up if we happen to be the root
  user.  Closes bug #5859.

  04 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge: search now lists
  masked packages correctly.  Closes bug #5854 (pending QA verification.)
  
  04 Aug 2002; Phil Bordelon <sunflare@lsu.edu> emerge.1: The emerge man page
  now reflects the fact that emerge sync|rsync always does a --clean now.  Also
  bumped the release number to 2.0.23.

  03 Aug 2002; Martin Schlemmer <azarah@gentoo.org> portage.py, emerge.sh,
  sandbox.c libsandbox.c: Updated sandbox.c and libsandbox.c to use an internal
  env variable, $SANDBOX_ACTIVE to determine if sandbox should really be active
  or not.  With it only checking $SANDBOX_ON, some instances NOT running in a
  sandbox, but that set SANDBOX_ON while an actual sandbox was running, caused
  the sandbox to activate for this process.  Added in support for a more phased
  calls to ebuild.sh again.  This is this time done with support to save the
  current environment of ebuild.sh to the next call that should handle problems
  with pkg_setup() setting env variables.  Closes bugs #5853, #5817, #5950.

*portage-2.0.23 (01 Aug 2002)

  01 Aug 2002; Daniel Robbins <drobbins@gentoo.org> portage.py:
  ${ROOT}var/cache/edb and friends will get created if they don't exist,
  closing bug #5813.
  
  01 Aug 2002; Daniel Robbins <drobbins@gentoo.org> emerge: rewrote the emerge
  search code, making it fully API-compliant and much more streamlined and
  compact.  This rewrite should fix the problem where emerge search doesn't
  support Portage overlays (bug #5783.)
  
  31 Jul 2002; Phil Bordelon <sunflare@gentoo.org> emerge.1: Documented the
  fact that emerge clean does not remove unslotted ebuilds.  Bumped the man
  page revision number to 2.0.22.

*portage-2.0.22 (29 Jul 2002)

  29 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: fetch() didn't
  handle resuming downloads properly when the first attempt aborted
  prematurely.  The fall back to the alternate location would not resume the
  download.  This should now be fixed.  Closes bug #5655.
  
  29 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, ebuild.sh: I
  had some code in spawn() from one of Azarah's patches that I forgot to
  remove; it caused the sandbox to be disabled all the time.  I removed this
  code, and then I tweaked ebuild.sh so that the sandbox runs in a "deny by
  default" configuration.  Before, you could add lines to the main ebuild
  (outside of a function) and it would bypass the sandbox; no more.  Closes
  bugs #5740, #5744.
  
  29 Jul 2002; Daniel Robbins <drobbins@gentoo.org> emerge: --help and
  --version now work for non-root users as they should.  --clean has been
  deprecated.  This closes bug #5658.

*portage-2.0.21 (28 Jul 2002)

  28 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: Added
  beta "Portage tree overlay" support.  By setting PORTDIR_OVERLAY to point to
  a local directory tree, you can cause Portage to look for ebuilds in
  PORTDIR_OVERLAY first before consulting the regular PORTDIR.  Using this
  feature, it's possible to have your PORTDIR set up to rsync but still be able
  to have locally-created ebuilds in your PORTDIR_OVERLAY tree.  For example,
  you would place your ebuild in PORTDIR_OVERLAY/sys-apps/foo/.
  
  27 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: another
  dep_opconvert() USE-handling bug-fix.  Working OK for Azarah now.
  
  27 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: small logic
  error fix in dep_opconvert() to fix up USE handling.

  27 Jul 2002; Daniel Robbins <drobbins@gentoo.org> emerge: security modes now
  work correctly; root access now required for merging.  The new security pass
  code was missing a check that is now present.

*portage-2.0.20 (27 Jul 2002)

  27 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge,
  repoman: Rewrote a good deal of our dependency-checking code, including all
  of dep_opconvert().  Results?  repoman will now auto-enable all USE variables
  (even ! use variables will get enabled) resulting in thorough checks of all
  specified dependencies.  DEPEND="foo? bar : oni" and DEPEND="foo? ( bar oni )
  : ( meep barf )" now works correctly.  DEPEND="|| ( foo bar oni )" now works
  correctly and will try to satisfy "foo" (the first package) if none are
  installed.  DEPEND="!foo? ( bar )" now works correctly; it was not working
  before.  This should generally mean that our dependency system is now working
  as expected.
  
  27 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: changed
  counter_tick() method so that bulk of code is in the counter_tick_code()
  helper function; then created a new method for fakedbapi that calls
  counter_tick().  This fixes "--emptytree" issues with emerge, since emerge
  still expects counter_tick() to exist as a method.

  27 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: removed
  a DEBUG: print and a stray "raise IndexError" that I used for debugging.

*portage-2.0.19 (26 Jul 2002)

  26 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: Portage is now
  eclass-friendly when it comes to regenerating cache entries.  This closes bug
  #4843.
  
  26 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: Closed
  bug #5524.  Packages "emerge inject"ed will no longer get auto-cleaned
  indiscriminantly.  Injected packages now have an official COUNTER so that
  emerge clean doesn't get confused and schedule the package for removal.  Also
  modularized and improved the counter-handling functions and changed the
  counter update method so that systems with XFS filesystems that die
  unexpectedly will no longer get corrupted COUNTER files.  This should solve
  the an entire class of "my counter is corrupt" issues for XFS users.

  26 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: added exception
  handler to getcontents() so that it will gracefully ignore (with a warning)
  corrupt CONTENTS file lines.  This closes bug #5464.
  
  26 Jul 2002; Daniel Robbins <drobbins@gentoo.org> emerge: fixed a single-line
  indentation error that resulted in "emerge clean" ignoring some files.  This
  closes bug #5597,#4364.
  
  25 Jul 2002; Daniel Robbins <drobbins@gentoo.org> emerge: --noreplace is now
  off by default and works again; --onlydeps appears to be working again; and
  merge() will merge things as specified in display(), which was not the case
  before (I rolled 2.0.18 before fixing a few things I forgot about)

*portage-2.0.18 (25 Jul 2002)

  25 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: Close bug
  #5580; pkg_setup() now gets called during all build-related stages.
  
  24 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: rewrote
  create() function, closing bug #5469.  Also added freeze() and melt() methods
  to portdbapi to enhance performance.  create() is now extensively commented
  and even understandable.
  
  24 Jul 2002; Daniel Robbins <drobbins@gentoo.org> emerge: the "rsync --clean"
  option has been deprecated.  Cleaning is now on by default, closing bug
  #5527.

  24 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, make.globals:
  It should now be safe to do what Spider did in the gconf ebuild and add
  CONFIG_PROTECT and CONFIG_PROTECT_MASK to /etc/env.d entries.  Both variables
  are now incremental, just like USE, and you can use "-path" to turn a path
  off, or add CONFIG_PROTECT{_MASK}="path" to *add* a path to the list (this
  will not overwrite "parent" settings.  Also added "/etc/env.d/" to
  CONFIG_PROTECT_MASK in /etc/make.globals.  Also, very importantly, /etc/env.d
  is now hard-coded into CONFIG_PROTECT_MASK as it was in earlier versions of
  Portage and cannot be removed.
  
  24 Jul 2002: Daniel Robbins <drobbins@gentoo.org> emerge, portage.py: two
  fixes; first, I removed xcache.p support from portage.py.  The code was
  designed based on the false theory that directory mtimes are updated whenever
  an object inside that directory is modified.  That is not the case -- it
  happens when the directory listing itself changes.  Also fixed overly verbose
  emerge merging error.
  
  23 Jul 2002; Phil Bordelon <sunflare@gentoo.org> emerge.1: Updated the man
  page to match some changes in the latest version of portage, along with some
  fixes recommended by drobbins.

*portage-2.0.17 (23 Jul 2002)

  23 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: fixed a bug
  pointed out by trance -- dep_nomatch() was still using the old (deleted)
  match() function.  Now it's using a new match() method.

*portage-2.0.16 (22 Jul 2002)

  22 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: changed xcache
  behavior so that the cache gets totally thrown away when the masks are
  updated.  Also revamped carpaski's code so we can avoid loading xcache from
  disk if we simply plan to throw it away.  This necessitated the creation of a
  new file in /var/cache/edb: mtimes.  This file stores mtimes for various
  important filesystem objects.  Also added support to not regenerate the GNU
  info directory index if the mtime on /usr/share/info has not changed since
  previous invocation.

  22 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: moved
  security handling code from emerge to portage.py; also moved group "wheel"
  check to portage.py.  Added additional security checks and permissions fixes
  to the cache handling functions.

  22 Jul 2002: Daniel Robbins <drobbins@gentoo.org> emerge: fixed a bug
  reported by woodchip related to merging packages.  When using --usepkg, a
  package wouldn't be used if there was a newer unmasked version of the ebuild
  available, even if the package in question was the right selection.
  
  22 Jul 2002; Daniel Robbins <drobbins@gentoo.org> emerge: fixed create() code
  and consolidated some functions.  My goal is to simplify the emerge code
  until it's clean, at which point we can begin adding new features to emerge
  like more SLOT-friendly decision making.

  22 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: was able to
  remove 130 or so lines of code by depreciating the match() function (replaced
  by the match2() method.) I also rennovated the binarytree code to take
  advantage of fakedbapi.

  22 Jul 2002; Nicholas Jones <carpaski@gentoo.org> portage.py: added the
  xcache.p fix and updated the version to 2.0.16pre (from 2.0.12) -- Also added
  in a try/except inside the store() (atexit) for xcache.p to give hints
  instead of tracebacks.

  22 Jul 2002; Nicholas Jones <carpaski@gentoo.org> emerge: added the
  description searching code and added a spinner to the search.

  21 Jul 2002; Phil Bordelon <sunflare@gentoo.org> emerge.1: Finished the
  rewrite of the emerge man page.
    
  21 Jul 2002; Phil Bordelon <sunflare@gentoo.org> emerge: Readded the sync
  help to the list of help options now that emerge --help sync works again.

*portage-2.0.15 (16 Jul 2002)

  15 Jul 2002; Daniel Robbins <drobbins@gentoo.org> emake: no longer falls back
  to plain old "make" if parallel make fails.  I believe it's best to fix the
  problem (turn parallel make off in the ebuild) rather than tweak emake to
  avoid it.
  
  15 Jul 2002; Daniel Robbins <drobbins@gentoo.org> emerge: rewrote some code,
  cleaning things up and removing redundant functions.  Starting to
  de-cruftify.

  15 Jul 2002; Daniel Robbins <drobbins@gentoo.org> emerge: fix for permissions
  when updating the cache using server-generated entries.

*portage-2.0.14 (15 Jul 2002)
  
  15 Jul 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: ccache bug fix;
  removed extra "!".  Ccache should now get enabled properly.  Also, INHERITED
  variable is now getting added to the dep cache entries for future
  eclass-friendly caching.
  
  15 Jul 2002: Daniel Robbins <drobbins@gentoo.org> portage.py: Portage now
  *persistently* caches xmatch() calculations.  This appears to speed things up
  but we will need to limit the size of the new xcache.p in future versions of
  Portage.

  15 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: Portage
  now has keyword-based masking enabled.  It also has server-side caching
  enabled to eliminate "emerge pre-Calculating dependencies... delay" for
  end-users.  There is now an undocumented "regen" option for emerge that tells
  Portage to ensure that all entries in /var/cache/edb/dep are up-to-date.
  This is intended mainly for developers, as the server-side caching feature
  should ensure that all dep cache entries are up-to-date for end-users.

  15 Jul 2002; Daniel Robbins <drobbins@gentoo.org> repoman: repoman now checks
  for ebuilds that generate output as well as ebuilds that return a non-zero
  error code when sourced.  For this test to detect all failures, you need to
  wipe out your /var/cache/edb/dep/* before running repoman.  This design quirk
  is necessary to preserve existing emerge behavior.

  13 Jul 2002: Daniel Robbins <drobbins@gentoo.org> portage.py: Removed
  Azarah's ebuildsh() function as it breaks pkg_setup() again.  pkg_setup()
  needs to be called as part of the same process as any other ebuil.sh command
  so that environment vars set in pkg_setup() are preserved through the rest of
  the build process.
  
  13 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: changed calling
  convention for doebuild("depend").

  13 Jul 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: removed
  erroneous "local dbkeys" that was outside of a function.  This fixes some
  cache update problems.  Added INHERIT to our cache entries so we can
  correctly update the cache for eclass ebuilds.
  
  12 Jul 2002; Dan Armak <danarmak@gentoo.org> make.globals, make.globals.ppc:
  remove default KDE2DIR, KDE3DIR settings and comments. The kde eclasses will
  now handle the case where they are not defined. This will be used with kde
  3.1 and later, and the difference between their default value and them not
  being defined is important.

*portage-2.0.13 (11 Jul 2002)

  11 Jul 2002; Daniel Robbins <drobbins@gentoo.org> tarball.sh: our tarball
  script didn't clean the src/sandbox directory before creating our distribution
  tarball. This resulted in src/sandbox/sandbox (the executable) being distributed,
  and the "make" in the ebuild thinking everything was up-to-date.  The result?
  Everyone in the world got a sandbox compiled with gcc 3.1.  This has been
  fixed, closing bug #4867, #4851.
  
  10 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: removed some
  bogus code that snuck in.  pkg_setup() is no longer called when installing a
  tbz2.  All tbz2 stuff should be done in pkg_pre/postinst().

*portage-2.0.12 (10 Jul 2002)

  10 Jul 2002; Daniel Robbins <drobbins@gentoo.org> ccache support is now
  controlled via a "ccache" FEATURES variable, which is enabled in make.globals
  my default.  ccache support can now be turned off by adding a
  FEATURES="-ccache" to /etc/make.conf.  Also, CCACHE_DIR correctly detected
  and utilized.

  10 Jul 2002; Daniel Robbins <drobbins@gentoo.org> emerge: "emerge --help
  rsync" now works correctly and displays rync help rather than rsyncing.  This
  closes bug #4438, #4629.

  10 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: Portage now
  prints a friendly error if PORTAGE_TMPDIR doesn't exist or is not a
  directory.  This effectively closes bug #4360.

  10 Jul 2002; Daniel Robbins <drobbins@gentoo.org> emerge: the "inject",
  "sync" and "rsync" actions no longer allow "--pretend" or "-p" to be
  specified. This closes bug #4352.
  
  10 Jul 2002; Daniel Robbins <drobbins@gentoo.org> sandbox.c: use realpath()
  to expand the PORTAGE_TMPDIR, /var/tmp, /tmp paths.  This allows write access
  to these directories even if /var or /var/tmp is a symlink, for example.
  Without this fix, access to these directories will be denied by the sandbox,
  creating a bunch of problems.  Closes bugs #4256, #2379, #4625, #2931, #4829.

  10 Jul 2002; Daniel Robbins <drobbins@gentoo.org> megadigest, megadownload,
  megatouch, pkgsearch: removed from the bin/ directory; deprecated.

  10 Jul 2002; Daniel Robbins <drobbins@gentoo.org> emerge, quickpkg: remove
  hard-coded references to "/usr/portage" in "emerge search", quickpkg.  Now
  correctly uses PORTDIR instead.  Closes bug #4836.

  10 Jul 2002; Daniel Robbins <drobbins@gentoo.org> emerge: emerge now checks
  to see if the "wheel" group exists before running; if it doesn't, it exits
  with a polite error message.  Closes bug #4736.
  
  08 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: changed the
  unmerge() code so that it doesn't use mtimes to test whether a symlink
  should be unmerged, since mtimes and symlinks are weird partners.  Instead,
  we save unmerging of our symlinks until the end of the code, and unmerge
  them only if their target no longer exists.  This closes bug #4491.
  
  08 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: check whether
  ebuild actually exists immediately before running pkg_postint() and
  pkg_preinst() from the dblink merge() method.  Also change all PKG_TMPDIR
  references to PORTAGE_TMPDIR plus suffix, closing bug #4447, #4853.

*portage-2.0.11 (07 Jul 2002)

  07 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: rewrote
  portdbapi's xmatch() and visible() to fix significant bugs.  Logic errors in
  both methods caused ~ deps to not work correctly.  After the rewrite,
  dependency checking is now 44% faster.

  07 Jul 2002; Daniel Robbins <drobbins@gentoo.org> repoman, portage.py: Added
  new DEPEND and RDEPEND.badmasked categories to repoman.  repoman now checks
  dependencies of masked packages using *all* ebuilds, rather than trying to
  match them against all visible ebuilds.  DEPEND.bad and RDEPEND.bad (used to
  be ".unsolvable") now only tally visible ebuilds, not masked ones.

*portage-2.0.10 (06 Jul 2002)

  05 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, repoman: Added
  new capabilities to repoman -- the ability to detect unsolvable DEPEND and
  RDEPEND variables, missing DESCRIPTION, LICENSE, KEYWORDS and SLOT.  Fixed
  repoman so that adding a comment with quotes in it doesn't break things.
  Added a few tiny extensions to portage.py to support the new repoman
  features.
  
  03 Jul 2002; Martin Schlemmer <azarah@gentoo.org> ebuild.sh: some ebuilds
  like gcc do not use $S to build the package in, and this causes generated .la
  files (libtool) to contain $WORKDIR in them.  We thus export $WORKDIR in
  ebuild.sh as well, to go along with fixes to the libtool-portage patch.

  02 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: pkg_setup() now
  gets called before a tbz2 is installed, and pkg_preinst() and postinst() get
  called at the right times as well.
  
  01 Jul 2002; Phil Bordelon <sunflare@gentoo.org> emerge: "emerge --help
  rsync" does an rsync instead of printing help.  Until this is fixed, I
  removed it from the list of detailed help options.

*portage-2.0.9 (01 Jul 2002)

  01 Jul 2002; Daniel Robbins <drobbins@gentoo.org> Added missing .match()
  method to portdbapi.
  
  01 Jul 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: Added new
  operator for dependencies: DEPEND="foo? bar : oni" will use oni if foo isn't
  set.  Added "||" support back after removing it from my working copy; looks
  ok.
  
  29 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, make.globals,
  make.globals.ppc: internalized definitions of BUILDDIR and PKG_TMPDIR in
  order to make things work as expected when one sets PORTAGE_TMPDIR.  The new
  config file var expansion algorithm made this change necessary.
  
  29 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: fix doebuild()
  so that pkg_setup() gets called when a .tbz2 package is being built.  This
  closes bug #3673.
  
  29 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: tweaked the
  aux_get() code to automatically regenerate cache files if they have the
  incorrect number of entries.  Added an additional fix to this code on 01 Jul
  2002.
  
  29 Jun 2002; Martin Schlemmer <azarah@gentoo.org> portage.py: merge in some
  of the missing ld.so.preload fixes again.

  29 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: new version
  with highly-optimized dependency calculation caching, particularly for
  portdbapi.  Includes new three-level caching portdbapi xmatch() method.
 
  27 Jun 2002; Grant Goodyear <g2boojum@gentoo.org> ebuild.sh: Added keepdir()
  function so that it no longer has to be hardcoded in ebuilds.

*portage-2.0.8 (27 Jun 2002)
 
  27 Jun 2002; Daniel Robbins <drobbins@gentoo.org> emerge: in an attempt to
  provide a predictable release of Portage, I'm reverting the "emerge
  --pretend" "fix" in Portage-2.0.6.  It ignores custom USE settings when
  calculating child deps, which makes things tricky for users.  We'll use the
  "expected" (old) behavior for now until we have a solution for this USE
  issue.
  
  27 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: fixed handling
  of ! deps in match(), closing bug #4219.  Thanks Spidler!

  27 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: disabled USE
  regeneration on reset() for performance purposes.

*portage-2.0.7 (26 Jun 2002)

  26 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: add a friendly
  error handler for aux_get() so that flaky ebuilds don't cause it to trip up
  with a cryptic traceback; users will get a friendly error message instead.
  Also, temporarily disable keyword-based masking, since it currently slows
  down Portage by quite a bit since it causes a much greater set of ebuilds to
  be cached.

*portage-2.0.6 (25 Jun 2002)

  25 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: rewrote the
  config file code to make things more sane, consistent, and made infinite
  loops during variable expansion a thing of the past.  This closes bug #3952.
  
  25 Jun 2002; Daniel Robbins <drobbins@gentoo.org> emerge, portage.py,
  ebuild.sh: "emerge --pretend" and "emerge search" now work for the root user
  as well as any users in the "wheel" group.  emerge will now gracefully exit
  if "emerge search" is run by someone not in the "wheel" group.  This closes
  bug #4121.
  
  25 Jun 2002; Martin Schlemmer <azarah@gentoo.org> bin/{dolib.so,preplib.so}:
  Also change "strip --strip-unneeded" to "strip --strip-debug" for these.
  Look at bugs #2702,#3929,#4027 for more info.

  25 Jun 2002; Daniel Robbins <drobbins@gentoo.org> emerge: "emerge -u" now
  correctly scans dependencies of packages, even if they are up-to-date, to
  determine if any of their dependencies need updating.  Previously, up-to-date
  packages were not scanned in this way, which was a bug.
  
  24 Jun 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: Portage will now
  automatically take advantage of ccache if the >=dev-util/ccache-1.9 ebuild is
  installed.  Removing /var/cache/ccache hole in the sandbox.

*portage-2.0.5 (24 Jun 2002)

  23 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: basic keyword-
  based masking is now active.  New support for KEYWORDS in ebuilds and
  ACCEPT_KEYWORDS in profiles.

  23 Jun 2002; Daniel Robbins <drobbins@gentoo.org> conf files: removed
  references to non-functional FTP_PROXY and HTTP_PROXY and added a note about
  how to use the correct vars (ftp_proxy and http_proxy.)  Closes bug #1664.
  Also added note about RSYNC_PROXY, closing bug #2332.

  23 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: removed
  "dependency too short" checks which weren't working and were causing deps
  like "mc" and "ed" to be rejected as invalid rather than being expanded.

  23 Jun 2002; Daniel Robbins <drobbins@gentoo.org> emerge: upgraded "clean"
  code to be more robust, consistent. Closes bug #3967.

*portage-2.0.4 (20 Jun 2002)

  20 Jun 2002; Daniel Robbins <drobbins@gentoo.org> in the 2.0.4 ebuild itself:
  added back tbz2tool symlink which was mistakenly removed.  Also changed the
  way we compile portage.py stuff so that we remove the previously compiled
  files, just in case clock skew cause them to seem more recent than they
  really are.  Python byte-code compilation moved to pkg_postinst()

  20 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: fixed up the
  fetch() code so that invalid digests don't cause a traceback.

  20 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: some of the new
  transplanted virtuals code assumed that profiledir was set, which is not 
  required.  This code has now been fixed to not make that assumption.

*portage-2.0.3 (20 Jun 2002)

  20 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: fixed two typos
  pointed out by stroke and g2boojum.  These fix unmerge and some aspect of
  virtuals handling, which was previously causing a traceback.
  
  19 Jun 2002; Daniel Robbins <drobbins@gentoo.org> emerge: emerge -eup world
  now will ignore world entries if it isn't really installed locally; in 2.0.1,
  --emptytree would auto-enable all world entries, leading to inconsistent
  package lists between --emptytree and without.

*portage-2.0.2 (19 Jun 2002)

  19 Jun 2002; Daniel Robbins <drobbins@gentoo.org> make.conf.ppc,
  make.globals.ppc: integrated these files into our sources.
  
  19 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: fixed a bug
  where ROOT="" would not get properly converted to ROOT="/".
  
  18 Jun 2002; Daniel Robbins <drobbins@gentoo.org> emerge: Portage 2.0+ has
  fixed "!" depend matching support, but some code in emerge was designed to
  anticipate the incorrect behavior.  This emerge code has been fixed to work
  correctly.  This closes my part of bug #3834.
  
  18 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: fixed
  bug #2444, where emerge fails when "--emptytree" and "--onlydeps" are used at
  the same time.
  
  18 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: new
  fakedbapi for doing emptytree calculations; emptytree upgrades in emerge.
  "emerge -upe world" now works correctly, accounting for items in the world
  profile.  Yay!  Bugs #3832 and #1911 fixed.
  
  18 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge:
  Integrated new aux_get() method into our portdbapi.  aux_get() provides a
  standardized way to get cached information about ebuilds, and is now fully
  integrated into Portage and emerge search.

  18 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: fixed a bug
  where dep_nomatch() was testing for None rather than a "zero" condition,
  causing dep_nomatch() to choke on match()'s [] return value.
  
  17 Jun 2002; Daniel Robbins <drobbins@gentoo.org> emerge: added an exception
  handler to catch invalid regular expressions and avoid a traceback.
  
  17 Jun 2002; Daniel Robbins <drobbins@gentoo.org> sandbox.c: added
  /var/cache/ccache to sandbox "write ok" list, closing bug #3028.

*portage-2.0.1 (16 Jun 2002)

  16 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: fixed a
  virtuals expansion bug that would cause virtuals to be consulted too early.

*portage-2.0 (16 Jun 2002)

  16 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, ebuild.sh,
  emerge: turbo-ified Portage, new Portage db API and many other fixes.
  Unmerging now works again (bug introduced several releases ago.)  I
  originally wanted to hold off on releasing 2.0, but since several major bugs
  are fixed, we need to get these fixes out to our users ASAP.  We will be
  releasing 2.1 in about a week which should include additional refinements.

  16 Jun 2002; Daniel Robbins <drobbins@gentoo.org> repoman: New repoman
  commit/check QA tool for developers.

  10 Jun 2002; Dan Armak <danarmak@gentoo.org> make.conf: Update the ibiblio
  mirror path; it is now www.ibiblio.org/pub/Linux/distributions/gentoo.

  10 Jun 2002; Martin Schlemmer <azarah@gentoo.org> ebuild.sh : Some users have
  $TMPDIR to a custom dir in their home ...this will cause sandbox errors with
  some ./configure scripts or libtool, so set it to $T.

  10 Jun 2002; Martin Schlemmer <azarah@gentoo.org> portage.py : Merge in the
  ld.so.preload changes.  Also updated spawn() to only run sandbox if
  buildphase is one of clean, unpack, compile or install. This should fix the
  handler not detecting some instances of sandbox running.  Updated ebuildsh()
  to set buildphase="" on spawn exit.

  10 Jun 2002; Martin Schlemmer <azarah@gentoo.org>
  portage.py.ldsopreload,testsandbox.sh : Add support to test if another
  sandbox is running, if so dont delete /etc/ld.so.preload on kill.  I did not
  commit this to portage.py, as it is a bit more changes than we originally
  though.

  05 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: doebuild() now
  has proper logic for digest generation.  Digest will now get regenerated if
  "ebuild digest" is run, even if "digest" is in FEATURES.
  
  04 Jun 2002; Daniel Robbins <drobbins@gentoo.org> emerge: fixed typo in
  "inject" documentation.
  
  02 Jun 2002; Martin Schlemmer <azarah@gentoo.org> bin/dosym: changed the
  command used from "ln -sf" to "ln -snf" as it created a symlink in the target
  directory if the linkname already existed (only if the target is a
  directory).  Im guessing this should be fixed in the python merged code if
  symlinks are not unlinked before the new is merged into place .. will add a
  bug later.

*portage-1.9.14 (01 Jun 2002)

  01 Jun 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: when a file to
  be merged is identical to the one currently on disk (using the md5 test), we
  now at least correctly update the target's mtime and atime so that cleaning
  will work correctly.
  
  27 May 2002; Daniel Robbins <drobbins@gentoo.org> bin/do*: changed "return"s
  to "exit 1".  Closes bug #3078.

*portage-1.9.13 (21 May 2002)

  21 May 2002; Grant Goodyear <g2boojum@gentoo.org> emerge.1: Updated man page.
  Thanks to carpaski@twobit.net.  

  20 May 2002; Daniel Robbins <drobbins@gentoo.org> emerge: a fix for dep
  regeneration; stale dep cache entries should now be properly regenerated.

*portage-1.9.12 (16 May 2002)

  16 May 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: the settings
  for A and AA were swapped; this has now been fixed, closing bug #1634.
  
  15 May 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: fixed up some
  quirks in the new fetch code which were reported by Wout Mertens.  Thanks
  Wout!

*portage-1.9.11 (13 May 2002)

  13 May 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: addition of 
  third-party mirroring code.  "mirror://sourceforge/foo.tar.gz" will use the
  /usr/portage/profiles/thirdpartymirrors file to define the mirror it will
  download from.  Multiple mirrors for a single keyword can be specified on a
  single line.  This code was based on the good work of Ryan Phillips.
  
  13 May 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: (entry on behalf
  of jnelson) -- we now have new KV detection/setting code that uses
  /usr/src/linux/include/linux/version.h to determine the kernel version -- the
  right way of doing things.  KV is set to "" if the kernel is not available or
  not configured.
  
  13 May 2002; Daniel Robbins <drobbins@gentoo.org> emerge: "abspath[x]" =>
  "abspath(x)" typo fix.  Also added 2-liner to allow for "emerge unmerge" to
  specify "foo/bar-1.0" rather than requiring "=foo/bar-1.0."  Also fixed
  problems when specifying the names of actual ebuilds in /var/db/pkg to
  unmerge.
  
*portage-1.9.9 (06 May 2002) ??

  08 May 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: An empty
  USE_ORDER (due to an out-of-date /etc/make.globals) would cause USE to always
  be empty.  I added a reasonable default USE_ORDER if USE_ORDER is not found
  in any of the config files, fixing this problem.
  
  06 May 2002; Daniel Robbins <drobbins@gentoo.org> emerge: post bug #1841
  cleanups; converted from .hasnode() to .dep_match() (correct) in
  getworldlist().

*portage-1.9.8 (06 May 2002)

  06 May 2002; Daniel Robbins <drobbins@gentoo.org> emerge: 2 fixes that seemed
  to get fried/zapped: bug #1841 and fixing an emerge sync error code to be
  more understandable.

*portage-1.9.7 (06 May 2002)

  06 May 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: initial
  bunch of robustness/error-handling fixes.  Emerge should now report a
  comprehensible error message for errors in DEPEND and RDEPEND rather than
  giving a traceback.  Fixed dep_depreduce() to catch errors rather than
  passing them on to dep_bestmatch() (which doesn't check for errors and
  assumes correct input)
  
  02 May 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: typo fix for
  S_ISFIFO call; thanks woodchip!

*portage-1.9.6 (02 May 2002)

  02 May 2002; Daniel Robbins <drobbins@gentoo.org> make.conf: SYNC variable
  correctly set to use our DNS round-robin system (rsync.gentoo.org).

*portage-1.9.6_pre2 (01 May 2002)

  01 May 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: config file
  protection upgrade; we now record md5sums of previously-merged config protect
  files in /var/cache/edb/config; we use this information to avoid merging
  files that have been merged by us before (if it is safe to do so).  This 
  doesn't solve the problem of rolling back to a previously-merged version of
  a config file; we need to add cvs headers to every config file to get that
  to work.
  
*portage-1.9.6_pre1 (01 May 2002)

  01 May 2002; Daniel Robbins <drobbins@gentoo.org> emerge: added "inject"
  capability to artificially satisfy a dep -- for situations when you don't
  want Portage to do it for you because you've taken care of it already.
  
  01 May 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: totally
  rewrote emerge's unmerge code.  The original code (added by Bevin) was a bit
  too cryptic and "big" for my taste.  Also added two new capabilities to
  portage.py's vartree: .getslot() and .gettimeval().  getslot() returns the
  slot value of a cat/pkg-v, if any, and gettimeval() returns a "time value"
  (based on mtime/COUNTER value) that can be used to determine the order in
  which packages got merged.  The purpose of these improvements were to revamp
  the existing Portage code that could only unmerge a db entry if there was a
  corresponding ebuild file.  This conflicted with the ability to "inject"
  packages (see above), so it needed to be changed.  Also fixed some bugs along
  the way.
  
  01 May 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: einstall now
  accepts arguments, closing bug #2275.  Thanks seemant! :)
  
  01 May 2002; Daniel Robbins <drobbins@gentoo.org> make.globals: switch SYNC
  var from cvs.gentoo.org to rsync.gentoo.org, and gentoo-x86-portage to
  gentoo-portage.
  
  30 Apr 2002; Daniel Robbins <drobbins@gentoo.org> emerge: now checks for
  errors (caused by bad deps) returned by create() and syscreate().

*portage-1.9.5 (29 Apr 2002)

  29 Apr 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: added jnelson's
  KV_extract.awk script which extracts the kernel version from the actual
  kernel sources Makefile, making our KV setting much more robust!  Thanks Jon
  :)
  
  29 Apr 2002; Daniel Robbins <drobbins@gentoo.org> emerge: correctly fixed
  emerge search examples to use single quotes (to turn off globbing.)  This
  closes bug #1609.

  29 Apr 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: virtual entries
  for no-longer-installed packages now get automatically removed on unmerge.
  This closes bug #2255 and #1891 (Thilo Bangert's comment on #1891 is also
  fixed.)

*portage-1.9.4 (29 Apr 2002)

  29 Apr 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: Added support
  for RESTRICT="nomirror".  If "mirror" is defined in FEATURES and "nomirror"
  is defined in RESTRICT, then files will not be fetched.
  
  29 Apr 2002; Daniel Robbins <drobbins@gentoo.org> emerge: Fixed docs for
  "unmerge", added docs for "--oneshot".  Closes bugs #2156 and #2182.

  29 Apr 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: Fix for USE
  troubles; confirmed by Azarah as working :)  Also, we now strip the path
  from "KV" as we should.

*portage-1.9.4_pre1 (26 Apr 2002)

  26 Apr 2002; Daniel Robbins <drobbins@gentoo.org> tarball.sh: no longer
  necessary for VERSION to equal "@portage_version@" to get the version
  auto-set.  VERSION can now be set to anything and tarball.sh will get it
  right.
  
  26 Apr 2002; Daniel Robbins <drobbins@gentoo.org> emerge: I've started work
  on revamping/improving the "blocks" system to get ready to fix bug #1891.
  Already fixed a bug where "blocks" ("!" deps) print out the wrong blocking
  package name. This is now fixed.  Blocks need additional testing.
  
  26 Apr 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, ebuild.sh, use:
  "use" is now a bash builtin function rather than an external python-based
  command.  This appears to fix the USE inconstencies, as it should, thereby
  closing bug #2000.

*portage-1.9.3 (24 Apr 2002)

  24 Apr 2002; Jon Nelson <jnelson@gentoo.org>: portage.py, chkcontents:
  Emulate fchksum's md5 checksum routine.  Closes bug #2787.
  
  23 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: emerge: invalid
  short options result in an exit.  Closes bug #2025.
  
  22 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: emerge: rsync zlib
  compression enabled by default.

*portage-1.9.2 (21 Apr 2002)

  21 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: portage.py: signal
  handler now zaps /etc/ld.so.preload if it's there -- this prevents it
  from hanging around and causing sandbox badness.
  
  21 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: emerge: fixed an
  error where --emptytree mode wouldn't really have a fully empty tree,
  due to the emptytree.inject() coming before the emptytree.root=None;
  the inject() caused a recalc of the USE vars, which caused the tree
  to become partially populated and it wasn't cleared.  This closes bug
  #1897.
  
  21 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: portage.py: package
  building now executes the "setup" stage along with the unpack, compile,
  install stages so that global variables can be shared.  This fixes an issue
  with woodchip's new apache ebuild and closes bug #1813.

*portage-1.9.1 (16 Apr 2002)

  16 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: tiny (and forgotten)
  quick fix.

*portage-1.9.0 (16 Apr 2002)

  16 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: portage.py: fetching
  should now try *all* alternate download locations, closing bug #1544. 
  Yay!
  
  15 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: emerge: "emerge R" now
  works correctly, closing bug #1094.
  
  15 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: ebuild.sh: *'s and ?'s in
  DEPEND and SRC_URI syntax should no longer get glob-expanded to files in
  /usr/portage.  This fixes some cryptic bugs.  It also closes bug #1473.
  
  15 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: portage.py: emerge --debug
  now works again.  Closes bug #1437.
  
  15 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: portage.py: moved argument
  check to the beginning of the doebuild() function to prevent "ebuild
  foo.ebuild fart" from causing the md5sums to be checked before recognizing
  that "fart" is not a valid command.  Closes bug #1823.
  
  15 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: portage.py: 'USE="-foo"
  emerge bar' should now work correctly and consistently.  Fixes to the config
  class.  Closes bug #1455.
  
  15 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: portage.py: applied
  jnelson's patch to properly kill all children when interrupted with ^C
  
  15 Apr 2002; Donny Davies <woodchip@gentoo.org>: make.conf: added a
  RESUMECOMMAND for lukemftp.
  
  15 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: portage.py: fixed up some
  "zing" logic inside the merge code (fixing variable being used before
  assignment errors)
  
  15 Apr 2002; Jon Nelson <jnelson@gentoo.org>: src/sandbox/Makefile,
  src/sandbox/problems/Makefile, src/sandbox/problems/sandbox_dev_fd_foo.c,
  src/sandbox/sandbox.c: Cleaned up Makefiles somewhat to take advantage of GNU
  Make, added '/dev/zero' and /dev/fd/' (<- note trailing slash) to the list of
  items accessible safely from the sandbox.  Added sandbox_dev_fd_foo.c to test
  for /dev/fd/<xx>.  The test is almost verbatim from the autoconf test suite.

  13 Apr 2002; Martin Schlemmer <azarah@gentoo.org>: ebuild.sh:
  Export $S and $D in dyn_compile and dyn_install, as our patched
  version of libtool uses these to fixup .la files.

*portage-1.8.19 (09 Apr 2002)

  08 Apr 2002; Geert Bevin <gbevin@gentoo.org>: emerge: Removed --all switch to
  emerge unmerge and clea.  Added emerge prune which is the same as old emerge
  unmerge.  Emerge unmerge removes all instances again without any proctedtion,
  as before.  Added reporting of Omitted versions due to dep selectors.
  Renamed Removing and Keeping to Selected and Protected

  08 Apr 2002; Geert Bevin <gbevin@gentoo.org>: emerge, portage.py: Better
  unmerge and clean reporting.  Added homepage output to emerge --search.
  Bugfix when specifying a package without category that doesn't exist.

*portage-1.8.18 (07 Apr 2002)

  07 Apr 2002; Geert Bevin <gbevin@gentoo.org>: make.globals, emerge:
  Simplified unmerge functionality. Deprecated the CLEANMODE var,
  emerge clean now removes both revisions and slots automatically,
  emerge unmerge now removes all versions and revisions by default.
  Both understand world and system targets, and the --all option which doesn't
  check which packages are old and outdated.
  Documentation fixes.
  AUTOCLEAN var addition and added the autoclean functionality.
  
*portage-1.8.17 (05 Apr 2002)

  05 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: portage.py: no longer
  print out the counter number after a merge.  This information should not
  need to be known by end-users.
  
  05 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: sandbox.c: patched to
  allow access to /dev/vc from sandbox, allowing vim and screen to compile
  correctly from console.
  
  05 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: portage.py: fixed a bug
  that prevented md5 digests from being compared on archives.
  
  04 Apr 2002; Daniel Robbins <drobbins@gentoo.org>: portage.py: Parse errors
  in /etc/env.d files no longer cause a traceback.

*portage-1.8.16 (04 Apr 2002)

  04 Apr 2002; Geert Bevin <gbevin@gentoo.org> portage.py, emerge : Forgot to
  commit my changes, this is an assembled version of both drobbins's and my
  changes

*portage-1.8.15 (04 Apr 2002)

  04 Apr 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: Fixed a
  semi-long standing bug where I was comparing atimes rather than mtimes when
  seeing if dep caches were stale.  This fixes a bug originally reported by Dan
  Armak.
  
*portage-1.8.14 (04 Apr 2002)

  04 Apr 2002; Geert Bevin <gbevin@gentoo.org> emerge:
  Fixed short options for --all, --safe and clean.
  
*portage-1.8.13 (04 Apr 2002)

  04 Apr 2002; Geert Bevin <gbevin@gentoo.org> portage.py, emerge:
  Added emerge --all clean and emerge --safe unmerge.
  Made the counter updates atomic so that multiple merges can happen without
  risking counter clashes.
  Updated --help.
  Fixed short options bug that prevented two seperate short options to be
  specified successively.

*portage-1.8.12 (04 Apr 2002)

  04 Apr 2002; Geert Bevin <gbevin@gentoo.org> portage.py, emerge:
  implemented "emerge clean" with oldrevs, oldversions and oldslots options for
  the make.conf/make.globals CLEANMODE variable.
  
  03 Apr 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: Added an
  indentation fix to prevent merge from dying if a file attempts to install
  itself on top of an existing directory.  Closes bug #1498.

*portage-1.8.11.1 (03 Apr 2002)

  03 Apr 2002; Geert Bevin <gbevin@gentoo.org> portage.py: important fixes
  for movefile() -- changed the order of ownership / permissions settings since
  suid/guid bits were overwritten, added support back for 'ebuild config' since
  it was accidentally left out

*portage-1.8.11 (02 Apr 2002)

  02 Apr 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: important fixes
  for movefile() -- ownership now preserved across filesystems, mv -f fallback
  for special files, other optimizations and robustness improvements.  Important
  fixes all-round.

  02 Apr 2002; Geert Bevin <gbevin@gentoo.org> emerge: 
  fixed bad indentation of a part of the code that made unmerging multiple
  packages behave badly

*portage-1.8.10 (01 Apr 2002)

  01 Apr 2002; Daniel Robbins <drobbins@gentoo.org> make.globals: removed USE
  settings from make.globals.

  01 Apr 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: In trying to fix
  the glibc merge bug, we rewrote movefile() and it now runs blazingly fast.  I
  also tweaked the code to remove the need for an ">>> Updating mtimes..."
  stage.  This is all done dynamically now.  *Much* faster.  And hopefully
  solid for glibc upgraders.

*portage-1.8.9.4 (01 Apr 2002)

  31 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: adapted
  movefile() which should preserves timestamps and ownership on files and
  symlinks it moves.

*portage-1.8.9.3 (31 Mar 2002)

  31 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: promising
  rewrite of movefile() not only will probably fix glibc merge bug but also
  speeds up merging at least 20x!  Calling "mv" for every file really make
  things super-slow!

*portage-1.8.9.2 (31 Mar 2002)

  31 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: desperate attempt
  to fix movefile() bug... a hack really.  glibc merges still dying.

*portage-1.8.9.1 (31 Mar 2002)

  31 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: it appears that
  movefile() (using "/bin/mv") can still die if moving a new symlink on top of
  an existing library symlink.  Upon failure, we now use a fallback mechanism
  to use "/bin/sln" to create the new symlink safely.

*portage-1.8.9 (30 Mar 2002)

  30 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: tiny cosmetic
  fix for digest generation.
  
  30 Mar 2002; Daniel Robbins <drobbins@gentoo.org> emerge: entries in the
  world profile will be ignored if at least one version of the package in
  question isn't already merged.  Prevents "--update world" from remerging
  packages that have since been unmerged.
  
  30 Mar 2002; Daniel Robbins <drobbins@gentoo.org> various: changing all
  references from /usr/bin/python to /usr/bin/python2.2.
  
  30 Mar 2002; Daniel Robbins <drobbins@gentoo.org> db-update.py: moving this
  script here from FILESDIR.
  
  30 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: stuff doesn't
  get added to the world profile if it is already an essential ("*") package in
  the system profile.  Keeps things clean and flexible.

*portage-1.8.9_pre38 (30 Mar 2002)

  30 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: resolve_key()
  didn't call load() on mapped virtuals, resulting in inconsistent resolution
  of virtual keys.  Now fixed; thanks to woodchip for the bug report.

*portage-1.8.9_pre37 (30 Mar 2002)

  30 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: specific
  provides (dev-lang/python-2.2) will be converted to their generic form
  (dev-lang/python) before being recorded.

*portage-1.8.9_pre36 (30 Mar 2002)

  30 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: new
  virtuals fixes and a db-upgrade.py script in the ebuild to solve another
  virtuals problem.

*portage-1.8.9_pre35 (29 Mar 2002)

  29 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: digest
  generation fixes; emerge --update will now update dependents even if the main
  package hasn't been updated.  getdict() fix, fixing a traceback.

*portage-1.8.9_pre34 (28 Mar 2002)

  28 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: Added an indent
  fix for the new virtuals code, eliminating a traceback.  Tweaked digest handling,
  fixing a cosmetic error.

*portage-1.8.9_pre33 (28 Mar 2002)

  28 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: tweaked digest
  creation in doebuild() to hopefully avoid creating digests twice.  I hope I
  didn't break anything in the process.

  28 Mar 2002: Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: "emerge
  update" is now "emerge --update"; "world" added back.  New world
  implementation that works like this ... if you type "emerge media-gfx/gimp",
  media-gfx/gimp will be added to the "world" favorites file in
  /var/cache/edb/world.  This world file is added to the system profile in
  order to create the set of "world" packages to merge.  You can manually put
  specific deps (for pinning) in /var/cache/edb/world and they won't get
  overwritten.  To prevent a package that you specify on the emerge
  command-line from being added to the world profile, use the "--oneshot"
  option, which tells emerge that it should be merged once but not updated.
  
  28 Mar 2002: Daniel Robbins <drobbins@gentoo.org> portage.py: New virtuals
  implementation; new virtual info is recorded in /var/cache/edb/virtuals;
  virtuals data is created by merging the profile virtual info with the new
  edb/virtuals file.  Note: We no longer add virtual package entries to
  /var/db/pkg.  This change solves the bug where virtual files get auto-updated
  by pkg-update, and also solves the bug where doing an "emerge --update world"
  will cause ssmtp to be merged in order to satisfy the virtual/mta dep (which
  you already have satisfied by postfix, for example).  Now, postfix will be
  updated if necessary, but that's it. :)

*portage-1.8.9_pre32 (22 Mar 2002)

  22 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: fixed a bug
  related to scanning for available binary packages, which would cause emerge
  to die.
  
  21 Mar 2002; Dan Armak <danarmak@gentoo.org> portage.py: added ECLASSDIR
  (=$PORTDIR/eclass) to settings exported by python side to bash side.
  ebuild.sh: remove ECLASSDIR setting to use the one now provided by
  portage.py.  Also, clean inherit() and make it use debug-print().

*portage-1.8.9_pre31 (21 Mar 2002)

  21 Mar 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: Added Dan
  Armak's patch to enable eclasses. :)
  
  21 Mar 2002; Grant Goodyear <g2boojum@gentoo.org> portage.py: 
  Added a drobbins patch to at line 469.  Should fix emerge rsync
  problem when /etc/make.profile doesn't exist.

*portage-1.8.9_pre30 (20 Mar 2002)

  20 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: emerge
  --emptytree now works again and I added a new --nodeps option to emerge as
  well.

*portage-1.8.9_pre29 (20 Mar 2002)

  20 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: CONTENTS files
  now record the correct path when ROOT!="/".

*portage-1.8.9_pre28 (20 Mar 2002)

  20 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: an
  /etc/make.profile dir is now optional and portage will work if it's missing
  or is a broken symlink.
  
  20 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: fix load()
  method in packagetree() class.

*portage-1.8.9_pre27 (19 Mar 2002)

  19 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py:
  /etc/make.profile/packages wasn't correctly masking core system packages;
  fixed.

*portage-1.8.9_pre26 (18 Mar 2002)

  18 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: configuration
  settings don't get loaded from ${ROOT}/etc anymore, just /etc.  This
  simplifies the creation of a new build image.
  
  18 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: Don't expect a
  digest file if SRC_URI is set to "" or undefined.

  18 Mar 2002; Daniel Robbins <drobbins@gentoo.org>: RDEPEND was getting set
  to DEPEND even if there was an RDEPEND="" in the ebuild.  This has now been
  fixed and RDEPEND will only get to DEPEND if RDEPEND has unset (not "unset
  or null", as it was before this fix.)
  
  18 Mar 2002; Daniel Robbins <drobbins@gentoo.org>: emerge: circular
  dependencies error will result in the digraph dependencies being printed to
  stdout, greatly simplifying debugging.
  
  18 Mar 2002; Geert Bevin <gbevin@gentoo.org>: src/sandbox/problems: Added
  several sample implementations to reproduce reported bugs.

  18 Mar 2002; Geert Bevin <gbevin@gentoo.org>: libsandbox.c: All paths are now
  checked for multiple successive slashes anywhere, this closes bug 827.
  Performance should be slightly improved for other apps on the system for who
  the sandbox is not turned on.
  
  14 Mar 2002; Daniel Robbins <drobbins@gentoo.org>: output.py: quick fix to
  turn off white color output -- not good for terminals with white background.
  This closes bug #1135.
  
  11 Mar 2002; Daniel Robbins <drobbins@gentoo.org>: Applied karltk's version
  information patch.  Portage.py now contains version information, and this
  info is reported by "emerge --version".  Thanks Karl! :)
 
*portage-1.8.9_pre25 (11 Mar 2002)
 
  10 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge: roll
  back portagetree incremental db optimizations to fix an important bug (no
  package.mask calculations being done.)  Emerge will now abort if a dependency
  can't be satisfied rather than printing just a warning.

*portage-1.8.9_pre24 (09 Mar 2002)

  09 Mar 2002; Daniel Robbins <drobbins@gentoo.org> emerge: fixed missing
  "--clean" option so "--clean rsync" should work again.  Also converted emerge
  to work with our new db layout (db objects are in the portage module now).

  09 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: Added USE
  ordering, a concept envisioned by Vitaly Kushneriuk.  The idea is to allow
  customization of how Portage resolves USE variables.  The default is
  "env:conf:auto:defaults" (set in the USE_ORDER variable -- this default is
  now in make.globals but as always you should set your custom USE_ORDER in
  make.conf if desired.)  So, my default, USE settings will be calculated as
  follows.  The USE variables will be grabbed from the
  /etc/make.profile/make.defaults file (this is "defaults".) Then, the
  /etc/make.profile/use.defaults file will be consulted.  This file lists (one
  per line) a USE variable and a corresponding dependency.  If the dependency
  is satisfied, the USE variable is auto-enabled and added to our working list
  (this is "auto").  Then /etc/make.conf is consulted, so that the user has the
  option of force-enabling (with USE="foo") or force-disabling (with
  USE="-foo") any USE variables as desired (this is "conf".)  Then, the
  environment is consulted, allowing easy modifications from the command-line
  (this is "env").  Also added is the ability for USE settings to be
  dynamically regenerated in an efficient way as packages are merged.  So,
  right after xfree is emerged, the "X" use variable can be immediately
  auto-enabled.  Thanks to Vitaly for providing the vision for this.

*portage-1.8.9_pre23 (08 Mar 2002)

  09 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: our portage
  tree and /var/db/pkg tree now uses incremental caching rather than doing
  an exhaustive scan on startup.  This should speed up this respective code
  by 2-30x depending on how many packages you're emerging.  This involved
  quite a few changes to the code, and there could be some bugs, although I
  tried to be very careful.  These changes could also break code that access
  internal .tree[] dictionaries directly. 
  
  08 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: SRC_URIs with
  USE-enabled ( ) clauses in them weren't working because I was iterating
  through multi-level lists without flatten()ing them.  Now fixed.
  
  07 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: We no longer
  depend upon a file being unmerged.  We try to unlink during unmerge() in a
  "try" clause, with an exception for OSError.  If the directory is immutable
  then Portage continues gracefully.  This closes a bug reported by Verwilst --
  unmerging an old baselayout would die when it tried to delete /dev/shm.
  Fixed in Portage to eliminate these kinds of problems in the future.

*portage-1.8.9_pre22 (07 Mar 2002)

  07 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: I had
  sys.exit() in doebuild()'s fetch section.  Converted to "return 1" and
  "return 0" to be emerge --fetchonly friendly.  Thanks to Dan Armak for the
  bug report.

*portage-1.8.9_pre21 (07 Mar 2002)

  07 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: fixed symlink
  merge bug related to "safe" emerges.  This should fix problems of Portage
  dying when merging certain things.  I'm hoping that this fix will give us a
  solid merge implementation.  It should.  Thanks to Bart Verwilst for tracking
  down a merge problem that I could reproduce.

*portage-1.8.9_pre20 (06 Mar 2002)

  06 Mar 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh, others: users
  can now forcefully disable stripping of their ebuild binaries by adding a
  RESTRICT="nostrip" to their ebuild.  Additionally, the DEBUG variable has
  been renamed to DEBUGBUILD to prevent namespace collisions.  This closes bug
  #868.
  
  06 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py : Fixed a
  long-standing bug where the pkg_preinst() and pkg_postinst() functions being
  called came from the existing package ebuild in /var/db/pkg rather than the
  new ebuild being merged.  pkg_prerm() and pkg_postrm() still use the ebuild
  in /var/db/pkg, which is correct.  Thanks to Dan Armak for tracking down this
  bug.

*portage-1.8.9_pre19 (05 Mar 2002)
  
  05 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py : Fixed two bugs
  reported by Dan Armak relating to incomplete (not missing) message digests.
  They should now get regenerated automatically is "digest" is in FEATURES and
  not confuse the fetch code.

*portage-1.8.9_pre18 (04 Mar 2002)

  04 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py : Bug fix in
  dep_bestmatch(); rev comparison now works correctly and dep_bestmatch will
  properly handle 2-digit revisions in particular.  This closes bug #952.
  
  04 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py : Thanks to a
  bug report by Bruce Locke, the long-standing bug where symlinks with
  different mtimes would still get unmerged is now fixed.  This allows glibc
  (of all things) to be unmerged safely.  We needed this fix.  Closes bug #964.
  
  03 Mar 2002; Daniel Robbins <drobbins@gentoo.org> portage.py : KDEDIR ->
  KDEDIRS (fixing my typo)

*portage-1.8.9_pre17 (27 Feb 2002)

  27 Feb 2002; Daniel Robbins <drobbins@gentoo.org> emerge : --help
  documentation is now up-to-date; short options tweaked.
  
  26 Feb 2002; Daniel Robbins <drobbins@gentoo.org> portage.py : Fixed an
  unmerge error caused by digests now being recorded in lowercase.  unmerge now
  compensates for 100% backwards compatibility.  Moved "continue" outside of
  "try" block since this is disallowed in Python.  This fixes a python warning
  during fetch.
  
  26 Feb 2002; Geert Bevin <gbevin@gentoo.org> bin/dohtml : Added support for
  installing .gif files too since quite some docs still ship with those instead
  of .jpg or .png.

*portage-1.8.9_pre16 (25 Feb 2002)

  25 Feb 2002; Daniel Robbins <drobbins@gentoo.org> emerge : emerge syntax
  changed back to "classic" style; replaced dots with spinner, did a major code
  cleanup and removed pieces that will be rewritten for 1.8.9 final.  emerge
  documentation isn't up-to-date at all; I'm holding off on the --help rewrite
  until after 1.8.9 features have been finalized (soon!)
 
  25 Feb 2002; Daniel Robbins <drobbins@gentoo.org> : Added RESTRICT variable
  to ebuilds.  If RESTRICT="fetch" is set in the ebuild, it means that the
  files listed in SRC_URI are simply filenames and that the real files must be
  downloaded manually.  This allows us to deal with realplayer, since
  overriding dyn_fetch is no longer an option now that we have the fetch code
  in python.  Also added a cosmetic tweak to emerge during info file
  regeneration.
  
  25 Feb 2002; Daniel Robbins <drobbins@gentoo.org> cnf/* : updated ${x} ->
  ${URI} in $FETCHCOMMAND.

  24 Feb 2002; Daniel Robbins <drobbins@gentoo.org> Fixed another fetch bug
  where the download wouldn't cycle to alternate mirrors (it'd get stuck on
  the first download location)

*portage-1.8.9_pre15 (24 Feb 2002)

  24 Feb 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: some fixing of
  the merge code; added automatic digest generation when "digest" is in
  FEATURES; made the fetch() code not depend on a pre-existing digest.  This
  should fix all known digest/fetch issues.

*portage-1.8.9_pre14 (23 Feb 2002)

  23 Feb 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: If you have a
  file that's hosted directly on our master ibiblio mirror, you can specify
  it in SRC_URI as "http://mirror/myfile.tar.bz2".  "http://mirror" will be
  expanded to the first mirror defined in GENTOO_MIRRORS, or our master ibiblio
  mirror if no mirrors are defined.  Groovy.  This closes bug #627.
  
  23 Feb 2002; Daniel Robbins <drobbins@gentoo.org> make.globals, emerge,
  portage.py: wget is no longer hardcoded; FETCHCOMMAND is enabled again, but
  uses ${FILE} and ${URI} instead of ${x} and ${y} now.  Added download
  resuming, which requires the definition of RESUMECOMMAND (added to
  make.globals).  Updated spawn() so that when it's called as spawn(foo,free=1)
  as an argument, sandboxing is turned off.  Replaced all calls to
  os.system(foo) with spawn(foo,free=1), since os.system() messes with signal
  handling.  Added a default SIGINT signal handler to portage.py so that ^C
  interrupts are handled correctly (portage will immediately exit with a return
  code of 1).  This has been tested and works for ebuild and emerge.  These
  additions should also close bug #407 and #760.
 
  23 Feb 2002; Daniel Robbins <drobbins@gentoo.org> emerge: spython -> python
  fix; resolution of cvs merge conflict.  Removed edepend assignment bug
  reintroduced in Geert's commit; added comment explaining why the new code is
  needed so it doesn't get removed again ;)

  22 Feb 2002; Geert Bevin <gbevin@gentoo.org> emerge: removed spurious cvs
  conflict lines fixed bug in the cleanup code where different slots weren't
  handled too well

*portage-1.8.9_pre13 (22 Feb 2002)

  22 Feb 2002; Daniel Robbins <drobbins@gentoo.org> various: fix /bin/sh
  symlink merge problems and massively simplified movefile() code.  Added back
  some emerge code so that "emerge --search rsync" doesn't run rsync.

*portage 1.8.9_pre12 (22 Feb 2002)

  22 Feb 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: everything
  should now generate *lowercase* md5sums, fixing problems with digest 
  backwards compatibility.
  
  22 Feb 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: changed
  position of digest generation call so that "ebuild digest" now works if the
  sources have not yet been downloaded.
  
*portage 1.8.9_pre11 (22 Feb 2002)

  22 Feb 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: unmerging now
  works correctly.

*portage 1.8.9_pre10 (22 Feb 2002)

  22 Feb 2002; Daniel Robbins <drobbins@gentoo.org>: "emerge" didn't like the
  new portage.py (fixed); A merge database bug (fixed).  Fixing the merge bug
  should also result in merges happening much faster than before, maybe up to 3
  times as fast.  We no longer resolve symlinks when testing protection paths.

*portage 1.8.9_pre9 (21 Feb 2002)

  21 Feb 2002; Daniel Robbins <drobbins@gentoo.org>: moved entirety of Portage
  download/digest code from ebuild.sh (bash) to portage.py (python).  No
  support for custom FETCHCOMMANDs yet, but that's coming soon.  Good news is
  that it appears to work well and allowed some cleanups and optimizations to
  doebuild().  SYNC support added.  See cnf/make.conf for more info --
  basically, "emerge rsync" (now callable via "emerge sync" as well) supports a
  configurable "Portage server" that begins either with "rsync://" or "cvs://".
  "emerge sync" is now not only a clean front-end, but a configurable front-end
  to the Portage update process.  I also removed dependency checking from
  'ebuild'.  This allowed me to removed some redundant code from portage.py,
  and seemed fine to do since 'ebuild' is more and more becoming a low-level
  developer tool.
  
  21 Feb 2002; Daniel Robbins <drobbins@gentoo.org>: rewrite of cumulative USE
  setting code so that the new FEATURES (what used to be called MAINTAINER) is
  now cumulative and supports "-" and "-*" options.  FEATURES is expanded using
  all config files, while USE ignores make.globals but uses everything else.
  Optimization of a couple parts of doebuild().  Upgraded expandpath() and used
  it in one place where it was removed accidentally (in the new merge code.)
  Master category list is now stored externally in
  ${PORTDIR}/profiles/categories for ease of maintenance.
  
  21 Feb 2002; Daniel Robbins <drobbins@gentoo.org> emerge: now supports the
  EMERGE_OPTS make.conf variable for enabling emerge options by default.
  Closes bug #605.
  
  21 Feb 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: dep_match() now
  works with * deps (again?  Looks like the code got ripped out somehow); this
  closes bug #490.
  
  21 Feb 2002; Daniel Robbins <drobbins@gentoo.org> global change from
  "spython" -> "python", now that Portage is slick enough to update shared
  libraries correctly.
  
  21 Feb 2002; Grant Goodyear <g2boojum@gentoo.org> bin/chkcontents,
  man/chkcontents.1: New script to compare what's in a package's CONTENTS file
  with what's actually on the filesystem.  Useful for discovering that a
  package "collision" has occurred.

  21 Feb 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh, portage.py:
  Dependencies should be no longer checked during the "unpack" stage.  This
  closes bug #231.  Added the $KV kernel version variable to ebuild.sh so that
  it's available for all ebuilds.  This closes bug #599.
  
  21 Feb 2002; Daniel Robbins <drobbins@gentoo.org> ebuild.sh: S now defaults
  to ${WORKDIR}/${P} if it isn't defined.  That's right.  Defining S is now
  optional :)  This should eliminate around 1000 lines from our ports tree.
  
  20 Feb 2002; Daniel Robbins <drobbins@gentoo.org> portage.py: Fixed some
  major bugs in the new merge/config protect code.  Merging and config
  protection should now work.
  
  18 Feb 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge,
  ebuild.sh : Rewrote merge code.  Should merge symlinks only *after* the
  target has been merged (needs testing).  Added lots of comments.  Split
  dblink.merge() into 2 new functions -- .walktree() and .mergeme().
  Cleaned/optimized merging a good deal.  Added special "-*" USE variable to
  unset *all* USE variables defined up until that point.  
  
  18 Feb 2002; Daniel Robbins <drobbins@gentoo.org> portage.py, emerge,
  ebuild.sh : Fixed USE bug (config.reset() threw away our cumulative USE),
  streamlined turbo dep calculations by moving edb cache entry creation to
  ebuild.sh.  Started coding new dblink.merge() method that should be much
  cleaner, faster and merge symlinks safely.
 
  17 Feb 2002; Daniel Robbins <drobbins@gentoo.org> portage.py : Added
  cumulative USE variable support.  The final USE var is calculated
  cumulatively starting with make.profile, then make.conf, and then the
  environment.  Any "-foo" option in USE will turn off a previously-defined USE
  setting.  So, if you want to use the profile-default USE settings except turn
  "X" off, you add 'USE="-X"' to /etc/make.conf and that's it.  This greatly
  simplifies USE variable maintenance since developers can now easily add new
  USE variables that default to 'on'.  Simply add the USE variable and then add
  it to make.profile.  It will then be included in everyone's USE variables
  automatically unless they explicitly "-newvar" in /etc/make.conf or in the
  local environment.  This also enables easy one-shot disabling of USE
  variables.  For example, to merge xchat without GNOME support (when "gnome"
  is in your /etc/make.conf USE variable), simply type "USE="-gnome" emerge
  net-irc/xchat".  This is a lot easier than temporarily tweaking
  /etc/make.conf.
 
  17 Feb 2002: Daniel Robbins <drobbins@gentoo.org> emerge : Added a quick hack
  to cache ebuild dependency info using extended attributes on XFS filesystems.
  Gives a factor of 10 speedup for dependency calculations.  Will look into a
  generic caching solution that should offer similar performance increases on
  all filesystems.  Note: the fact that this hack is on CVS means that emerge
  is currently in a hyper-experimental state and shouldn't be used right now.
 
  16 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge : added support for 'emerge
  cat/pkg-version' instead of always having to require 'emerge cat/pkg'
  
  15 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge : reimplemented the display
  of cleaned packages to clearly show all versions that are about to be removed
  and which versions are going to stay  

  13 Feb 2002; D.Robbins <drobbins@gentoo.org> emerge :
  added --emptytree option

  13 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge, portage.py :
  fixed little bug where emerge --clean rsync wasn't correctly handled anymore
  implemented all new functionalities of emerge --clean, this adds --slots,
  --versions and --all options together with world and system modes

  12 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge, portage.py :
  changed emerge --zap to emerge --clean
  removed parts of the already implemented slots functionality to be able to
  fall back to a more flexible implementation. Binary compatible slots will now
  mostly influence emerge during the --clean operation

  12 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge :
  added fallback check in case UNMERGE_DELAY hasn't been defined in
  make.globals or make.conf

*portage 1.8.9_pre8 (18 Feb 2002)

  12 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge :
  changed the rebuild code to use depgraph instead, dramatically reducing code
  duplication

  11 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge :
  changed indentation of a code part that wasn't at the right level. It got the
  count of the non slot packages during --zap completely wrong

*portage 1.8.9_pre7 (11 Feb 2002)

  11 Feb 2002; G.Bevin <gbevin@gentoo.org> portage.py :
  fixed bug in packagetree.dep_match() where a ~ dependency is returned as a
  string instead of as a list
  
  11 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge :
  - removed support for --all and world in 'emerge --unmerge', by default now
    all matching packages are removed since with the new slots functionality
    old package versions should not exists anymore
  - colored package name red too when a blocking package is found during
    pretend operation
  - changed emerge invocation arguments to be in a new universal interface
    format this has been decided to be :
  'emerge --action --option --option [packageset]'
  some features however don't respect this, but that's since they are not
  package installation related and are easier to use as straight commands
  eg: emerge rsync
  - added UNMERGE_DELAY var to make.globals and support it in emerge to obtain
    the number of seconds to wait
  - support for NOCOLOR="yes" as wel as NOCOLOR="true"
  - major speedups for emerge -search
  - added formatted package descriptions of the matches from emerge --search
    that nicely wrap at 80 chars
  - rewrote retrieval of package descriptions to support descriptions that are
    specified on multiple lines
  - added support for 'noslot' to --zap, --update and --rebuild
  
  11 Feb 2002; G.Bevin <gbevin@gentoo.org> sandbox.c, libsandbox.c :
  added checks to see if the files where information is written to are really
  regular files and not symlinks

*portage 1.8.9_pre6 (10 Feb 2002)

  10 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge :
  added support for 'emerge --unmerge world' which removes all old package
  versions from the system
  made 'emerge --unmerge' take binary compatibility slots into account, this
  prevents that packages with different versions but also different slots, are
  being unmerged
  added support for "--verbose" in "emerge rebuild" and "emerge world" to
  provide details about packages that aren't in the local tree anymore and to
  notify the user about which packages don't support slots

  9 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge :
  added support for the rebuild mode which rebuilds all the packages on your
  system for which a corresponding package could be found in to portage tree

  9 Feb 2002; G.Bevin <gbevin@gentoo.org> portage.py :
  renamed getEbuildPaths() or vartree to getebuildpaths()
  fixed bug in the merging of binary packages

  7 Feb 2002; G.Bevin <gbevin@gentoo.org> xpack.py :
  added additional argument to tbz2.getfile() which allows default content to
  be provided when the requested file couldn't be found in the tbz2 archive

  7 Feb 2002; G.Bevin <gbevin@gentoo.org> ebuild.sh :
  added SLOT information as the third entry in the temporary deps file that is
  generated during ebuild depend,
  
  7 Feb 2002; G.Bevin <gbevin@gentoo.org> portage.py :
  obtain SLOT information from the deps file instead of using the slotgrab()
  function, removed slotgrab() function, updated some comments

  7 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge :
  added SLOT information to the generated edepend var for binary packages

*portage 1.8.9_pre5 (6 Feb 2002)

  6 Feb 2002; G.Bevin <gbevin@gentoo.org> portage.py :
  fixed bugs where the old instance wasn't unmerged correctly if slots are
  identical, but ebuild version numbers not

  6 Feb 2002; Grant Goodyear <g2boojum@gentoo.org> cnf/make.conf :
  Copied proxy lines from make.globals (bug 431).

  6 Feb 2002; Vitaly Kushneriuk <vitaly@gentoo.org> portage.py :
  added missing SLOT param to merge(...).
  
*portage 1.8.9_pre4 (6 Feb 2002)

  6 Feb 2002; G.Bevin <gbevin@gentoo.org> portage.py :
  fixed some bugs in the handling of PROVIDES and virtual packages together
  with slots, they used code that wasn't upudated to the new dblink constructor
  virtuals now use "" as slot, resulting in normally to same behaviour as what
  has been done before.
  
  5 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge :
  sorted the packages to unmerge since this makes package names with revision
  endings appear before plain version numbers. This makes the unmerge code
  first remove the old and non slot aware packages before removing the newer
  alternative which is in fact exactly the same apart from the revision
  identifier.

*portage 1.8.9_pre3 (5 Feb 2002)

  5 Feb 2002; G.Bevin <gbevin@gentoo.org> portage.py :
  only let the backward compatibility algorithm kick in during unmerge since
  it's impossible to correctly detect is in general.

*portage 1.8.9_pre2 (5 Feb 2002)

  5 Feb 2002; G.Bevin <gbevin@gentoo.org> portage.py :
  fixed bug in the backward compatibility algorithm

*portage 1.8.9_pre1 (5 Feb 2002)

  4 Feb 2002; G.Bevin <gbevin@gentoo.org> ebuild.sh, emerge, portage.py :
  added binary compatibility slots, this also contains additional code to keep
  the unmerging of packages backwards compatible.
  
  4 Feb 2002; G.Bevin <gbevin@gentoo.org> portage.py :
  added back support for the "ebuild help" command which seems to have
  disappeared somewhere along the updates
  
  4 Feb 2002; G.Bevin <gbevin@gentoo.org> make.conf, make.globals :
  added description and default entry for the imlib USE variable
  added flag to prozilla to disable prozilla's waiting for a user's keypress
  when a failure occurs
  
  4 Feb 2002; G.Bevin <gbevin@gentoo.org> output.py :
  bugfix, write read() function instead of red(), doh !
  
  4 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge, portage.py :
  implemented the ! dependency which prevents incompatible packages to be
  installed on the same system at the same time

  4 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge :
  most emerge invocation options now have alternative short flags
  
  4 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge :
  emerge now doesn't unmerge the last version of an installed version by
  default anymore, to really remove all instanced of packages the --all flag
  has to be used, the --safe flag is deprecated
  
  3 Feb 2002; G.Bevin <gbevin@gentoo.org> output.py, emerge,make.globals :
  all output can now be turned to black and white by using the functions in 
  output.py, this determines the mode by checking to NOCOLOR variable in
  make.conf or make.globals

  3 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge :
  made it possible to run emerge --help and --search as non root

*portage 1.8.8-r1 (1 Feb 2002)

  1 Feb 2002; G.Bevin <gbevin@gentoo.org> portage.py, ebuild.sh, ebuild.5 :
  added support for a pkg_setup() function which is executed before anything
  else and can be typically used for package configuration actions or required
  system checks

  1 Feb 2002; G.Bevin <gbevin@gentoo.org> portage.py :
  implemented the noauto MAINTAINER flags for all relevant ebuild commands

  1 Feb 2002; G.Bevin <gbevin@gentoo.org> portage.py :
  make env-update disregard backup files
  
  1 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge :
  added --pretend support instead of interactively asking to proceed,
  also added a delay before unmerging though to be sure

*portage 1.8.8 (1 Feb 2002)

  1 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge :
  added --safe switch to complement the --unmerge option

  1 Feb 2002; G.Bevin <gbevin@gentoo.org> portage.py :
  rewrote the packagename without category support to also graceously handle
  deps specifiers at the beginning, this shouldn't be used in the ebuilds, but
  are very handy when using emerge --unmerge

  1 Feb 2002; G.Bevin <gbevin@gentoo.org> emerge :
  added emerge --unmerge support

  1 Feb 2002; G.Bevin <gbevin@gentoo.org> portage.py :
  added packagename without category support in the dep_match function

*portage 1.8.7 (30 Jan 2002)

  30 Jan 2002; G.Bevin <gbevin@gentoo.org> portage.py :
  integrated and slightly adapted Brent Rahn's code to support package names
  without category

  30 Jan 2002; G.Bevin <gbevin@gentoo.org> ebuild.sh :
  integrated and fixed Azarah's patch to fix the wrongly generated archive size
  in the digests

*portage 1.8.6-r3 (28 Jan 2002)

  28 Jan 2002; G.Bevin <gbevin@gentoo.org> portage.py :
  disabled warnings about non existant config file paths

  28 Jan 2002; G.Bevin <gbevin@gentoo.org> emerge :
  added verwilst pkgsearch code, which was turned into a seperate class and
  refactored for clarity and execution speed

  28 Jan 2002; G.Bevin <gbevin@gentoo.org> portage.py :
  renamed _xxx vars to _prepart in Vitaly's code addition

*portage 1.8.6-r2 (27 Jan 2002)

  24 Jan 2002; Vitaly Kushneriuk <vitaly@gentoo.org> portage.py :
  Fixed version compare code Also added test script to test future versions.

*portage 1.8.6-r1 (24 Jan 2002)

  24 Jan 2002; Karl Trygve Kalleberg <karltk@gentoo.org> dojar:
  Fixed typos.
  
*portage 1.8.6 (23 Jan 2002)

  22 Jan 2002; G.Bevin <gbevin@gentoo.org> libsandbox.c :
  added an additional check for SANDBOX_ON to optimize the speed in the execvp
  function call. Also removed error messages being printed when the PATH var
  isn't set.
  
  20 Jan 2002; Karl Trygve Kalleberg <karltk@gentoo.org> dojar :
  added dojar shell command as a java JAR handler

  17 Jan 2002; Daniel Robbins <drobbins@gentoo.org> :
  The package chosen by "emerge sys-apps/shadow" now matches that chosen in an
  emerge update or emerge system.  I forgot to add some "*" dep code to the
  dep_nomatch() method; this is now fixed.

*portage 1.8.5 (13 Jan 2002)

  13 Jan 2002; G.Bevin <gbevin@gentoo.org> ebuilds.sh, portage.py:
  added fine grained maintainer settings

*portage 1.8.4 (13 Jan 2002)

  12 Jan 2002; Daniel Robbins <drobbins@gentoo.org> :
  "emerge sys-apps/bash/" now works. (trailing "/" stripped to make
  tab-completion users happy)  This fixes bug #119

  12 Jan 2002; Daniel Robbins <drobbins@gentoo.org> :
  Portage should no longer bomb out if the current working directory doesn't
  exist (has been deleted from underneath).
  
  12 Jan 2002; Daniel Robbins <drobbins@gentoo.org> :
  added "--world" option for "emerge update".   This tells Portage to update
  the base system *as well as* upgrade any packages that are currently
  installed but have new versions available.  This is your standard full system
  update command.  This fixes bug #122

  12 Jan 2002; Daniel Robbins <drobbins@gentoo.org> :
  Added an expandpath() cache which speeds up merging dramatically.

*portage 1.8.3 (11 Jan 2002)

  11 Jan 2002; Mikael Hallendal <hallski@gentoo.org> ebuild.sh:
  added functions econf and einstall. Also made src_compile having a default
  implementation.

*portage 1.8.2 (07 Jan 2002)

  07 Jan 2002; G.Bevin <gbevin@gentoo.org> :
  sandbox included in portage
  
*portage 1.8.1 (30 Dec 2001)

  29 Dec 2001; Daniel Robbins <drobbins@gentoo.org> :
  "emerge update" is now functional!  Although the algorithm really should be
  sound, it is still considered in testing since we may need to tweak some
  dependencies.

  27 Dec 2001; Daniel Robbins <drobbins@gentoo.org> :
  Removed objprelink from the default USE variable.

*portage 1.8.0 (22 Dec 2001)

  22 Dec 2001; Daniel Robbins <drobbins@gentoo.org> :
  I messed up the "transparent .so library" update.  Included is the correct
  fix, which seems to allow glibc to update on my system without any tricks.
  I just merged a new glibc while in X, without using any of glibc's old
  pkg_postinst/pkg_preinst hacks.
  
  21 Dec 2001; Daniel Robbins <drobbins@gentoo.org> make.defaults.5, make.conf.5 :
  Moved make.defaults.5 to make.conf.5 and updated contents.

*portage 1.7.8 (21 Dec 2001)

  21 Dec 2001; Daniel Robbins <drobbins@gentoo.org> portage.py :
  ebuild install doesn't throw away the compile directory if ebuild has been
  changed and MAINTAINER is set; we now use mv -f to move files into location
  on the filesystem, making our library install method even more robust. It
  should now be totally safe to  upgrade glibc while in X and playing music
  with xmms and surfing the Web and compiling 20 applications at once :)

* portage 1.7.7 (14 Dec 2001)

  14 Dec 2001; Aron Griffis <agriffis@gentoo.org>: portage.py :
  movefile() now unlink()s the destination file first which solves shared
  library install problems.

* portage 1.7.6 (13 Dec 2001)

  10 Dec 2001; Daniel Robbins <drobbins@gentoo.org> portage.py :
  env_update() now generates an /etc/csh.env file in csh shell format.

* portage 1.7.5 (13 Dec 2001)

  10 Dec 2001; Daniel Robbins <drobbins@gentoo.org> portage.py :
  added a little fix so a ~ dep isn't satisfied by a *much* later installed
  version; i.e. ~media-libs/freetype-1.3.1 satisfied by
  media-libs/freetype-2.0.5 being installed.
  
  30 Nov 2001; Daniel Robbins <drobbins@gentoo.org> ebuild :
  added a KeyboardInterrupt handler so ^C'ing a running ebuild process doesn't
  produce a Python traceback.

* portage 1.7.4 (29 Nov 2001)

  29 Nov 2001; Daniel Robbins <drobbins@gentoo.org> portage.py :
  removed an unnecessary quirk in the code preventing virtual packages from
  being in any other category but "virtual".
  
  25 Nov 2001; Daniel Robbins <drobbins@gentoo.org> emerge :
  info file detection code has been improved.  

* portage 1.7.3 (20 Nov 2001)

  20 Nov 2001; Daniel Robbins <drobbins@gentoo.org> pdb, pdb.cgi, xpak :
  used /usr/bin/python instead of /usr/bin/spython.  Fixed.

* portage 1.7.2 (13 Nov 2001)

  13 Nov 2001; Aron Griffis <agriffis@gentoo.org> :
  emake will now try to build in parallel, and if it fails, will retry in
  non-parallel mode.
  
  13 Nov 2001; Daniel Robbins <drobbins@gentoo.org> ebuild.sh :
  an ebuild that used an archive with a name that was part of another archive
  would cause Portage to mess up the digest check.  No longer.

  31 Oct 2001; Donny Davies <woodchip@gentoo.org> make.conf, make.globals :
  comments about merging the fetch programs before trying to use them.

* portage 1.7.1 (30 Oct 2001)

  30 Oct 2001; Daniel Robbins <drobbins@gentoo.org> portage.py :
  I accidentally broke "=" deps by being sloppy when I added "*" deps.  Trivial
  fix applied.

* portage 1.7 (29 Oct 2001)

  29 Oct 2001; Daniel Robbins <drobbins@gentoo.org> portage.py :
  strange typo fix in the empty() digraph method.

* portage 1.6.12 (29 Oct 2001)

  29 Oct 2001; Daniel Robbins <drobbins@gentoo.org> portage.py :
  "*" deps now implemented. "=sys/foo-1*" matches the latest 1.x version/rev of
  sys/foo, but will not match a 2.x version.

  26 Oct 2001; Daniel Robbins <drobbins@gentoo.org> portage.py :
  various new categories added.

Portage 1.6.11, released 18 Oct 2001
====================================

  *portage.py; device nodes are now not unmerged at all.


Portage 1.6.10, released 18 Oct 2001 
===================================

  *ebuild.sh: A and AA fix; now any A="foo" lines in the ebuild are ignored,
  allowing ebuilds with them to continue working.
  
  *portage.py: remove gnome-apps, gnome-office, gnome-libs, add gnome-extra
  categories.

  *ebuild.sh, portage.py: You can now use USE variables in SRC_URI to
  conditionally include archives.  In MAINTAINER mode, all archives are
  automatically included so that maintainers can check SRC_URIs and also
  generate complete digests.  A new file-based DEPEND and RDEPEND-passing
  mechanism has been added.
  
  *ebuild.sh Now adds filesize to the digest files

Portage 1.6.9, released 15 Sep 2001
===================================

  *portage.py
  unmerge() now does not touch device nodes.  Unlinking them or touching them
  in any way is bad practice.


Portage 1.6.8, released 12 Sep 2001
===================================

  *portage.py
  movefile() will now unlink() destfile if it is a symlink.  Should fix 
  problems where file gets created at symlink target rather than replacing
  the symlink.

  *queryhost.sh (agriffis)
  Parallel pinging and other fixes.

Portage 1.6.7, released 05 Sep 2001
===================================

  *portage.py
  (last-minute fix)
  CONFIG_PROTECT unmerge protection is now observed for symlinks, fifos and
  device nodes.
  
  *portage.py
  Fixes for unmerging CONFIG_PROTECTed files.  Protected files are now *not*
  unlinked from the filesystem.  Messier but safer, and simplifies package
  upgrades.

  *emerge
  Emerge output cleanups for GNU info directory generation.  New --verbose
  mode; new CONFIG_PROTECT scanning feature to let people know when there are
  config files to be updated.  New "--help config" docs to explain how to
  do it.

Portage 1.6.6, released 01 Sep 2001
====================================

  *portage.py
  Upgraded directory merging over existing objects.  Existing symlinks that
  point to existing directories will be kept and used as is; directories will
  be used as-is; any other objects (broken symlinks, files) will be copied
  to origfilename.backup and a ne directory will be created in its place.

Portage 1.6.5, released 31 Aug 2001
====================================
  
  *emerge 
  Fixes for handling multiple ebuilds, packages and/or dependencies on
  the command-line.

  *portage.py 
  An optimization to the digraph class so that the firstzero() method finds
  matches in close to the order that keys were added to the digraph.
