News (mainly features/major bug fixes)

portage-2.2
-------------

* Add link level dependency awareness to emerge --depclean and --prune actions
  in order to protect against uninstallation of required libraries.
* Add support for generic package sets (also see RELEASE-NOTES)

portage-2.1.9
-------------

* There is a new ipc (inter-process communication) USE flag which is enabled
  by default. This allows portage to communicate with running ebuild processes,
  for things like best_version, has_version, and die calls in nested processes.
  This flag should remain enabled unless it is found to be incompatible with a
  specific profile or environment.

portage-2.1.8
-------------
* The top-level __init__.py for the portage python package has been split into
  many smaller python modules, making the code easier to navigate and allowing
  small parts of the portage api to be imported with less overhead.

portage-2.1.7
-------------

* Add license visibility filtering (GLEP 23)
* Add --accept-properties option for emerge which allows you to use
  --accept-properties=-interactive in order to temporarily exclude
  interactive updates.
* Add support for Python 3.0. At least Python 2.6 is now required in order to
  support the new syntax which is used by Python 3.0.

portage-2.1.6
-------------

* Add support for a new EAPI="2" value. For more information about new EAPI
  features, refer to the "Ebuild" chapter of the html documentation that is
  installed with portage.
* Add PORTAGE_IONICE_COMMAND setting for make.conf which is called to adjust
  IO priority on portage and it's subprocesses.
* Add emerge --jobs and --load-average options which specify behavior
  for building packages in parallel or for generating metadata in parallel
  with emerge --regen.
* Add emerge --keep-going option to continue as much as possible after
  an error. When an error occurs, dependencies are recalculated for
  remaining packages and any with unsatisfied dependencies are
  automatically dropped. The --skipfirst option automatically drops
  packages in the same way, and also drops any masked packages.
* Add git and subversion support for repoman.
* It is now possible to use `emerge <file>` to reinstall the package that
  installed a particular file. Package contents entries are indexed to
  improve performance. A command such as `emerge /lib/modules` can serve
  as a decent substitute for module-rebuild.
* Namespace sanitizing: move all portage related code into portage.* namespace,
  rename portage_foo modules to portage.foo (but keep symlinks for compability)
* Add support for news items (GLEP 42)
* Add FEATURES=protect-owned which is identical to the collision-protect
  feature except that files may be overwritten if they are not explicitly
  listed in the contents of a currently installed package.

portage-2.1.5
-------------

* For extra careful dependency handling, emerge has a new --complete-graph
  option that causes it to consider the deep dependencies of all packages from
  the system and world sets. With this option enabled, emerge will bail out
  if it determines that the given operation will break any dependencies of
  the packages that have been added to the graph. Unlike the --deep option,
  the --complete-graph option does not cause any more packages to be updated
  than would have otherwise been updated with the option disabled.
* Blockers are now resolved automatically in many more cases
  than before.  When it's safe, blocked packages are uninstalled
  automatically so that users are no longer inconvenienced with the
  task. Automatically uninstalled packages are displayed in the merge
  list, marked "uninstall" and highlighted in red. With the --tree
  option enabled, it's possible to see which package(s) caused other
  ones to be automatically uninstalled.
* The dependency resolver now has a feedback mechanism that helps make atom
  selections more consistent with previous selections that have been added to
  the graph. This solves some common cases of bug #1343.

portage-2.1.4
-------------

* After the initial setup phase, the original ebuild and eclasses are no
  longer needed because the same ebuild environment is reused for the
  entire lifecycle of the package, including uninstallation.
* The emerge --search action supports searching of both installed and binary packages
  The --usepkg and --usepkgonly options control which repositories are searched.

portage-2.1.3
-------------

* Allow per-module setting of PORTAGE_ELOG_CLASSES
* Add new elog module "echo" to simply display messages when emerge exits
* Add ** as new token for package.keywords to bypass the keyword visibility layer
* USE_EXPAND variables such as LINGUAS support a * wildcard that will enable
  all of the corresponding flags that are listed in IUSE for a given package.
  USE_EXPAND wildcards such as linguas_* are supported in USE and package.use.
* The merge process preserves the modification timestamp of files that it
  installs. The unmerge process will not uninstall files that are claimed by
  another package in the same slot.
* PDEPEND is now installed as soon as possible so that it behaves more like
  RDEPEND.  This makes PDEPEND more useful for breaking the dependency cycles
  that are sometimes triggered by RDEPEND and DEPEND.
* Enable "echo" and "save_summary" elog modules by default
* Fix -* handling in package.keywords to work as intended (reset the accepted 
  keywords list), also see RELEASE-NOTES.
* Make elog functionality available to python code

portage-2.1.2
-------------

* Ebuilds support default USE flags via +flag in IUSE.
* New-style virtuals are now usable for packages that depend on themselves for
  bootstrap.
* Profiles support multiple inheritance and package.use.
* CONFIG_PROTECT and CONFIG_PROTECT_MASK both support files (not just
  directories).
* Collision protection handles symlinks properly.
* Dependencies can be satisfied by installed packages that do not have matching
  ebuilds in the portage tree or overlay.
* Emerge automatically ignores blockers that are made irrelevant by an upgrade.
* Emerge supports "reverse blocker detection" which means that the blockers of
  installed packages will always be respected.
* Emerge builds a complete dependency graph in order to ensure correct merge
  order and detection of circular dependencies.
* The world and system sets allow automatic update of all installed slots.
* DEPEND atoms support SLOT dependencies of the form ${CATEGORY}/${PN}:${SLOT}.
* Development: Extend PYTHONPATH support to allow overriding the hardcoded 
  /usr/lib/portage/pym for development/testing purposes
* New "finalize" hook for elog modules enabling modules to perform actions on 
  shutdown (like dispatching collected messages).
* New elog modules mail_summary and save_summary that act like the mail/save
  modules except that they merge messages from multiple packages in a single
  file/mail.
* New QA loglevel and matching eqawarn function
* `ebuild foo test` now always runs src_test if available
* If DOC_SYMLINK_DIR is set portage installs symlinks to html documention there
* FEATURES="test" automatically implies USE="test".

portage-2.1.1
-------------

* Profiles support use.force, package.use.force, and package.use.mask files.

portage-2.1 (ongoing via pre releases)
------------

* FEATURES="confcache" integration; global caching to speed up configure calls, 
  requires dev-util/confcache
* elog framework and accompanying modules for logging ebuild warnings, errors
  and general notices. Collects eerror/ewarn/elog/einfo messages.
* New elog function (should replace einfo in many cases)
* version syntax enhancements allowing multiple suffixes and a new 'cvs'
  version prefix for denoting "live sources" ebuilds.
* config files as directories enabling more flexible settings management.
* Addition of an register_die_hook method that allows ebuild/eclasses to
  register functions to be called for better debugging on errors.
* Addition of pre and post user hookable functions for each ebuild phase, accessible 
  via portage bashrc.  Example would be pre_src_unpack .
* cache refactoring- runtime improvement from 35% -> 65%.
* Intelligently handle and display USE_EXPAND-based IUSE variables.
* FEATURES="parallel-fetch".  Download in parallel to compilation.
* Include a "changed or new" USE flag output when --verbose isn't specified.
* Support for splitting out debug information into separate files in
  /usr/lib{,32,64}.
* exec subsystem refactoring (now with less bugs!)
* Added sha256 and rmd160 hashes for digests/manifests
* Make --emptytree only apply to ${ROOT} rather than always including /.
* Allow packages to be upgraded that are only depended on via a
  "|| ( =cat/pkg-1* =cat/pkg-2* )" construct.
* Ebuild output is no longer cut off early when using PORT_LOGDIR.
* Distfiles indirection- $DISTFILES access goes through a tmp dir to fail
  access to files not listed in SRC_URI.
* Emerge now uses --resume to restart itself after portage upgrade.
* Atomic file updates via the new atomic_ofstream class.
* Global updates and fixpackages performance optimizations.
* Tests show that file locking is now more reliable.
* A bash call stack is printed when an ebuild dies in ebuild.sh.
* New rsync option handling by using a generic PORTAGE_RSYNC_EXTRA_OPTS variable
* Manifest2 support that will allow digest-* files to be eliminated from the tree.
