From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <gentoo-commits+bounces-989930-garchives=archives.gentoo.org@lists.gentoo.org>
Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80])
	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
	(No client certificate requested)
	by finch.gentoo.org (Postfix) with ESMTPS id E20EC139083
	for <garchives@archives.gentoo.org>; Tue, 12 Dec 2017 08:19:36 +0000 (UTC)
Received: from pigeon.gentoo.org (localhost [127.0.0.1])
	by pigeon.gentoo.org (Postfix) with SMTP id 1A23CE0EAF;
	Tue, 12 Dec 2017 08:19:36 +0000 (UTC)
Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by pigeon.gentoo.org (Postfix) with ESMTPS id DA7F7E0EAF
	for <gentoo-commits@lists.gentoo.org>; Tue, 12 Dec 2017 08:19:35 +0000 (UTC)
Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by smtp.gentoo.org (Postfix) with ESMTPS id A941333BF0B
	for <gentoo-commits@lists.gentoo.org>; Tue, 12 Dec 2017 08:19:34 +0000 (UTC)
Received: from localhost.localdomain (localhost [IPv6:::1])
	by oystercatcher.gentoo.org (Postfix) with ESMTP id 48D3FAE66
	for <gentoo-commits@lists.gentoo.org>; Tue, 12 Dec 2017 08:19:33 +0000 (UTC)
From: "Fabian Groffen" <grobian@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Content-Transfer-Encoding: 8bit
Content-type: text/plain; charset=UTF-8
Reply-To: gentoo-dev@lists.gentoo.org, "Fabian Groffen" <grobian@gentoo.org>
Message-ID: <1513066750.70aab2af6ad556e45657745a2d4adf64ac23e5b9.grobian@gentoo>
Subject: [gentoo-commits] proj/portage:prefix commit in: /
X-VCS-Repository: proj/portage
X-VCS-Committer: grobian
X-VCS-Committer-Name: Fabian Groffen
X-VCS-Revision: 70aab2af6ad556e45657745a2d4adf64ac23e5b9
X-VCS-Branch: prefix
Date: Tue, 12 Dec 2017 08:19:33 +0000 (UTC)
Precedence: bulk
List-Post: <mailto:gentoo-commits@lists.gentoo.org>
List-Help: <mailto:gentoo-commits+help@lists.gentoo.org>
List-Unsubscribe: <mailto:gentoo-commits+unsubscribe@lists.gentoo.org>
List-Subscribe: <mailto:gentoo-commits+subscribe@lists.gentoo.org>
List-Id: Gentoo Linux mail <gentoo-commits.gentoo.org>
X-BeenThere: gentoo-commits@lists.gentoo.org
X-Archives-Salt: 3134477a-3983-4450-9023-77ef5626974f
X-Archives-Hash: ff1da95c36e990971d5083234c073795

commit:     70aab2af6ad556e45657745a2d4adf64ac23e5b9
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Tue Dec 12 08:19:10 2017 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Tue Dec 12 08:19:10 2017 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=70aab2af

Merge remote-tracking branch 'overlays-gentoo-org/master' into prefix

 COPYING                                            | 375 ++-----------
 NEWS                                               |  10 +
 RELEASE-NOTES                                      |  42 ++
 bin/doins.py                                       | 583 +++++++++++++++++++++
 bin/ebuild-helpers/doins                           | 156 ++----
 bin/phase-functions.sh                             |   2 +-
 bin/phase-helpers.sh                               |   3 +-
 bin/quickpkg                                       |  15 +-
 cnf/make.globals                                   |   5 +-
 man/portage.5                                      |  13 +-
 pym/_emerge/BinpkgExtractorAsync.py                |   4 +-
 pym/_emerge/Package.py                             |  32 ++
 pym/_emerge/Scheduler.py                           |  36 --
 pym/_emerge/depgraph.py                            |  12 +-
 pym/_emerge/main.py                                |   3 +-
 pym/portage/_emirrordist/FetchTask.py              |   2 +-
 pym/portage/checksum.py                            |   9 +-
 pym/portage/const.py                               |  29 +-
 pym/portage/dbapi/__init__.py                      |   5 +
 pym/portage/dbapi/bintree.py                       |  87 +--
 pym/portage/dbapi/vartree.py                       |  42 +-
 pym/portage/dep/_dnf.py                            |  90 ++++
 pym/portage/dep/dep_check.py                       | 147 +++++-
 pym/portage/emaint/modules/binhost/binhost.py      |  10 +-
 pym/portage/manifest.py                            |  37 +-
 pym/portage/output.py                              |   2 +-
 pym/portage/package/ebuild/_config/UseManager.py   |   5 +-
 pym/portage/package/ebuild/config.py               |  10 +-
 pym/portage/package/ebuild/digestgen.py            |   7 +-
 pym/portage/package/ebuild/doebuild.py             |  17 +-
 pym/portage/repository/config.py                   |  45 +-
 pym/portage/sync/modules/git/git.py                |   2 +-
 pym/portage/sync/modules/rsync/rsync.py            |   2 +-
 pym/portage/tests/bin/test_doins.py                | 352 +++++++++++++
 pym/portage/tests/dbapi/test_fakedbapi.py          |  20 +
 pym/portage/tests/dep/test_dnf_convert.py          |  48 ++
 pym/portage/tests/dep/test_overlap_dnf.py          |  28 +
 pym/portage/tests/ebuild/test_config.py            |   1 +
 .../resolver/test_disjunctive_depend_order.py      |  87 +++
 .../tests/resolver/test_onlydeps_minimal.py        |   5 +-
 .../tests/resolver/test_or_downgrade_installed.py  |  97 ++++
 .../resolver/test_virtual_minimize_children.py     | 145 +++++
 pym/portage/tests/sync/test_sync_local.py          |   2 +-
 pym/portage/tests/versions/test_vercmp.py          |   3 -
 pym/portage/util/__init__.py                       |   6 +-
 pym/portage/versions.py                            |  53 +-
 repoman/RELEASE-NOTES                              |  12 +
 repoman/pym/repoman/repos.py                       |  17 +-
 repoman/pym/repoman/tests/simple/test_simple.py    |  15 -
 repoman/setup.py                                   |  24 +-
 setup.py                                           |  10 +-
 51 files changed, 2080 insertions(+), 684 deletions(-)

diff --cc bin/ebuild-helpers/doins
index 7690cab35,c3a57890a..04bfdd0d4
--- a/bin/ebuild-helpers/doins
+++ b/bin/ebuild-helpers/doins
@@@ -42,127 -41,49 +41,58 @@@ if [[ ${INSDESTTREE#${ED}} != "${INSDES
  	__helpers_die "${helper} used with \${D} or \${ED}"
  	exit 1
  fi
 +# PREFIX LOCAL: check for usage with EPREFIX
 +if [[ ${INSDESTTREE#${EPREFIX}} != "${INSDESTTREE}" ]]; then
 +	__vecho "-------------------------------------------------------" 1>&2
 +	__vecho "You should not use \${EPREFIX} with helpers." 1>&2
 +	__vecho "  --> ${INSDESTTREE}" 1>&2
 +	__vecho "-------------------------------------------------------" 1>&2
 +	exit 1
 +fi
 +# END PREFIX LOCAL
  
  if ___eapi_doins_and_newins_preserve_symlinks; then
- 	PRESERVE_SYMLINKS=y
- else
- 	PRESERVE_SYMLINKS=n
+ 	DOINS_ARGS+=( --preserve_symlinks )
  fi
  
- export TMP=$(mktemp -d "${T}/.doins_tmp_XXXXXX")
- # Use separate directories to avoid potential name collisions.
- mkdir -p "$TMP"/{1,2}
- 
- [[ ! -d ${ED}${INSDESTTREE} ]] && dodir "${INSDESTTREE}"
- 
- _doins() {
- 	local mysrc="$1" mydir="$2" cleanup="" rval
- 
- 	if [ -L "$mysrc" ] ; then
- 		# Our fake $DISTDIR contains symlinks that should
- 		# not be reproduced inside $D. In order to ensure
- 		# that things like dodoc "$DISTDIR"/foo.pdf work
- 		# as expected, we dereference symlinked files that
- 		# refer to absolute paths inside
- 		# $PORTAGE_ACTUAL_DISTDIR/.
- 		if [ $PRESERVE_SYMLINKS = y ] && \
- 			! [[ $(readlink "$mysrc") == "$PORTAGE_ACTUAL_DISTDIR"/* ]] ; then
- 			rm -rf "${ED}$INSDESTTREE/$mydir/${mysrc##*/}" || return $?
- 			cp -P "$mysrc" "${ED}$INSDESTTREE/$mydir/${mysrc##*/}"
- 			return $?
- 		else
- 			cp "$mysrc" "$TMP/2/${mysrc##*/}" || return $?
- 			mysrc="$TMP/2/${mysrc##*/}"
- 			cleanup=$mysrc
- 		fi
- 	fi
+ if ___eapi_helpers_can_die; then
+ 	DOINS_ARGS+=( --helpers_can_die )
+ fi
  
- 	install ${INSOPTIONS} "${mysrc}" "${ED}${INSDESTTREE}/${mydir}"
- 	rval=$?
- 	[[ -n ${cleanup} ]] && rm -f "${cleanup}"
- 	[ $rval -ne 0 ] && echo "!!! ${helper}: $mysrc does not exist" 1>&2
- 	return $rval
- }
- 
- _xdoins() {
- 	local -i failed=0
- 	while read -r -d $'\0' x ; do
- 		_doins "$x" "${x%/*}"
- 		((failed|=$?))
- 	done
- 	return $failed
- }
- 
- success=0
- failed=0
- 
- for x in "$@" ; do
- 	if [[ $PRESERVE_SYMLINKS = n && -d $x ]] || \
- 		[[ $PRESERVE_SYMLINKS = y && -d $x && ! -L $x ]] ; then
- 		if [ "${DOINSRECUR}" == "n" ] ; then
- 			if [[ ${helper} == dodoc ]] ; then
- 				echo "!!! ${helper}: $x is a directory" 1>&2
- 				((failed|=1))
- 			fi
- 			continue
- 		fi
- 
- 		while [ "$x" != "${x%/}" ] ; do
- 			x=${x%/}
- 		done
- 		if [ "$x" = "${x%/*}" ] ; then
- 			pushd "$PWD" >/dev/null
- 		else
- 			pushd "${x%/*}" >/dev/null
- 		fi
- 		x=${x##*/}
- 		x_orig=$x
- 		# Follow any symlinks recursively until we've got
- 		# a normal directory for 'find' to traverse. The
- 		# name of the symlink will be used for the name
- 		# of the installed directory, as discussed in
- 		# bug #239529.
- 		while [ -L "$x" ] ; do
- 			pushd "$(readlink "$x")" >/dev/null
- 			x=${PWD##*/}
- 			pushd "${PWD%/*}" >/dev/null
- 		done
- 		if [[ $x != $x_orig ]] ; then
- 			mv "$x" "$TMP/1/$x_orig"
- 			pushd "$TMP/1" >/dev/null
- 		fi
- 		find "$x_orig" -type d -exec dodir "${INSDESTTREE}/{}" \;
- 		find "$x_orig" \( -type f -or -type l \) -print0 | _xdoins
- 		if [[ ${PIPESTATUS[1]} -eq 0 ]] ; then
- 			# NOTE: Even if only an empty directory is installed here, it
- 			# still counts as success, since an empty directory given as
- 			# an argument to doins -r should not trigger failure.
- 			((success|=1))
- 		else
- 			((failed|=1))
- 		fi
- 		if [[ $x != $x_orig ]] ; then
- 			popd >/dev/null
- 			mv "$TMP/1/$x_orig" "$x"
- 		fi
- 		while popd >/dev/null 2>&1 ; do true ; done
- 	else
- 		_doins "${x}"
- 		if [[ $? -eq 0 ]] ; then
- 			((success|=1))
- 		else
- 			((failed|=1))
- 		fi
- 	fi
- done
- rm -rf "$TMP"
- [[ $failed -ne 0 || $success -eq 0 ]] && { __helpers_die "${helper} failed"; exit 1; } || exit 0
+ if [[ -n "${INSOPTIONS}" ]]; then
+ 	DOINS_ARGS+=( "--insoptions=${INSOPTIONS}" )
+ fi
+ 
+ if [[ -n "${DIROPTIONS}" ]]; then
+ 	DOINS_ARGS+=( "--diroptions=${DIROPTIONS}" )
+ fi
+ 
+ if [[ -n "${PORTAGE_ACTUAL_DISTDIR}" ]]; then
+ 	DOINS_ARGS+=( "--distdir=${PORTAGE_ACTUAL_DISTDIR}" )
+ fi
+ 
+ if [[ "${DOINSSTRICTOPTION}" == 1 ]]; then
+ 	DOINS_ARGS+=( --strict_option )
+ fi
+ 
+ if has xattr ${FEATURES}; then
+ 	DOINS_ARGS+=(
+ 		--enable_copy_xattr
+ 		"--xattr_exclude=${PORTAGE_XATTR_EXCLUDE}"
+ 	)
+ fi
+ 
+ DOINS_ARGS+=(
+ 	"--helper=${helper}"
+ 	"--dest=${ED}${INSDESTTREE}"
+ )
+ 
+ # Explicitly set PYTHONPATH to non empty.
+ # If PYTHONPATH is empty (not unset), it means "add current working directory
+ # to the import path" if the Python is prior to 3.4, which would cause
+ # unexpected import. See also #469338.
+ PYTHONPATH="${PORTAGE_PYM_PATH:-/usr/lib/portage/pym}${PYTHONPATH:+:}${PYTHONPATH}" \
+ 	"${PORTAGE_PYTHON:-/usr/bin/python}" \
+ 	"${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}"/doins.py \
+ 	"${DOINS_ARGS[@]}" -- "$@" || \
+ { __helpers_die "${helper} failed"; exit 1; }
diff --cc cnf/make.globals
index d422ca639,08a37a534..131c5076d
--- a/cnf/make.globals
+++ b/cnf/make.globals
@@@ -150,23 -127,12 +150,26 @@@ PORTAGE_GPG_SIGNING_COMMAND="gpg --sig
  # security.* attributes may be special (see bug 461868), but
  # security.capability is specifically not excluded (bug 548516).
  # system.nfs4_acl attributes are irrelevant, see bug #475496.
+ # user.* attributes are not supported on tmpfs (bug 640290), but
+ # user.pax.* is supported with the patch from bug 470644.
  PORTAGE_XATTR_EXCLUDE="btrfs.* security.evm security.ima
- 	security.selinux system.nfs4_acl"
+ 	security.selinux system.nfs4_acl user.apache_handler
+ 	user.Beagle.* user.dublincore.* user.mime_encoding user.xdg.*"
  
 +# Writeable paths for Mac OS X seatbelt sandbox
 +#
 +# If path ends in a slash (/), access will recursively be allowed to directory
 +# contents (using a regex), not the directory itself. Without a slash, access
 +# to the directory or file itself will be allowed (using a literal), so it can
 +# be created, removed and changed. If both is needed, the directory needs to be
 +# given twice, once with and once without the slash. Obviously this only makes
 +# sense for directories, not files.
 +#
 +# An empty value for either variable will disable all restrictions on the
 +# corresponding operation.
 +MACOSSANDBOX_PATHS="/dev/fd/ /private/tmp/ /private/var/tmp/ @@PORTAGE_BUILDDIR@@/ @@PORTAGE_ACTUAL_DISTDIR@@/"
 +MACOSSANDBOX_PATHS_CONTENT_ONLY="/dev/null /dev/dtracehelper /dev/tty /private/var/run/syslog"
 +
  #            *****************************
  #            **  DO NOT EDIT THIS FILE  **
  # ***************************************************
diff --cc pym/portage/dbapi/vartree.py
index f84dbd5fc,b28b1c56c..d2c35f9e3
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@@ -39,9 -39,7 +39,10 @@@ portage.proxy.lazyimport.lazyimport(glo
  	'portage.util._xattr:xattr',
  	'portage.util._dyn_libs.PreservedLibsRegistry:PreservedLibsRegistry',
  	'portage.util._dyn_libs.LinkageMapELF:LinkageMapELF@LinkageMap',
 +	'portage.util._dyn_libs.LinkageMapMachO:LinkageMapMachO',
 +	'portage.util._dyn_libs.LinkageMapPeCoff:LinkageMapPeCoff',
 +	'portage.util._dyn_libs.LinkageMapXCoff:LinkageMapXCoff',
+ 	'portage.util._dyn_libs.NeededEntry:NeededEntry',
  	'portage.util._async.SchedulerInterface:SchedulerInterface',
  	'portage.util._eventloop.EventLoop:EventLoop',
  	'portage.util._eventloop.global_event_loop:global_event_loop',
diff --cc pym/portage/versions.py
index fb4996797,7b6a57673..7dc0ac0d6
--- a/pym/portage/versions.py
+++ b/pym/portage/versions.py
@@@ -50,9 -50,8 +50,10 @@@ _pkg = 
  	"dots_allowed_in_PN":    r'[\w+][\w+.-]*?',
  }
  
- _v = r'(cvs\.)?(\d+)((\.\d+)*)([a-z]?)((_(pre|p|beta|alpha|rc)\d*)*)'
- # PREFIX hack: -r(\d+) -> -r(\d+|0\d+\.\d+) (see below)
+ _v = r'(\d+)((\.\d+)*)([a-z]?)((_(pre|p|beta|alpha|rc)\d*)*)'
 -_rev = r'\d+'
++# PREFIX_LOCAL hack: -r(\d+) -> -r(\d+|0\d+\.\d+) (see below)
 +_rev = r'(\d+|0\d+\.\d+)'
++# END_PREFIX_LOCAL
  _vr = _v + '(-r(' + _rev + '))?'
  
  _cp = {
@@@ -257,39 -250,15 +252,41 @@@ def vercmp(ver1, ver2, silent=1)
  			if rval:
  				return rval
  
 -	# the suffix part is equal to, so finally check the revision
++	# PREFIX_LOCAL
 +	# The suffix part is equal too, so finally check the revision
- 	# PREFIX hack: a revision starting with 0 is an 'inter-revision',
++	# Prefix hack: a revision starting with 0 is an 'inter-revision',
 +	# which means that it is possible to create revisions on revisions.
 +	# An example is -r01.1 which is the first revision of -r1.  Note
 +	# that a period (.) is used to separate the real revision and the
 +	# secondary revision number.  This trick is in use to allow revision
 +	# bumps in ebuilds synced from the main tree for Prefix changes,
 +	# while still staying in the main tree versioning scheme.
- 	if match1.group(10):
- 		if match1.group(10)[0] == '0' and '.' in match1.group(10):
- 			t = match1.group(10)[1:].split(".")
+ 	if match1.group(9):
 -		r1 = int(match1.group(9))
++		if match1.group(9)[0] == '0' and '.' in match1.group(9):
++			t = match1.group(9)[1:].split(".")
 +			r1 = int(t[0])
 +			r3 = int(t[1])
 +		else:
- 			r1 = int(match1.group(10))
++			r1 = int(match1.group(9))
 +			r3 = 0
  	else:
  		r1 = 0
 +		r3 = 0
- 	if match2.group(10):
- 		if match2.group(10)[0] == '0' and '.' in match2.group(10):
- 			t = match2.group(10)[1:].split(".")
+ 	if match2.group(9):
 -		r2 = int(match2.group(9))
++		if match2.group(9)[0] == '0' and '.' in match2.group(9):
++			t = match2.group(9)[1:].split(".")
 +			r2 = int(t[0])
 +			r4 = int(t[1])
 +		else:
- 			r2 = int(match2.group(10))
++			r2 = int(match2.group(9))
 +			r4 = 0
++	# END_PREFIX_LOCAL
  	else:
  		r2 = 0
 +		r4 = 0
 +	if r1 == r2 and (r3 != 0 or r4 != 0):
 +		r1 = r3
 +		r2 = r4
  	rval = (r1 > r2) - (r1 < r2)
  	return rval