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