portage-3.0.36 (2022-09-09)
--------------

Bug fixes:
* The layout of gpkg (new binpkg format) packages has been fixed (bug #865905).

* Fix getbinpkg fetching (bug #864160).

portage-3.0.35 (2022-08-23)
--------------

Features:
* Portage can now set scheduling policies using the PORTAGE_SCHEDULING_POLICY
  and PORTAGE_SCHEDULING_PRIORITY variables. See make.conf.example for details.

  See also https://wiki.gentoo.org/wiki/Portage_niceness.

* The header of build.log now contains the package's slot (bug #864382).

Bug fixes:
* xml: Fix XML node parsing (resulted in duplicate USE flag descriptions
  in gentoolkit, bug 858791). This code is thought to have only one
  consumer (gentoolkit, and only as of its most recent releases), so
  impact is not severe.

* portage: dbapi: porttree: fix _set_porttrees() to operate correctly if passed
  a generator. Fixes e.g. blank emerge --metadata caches in /var/cache/edb
  which affected eix (bug #865635). Regression from 3.0.31.

* logging: don't clutter with a global logger and instead scope to
  each module. Allows further logging refactoring in future.

* estrip: fix double slash for older EAPIs (bug #862600).

* estrip: avoid spurious NEEDED warning when no ELF files installed for
  < EAPI 7 (bug #749624, bug #862606).

* estrip: apply scanelf optimisation for EAPI 7+ too (bug #749624, bug #862606).

* dispatch-conf: respect (E)ROOT

* install-qa-check.d: 60pkgconfig: drop noisy pkg-config mismatched Version
  field check (bug 857654).

* install-qa-check.d: 60pkgconfig: fix --validate check by adding
  ${ED}/usr/{lib*,share} to search path.

* install-qa-check.d: 60pkgconfig: only check defined variables for
  ${EPREFIX} compliance (bug 860825).

* install-qa-check.d: 60pkgconfig: display the detected version from
  the .pc file (improves the QA warning output), and hint to the user/developer
  about the existence of QA_PKGCONFIG_VERSION to silence the warning.

* install-qa-check.d: 60pkgconfig: use eqatag for nicer output.

* install-qa-check.d: 60pkgconfig: use ver_test where possible in version
  comparison checks to avoid warning if the Version field in the .pc file
  is equivalent to the ebuild version.

* install-qa-check.d: 80libraries: include Darwin/Mach-O objects in checks.

* install-qa-check.d: 80multilib-strict: use file/find from Prefix instead
  of absolute paths in /usr/bin.

* install-qa-checks.d: 90gcc-warnings: add arm64, aarch64 (used by Apple),
  loongarch64, riscv64, s390x to list of 64-bit arches which affects the
  severity of some warnings (like pointer truncation).

* install-qa-check.d: 90world-writable: include EPREFIX in paths.

* portage: output: update obsolete /etc/init.d/functions.sh path.

* bin: style tweaks to conform to Gentoo style (mostly variable bracing).

* doins: fix D check, add EPREFIX check

* misc-functions.sh: add Prefix fixups, like including EPREFIX in
  INSTALL_MASK for /usr/share for noman, noinfo, nodoc.

* phase-function.sh: mark ED, EROOT read-only variables

* eapi.sh: cleanup obsolete references to unofficial 5-hdepend EAPI.

* isolated-functions.sh: sync __makeopts_jobs implementation with
  multiprocessing.eclass.

* ebuild(1): improve descriptions of various phase functions.

* emerge(1): mention --with-bdeps=n behavior for both --usepkg (-k) and
  --usepkgonly (-K) (bug #863422).

* ecompress: add option to lz4 in order to be able to compress multiple
  files at once (bug #672916).

portage-3.0.34 (2022-07-20)
--------------

Bug fixes:
* checksum: fix trying to use discard on a frozenset().

* ebuild(5): mention doexe behavior is undefined if exeinto not yet called.

* ebuild(5): fix typos.

portage-3.0.33 (2022-07-18)
--------------

Bug fixes:
* env-update: Handle BROOT vs ROOT distinction for PATH (and other
  variables like PREROOTPATH and ROOTPATH). The issue being that
  only some variables are relevant for execution (and hence need
  to be derived from BROOT), while others need to correspond to
  EROOT for e.g. library paths. This should help with Clang
  stage building.

* Build: Fix test suite file data processing (copying of .gnupg data
  for the gpkg tests led to a failure in src_test in the portage ebuild).

* emerge: drop obsolete fixpackages warning (as a result of refactoring,
  started to show on every emerge, but is harmless and left over
  from many years ago). Bug #858407.

* quickpkg: Fix quoting/splitting of BINPKG_COMPRESS_FLAGS arguments. Bug #857933.

* estrip: fix double prefix (regression from "don't call estrip twice" fix
  in 3.0.31). Bug #858818.

* ebuild(5): dolib, libopts: mention dolib, libopts being banned in EAPI 7.

* ebuild(5): dohtml: mention dohtml is banned in EAPI 7.

* ebuild(5): hasv: mention hasv is banned in EAPI 8.

* ebuild(5): dosym: mention dosym -r for EAPI 8.

* ebuild(5): einstall: mention einstall was banned in EAPI 6.

* ebuild(5): econf: add --docdir and --htmldir for EAPI 6,
  add --with-sysroot for EAPI 7, add --datarootdir and --disable-static for EAPI
  8.

* ebuild(5): econf: drop --disable-dependency-tracking from "example"
  because it's confusing (implies it was always added, even before EAPI 4).

* ebuild(5): modernize examples slightly.

portage-3.0.32 (2022-07-11)
--------------

Bug fixes:
* Fix marking all news items as relevant. See bug #857669.

* Allow nested ebegin again while there's a lack of consensus on banning it.

* Fix use of deprecated (now removed) getchildren() call in XML parser,
  which caused failures with gentoolkit. See bug #857537. (Note that this
  was not originally in the release notes for 3.0.32, but the fix was in
  3.0.32).

* Fix doc generation by removing reference to removed EAPIs. See bug #857486.

portage-3.0.31 (2022-07-10)
--------------

Breaking changes:
* repoman support dropped. Please migrate to pkgcheck. See bug 835013.

* Remove support for never-official EAPIs: "4-python", "5-progress".
  Further cleanups as a result allowed removal of "USE alias" support too.

* Drop support for Python 3.6. It's been EOL upstream since 2021-12-23.
  The minimum version of Python for Portage is now Python 3.7.

Features:
* GLEP 78 "gpkg" binary package format support, including the ability to sign
  binpkgs! See bug 500630, bug 659864, bug 672672, bug 773259, bug 820578.

  This is still somewhat experimental!

  To try it out:
  - set BINPKG_FORMAT="gpkg" in make.conf;

  - optionally, set FEATURES="binpkg-signing binpkg-request-signature", and so on.
    See cnf/make.conf.example for the full details, options, and documentation.

* emerge: Add -X short option for --exclude.

* emerge: Support the "foot" terminal for title updates.

* Recognize LoongArch ABIs in multilib_category.

* depclean: Return failure via exit code if requested packages
  aren't depcleaned. See bug 851750.

* estrip: Optimize calls (avoid duplicate call) by using previously
  collected scanelf data. See bug 749624

* autoclean: Optimize unmerges by only enabling autoclean for global
  updates and/or depcleans. This avoids needing to iterate over all
  installed packages after each individual removal.

* vartree: Optimize by skipping `env-update` call (which is expensive, as
  it ends up calling `ldconfig` to regenerate ld.so.cache) if no files
  were installed (e.g. virtual/).

* vartree: Optimize by avoiding VDB lock contention (avoid taking
  lock if no blockers).

* QA: warn if 'eend' is called without a corresponding 'ebegin',
  and vice-versa: if 'ebegin' is called without a corresponding 'eend'.
  See bug 835824 and bug 835823.

* QA: install-qa-check.d: Add 60pkgconfig check which:
  - checks libdir in installed .pc files
  - checks paths not respecting EPREFIX in .pc files
  - runs pkg-config --validate on .pc files
  - checks for mismatched version in .pc files vs ${PV}. Ebuilds can override
    this using QA_PKGCONFIG_VERSION.

* QA: install-qa-check.d: Update 20runtime-directories to warn on /var/tmp
  usage too.

* emerge: Deduplicate atoms in 'dropped' message for --keep-going.

* dispatch-conf: Warn about changing the 'use-rcs' setting. See bug 837533.

* Lots of general refactoring and code cleanups.

Bug fixes:
* Disable SONAME dependencies by default again (i.e. set --ignore-soname-deps=y
  to default on). See bug 687956 and bug 829623.

  This was done because of problems caused with depcleans.

* git: Mark repository as safe for newer versions of git (>= git-2.35.2).
  See bug 838223 and bug 838271.

* dosym: Fix EAPI check for '-r' (relative) flag. It would previously allow
  using an EAPI 8 only feature.

* ebuild: Fix re-sourcing IDEPEND (EAPI 8+).

* estrip: Fix race when creating build-id debug symlinks. See bug 831927.

* MergeProcess: Fix bug causing unnecessary ld.so.cache regeneration even
  when no libraries were installed. This used to work in the past, so is viewed
  as a bug fix, rather than an optimization, although it's a bit of both.
  See bug 836375.

* MiscFunctionsProcess: Avoid clobbering the main sandbox.log if a "die hook"
  is invoked. This should prevent sandbox.log being blank in many cases.

* Drop /run warning as it ended up being too noisy and we've decided
  to workaround/fix (depending on your perspective) the issues in packages
  themselves, given only one package was actually at fault here: bug 832853.

* movefile: Merge symlinks atomically. This should reduce the risk of build
  failures during parallel builds (multiple emerge jobs). See bug 836400.

* Improve error message when Bash version is too old for an ebuild
  to be read.

* Minor improvements to 'die' output.

* Undo dep_zapdeps change in 3.0.29 as it introduced a regression w.r.t solving
  blockers for gentoo-kernel. See bug 833014.

* QA: install-qa-check.d: update 95empty-dirs to mention Portage behavior
  change for EAPI 8+.

* QA: install-qa-check.d: Fix usage of obsolete 'egrep' and 'fgrep' which
  now emit warnings with an upcoming grep release (> 3.7).

* portageq: Ditto re egrep/fgrep.

* util: Fix Whirlpool implementation breaking (crashing/failing tests) with
  OpenSSL 3. This wasn't noticed before as previously, OpenSSL exposed its
  Whirlpool implementation by default, whereas it's now marked as legacy.
  See bug 846389.

* socks5-server: Fix Python 3.10 DeprecationWarning. See bug 794115.

* portage.eapi: Include workaround for consumers with misconfigured
  logger to avoid needing a newer gentoolkit. See bug 838406.

* CI: Run 'black' on remaining files missed in the previous conversion and fix
  CI to catch regressions related to this.

* CI: Test with Python 3.11.

* CI: Drop references to unsupported Python 3.6.

* make.conf: document MAKEOPTS defaulting to the number of processors for
  the number of jobs in make.conf(5).

* dispatch-conf: fix description of 'frozen-files' format in dispatch-conf.conf
  man page. See bug 830618.

portage-3.0.30
--------------
* fix warning/crash on bad PROVIDES in package. See bug 828966.
* avoid infinite loop in _optimized_copyfile. See bug 828844.

portage-3.0.29
--------------
* check for inconsistent/missing PROVIDES during package (and binpkg)
  installation. See bug 811462.
* avoid pulling in newer slots for upgrades in some cases. See bug 828136.
* enable SONAME dependencies for binpkgs by default. See bug 687956.
* add new options to allow avoiding building/using binpkgs for live ebuilds:
  FEATURES="binpkg-live" and --usepkg-exclude-live.
* add emphasis in output to user patches being applied.

portage-3.0.27
--------------
* improve blocker output to make it clear which blockers
  are not satisfied.
* use distinct colors for einfo/elog and ewarn/eqawarn.

portage-3.0.26
--------------
* fix broken FILESDIR copying logic.

portage-3.0.25 (yanked)
-----------------------
* fix Python < 3.8 compatibility of FILESDIR copying code.

portage-3.0.24
--------------
* remove doebuild(dbkey=...) support that was deprecated since 2013.
* pass metadata internally using key=value format.
* include INHERIT key md5-cache to match pkgcore.
* reformat Portage code using black.
* fix Python 3.10 deprecation warnings.
* replace compat_coroutine use with modern async.

portage-3.0.23
--------------
* enable autogroup scheduling with pid-sandbox if possible. This should
  make the kernel respect niceness better.
* add support conf-update.d hooks.
* display all preserved libraries with --verbose.
* restore QA warnings when EXPORT_FUNCTIONS is called before inherit.
* catch more setuptools warnings via the respective QA check.

portage-3.0.22
--------------
* USE flags are now sorted with respect to numerical segments in emerge
  output (e.g. python3_10 comes after python3_9).
* setuptools version normalization warnings are now ignored.
* FEATURES=installsources no longer copies irrelevant directory trees
  with gcc-11.
* sdist archives built using "build" now include setup.py.

portage-3.0.21
--------------
* EAPI 8 fixups.

portage-3.0.20
--------------
* Finalize EAPI 8.

portage-3.0.19
--------------
* Enable EAPI 8.

portage-3.0.18
--------------
* profile-repo-deps is supported in layout.conf profile-formats.

portage-3.0.16
--------------
* emirrordist supports the content-hash distfiles mirror layout.

portage-3.0.15
--------------
* FEATURES=binpkg-multi-instance is now enabled by default.

portage-3.0.13
--------------
* FETCHCOMMAND now supports a \${DIGESTS} placeholder which expands
  to a space separated list of digests. Refer to the FETCHCOMMAND
  documentation in the make.conf(5) man page.

portage-3.0.6
--------------
* emerge --search now detects regular expressions automatically. This
  behavior is controlled by the --regex-search-auto option.
* make.conf now treats variable names that begin with two underscores
  as local variables which are not displayed by emerge --info --verbose.
* egencache --update-pkg-desc now has a --verbose option which causes
  it to emulate esync --verbose output.
* env-update now generates a systemd user-session environment in a file
  named /etc/environment.d/10-gentoo-env.conf.
* binrepos.conf is a new configuration file that acts as a substitute
  for the PORTAGE_BINHOST variable, and allows each repository to have
  a separate FETCHCOMMAND which can be used to customize authentication.
  This file is documented in the portage(5) man page.

portage-3.0.0
--------------
* Dropped support for Python 2.x.

portage-2.3.101
--------------
* The new PORTAGE_LOG_FILTER_FILE_CMD make.conf(5) variable specifies a
  command that filters build log output to a log file. In order to
  filter ANSI escape codes from build logs, ansifilter(1) is a
  convenient setting for this variable.

portage-2.3.100
--------------
* New BINPKG_COMPRESS=zstd default (does not apply to installed systems
  using the old bzip2 default).

portage-2.3.97
--------------
* Support for the PORTAGE_LOG_FILTER_FILE_CMD variable has been
  temporarily removed due to bug 716636.

portage-2.3.90
--------------
* The new PORTAGE_LOG_FILTER_FILE_CMD make.conf(5) variable specifies a
  command that filters build log output to a log file. In order to
  filter ANSI escape codes from build logs, ansifilter(1) is a
  convenient setting for this variable.

portage-2.3.80
--------------
* The emerge --quickpkg-direct option enables use of installed packages
  directly as binary packages. It can be used to create minimal runtime
  container images (which need not include a package manager), or to
  enable a live image to act as a binary installer that uses packages
  installed in the live image as a source of binary packages. This
  option is especially useful in combination with --usepkgonly and
  --ignore-soname-deps=n options, allowing implicit system dependencies
  such as libc to be automatically accounted for.

portage-2.3.77
--------------
* The emerge --autounmask option is now disabled by default, except for
  portions of behavior which are controlled by the --autounmask-use and
  --autounmask-license options. For backward compatibility, previous
  behavior of --autounmask=y and --autounmask=n is entirely preserved.
  Users can get the old behavior simply by adding --autounmask to the
  make.conf EMERGE_DEFAULT_OPTS variable.

portage-2.3.72
--------------
* The glsa-check program is now provided by portage, and it has been
  removed from gentoolkit. See bug 463952.

portage-2.3.70
--------------
* The @live-rebuild package set now searches for PROPERTIES=live, see
  bug 233589. The @deprecated-live-rebuild package set provides the
  old behavior which was based on inherited eclasses.

portage-2.3.64
--------------
* New (council approved) default locations for the Gentoo repository,
  distfiles, and binary packages (does not apply to installed systems
  using the old defaults):
  /usr/portage -> /var/db/repos/gentoo
  /usr/portage/distfiles -> /var/cache/distfiles
  /usr/portage/packages -> /var/cache/binpkgs

portage-2.3.53
--------------
* Renamed PORT_LOGDIR and PORT_LOGDIR_CLEAN variables to
  PORTAGE_LOGDIR and PORTAGE_LOGDIR_CLEAN to match other existing
  similar variables
* Enable FEATURES={ipc,network,pid}-sandbox by default

portage-2.3.42
----------------
* Sync with rsync quarantines data prior to verification, using the
  rsync --link-dest option (can be disabled by setting
  "sync-allow-hardlinks = no" in repos.conf).
* Sync with git quarantines data prior to verification, see
  https://wiki.gentoo.org/wiki/Portage_Security#git-mirror_repo.
* Sync with shallow git pull is supported, by "setting sync-depth = 1"
  in repos.conf.

portage-2.3.32
----------------
* EAPI 7 support.

portage-2.3.29
----------------
* Portage API consumers can use asyncio with portage's internal event
  loop, see portage.util.futures.unix_events.DefaultEventLoopPolicy.

portage-2.3.25
----------------
* Experimental support for EAPI 7_pre1.

portage-2.3.20
----------------
* Support RESTRICT=network-sandbox in ebuilds.

portage-2.3.17
----------------
* The doins ebuild helper has been rewritten in python for performance, and
  it does in-kernel file copying on Linux.

portage-2.3.14
----------------
* Repository metadata/layout.conf supports manifest-required-hashes
  attribute (default value is SHA512).

portage-2.3.12
----------------
* better_cache implemented to use less expensive os.listdir() instead of
  os.stat() operations to scan for ebuilds. Avoids exhaustively scanning
  overlays for all ebuilds which allows Portage to not slow down significantly
  with lots of overlays enabled. (Daniel Robbins)

portage-2.3.7
-----------------
* eapply_user combines patch basenames from all matched directories into a
  list, and applies them in POSIX sorted order. This allows patches in
  more-specific directories to override patches of the same basename found
  in less-specific directories. An empty patch (or /dev/null symlink) negates
  a patch with the same basename found in a less-specific directory.
* FEATURES=multilib-strict no longer recurses into subdirectories, in order
  to avoid false-positives. The MULTILIB_STRICT_EXEMPT variable only served
  to filter false-positives that were triggered by recursion, so it will no
  longer be needed.
* New emerge --autounmask-keep-keywords and --onlydeps-with-rdeps=<y|n>
  options.
* Set compression method for binpackages via BINPKG_COMPRESS variable
* Support for environment variables for git cmd in repos.conf via sync-git-env


portage-2.3.5
-----------------
* Numerous patches updating checksums code and python module imports for them
  including new checksum methods
* New linux in kernel movefile support via a new "C" extension module


portage-2.3.3
-----------------
* Reverted commits:
    - Bug 552814 Revert "GitSync.update: respect sync-depth
                 (Shallow fetch is not a practical default at this time,
                  given performance issues introduced by `git update-index`
                  and `git prune` (see bug 599008).
                 )


portage-2.3.1
-----------------
* Support News-Item-Format 2.0
* emerge: add --fuzzy-search and --search-similarity
* Add emerge --autounmask-continue option

portage-2.3.0
-----------------
* Final release
* Includes numerous bugfixes

portage-2.3.0_rc1
-----------------
* New split release for the repoman Q/A tool
* Includes the stage2 rewite of the repoman code base


portage-2.2.26
--------------
* EAPI 6 stable portage release


portage-2.2.25
--------------
* EAPI 6 final fully implemented.


portage-2.2.22
-------------
* Stage 1 of the repoman re-write code merged in to master branch
  This is the first release of the new code base.


portage-2.2.19
-------------
* The squashdelta sync module was removed for separate installation
  and development work


portage-2.2.19
-------------
* websync module now fully renamed to webrsync
* 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.


portage-2.2.16
-------------
* New portage plug-in sync system.
    Read the news anouncement for more details of the changes in config
    settings and operation.
* New native portage postsync.d capability
* New native portage repo.postsync.d capability
* New native indexed search capability for decent search speed
* Tentative EAPI 6 patches for additional testing


portage-2.2.14
-------------
* Remaining bugs in build/install system should be fixed.


portge-2.2.14_rc1
-------------
* Many new build/installation system errors fixed.


portage-2.2.13
-------------
* New setup.py build system and distutils-r1 ebuild at EAPI 5
* PORTAGE_{BIN,PYM}_PATH variables. If you want to call internal portage tools,
    you need to query PORTAGE_BIN_PATH and PORTAGE_PYM_PATH, use them
    and re-export them.
* New @changed-deps set to update packages which need dependecy change updates.


portage-2.2.12
-------------
* 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.1
-------------

* Add cgroups, ipc-sandbox, and network-sandbox FEATURES.

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

* Add extended set configuration via /etc/portage/sets.conf. See
  /usr/share/portage/config/sets/portage.conf for examples.

portage-2.1.11.20
-------------
* Add support for EAPI 5. Refer to the PMS EAPI Cheat Sheet, portage's html
  docs installed with USE=doc, or `man 5 ebuild` for more info about EAPI 5.
* Add support for FEATURES=preserve-libs which preserves libraries when the
  sonames change during upgrade or downgrade, and the @preserved-rebuild
  package set which rebuilds consumers of preserved libraries.
* Add link level dependency awareness to emerge --depclean and --prune actions
  in order to protect against uninstallation of required libraries. Refer to
  the --depclean-lib-check option in the emerge(1) man page.

portage-2.1.11
-------------

* Add support for experimental EAPI "4-slot-abi". Refer to the corresponding
  html documentation that is installed with USE=doc, and also to the emerge(1)
  man page for information about the related --ignore-built-slot-operator-deps and
  --rebuild-if-new-slot options.

portage-2.1.10
-------------

* Improve handling of repositories/overlays for cases in which the same ebuild
  is provided by multiple repositories but with different masking status, and
  support for repository constraints on atoms (atom::repo) in configuration
  files.
* Add emerge --rebuild-if-* options that trigger rebuilds of reverse
  dependencies when packages are rebuilt or updated. Related --rebuild-exclude
  and --rebuild-ignore options can be used to avoid rebuilds for specific
  packages.
* Add emerge --reinstall-atoms, --useoldpkg-atoms, and --usepkg-exclude options
  which can be used to alter selection rules for specific packages.
* Add FEATURES=parallel-install and ebuild-locks, allowing for greater
  parallelization when installing packages (by using finer-grained locks).

portage-2.1.9.27
-------------

* Add support for EAPI 4. Refer to the PMS EAPI Cheat Sheet, portage's html
  docs installed with USE=doc, or `man 5 ebuild` for more info about EAPI 4.
  Bug #273620 tracks EAPI 4 implementation in portage.

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. When enabled, it fixes bug #278895,
  bug #315615, and makes subshell die support more robust (so that repoman's
  ebuild.nesteddie check is irrelevant).

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.17
-------------
* Add support for EAPI 3. This adds support for installation prefix, including
  new EPREFIX, ED, and EROOT variables which are used by econf and einstall
  helpers. Also, EAPI 3 adds xz extension support to the unpack helper.

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