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

portage-2.2.25
==================================
* Bug Fixes:
    - Bug 564988 Rsync and Git Sync: skip metadata-transfer when appropriate
    - Bug 565172 repos.conf: support sync-hooks-only-on-change attribute
    - Bug 565540 egencache: parallelize --update-changelogs
    - Bug 565626 egencache: Delay updating Manifests until all other
                 tasks complete
* EAPI 6 final updates and changes.
* locale: Warn when locale does not conform to ASCII rules for case conversions.
          Force sane LC_COLLATE & LC_CTYPE as required in EAPI 6.


portage-2.2.24
==================================
* Bug Fixes:
    - Bug 562964 handle missing cgroup IOError
    - Bug 562808 repoman: Set max DESCRIPTION length to 80
    - Bug 563482 emerge(1): document --oneshot caveats
    - Bug 563740 calc_depclean: fix AttributeError for
                 SonameAtom.unevaluated_atom
    - Bug 563844 calc_depclean: do not abort for broken soname dependencies
    - Bug 563876 BinpkgFetcher._set_returncode: fix ftp _mtime_ handling
    - Bug 563546 repoman: check deps of stable ebuilds for unstable
                 configurations
    - Bug 563836 RepoConfigLoader: allow subsitution of variables like ROOT in
                 repos.conf
    - Bug 564222 vardbapi.aux_get: treat cache as valid if mtime is truncated
    - Bug 561264 AbstractEbuildProcess: validate cgroup release agent
* Egencache changes for the new git tree changelog generation.


portage-2.2.23
==================================
* Bug Fixes:
    - Bug 561474 Add check that we need commit signing
    - Bug 561596 Fix typo in function call
    - Bug 561264 AbstractEbuildProcess: remove cgroup with release_agent
                 SyncRepos.async: group sync and callback as composite task
    - Bug 554084 unpack: use chmod-lite helper
    - Bug 562108 repoman/argparser.py: _unicode_decode the commitmsg
    - Bug 561846 dohtml: handle unicode
    - Bug 534022 scanner.py: Fix options.output_style for column output
* Add icecream feature support


portage-2.2.22
==================================
* Bug Fixes:
    - Bug 559636 repoman: ignore unadded files when possible
    - Bug 510840 repoman: Remove profiles TODO comment
    - Bug 561234 SyncManager.async: initialize attributes before fork
    - Bug 561240 repository/config.py: Fix propogation of module_specific_options
* First release of the repoman re-write code (stage 1)


portage-2.2.21
==================================
* Bug Fixes:
    - Bug 550006 quickpkg: support FEATURES=xattr
    - Bug 550324 Fix missed rename of cleanconfig to cleanconfmem
    - Bug 550898 rename ia to ia64
    - Bug 550886 enable absolute_import for Python 2
    - Bug 550906 handle submodule import in _LazyImportFrom._get_target
    - Bug 552340 Redirect /dev/fd bash test to /dev/null
    - Bug 554084 unpack: avoid useless chmods to improve speed
    - Bug 554108 use mkdtemp to avoid cgroup interference
    - Bug 554578 convert str to Atom for DbapiProvidesIndex
    - Bug 554928 depgraph._want_update_pkg: handle _UNREACHABLE_DEPTH
    - Bug 556172 slot_conflict_handler: suggest --verbose-conflicts
    - Bug 556464 depgraph._select_files: use _iter_match_pkgs for tbz2 arguments
    - Bug 555698 circular_dependency_handler: limit USE combination search
    - Bug 556764 similar_name_search: used indexed repos where appropriate
    - Bug 557426 sync repositories in parallel
    - Bug 557962 Manifest.write: stable/predictable Manifest mtime for rsync
    - Bug 558322 SyncRepos._sync: call postsync.d hooks earlier
    - Bug 557192 egencache: stable use.local.desc mtime for rsync
    - Bug 559044 emerge --search: fix duplication of results
    - Bug 296085 RsyncSync: add sync-rsync-vcs-ignore option
    - Bug 559122 sync: include metadata/layout.conf with profile submodule
    - Bug 560466 match_from_list: restrict =* to match only on version part boundaries
* git sync: Respect PORTAGE_QUIET
* several man page updates
* rsync: per repo repos.conf rsync options via the 'sync-rsync-extra-opts' option


portage-2.2.20.1
==================================
# Note this was a branch release based of the 2.2.20 release
# expressly for the new git based ebuild tree
* Bug Fixes:
    - Bug 550324 Fix missed rename of cleanconfig to cleanconfmem
    - included a few man page updates
    - a couplerepoman changes for the new git based tree


portage-2.2.20
==================================
* Bug Fixes:
    - Bug 539510 make.conf: point people to ccache(1) for cache size details
    - Bug 549666 binarytree.get_pkgindex_uri: handle --gebinpkg=n
    - Bug 549616 egencache --update-pkg-desc-index: handle read-only repo
    - Bug 549826 portage/sync/modules/rsync: Fix UnicodeDecodeError:
    - Bug 534022 bin/repoman: Use pformat and newlines to *DEPEND output
          for clarity


portage-2.2.19
==================================
* New repoman --straight-to-stable, -S option
* Use consistent rules for filenames of ebuils and misc files
* New squashdelta sync module for downloading full or updates for a squasfs tree
    requires dev-util/squashmerge be installed
* New binpkg-multi-instance feature allows for multiple variations
    (USE settings) to be saved in the pkgdir and index.
* Bug Fixes:
    - Bug 542732 WorldSelectedSet: fix load method
    - Bug 501866 dispatch-conf.conf: less-opts --quit-if-one-screen
    - Bug 543818 Fix an AssertionError if the multilib category of an
                 ELF file is not recognized
    - Bug 545252 Fix binpkg-multi-instance _pkg_paths corruption
    - Bug 545270 Fix dispatch-conf unicode handling
    - Bug 544624 ro_checker: skip parents of EPREFIX dir
    - Bug 525376 repoman: fix dependency.unknown to ignore USE deps
    - Bug 546010 repoman: handle removed packages in vcs_files_to_cps
    - Bug 546176 new_protect_filename: fix _unicode_decode TypeError
                 with symlink
    - Bug Fix missed renames of websync to webrsync
    - Bug 547086 _doebuild_path: add fallback for temp PORTAGE_BIN_PATH
    - Bug 546512 UseManager: handle newlines for USE_EXPAND prefixes
    - Bug 547414 Fix postsync hook regression
    - Bug 542796 LinkageMapElf.rebuild: pass error_leader to varexpand
    - Bug 547532 VdbMetadataDelta.applyDelta: remove replaced versions,
                 handle "remove" events properly
    - Bug 547086 ebuild-helpers: avoid exec loops or fork bombs in wrappers
    - Bug 547390 ro_checker: only check nearest parent
    - Bug 325009 Make the USE variable readonly
    - Bug 547736 search: fix addCP so only the specified results are displayed
    - Bug 428098 _unmerge_protected_symlinks: suggest UNINSTALL_IGNORE
    - Bug 547778 dblink: elog failed postinst
                 Scheduler: increase visiblity of postinst failures
    - Bug 548438 gcc_warn_check: filter grep results with uniq
    - Bug 532784 bintree.populate: binhost connection failure triggers TypeError
    - Bug 548516 PORTAGE_XATTR_EXCLUDE: preserve security.capability
    - Bug 548556 varexpand: fix IndexError
    - Bug 548710 Disable SOCKSv5-over-UNIX-socket proxy by default
    - Bug 547732 Bundle a minimalistic derivation of Python's formatter module
    - Bug 488836 repoman: enable copyright date check without vcs
    - Bug portage/sync/modules/webrsync: Fileter out
          uid, gid, groups from kwargs
    - Bug 256376 dispatch-conf: handle file/directory collisions
    - Bug 549072 Allow read-only PKGDIR if no ebuilds will be built
    - Bug 549322 Fix deprecated logging.warn() calls


portage-2.2.18
==================================
* Bug Fixes:
    - Bug 539706 Fix Syncbase _has_bin()
    - Bug 538980 Add early check for broken /dev/s
    - Bug 282639 Generate soname dependency metadata
    - Bug 540882 repoman: skip vcs calls for manifest modes
    - Bug 541188 man/portage.5: document sets.conf
    - Bug 541198 use_reduce: support non-string token_class
    - Bug 541302 actions.py: fix missing localization import
    - Bug 500436 Do not interrupt on SIGCONT
    - Bug 540482 Add man page entries for "emaint merges"
                 and egencache's "--write-timestamp"
    - Bug 511806 make.conf: expand PORTAGE_CONFIGROOT
    - Bug 541754 depgraph: fix 'operation' AttributeError
    - Bug 542052 Don't spawn socks5-server.py for pkg_nofetch


portage-2.2.17
==================================
* Bug Fixes:
    - Bug 539746 WorldSelectedSet: fix breakage
    - Bug 539478 Fix missed self.portdb assignment for
        metadata-transfer feature
    - Bug 539402 fix overlay mask logic


portage-2.2.16
==================================
* New portage plug-in sync system.
* New auto-sync setting for repos.conf repos
* New sync-depth setting for git sync module
* New --sub-submodule option for emaint sync module
* New native portage postsync.d capability
* New native portage repo.postsync.d capability
* New socks5 module to allow builds to escape the network-sandbox
* Tentative EAPI 6 changes for testing
* New search index creation and fast search code for emerge -s, -S
* Bug Fixes:
    - Bug 538512 Deprecate make.conf SYNC variable
    - Bug 538314 handle EINTR
    - Bug 537298 Fix typo in new_protect_filename()
    - Bug 534722 update LOGNAME variable when appropriate
    - Bug 536926 emerge: default --backtrack=3
    - Bug 536392 More >= atoms for autounmask USE changes
    - Bug 492932 TestFakedbapi: override EPREFIX
    - Bug 142579 BinpkgExtractorAsync: xz and gzip decompression
    - Bug 282927 emerge: add --changed-deps/--binpkg-changed-deps
    - Bug 535850 dispatch-conf: avoid symlink "File exists" error
    - Bug 533036 man/emerge.1: clarify --buildpkg-exclude wrt *-backup FEATURES
    - Bug 463266 man pages: note that make.conf can be a directory
    - Bug 533884 emerge --autounmask-write: fix CONFIG_PROTECT for
                 PORTAGE_CONFIGROOT
    - Bug 531656 Solve more slot-operator conflicts
    - Bug 531724 AbstractPollTask._read_buf: read regardless of event flags
    - Bug 534070 Add --sync-submodule <glsa|news|profiles>
    - Bug 532670 Support override of default profile EAPI
    - Bug 532784 bintree.py: fix str() calls for Python 2
    - Bug 532594 faulty variable assignment inside _compute_abi_rebuild_info
    - Bug 525718 search._xmatch: handle aux_get KeyError
    - Bug 532224 Support @profile package set
    - Bug 504116 man/emerge.1: --quiet-build=n overridden by --jobs
    - Bug 412471 Display emerge search results incrementally
    - Bug 531690 bin/ebuild: fix --color=n
    - Bug 531854 dblink._protect: disable config protect for identical files
    - Bug 522032 add a one time only post-sync hook call
    - Bug 471776 Support USE_EXPAND prefixes in package.use and relevant files


portage-2.2.15
==================================
* New option --rage-clean that does --unmerge without delay.
* package.bashrc: per profile, per-package bashrc mechanism
* Introduce eqalog and eqawarnlog functions.
* Introduce eqatag to output proper machine-readable QA logs
* Bug Fixes:
    - Bug 517310 emerge --read-news: prompt only if --ask
    - Bug 433453 Support unprivileged mode
    - Bug 519566 Remove g+w bit from $T for TPE
    - Bug 433453 portage.data._get_global: fix UnboundLocalError
    - Bug 526160 This fixes _dep_check_composite_db to mask packages
                 that aren't the highest visible match, but only if an
                 update is desirable.
    - Bug 523684 This fixes the ConfigProtect class, etc-update, and
                 dispatch-conf to account for non-existent files (rather than
                 directories) that are listed directly in CONFIG_PROTECT.
    - Bug 524964 bin/bashrc-functions.sh: remove portageq function
    - Bug 527636 Add btrfs.* to default PORTAGE_XATTR_EXCLUDE
    - Bug 485598 etc-update & dispatch-conf: symlink and protected
                 symlink support
    - Bug 527636 Remove redundant PORTAGE_XATTR_EXCLUDE defaults
    - Bug 528272 This fixes incorrect behavior of the "fetch" phase
    - Bug 456128 Add support for SUSE based distros in etc-update
    - Bug 528760 man/ebuild.5: document assert fix
    - Bug 525726 _selinux.setexec: improve failure message
    - Bug 529200 portageq: fix eroot parameter
    - Bug 529120 fs_template._ensure_dirs: handle EEXIST
    - Bug 528610 This fixes a case inside _slot_operator_update_probe where
                 it would select an inappropriate replacement_parent of a
                 lower version than desired.
    - Bug 490732 NewsManager.getUnreadItems: handle EROFS
    - Bug 524236 dblink: case insensitive support
    - Bug 515584 dep_zapdeps: avoid use.mask/force changes
    - Bug 490732 check for writable /var/db/pkg
    - Bug 520652 Add emerge --with-test-deps option
    - Bug 490732 check for writable PKGDIR
    - Bug 529660 Memoize the results of use_reduce calls inside
                 _slot_operator_update_probe, in order to improve performance.
    - Bug 530010 Implement selective invalidation of cache for the
                 depgraph._select_pkg_highest_available method...
    - Bug 530982 fix UnicodeDecodeError
    - Bug 531112 _pkg_use_enabled: return frozenset
    - Bug 387059 emerge: warn about @installed, don't deprecate
    - Bug 528274 ebuild.sh: force fresh env for pkg_setup
    - Bug 527996 emerge --info: show /bin/sh provider
    - Bug 527486 portage/util/writeable_check.py: Fix IndexError:
    - Bug 525552 Use a new _eintr_func_wrapper class to wrap waitpid calls and
                 handle EINTR by calling the function as many times as necessary
                 (until it returns without raising EINTR).


portage-2.2.14
==================================
* Bug Fixes:
    - Bug # 508364 Tweak the previous patch commit for the comma warning.
    - Bug # 524964 $PORTAGE_BIN_PATH/portageq no longer exists, which breaks
        bin/ebuild-helpers/portageq.
    - Bug # 524328 Use nonblocking write instead of a fork for writing to
            the fifo.
    - Bug # 523684 If a CONFIG_PROTECTed file was installed but no longer
        exists in the file system, then it may have been deleted or renamed
        by the admin.
    - Bug # 506192 This fixes the sync_local function so that it doesn't
        prematurely remove the whole TMPDIR when tarsync is not installed.
    - Bug # <no number> setup.py: Fix typo in logrotatedir path.


portage-2.2.14_rc1
==================================
* Bug Fixes:
    - Bug # 508364 Update gcc warning checks.
    - Bug # 523182 Rewrite default ebuild phase setting code
    - Bug # 517310 Offer to read news while calcing deps
    - Bug # 481578 emerge: --autounmask-write if --ask
    - Bug # 523494 Use PATH instead of PORTAGE_BIN_PATH to locate emerge.
    - Bug # 523532 This fixes depth increment to handle _UNREACHABLE_DEPTH.
    - Bug # 523152 This fixes the unmerge-backup and downgrade-backup features
        to be compatible with the new setup.py quickpkg install location...
    - Bug # 522084 Fix _solve_non_slot_operator_slot_conflicts to add all
        parents to the conflict_graph...
    - Bug # 523048 This fixes _backtrack_depgraph to immediately report
        necessary REQUIRED_USE changes instead of discarding the graph.
    - Bug # 521990 Since self._dynamic_config._slot_operator_deps only contains
        deps for packages added to the graph, it doesn't contain potentially
        relevant deps of installed packages that have not been added to the graph.


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.

