Release Notes; upgrade information mainly.
Features/major bugfixes are listed in NEWS

portage-2.2
==================================

* The python namespace for portage has been sanitized, all portage related code
  is now contained within the portage namespace. External script should be updated
  accordingly, though links exist for backward compability.
* -* support in package.keywords was changed as it was inconsistent with 
  ACCEPT_KEYWORDS behavior (also see http://dev.gentoo.org/~genone/docs/KEYWORDS.stupid).
  Previously having -* in package.keywords matched packages with KEYWORDS="-*", 
  now it resets the ACCEPT_KEYWORDS list for the given atom like it does when
  used in ACCEPT_KEYWORDS.
  For packages that don't specify any other KEYWORDS you can use the new ** token
  as documented in portage(5) to disable KEYWORDS filtering completely.
* Portage now warns if an ebuild repository does not have a name, as several new
  features in 2.2 make use of or require named repositories. The repository name
  is stored in profiles/repo_name in each repository.
* Package set support: There are several important notes regarding package sets:
  - setnames have to be prefixed with @ (exceptions: 'world' and 'system' can be 
    used without the prefix)
  - they may currently only include simple and versioned atoms or other sets, use
    conditionals or any-of constructs aren't possible yet
  - sets can be referenced either in other file-based sets or as argument to emerge, but
    not in ebuilds, config files or other tools at this time.
  - packages won't be unmerged if they are referenced by an installed package
    set (with the exception of the world set, and installed being determined
	by the world_sets file).
* "world" does no longer include "system" unconditionally, but you can add
  "@system" to the world_sets file to restore the old state.

portage-2.1.5
==================================

* The pkg_postinst phase is now called after the previous version of a
  package has been removed. As a consequence, it is no longer possible
  to call has_version in pkg_postinst to detect whether the current
  install operation is an upgrade or downgrade. If this information is
  needed during the pkg_postinst phase, do the has_version call in an
  earlier phase (such as pkg_preinst) and store the result in a global
  variable to be accessed by pkg_postinst when it is called. Bug #226505
  tracks all issues related to this phase execution order change.

* The metadata-transfer feature is now disabled by default. This disables the
  "Updating Portage cache" routine that used to run at the tail end of each
  `emerge --sync` operation. If you use something like the sqlite module and
  want to keep all metadata in that format alone (useful for querying), enable
  FEATURES="metadata-transfer" in make.conf. You should also enable
  FEATURES="metadata-transfer" if you have any eclasses from PORTDIR_OVERLAY
  that override eclasses from PORTDIR (in this case, you may have disabled
  a relevant warning message by setting PORTAGE_ECLASS_WARNING_ENABLE="0" in
  make.conf).

* The parallel-fetch feature is now enabled by default. It is optimized
  to avoid doing redundant checksums for previously downloaded files that have
  the correct size. Run `tail -f /var/log/emerge-fetch.log` in a
  terminal to view parallel-fetch progress. Add FEATURES="-parallel-fetch"
  to /etc/make.conf if you want to disable this feature.

* 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.

portage-2.1.4.1
==================================

* If you have an overlay then you should remove **/files/digest-*
  files (Manifest1) because they are no longer supported.
* If earlier versions of portage will be used to generate manifests
  for your overlay then you should add a file named manifest1_obsolete
  to the root of the repository in order to disable generation of the
  Manifest1 digest files.

portage-2.1.4
==================================

* Visibility filtering is now supported for binary packages, so masking behavior
  is essentially equivalent to that of ebuilds.
* There is no need to have a complete portage tree available when installing binary
  packages or uninstalling packages, but a warning message will still be displayed if
  it appears that a valid profile is not available.

portage-2.1.3
==================================

* Portage now requires >=python-2.4, but doesn't need pycrypto anymore if
  >=python-2.5 is installed and openssl supports the rmd160 hash.
* The "save_summary" and "echo" elog modules are now enabled by default. Setting
  PORTAGE_ELOG_SYSTEM in make.conf will override this, so if you don't want elog
  set PORTAGE_ELOG_SYSTEM="" in make.conf
* The unmerge process will remove any file that is not claimed by another
  package in the same slot and is not protected by CONFIG_PROTECT, even if the
  modification time or checksum differs from the file that was originally
  installed.  The old behavior is still available by adding -unmerge-orphans
  to FEATURES.
* The world file now supports slot atoms such as 'sys-devel/gcc:3.4'. In some
  cases, emerge --depclean may remove slots that it would not have removed
  in the past. The emerge --noreplace command can be used to add an atom to the
  world file and prevent matching packages from being removed.  A slot atom
  will be recorded in the world file for any atom that is precise enough to
  identify a specific slot.
* For safer operation, emerge --prune will not unmerge packages that have
  reverse dependencies. Use --verbose to display reverse dependencies. Use
  --nodeps to completely ignore dependencies.
* emerge --depclean now accepts atoms and will unmerge only the specified
  packages if nothing depends on them. Use --verbose to display reverse
  dependencies.

portage-2.1.2
==================================

* Depending on the number of packages installed, users may notice a difference
  in the time taken for dependency calculations.  This performance penalty is
  due to the addition of important new features which include the ability to
  detect reverse blockers, the building of a complete dependency graph, and the
  ability to use installed packages to satisify dependencies even after their
  ebuilds have been removed from the portage tree.
* emerge does not necessarily update build time dependencies that are not
  strictly required.  See the --with-bdeps option in the emerge(1) man page.

portage-2.1.1
==================================

* emerge --search doesn't use regular expressions now anymore by default, so
  emerge --search dvd+rw-tools now works as expected. Regular expressions can be enabled
  by prefixing the search string with %. 
* emerge --depclean algorithm is much safer than the old one.
* emerge --newuse detects changes in IUSE that previously went undetected.

portage-2.1
==================================

* new cache framework, breaking all old cache modules.
  If you're having problems with portage_db_cdb, this is likely the cause.
* USE flag output ordering has changed.  The old ordering is now an option
  by the name of --alphabetical.  Adding the option to EMERGE_DEFAULT_OPTS
  in make.conf will restore the old behaviour permanently.
* The deprecated --inject has been removed, use /etc/portage/profile/package.provided
* The deprecated --upgradeonly has been removed, use /etc/portage/package.* 
  instead.
* 'emerge sync' has been deprecated, use 'emerge --sync' instead (same 
  for other actions)
* Tools that call emerge should override the EMERGE_DEFAULT_OPTS environment
  variable or use the emerge --ignore-default-opts option.
* rsync option handling has been redesigned, instead of RSYNC_* variables
  use PORTAGE_RSYNC_EXTRA_OPTS from now on.
* autouse (use.defaults) has been deprecated by specifying USE_ORDER in make.defaults
  Users may still turn this back on by specifying USE_ORDER="env:pkg:conf:auto:defaults"
  in make.conf.  Interested in figuring out what use flags were turned off?  Check out
  /usr/portage/profiles/base/use.defaults and other use.defaults files that correspond 
  to your profile.

