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

portage-2.2.13
==================================
* Bug Fixes:
    - Bug # 438976 Remove DESCRIPTION.punctuation check from repoman
    - Bug # 520542 Replace .append() with .add() for set variables
    - Bug # 515230 package_tracker.match: account for unevaluated_atom
    - Bug # 508762 _slot_operator_update_probe: This fixes the
        check_reverse_dependencies function.
    - Bug # 522362 Fix config.setcpv to regenerate USE settings in order to
        account for package.env USE settings from the previous package
        instance.
    - Bug # 507482 Run distcc-pump server throughout src_configure()
        to src_install()
    - Bug # 520950 This handles a case which occurs when
        _solve_non_slot_operator_slot_conflicts calls _create_graph.
    - Bug # 520752 Make email date, timestamp RFC-compliant
    - Bug # 520378 Fix hard-coded emerge-fetch.log locations
    - Bug # 522652 For cases such as || ( X <A-2 ), where X is unsatisfiable
        and A-1 is installed, fix dep_zapdeps to make the correct choice.
    - Bug # 510270 This fixes an IndexError in
        _solve_non_slot_operator_slot_conflicts which occurs when none of the
        conflict packages matched a particular atom.
* No longer include a Changelog with release tarball.
    For a complete log of the Changes please refer to the git log viewable
        online at https://github.com/gentoo/portage/commits/master


portage-2.2.12
==================================
* Bug Fixes:
    - Bug # 519074 fix invalid locale setting
    - Repoman: fix atom.blocker checks
    - Bug # 519124 properly decode formatted number for localized_size()
    - Revert an incorrect test fix from 2.2.11 which broke mime type detection
    - Bug # 518968 Fix and incorrect userquery change
    - QA systemd warning check for using /etc/conf.d
    - QA Use pngfix to find broken PNG files
    - Bug # 512578 Prepend '=' to unmerge atoms
    - Repoman: Do not report DESCRIPTION.punctuation warning for "etc."
    - Fix a py2/py3 discrepency involing integer division causing number output
      to be inconsistent
    - Fix an unicode-decode error in a gettaddrinfo() error message
* New emaint module "merges"  for finding and fixing failed merges
  If a pkg fails to merge to the live filesystem correctly, that pkg may
  not work correctly if at all.  This module scans the installed pkg database
  for those failures and can re-emerge those packages.


portage-2.2.11
==================================
* Bug Fixes:
    - Remove some broken old style virtual code
    - Bug # 505428 RO only filesystem check
    - Bug # 506186 TaskSequence starting bug.
    - Sort repoman check output
    - Remove obsolete repoman eclass checks
    - Bug # 505944 Improve mismatch checking
    - Bug # 488820 fix @security crash
    - Bug # 438976 Add DESCRIPTION.punctuation check to repoman
    - Add ruby18 warning for deprecated ruby target to repoman
    - Add Python version to Portage version line
    - Prevent rebuild code from performing unwanted repository changes
    - Include "::repository" more consistently in output
    - Make the slot conflict handler output more debug information
    - Bug # 487074 Don't split suggested commands when printing them
    - Handle 'mkdir -p /etc/portage/make.profile/packages' gracefully
      -- i.e. produce an error instead of crashing with a traceback
    - Implement --alert
    - Bug # 516428 Make repoman warn if non-virtuals depend on
      perl-core
    - Prefer install-xattr to install.py as a wrapper to coreutils'
    /usr/bin/install to preserve file system extended attribute.


portage-2.2.10
==================================
* Bug Fixes:
    - Fix broken --moo output
    - Bug # 505422 depgraph: "remove pkg" logic fix

portage-2.2.9
==================================
* Bug Fixes:
    - Bug # 450372 Russian translation update.
    - Bug #497238: Fix unnecessary rebuild caused by equal versions
      in different repositories.
    - Bug #501360 Only use Atoms with package_tracker.match
    - For a complete list of bug fixes, changes, See the Changelog installed at
      /usr/share/doc/portage-2.2.9/ChangeLog.bz2

portage-2.2.8
==================================
* Bug Fixes:
    - Bug 488972 - sys-apps/portage-2.2.7:
      "egencache --update --rsync" does not create metadata/timestamp.chk
    - For a complete list of bug fixes, changes, See the Changelog installed at
      /usr/share/doc/portage-2.2.8/ChangeLog.bz2

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

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

portage-2.1.13
==================================

* FEATURES=userpriv and usersandbox are enabled by default.
* FEATURES=usersync is enabled by default.
* New sync-cvs-repo, sync-type and sync-uri attributes in repos.conf replace
  SYNC variable.

portage-2.1.12
==================================

* FEATURES=preserve-libs is enabled by default.
* ACCEPT_RESTRICT variable may be used to mask packages based on RESTRICT.

portage-2.1.11
==================================
* User-defined package sets can now be created by placing files in the
  /etc/portage/sets/ directory. Refer to the emerge(1) and portage(5) man
  pages for more information.
* The "selected" package set, which includes packages listed in
  /var/lib/portage/world, has been extended to include nested sets that may
  be listed /var/lib/portage/world_sets.

portage-2.1.10.61
==================================
* FEATURES=config-protect-if-modified is now enabled by default. This causes
  the CONFIG_PROTECT behavior to be skipped for files that have not been
  modified since they were installed.

portage-2.1.10.27
==================================
* FEATURES=fixpackages is now enabled unconditionally. Set --package-moves=n
  in EMERGE_DEFAULT_OPTS if you need to temporarily avoid package moves for
  some reason.

portage-2.1.10
==================================
* The emerge --autounmask option is now enabled by default. The
  --autounmask-write option can be used to have config changes automatically
  written to the appropriate files (respecting --ask and CONFIG_PROTECT). If
  --autounmask behavior is not desired as the default behavior, then it can
  be disabled by adding --autounmask=n to the EMERGE_DEFAULT_OPTS variable in
  make.conf. Refer to the emerge(1) man page for more information.

portage-2.1.9
==================================
* The emerge "world" set now includes separate "selected" and "system" sets,
  where the "selected" set includes packages listed in /var/lib/portage/world.
* Package set names in emerge arguments have to be prefixed with @ (exceptions:
  'world' and 'system' can be used without the prefix).
* Configuration files now support atoms with wildcards inside the category and
  package name parts of the atoms.
* The functionality of the autounmask program is emulated by the new emerge
  --autounmask option, which outputs required configuration changes for
  package.accept_keywords and package.use.
* The new emerge --exclude option allows packages to be excluded from the
  dependency resolution. Doing so might result in a fatal error. See the
  emerge(1) man page for details.
* Per-package environment variables can be set with the new package.env
  configuration file in /etc/portage/. See the portage(5) man page for details.
* Support for per-package bashrc files in /etc/portage/env. See the portage(5)
  man page for details.
* The package.keywords configuration file in /etc/portage/ is now deprecated.
  Instead use the package.accept_keywords file which has the same format and
  behavior. See the portage(5) man page for details.
* FEATURES="fixlafiles" (enabled by default): Rewrites newly installed .la
  files in the same way dev-util/lafilefixer does. Note that this won't fix
  your installed .la files.

portage-2.1.8
==================================
* The new --rebuilt-binaries option will replace installed packages with binary
  packages that have been rebuilt. Rebuilds are detected by comparison of
  BUILD_TIME package metadata. This option is enabled automatically when using
  binary packages (--usepkgonly or --getbinpkgonly) together with --update and
  --deep.

portage-2.1.7
==================================
* Default behavior for emerge commands has changed so that packages are only
  updated when necessary. In order to ensure that all packages are updated
  when possible, you must now specify the -u/--update option. See bug #275945
  for the rationale behind this change.
* If using python3, you may notice that some types of program output which
  require a tty device (like the wget progress bar) will be disabled. This
  is due to an upstream python issue: http://bugs.python.org/issue5380. See
  bug #287648 for more information.
* Licenses in the @EULA license group are now masked by the default
  ACCEPT_LICENSE setting. You can unmask all licenses by setting
  ACCEPT_LICENSE="*" in /etc/make.conf. See the make.conf(5) man page for
  more information about ACCEPT_LICENSE.

portage-2.1.6.12
==================================
* If you want overlay eclasses to override eclasses from other repos then see
  the portage(5) man page for information about the new layout.conf and
  repos.conf configuration files.

portage-2.1.6
==================================

* The default behavior has changed for `emerge world` and `emerge system`
  commands. These commands will reinstall all packages from the given set
  unless an option such as --noreplace, --update, or --newuse is specified.
* FEATURES=fixpackages is now enabled by default via make.globals. Set
  FEATURES="-fixpackages" in make.conf if you'd like to disable it.
* File collision protection is now enabled by default via make.globals with
  FEATURES=protect-owned. In order to protect files from be overwritten or
  removed a inappropriate times, it is recommended to leave protect-owned
  (or the similar collision-protect feature) enabled at all times. If you
  want to disable collision protection completely (not recommended), then
  you need to ensure that neither protect-owned nor collision-protect are
  enabled.
* 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.
* When generating manifests, existing distfiles digests will not be updated
  in cases when the current file in $DISTDIR does not match. In order to
  force digests to be updated, run `ebuild --force <ebuild file> manifest`.
  This is a safety measure which protects valid distfiles digests from being
  accidentally replaced by invalid digests.
* If you have overridden FETCHCOMMAND or RESUMECOMMAND variables, for
  compatibility with EAPI 2, you must ensure that these variables are written
  such that the downloaded file will be placed at \"\${DISTDIR}/\${FILE}\".
  Refer to make.conf(5) for information about FETCHCOMMAND and RESUMECOMMAND.

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.

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.

