commit: eed711a2e330ae73978bd7612ae596a7b3f7adbb
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Sun Apr 5 09:13:48 2015 +0000
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Sun Apr 5 09:13:48 2015 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=eed711a2
Merge remote-tracking branch 'overlays-gentoo-org/master' into prefix
NEWS | 11 +
RELEASE-NOTES | 121 ++
bin/bashrc-functions.sh | 2 +-
bin/chpathtool.py | 22 +-
bin/dispatch-conf | 68 +-
bin/eapi.sh | 114 +-
bin/ebuild | 7 +-
bin/ebuild-helpers/dohtml | 4 +
bin/ebuild.sh | 98 +-
bin/egencache | 38 +-
bin/emerge-webrsync | 4 +-
bin/etc-update | 158 ++-
bin/install-qa-check.d/05double-D | 9 +-
bin/install-qa-check.d/90world-writable | 27 +-
bin/install.py | 2 +-
bin/isolated-functions.sh | 89 +-
bin/misc-functions.sh | 71 +-
bin/phase-functions.sh | 15 +-
bin/phase-helpers.sh | 315 +++++-
bin/portageq | 27 +-
bin/quickpkg | 3 +-
bin/regenworld | 4 +-
bin/repoman | 43 +-
bin/save-ebuild-env.sh | 9 +-
bin/socks5-server.py | 227 ++++
cnf/dispatch-conf.conf | 2 +-
cnf/make.conf.example | 2 +-
cnf/make.globals | 3 +-
cnf/repo.postsync.d/example | 51 +
cnf/repos.conf | 1 +
cnf/sets/portage.conf | 12 +-
doc/config/sets.docbook | 47 +-
man/ebuild.5 | 28 +-
man/egencache.1 | 15 +-
man/emaint.1 | 71 +-
man/emerge.1 | 117 +-
man/make.conf.5 | 45 +-
man/portage.5 | 262 ++++-
man/repoman.1 | 2 +-
pym/_emerge/AbstractPollTask.py | 52 +-
pym/_emerge/Binpkg.py | 33 +-
pym/_emerge/BinpkgExtractorAsync.py | 25 +-
pym/_emerge/BinpkgFetcher.py | 13 +-
pym/_emerge/BinpkgPrefetcher.py | 2 +-
pym/_emerge/BinpkgVerifier.py | 6 +-
pym/_emerge/EbuildBinpkg.py | 9 +-
pym/_emerge/EbuildBuild.py | 36 +-
pym/_emerge/FakeVartree.py | 16 +-
pym/_emerge/Package.py | 135 ++-
pym/_emerge/Scheduler.py | 7 +-
pym/_emerge/actions.py | 1194 +++-----------------
pym/_emerge/clear_caches.py | 1 -
pym/_emerge/create_depgraph_params.py | 27 +
pym/_emerge/create_world_atom.py | 6 +-
pym/_emerge/depgraph.py | 780 ++++++++++---
pym/_emerge/help.py | 2 +-
pym/_emerge/is_valid_package_atom.py | 5 +-
pym/_emerge/main.py | 94 +-
pym/_emerge/resolver/DbapiProvidesIndex.py | 101 ++
pym/_emerge/resolver/output.py | 40 +-
pym/_emerge/resolver/output_helpers.py | 19 +-
pym/_emerge/resolver/package_tracker.py | 42 +-
pym/_emerge/resolver/slot_collision.py | 35 +-
pym/_emerge/search.py | 188 ++-
pym/_emerge/unmerge.py | 42 +-
pym/portage/__init__.py | 29 +-
pym/portage/_global_updates.py | 4 +-
pym/portage/_selinux.py | 14 +-
pym/portage/_sets/ProfilePackageSet.py | 35 +
pym/portage/_sets/__init__.py | 19 +-
pym/portage/_sets/files.py | 160 ++-
pym/portage/_sets/profiles.py | 28 +-
pym/portage/cache/fs_template.py | 25 +-
pym/portage/cache/index/IndexStreamIterator.py | 27 +
.../sync => portage/cache/index}/__init__.py | 2 +-
pym/portage/cache/index/pkg_desc_index.py | 60 +
pym/portage/const.py | 3 +
pym/portage/data.py | 134 ++-
pym/portage/dbapi/DummyTree.py | 16 +
pym/portage/dbapi/IndexedPortdb.py | 171 +++
pym/portage/dbapi/IndexedVardb.py | 114 ++
.../dbapi/_ContentsCaseSensitivityManager.py | 93 ++
pym/portage/dbapi/_VdbMetadataDelta.py | 153 +++
pym/portage/dbapi/__init__.py | 10 +-
pym/portage/dbapi/bintree.py | 898 ++++++++-------
pym/portage/dbapi/vartree.py | 416 ++++---
pym/portage/dbapi/virtual.py | 113 +-
pym/portage/dep/__init__.py | 69 +-
pym/portage/dep/_slot_operator.py | 13 +
pym/portage/dep/dep_check.py | 69 +-
pym/portage/dep/soname/SonameAtom.py | 72 ++
.../sync => portage/dep/soname}/__init__.py | 2 +-
pym/portage/dep/soname/multilib_category.py | 114 ++
pym/portage/dep/soname/parse.py | 47 +
pym/portage/dispatch_conf.py | 189 +++-
pym/portage/eapi.py | 2 +-
pym/portage/emaint/main.py | 33 +-
pym/portage/emaint/modules/binhost/binhost.py | 47 +-
pym/portage/emaint/modules/merges/merges.py | 15 +-
pym/portage/emaint/modules/sync/__init__.py | 55 +
pym/portage/emaint/modules/sync/sync.py | 289 +++++
pym/portage/exception.py | 1 +
pym/portage/locks.py | 11 +-
pym/portage/metadata.py | 208 ++++
pym/portage/{emaint => }/module.py | 40 +-
pym/portage/news.py | 15 +-
.../package/ebuild/_config/KeywordsManager.py | 7 +-
.../package/ebuild/_config/LocationsManager.py | 44 +-
pym/portage/package/ebuild/_config/MaskManager.py | 25 +-
pym/portage/package/ebuild/_config/UseManager.py | 116 +-
.../package/ebuild/_config/special_env_vars.py | 10 +-
pym/portage/package/ebuild/config.py | 195 +++-
pym/portage/package/ebuild/doebuild.py | 246 +++-
pym/portage/package/ebuild/fetch.py | 7 +-
pym/portage/package/ebuild/prepare_build_dirs.py | 9 +-
pym/portage/{emaint => }/progress.py | 0
pym/portage/repository/config.py | 121 +-
pym/portage/sync/__init__.py | 38 +
pym/portage/sync/config_checks.py | 72 ++
pym/portage/sync/controller.py | 321 ++++++
.../sync/getaddrinfo_validate.py | 0
pym/{repoman => portage/sync/modules}/__init__.py | 0
pym/portage/sync/modules/cvs/__init__.py | 45 +
pym/portage/sync/modules/cvs/cvs.py | 67 ++
pym/portage/sync/modules/git/__init__.py | 55 +
pym/portage/sync/modules/git/git.py | 86 ++
pym/portage/sync/modules/rsync/__init__.py | 28 +
pym/portage/sync/modules/rsync/rsync.py | 543 +++++++++
pym/portage/sync/modules/svn/__init__.py | 31 +
pym/portage/sync/modules/svn/svn.py | 89 ++
pym/portage/sync/modules/webrsync/__init__.py | 49 +
pym/portage/sync/modules/webrsync/webrsync.py | 66 ++
.../sync/old_tree_timestamp.py | 5 +-
pym/portage/sync/syncbase.py | 136 +++
pym/portage/tests/__init__.py | 4 +-
pym/portage/tests/dbapi/test_fakedbapi.py | 11 +-
pym/portage/tests/dbapi/test_portdb_cache.py | 18 +-
pym/portage/tests/dep/test_isvalidatom.py | 8 +-
.../tests/ebuild/test_use_expand_incremental.py | 132 +++
pym/portage/tests/emerge/test_config_protect.py | 292 +++++
pym/portage/tests/emerge/test_simple.py | 10 +-
pym/portage/tests/glsa/test_security_set.py | 5 +-
pym/portage/tests/lint/metadata.py | 11 +
pym/portage/tests/lint/test_compile_modules.py | 13 +
pym/portage/tests/resolver/ResolverPlayground.py | 46 +-
.../resolver/binpkg_multi_instance}/__init__.py | 2 +-
.../resolver/binpkg_multi_instance/__test__.py} | 2 +-
.../test_build_id_profile_format.py | 134 +++
.../binpkg_multi_instance/test_rebuilt_binaries.py | 101 ++
.../tests/resolver/soname}/__init__.py | 2 +-
.../tests/resolver/soname/__test__.py} | 2 +-
.../tests/resolver/soname/test_autounmask.py | 103 ++
pym/portage/tests/resolver/soname/test_depclean.py | 61 +
.../tests/resolver/soname/test_downgrade.py | 240 ++++
.../tests/resolver/soname/test_or_choices.py | 92 ++
.../tests/resolver/soname/test_reinstall.py | 87 ++
.../tests/resolver/soname/test_skip_update.py | 86 ++
.../soname/test_slot_conflict_reinstall.py | 342 ++++++
.../resolver/soname/test_slot_conflict_update.py | 117 ++
.../tests/resolver/soname/test_soname_provided.py | 78 ++
.../tests/resolver/soname/test_unsatisfiable.py | 71 ++
.../tests/resolver/soname/test_unsatisfied.py | 87 ++
pym/portage/tests/resolver/test_backtracking.py | 9 +-
pym/portage/tests/resolver/test_changed_deps.py | 120 ++
.../tests/resolver/test_onlydeps_circular.py | 51 +
pym/portage/tests/resolver/test_or_choices.py | 137 ++-
pym/portage/tests/resolver/test_package_tracker.py | 4 +-
.../tests/resolver/test_profile_default_eapi.py | 126 +++
.../tests/resolver/test_profile_package_set.py | 123 ++
..._slot_operator_update_probe_parent_downgrade.py | 68 ++
pym/portage/tests/resolver/test_virtual_slot.py | 75 ++
pym/portage/tests/resolver/test_with_test_deps.py | 44 +
pym/{_emerge => portage/tests}/sync/__init__.py | 2 +-
pym/portage/tests/sync/test_sync_local.py | 189 ++++
pym/portage/update.py | 4 +-
pym/portage/util/__init__.py | 111 +-
pym/portage/util/_dyn_libs/LinkageMapELF.py | 62 +-
pym/portage/util/_dyn_libs/NeededEntry.py | 82 ++
pym/portage/util/_dyn_libs/soname_deps.py | 138 +++
pym/portage/util/compression_probe.py | 79 ++
pym/portage/util/cpuinfo.py | 18 +
pym/{_emerge/sync => portage/util/elf}/__init__.py | 2 +-
pym/portage/util/elf/constants.py | 45 +
pym/portage/util/elf/header.py | 65 ++
.../sync => portage/util/endian}/__init__.py | 2 +-
pym/portage/util/endian/decode.py | 48 +
pym/portage/util/iterators/MultiIterGroupBy.py | 94 ++
.../sync => portage/util/iterators}/__init__.py | 2 +-
pym/portage/util/movefile.py | 2 +-
pym/portage/util/path.py | 48 +
pym/portage/util/socks5.py | 81 ++
pym/portage/util/writeable_check.py | 2 +-
pym/portage/versions.py | 28 +-
pym/repoman/check_missingslot.py | 31 +
pym/repoman/utilities.py | 7 +-
setup.py | 27 +-
196 files changed, 12504 insertions(+), 2861 deletions(-)
diff --cc bin/bashrc-functions.sh
index 1a92738,cc02546..daa00d2
--- a/bin/bashrc-functions.sh
+++ b/bin/bashrc-functions.sh
@@@ -1,12 -1,7 +1,12 @@@
-#!/bin/bash
+#!@PORTAGE_BASH@
- # Copyright 1999-2013 Gentoo Foundation
+ # Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
+portageq() {
+ PYTHONPATH=${PORTAGE_PYTHONPATH:-${PORTAGE_PYM_PATH}}\
+ "${PORTAGE_PYTHON:-@PREFIX_PORTAGE_PYTHON@}"
"${PORTAGE_BIN_PATH}/portageq" "$@"
+}
+
register_die_hook() {
local x
for x in $* ; do
diff --cc bin/dispatch-conf
index 286d821,678a66d..4215e5b
--- a/bin/dispatch-conf
+++ b/bin/dispatch-conf
@@@ -21,11 -26,10 +26,11 @@@ if osp.isfile(osp.join(osp.dirname(osp.
sys.path.insert(0,
osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
import portage
portage._internal_caller = True
- from portage import os
- from portage import _unicode_decode
- from portage.dispatch_conf import diffstatusoutput
+ from portage import os, shutil
+ from portage import _encodings, _unicode_decode
+ from portage.dispatch_conf import diffstatusoutput, diff_mixed_wrapper
from portage.process import find_binary, spawn
+from portage.const import EPREFIX
FIND_EXTANT_CONFIGS = "find '%s' %s -name '._cfg????_%s' ! -name '.*~' !
-iname '.*.bak' -print"
DIFF_CONTENTS = "diff -Nu '%s' '%s'"
diff --cc bin/ebuild-helpers/dohtml
index 70cb1f4,0478e49..bf1f0fe
--- a/bin/ebuild-helpers/dohtml
+++ b/bin/ebuild-helpers/dohtml
@@@ -2,10 -2,14 +2,14 @@@
# Copyright 2009-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-source "${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}"/isolated-functions.sh
+source "${PORTAGE_BIN_PATH:-@PORTAGE_BASE@/bin}"/isolated-functions.sh
+ if ___eapi_has_dohtml_deprecated; then
+ eqawarn "'${0##*/}' is deprecated in EAPI '$EAPI'"
+ fi
+
-PORTAGE_BIN_PATH=${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}
-PORTAGE_PYM_PATH=${PORTAGE_PYM_PATH:-/usr/lib/portage/pym}
+PORTAGE_BIN_PATH=${PORTAGE_BIN_PATH:-@PORTAGE_BASE@/bin}
+PORTAGE_PYM_PATH=${PORTAGE_PYM_PATH:-@PORTAGE_BASE@/pym}
# Use safe cwd, avoiding unsafe import for bug #469338.
export __PORTAGE_HELPER_CWD=${PWD}
cd "${PORTAGE_PYM_PATH}"
diff --cc bin/egencache
index e2f57a5,f97432f..def4837
--- a/bin/egencache
+++ b/bin/egencache
@@@ -57,8 -58,7 +58,8 @@@ from portage.util._async.run_main_sched
from portage.util._eventloop.global_event_loop import global_event_loop
from portage import cpv_getkey
from portage.dep import Atom, isjustname
- from portage.versions import pkgsplit, vercmp
+ from portage.versions import pkgsplit, vercmp, _pkg_str
+from portage.const import EPREFIX
try:
from xml.etree import ElementTree
diff --cc bin/install-qa-check.d/90world-writable
index 635612d,820683b..bb9b075
--- a/bin/install-qa-check.d/90world-writable
+++ b/bin/install-qa-check.d/90world-writable
@@@ -2,23 -2,34 +2,36 @@@
world_writable_check() {
# Now we look for all world writable files.
- local unsafe_files=$(find "${ED}" -type f -perm -2 | sed -e
"s:^${ED}:/:")
+ # PREFIX LOCAL: keep offset prefix in the reported files
- local unsafe_files=$(find "${ED}" -type f -perm -2 | sed -e "s:^${D}:-
:")
++ local unsafe_files=$(find "${ED}" -type f -perm -2 | sed -e
"s:^${D}:/:")
+ # END PREFIX LOCAL
+ local OLDIFS x prev_shopts=$-
+
+ OLDIFS=$IFS
+ IFS=$'\n'
+ set -f
+
if [[ -n ${unsafe_files} ]] ; then
- __vecho "QA Security Notice: world writable file(s):"
- __vecho "${unsafe_files}"
- __vecho "- This may or may not be a security problem, most of
the time it is one."
- __vecho "- Please double check that $PF really needs a world
writeable bit and file bugs accordingly."
- sleep 1
+ eqawarn "QA Security Notice: world writable file(s):"
+
+ eqatag -v world-writable $unsafe_files
+
+ eqawarn "This may or may not be a security problem, most of the
time it is one."
+ eqawarn "Please double check that $PF really needs a world
writeable bit and file bugs accordingly."
+ eqawarn
fi
- local unsafe_files=$(find "${ED}" -type f '(' -perm -2002 -o -perm
-4002 ')' | sed -e "s:^${ED}:/:")
+ local unsafe_files=$(find "${ED}" -type f '(' -perm -2002 -o -perm
-4002 ')' | sed -e "s:^${D}:/:")
if [[ -n ${unsafe_files} ]] ; then
eqawarn "QA Notice: Unsafe files detected (set*id and world
writable)"
- eqawarn "${unsafe_files}"
+
+ eqatag -v world-writable-setid $unsafe_files
+
die "Unsafe files found in \${D}. Portage will not install
them."
fi
+
+ IFS=$OLDIFS
+ [[ ${prev_shopts} == *f* ]] || set +f
}
world_writable_check
diff --cc bin/misc-functions.sh
index 5b8e872,e08c228..4928575
mode 100644,100755..100644
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@@ -172,19 -168,21 +172,23 @@@ install_qa_check()
local EPREFIX= ED=${D}
fi
- cd "${ED}" || die "cd failed"
+ # PREFIX LOCAL: ED needs not to exist, whereas D does
+ cd "${D}" || die "cd failed"
+ # END PREFIX LOCAL
- # Run QA checks from install-qa-check.d.
- # Note: checks need to be run *before* stripping.
- local f
- # TODO: handle nullglob-like
- for f in "${PORTAGE_BIN_PATH}"/install-qa-check.d/*; do
- # Run in a subshell to treat it like external script,
- # but use 'source' to pass all variables through.
- (
- source "${f}" || eerror "Post-install QA check ${f##*/}
failed to run"
+ # Collect the paths for QA checks, highest prio first.
+ paths=(
+ # sysadmin overrides
+ "${PORTAGE_OVERRIDE_EPREFIX}"/usr/local/lib/install-qa-check.d
+ # system-wide package installs
+ "${PORTAGE_OVERRIDE_EPREFIX}"/usr/lib/install-qa-check.d
+ )
+
+ # Now repo-specific checks.
+ # (yes, PORTAGE_ECLASS_LOCATIONS contains repo paths...)
+ for d in "${PORTAGE_ECLASS_LOCATIONS[@]}"; do
+ paths+=(
+ "${d}"/metadata/install-qa-check.d
)
done
diff --cc bin/phase-functions.sh
index 2dece5a,2743e27..f447fca
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -31,8 -31,8 +31,8 @@@ PORTAGE_READONLY_VARS="D EBUILD EBUILD_
PORTAGE_TMPDIR PORTAGE_UPDATE_ENV PORTAGE_USERNAME \
PORTAGE_VERBOSE PORTAGE_WORKDIR_MODE PORTAGE_XATTR_EXCLUDE \
PORTDIR \
- PROFILE_PATHS REPLACING_VERSIONS REPLACED_BY_VERSION T WORKDIR \
+ REPLACING_VERSIONS REPLACED_BY_VERSION T WORKDIR \
- __PORTAGE_HELPER __PORTAGE_TEST_HARDLINK_LOCKS"
+ __PORTAGE_HELPER __PORTAGE_TEST_HARDLINK_LOCKS ED EROOT"
PORTAGE_SAVED_READONLY_VARS="A CATEGORY P PF PN PR PV PVR"
diff --cc cnf/make.globals
index a57a603,dd99618..880fed5
--- a/cnf/make.globals
+++ b/cnf/make.globals
@@@ -151,24 -122,11 +151,25 @@@ PORTAGE_ELOG_MAILFROM="@portageuser@@lo
# Signing command used by repoman
PORTAGE_GPG_SIGNING_COMMAND="gpg --sign --digest-algo SHA256 --clearsign
--yes --default-key \"\${PORTAGE_GPG_KEY}\" --homedir \"\${PORTAGE_GPG_DIR}\"
\"\${FILE}\""
+ # btrfs.* attributes are irrelevant, see bug #527636.
# Security labels are special, see bug #461868.
# system.nfs4_acl attributes are irrelevant, see bug #475496.
- PORTAGE_XATTR_EXCLUDE="security.* system.nfs4_acl"
+ PORTAGE_XATTR_EXCLUDE="btrfs.* security.* system.nfs4_acl"
+# 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 cnf/repos.conf
index 18c611a,1ca98ca..4433546
--- a/cnf/repos.conf
+++ b/cnf/repos.conf
@@@ -1,7 -1,8 +1,8 @@@
[DEFAULT]
-main-repo = gentoo
+main-repo = gentoo_prefix
-[gentoo]
-location = /usr/portage
+[gentoo_prefix]
+location = @PORTAGE_EPREFIX@/usr/portage
sync-type = rsync
-sync-uri = rsync://rsync.gentoo.org/gentoo-portage
+sync-uri = rsync://rsync.prefix.bitzolder.nl/gentoo-portage-prefix
+ auto-sync = yes
diff --cc pym/_emerge/Package.py
index bdf3b23,2c1a116..1570f3d
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@@ -13,12 -13,12 +13,13 @@@ from portage.cache.mappings import slot
from portage.const import EBUILD_PHASES
from portage.dep import Atom, check_required_use, use_reduce, \
paren_enclose, _slot_separator, _repo_separator
+ from portage.dep.soname.parse import parse_soname_deps
from portage.versions import _pkg_str, _unknown_repo
from portage.eapi import _get_eapi_attrs, eapi_has_use_aliases
- from portage.exception import InvalidDependString
+ from portage.exception import InvalidData, InvalidDependString
from portage.localization import _
from _emerge.Task import Task
+from portage.const import EPREFIX
if sys.hexversion >= 0x3000000:
basestring = str
@@@ -40,11 -41,12 +42,12 @@@ class Package(Task)
"_validated_atoms", "_visible")
metadata_keys = [
- "BUILD_TIME", "CHOST", "COUNTER", "DEPEND", "EAPI",
- "HDEPEND", "INHERITED", "IUSE", "KEYWORDS",
- "LICENSE", "PDEPEND", "PROVIDE", "RDEPEND",
- "repository", "PROPERTIES", "RESTRICT", "SLOT", "USE",
- "_mtime_", "DEFINED_PHASES", "REQUIRED_USE", "EPREFIX"]
+ "BUILD_ID", "BUILD_TIME", "CHOST", "COUNTER", "DEFINED_PHASES",
+ "DEPEND", "EAPI", "HDEPEND", "INHERITED", "IUSE", "KEYWORDS",
+ "LICENSE", "MD5", "PDEPEND", "PROVIDE", "PROVIDES",
+ "RDEPEND", "repository", "REQUIRED_USE",
+ "PROPERTIES", "REQUIRES", "RESTRICT", "SIZE",
- "SLOT", "USE", "_mtime_"]
++ "SLOT", "USE", "_mtime_", "EPREFIX"]
_dep_keys = ('DEPEND', 'HDEPEND', 'PDEPEND', 'RDEPEND')
_buildtime_keys = ('DEPEND', 'HDEPEND')
diff --cc pym/_emerge/main.py
index a5de7c3,a5dafa3..0bacd68
--- a/pym/_emerge/main.py
+++ b/pym/_emerge/main.py
@@@ -19,8 -19,8 +19,9 @@@ portage.proxy.lazyimport.lazyimport(glo
'_emerge.is_valid_package_atom:insert_category_into_atom'
)
from portage import os
+from portage.const import EPREFIX
from portage.util._argparse import ArgumentParser
+ from portage.sync import _SUBMODULE_PATH_MAP
if sys.hexversion >= 0x3000000:
long = int
diff --cc pym/portage/data.py
index f4bbb44,2fd287d..fa89242
--- a/pym/portage/data.py
+++ b/pym/portage/data.py
@@@ -91,52 -147,38 +151,50 @@@ def _get_global(k)
#Discover the uid and gid of the portage user/group
keyerror = False
try:
- portage_uid =
pwd.getpwnam(_get_global('_portage_username')).pw_uid
+ username = str(_get_global('_portage_username'))
+ portage_uid = pwd.getpwnam(username).pw_uid
except KeyError:
- keyerror = True
- portage_uid = 0
+ # PREFIX LOCAL: some sysadmins are insane, bug #344307
+ if username.isdigit():
+ portage_uid = int(username)
+ else:
+ keyerror = True
+ portage_uid = 0
+ # END PREFIX LOCAL
try:
- portage_gid =
grp.getgrnam(_get_global('_portage_grpname')).gr_gid
+ grpname = str(_get_global('_portage_grpname'))
+ portage_gid = grp.getgrnam(grpname).gr_gid
except KeyError:
- keyerror = True
- portage_gid = 0
+ # PREFIX LOCAL: some sysadmins are insane, bug #344307
+ if grpname.isdigit():
+ portage_gid = int(grpname)
+ else:
+ keyerror = True
+ portage_gid = 0
+ # END PREFIX LOCAL
- if secpass < 1 and portage_gid in os.getgroups():
- secpass = 1
-
# Suppress this error message if both PORTAGE_GRPNAME and
# PORTAGE_USERNAME are set to "root", for things like
# Android (see bug #454060).
if keyerror and not (_get_global('_portage_username') == "root"
and
_get_global('_portage_grpname') == "root"):
+ # PREFIX LOCAL: we need to fix this one day to
distinguish prefix vs non-prefix
+ writemsg(colorize("BAD",
+ _("portage: '%s' user or '%s' group missing." %
(_get_global('_portage_username'), _get_global('_portage_grpname')))) + "\n",
noiselevel=-1)
writemsg(colorize("BAD",
- _("portage: 'portage' user or group missing."))
+ "\n", noiselevel=-1)
- writemsg(_(
- " For the defaults, line 1 goes into
passwd, "
- "and 2 into group.\n"), noiselevel=-1)
- writemsg(colorize("GOOD",
- "
portage:x:250:250:portage:/var/tmp/portage:/bin/false") \
- + "\n", noiselevel=-1)
- writemsg(colorize("GOOD", "
portage::250:portage") + "\n",
- noiselevel=-1)
+ _(" In Prefix Portage this is quite
dramatic")) + "\n", noiselevel=-1)
+ writemsg(colorize("BAD",
+ _(" since it means you have thrown away
yourself.")) + "\n", noiselevel=-1)
+ writemsg(colorize("BAD",
+ _(" Re-add yourself or re-bootstrap
Gentoo Prefix.")) + "\n", noiselevel=-1)
+ # END PREFIX LOCAL
portage_group_warning()
+ globals()['portage_gid'] = portage_gid
_initialized_globals.add('portage_gid')
+ globals()['portage_uid'] = portage_uid
_initialized_globals.add('portage_uid')
- _initialized_globals.add('secpass')
if k == 'portage_gid':
return portage_gid
@@@ -206,28 -244,24 +260,29 @@@
except OSError:
pass
else:
- if k == '_portage_grpname':
- try:
- grp_struct =
grp.getgrgid(eroot_st.st_gid)
- except KeyError:
- v = eroot_st.st_gid
- else:
- v = grp_struct.gr_name
- else:
- try:
- pwd_struct =
pwd.getpwuid(eroot_st.st_uid)
- except KeyError:
- v = eroot_st.st_uid
+ if _unprivileged_mode(eroot_or_parent,
eroot_st):
+ if k == '_portage_grpname':
+ try:
+ grp_struct =
grp.getgrgid(eroot_st.st_gid)
+ except KeyError:
+ pass
+ else:
+ v = grp_struct.gr_name
else:
- v = pwd_struct.pw_name
+ try:
+ pwd_struct =
pwd.getpwuid(eroot_st.st_uid)
+ except KeyError:
+ pass
+ else:
+ v = pwd_struct.pw_name
if v is None:
- v = 'portage'
+ # PREFIX LOCAL: use var iso hardwired 'portage'
+ if k == '_portage_grpname':
+ v = PORTAGE_GROUPNAME
+ else:
+ v = PORTAGE_USERNAME
+ # END PREFIX LOCAL
else:
raise AssertionError('unknown name: %s' % k)
diff --cc pym/portage/dbapi/bintree.py
index 45e8614,b37f388..e3e50e0
--- a/pym/portage/dbapi/bintree.py
+++ b/pym/portage/dbapi/bintree.py
@@@ -70,18 -70,26 +71,26 @@@ class bindbapi(fakedbapi)
_known_keys = frozenset(list(fakedbapi._known_keys) + \
["CHOST", "repository", "USE"])
def __init__(self, mybintree=None, **kwargs):
- fakedbapi.__init__(self, **kwargs)
+ # Always enable multi_instance mode for bindbapi indexing. This
+ # does not affect the local PKGDIR file layout, since that is
+ # controlled independently by FEATURES=binpkg-multi-instance.
+ # The multi_instance mode is useful for the following reasons:
+ # * binary packages with the same cpv from multiple binhosts
+ # can be considered simultaneously
+ # * if binpkg-multi-instance is disabled, it's still possible
+ # to properly access a PKGDIR which has binpkg-multi-instance
+ # layout (or mixed layout)
+ fakedbapi.__init__(self, exclusive_slots=False,
+ multi_instance=True, **kwargs)
self.bintree = mybintree
self.move_ent = mybintree.move_ent
- self.cpvdict={}
- self.cpdict={}
# Selectively cache metadata in order to optimize dep matching.
self._aux_cache_keys = set(
- ["BUILD_TIME", "CHOST", "DEPEND", "EAPI",
- "HDEPEND", "IUSE", "KEYWORDS",
- "LICENSE", "PDEPEND", "PROPERTIES", "PROVIDE",
- "RDEPEND", "repository", "RESTRICT", "SLOT", "USE",
"DEFINED_PHASES",
- "EPREFIX"
+ ["BUILD_ID", "BUILD_TIME", "CHOST", "DEFINED_PHASES",
+ "DEPEND", "EAPI", "HDEPEND", "IUSE", "KEYWORDS",
+ "LICENSE", "MD5", "PDEPEND", "PROPERTIES", "PROVIDE",
+ "PROVIDES", "RDEPEND", "repository", "REQUIRES",
"RESTRICT",
- "SIZE", "SLOT", "USE", "_mtime_"
++ "SIZE", "SLOT", "USE", "_mtime_", "EPREFIX"
])
self._aux_cache_slot_dict =
slot_dict_class(self._aux_cache_keys)
self._aux_cache = {}
@@@ -306,12 -311,14 +312,14 @@@ class binarytree(object)
self._pkgindex_hashes = ["MD5","SHA1"]
self._pkgindex_file = os.path.join(self.pkgdir,
"Packages")
self._pkgindex_keys = self.dbapi._aux_cache_keys.copy()
- self._pkgindex_keys.update(["CPV", "MTIME", "SIZE"])
+ self._pkgindex_keys.update(["CPV", "SIZE"])
self._pkgindex_aux_keys = \
- ["BUILD_TIME", "CHOST", "DEPEND",
"DESCRIPTION", "EAPI",
- "HDEPEND", "IUSE", "KEYWORDS", "LICENSE",
"PDEPEND", "PROPERTIES",
- "PROVIDE", "RESTRICT", "RDEPEND", "repository",
"SLOT", "USE", "DEFINED_PHASES",
- "BASE_URI", "EPREFIX"]
+ ["BASE_URI", "BUILD_ID", "BUILD_TIME", "CHOST",
+ "DEFINED_PHASES", "DEPEND", "DESCRIPTION",
"EAPI",
+ "HDEPEND", "IUSE", "KEYWORDS", "LICENSE",
"PDEPEND",
+ "PKGINDEX_URI", "PROPERTIES", "PROVIDE",
"PROVIDES",
+ "RDEPEND", "repository", "REQUIRES", "RESTRICT",
- "SIZE", "SLOT", "USE"]
++ "SIZE", "SLOT", "USE", "EPREFIX"]
self._pkgindex_aux_keys = list(self._pkgindex_aux_keys)
self._pkgindex_use_evaluated_keys = \
("DEPEND", "HDEPEND", "LICENSE", "RDEPEND",
@@@ -322,9 -329,9 +330,10 @@@
"CONFIG_PROTECT", "CONFIG_PROTECT_MASK",
"FEATURES",
"GENTOO_MIRRORS", "INSTALL_MASK",
"IUSE_IMPLICIT", "USE",
"USE_EXPAND", "USE_EXPAND_HIDDEN",
"USE_EXPAND_IMPLICIT",
- "USE_EXPAND_UNPREFIXED"])
+ "USE_EXPAND_UNPREFIXED",
+ "EPREFIX"])
self._pkgindex_default_pkg_data = {
+ "BUILD_ID" : "",
"BUILD_TIME" : "",
"DEFINED_PHASES" : "",
"DEPEND" : "",
diff --cc pym/portage/dbapi/vartree.py
index a0881a2,277c2f1..a037200
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@@ -1077,8 -1097,8 +1112,11 @@@ class vardbapi(dbapi)
# Empty path is a code used to represent empty
contents.
self._add_path("", pkg_hash)
- for x in contents:
- self._add_path(x[eroot_len:], pkg_hash)
+ for x in db._contents.keys():
- self._add_path(x[eroot_len:], pkg_hash)
++ path = x[eroot_len:]
++ if "case-insensitive-fs" in
self._vardb.settings.features:
++ path = path.lower()
++ self._add_path(patch, pkg_hash)
self._vardb._aux_cache["modified"].add(cpv)
@@@ -1259,14 -1279,16 +1297,18 @@@
continue
if is_basename:
- for p in
dblink(cpv).getcontents():
+ for p in
dblink(cpv)._contents.keys():
+ if
case_insensitive:
+
p = p.lower()
if
os.path.basename(p) == name:
-
owners.append((cpv, p[len(root):]))
+
owners.append((cpv, dblink(cpv).
+
_contents.unmap_key(
+
p)[len(root):]))
else:
- if
dblink(cpv).isowner(path):
-
owners.append((cpv, path))
+ key =
dblink(cpv)._match_contents(path)
+ if key is not
False:
+
owners.append(
+
(cpv, key[len(root):]))
except StopIteration:
path_iter.append(path)
@@@ -1314,14 -1336,16 +1356,18 @@@
dblnk = self._vardb._dblink(cpv)
for path, name, is_basename in path_info_list:
if is_basename:
- for p in dblnk.getcontents():
+ for p in dblnk._contents.keys():
+ if case_insensitive:
+ p = p.lower()
if os.path.basename(p)
== name:
-
search_pkg.results.append((dblnk, p[len(root):]))
+
search_pkg.results.append((dblnk,
+
dblnk._contents.unmap_key(
+
p)[len(root):]))
else:
- if dblnk.isowner(path):
-
search_pkg.results.append((dblnk, path))
+ key =
dblnk._match_contents(path)
+ if key is not False:
+
search_pkg.results.append(
+ (dblnk,
key[len(root):]))
search_pkg.complete = True
return False
@@@ -2795,24 -2828,18 +2850,26 @@@ class dblink(object)
os_filename_arg.path.join(destroot,
filename.lstrip(os_filename_arg.path.sep)))
+ pkgfiles = self.getcontents()
+
+ preserve_case = None
if "case-insensitive-fs" in self.settings.features:
destfile = destfile.lower()
-
- if self._contents.contains(destfile):
- return self._contents.unmap_key(destfile)
-
- if self.getcontents():
+ preserve_case = dict((k.lower(), k) for k in pkgfiles)
+ pkgfiles = dict((k.lower(), v) for k, v in
pkgfiles.items())
+
+ if pkgfiles and destfile in pkgfiles:
+ if preserve_case is not None:
+ return preserve_case[destfile]
+ return destfile
++ #if self._contents.contains(destfile):
++ # return self._contents.unmap_key(destfile)
+ if pkgfiles:
basename = os_filename_arg.path.basename(destfile)
if self._contents_basenames is None:
try:
- for x in pkgfiles:
- for x in self._contents.keys():
++ for x in pkgfiles):
_unicode_encode(x,
encoding=_encodings['merge'],
errors='strict')
@@@ -2897,10 -2924,8 +2954,12 @@@
if p_path_list:
for p_path in p_path_list:
x = os_filename_arg.path.join(p_path,
basename)
- if self._contents.contains(x):
- return
self._contents.unmap_key(x)
+ if x in pkgfiles:
+ if preserve_case is not None:
+ return preserve_case[x]
+ return x
++ #if self._contents.contains(x):
++ # return
self._contents.unmap_key(x)
return False
diff --cc pym/portage/package/ebuild/config.py
index 6e578a9,3a4007b..18e95ff
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@@ -834,40 -857,38 +857,44 @@@ class config(object)
"PORTAGE_INST_UID": "0",
}
- eroot_or_parent = first_existing(eroot)
- unprivileged = False
- try:
- eroot_st = os.stat(eroot_or_parent)
- except OSError:
- pass
- else:
-
- if portage.data._unprivileged_mode(
- eroot_or_parent, eroot_st):
- unprivileged = True
-
- default_inst_ids["PORTAGE_INST_GID"] =
str(eroot_st.st_gid)
- default_inst_ids["PORTAGE_INST_UID"] =
str(eroot_st.st_uid)
-
- if "PORTAGE_USERNAME" not in self:
- try:
- pwd_struct =
pwd.getpwuid(eroot_st.st_uid)
- except KeyError:
- pass
- else:
-
self["PORTAGE_USERNAME"] = pwd_struct.pw_name
-
self.backup_changes("PORTAGE_USERNAME")
-
- if "PORTAGE_GRPNAME" not in self:
- try:
- grp_struct =
grp.getgrgid(eroot_st.st_gid)
- except KeyError:
- pass
- else:
- self["PORTAGE_GRPNAME"]
= grp_struct.gr_name
-
self.backup_changes("PORTAGE_GRPNAME")
+ # PREFIX LOCAL: inventing UID/GID based on a path is a
very
+ # bad idea, it breaks almost everything since group ids
+ # don't have to match, when a user has many
+ # This in particularly breaks the configure-set portage
+ # group and user (in portage/data.py)
- #if eprefix:
- # # For prefix environments, default to the UID
and GID of
- # # the top-level EROOT directory.
- # try:
- # eroot_st = os.stat(eroot)
- # except OSError:
- # pass
- # else:
- # default_inst_ids["PORTAGE_INST_GID"] =
str(eroot_st.st_gid)
- # default_inst_ids["PORTAGE_INST_UID"] =
str(eroot_st.st_uid)
-
- # if "PORTAGE_USERNAME" not in self:
- # try:
- # pwd_struct =
pwd.getpwuid(eroot_st.st_uid)
- # except KeyError:
- # pass
- # else:
- #
self["PORTAGE_USERNAME"] = pwd_struct.pw_name
- #
self.backup_changes("PORTAGE_USERNAME")
-
- # if "PORTAGE_GRPNAME" not in self:
- # try:
- # grp_struct =
grp.getgrgid(eroot_st.st_gid)
- # except KeyError:
- # pass
- # else:
- # self["PORTAGE_GRPNAME"]
= grp_struct.gr_name
- #
self.backup_changes("PORTAGE_GRPNAME")
++# eroot_or_parent = first_existing(eroot)
++# unprivileged = False
++# try:
++# eroot_st = os.stat(eroot_or_parent)
++# except OSError:
++# pass
++# else:
++#
++# if portage.data._unprivileged_mode(
++# eroot_or_parent, eroot_st):
++# unprivileged = True
++#
++# default_inst_ids["PORTAGE_INST_GID"] =
str(eroot_st.st_gid)
++# default_inst_ids["PORTAGE_INST_UID"] =
str(eroot_st.st_uid)
++#
++# if "PORTAGE_USERNAME" not in self:
++# try:
++# pwd_struct =
pwd.getpwuid(eroot_st.st_uid)
++# except KeyError:
++# pass
++# else:
++#
self["PORTAGE_USERNAME"] = pwd_struct.pw_name
++#
self.backup_changes("PORTAGE_USERNAME")
++#
++# if "PORTAGE_GRPNAME" not in self:
++# try:
++# grp_struct =
grp.getgrgid(eroot_st.st_gid)
++# except KeyError:
++# pass
++# else:
++# self["PORTAGE_GRPNAME"]
= grp_struct.gr_name
++#
self.backup_changes("PORTAGE_GRPNAME")
+ # END PREFIX LOCAL
for var, default_val in default_inst_ids.items():
try:
diff --cc pym/portage/util/_dyn_libs/LinkageMapELF.py
index e4f8ee8,c44666a..c78f397
--- a/pym/portage/util/_dyn_libs/LinkageMapELF.py
+++ b/pym/portage/util/_dyn_libs/LinkageMapELF.py
@@@ -16,9 -16,33 +16,35 @@@ from portage.localization import
from portage.util import getlibpaths
from portage.util import grabfile
from portage.util import normalize_path
+ from portage.util import varexpand
from portage.util import writemsg_level
+ from portage.util._dyn_libs.NeededEntry import NeededEntry
+from portage.const import EPREFIX
+ # Map ELF e_machine values from NEEDED.ELF.2 to approximate multilib
+ # categories. This approximation will produce incorrect results on x32
+ # and mips systems, but the result is not worse than using the raw
+ # e_machine value which was used by earlier versions of portage.
+ _approx_multilib_categories = {
+ "386": "x86_32",
+ "68K": "m68k_32",
+ "AARCH64": "arm_64",
+ "ALPHA": "alpha_64",
+ "ARM": "arm_32",
+ "IA_64": "ia_64",
+ "MIPS": "mips_o32",
+ "PARISC": "hppa_64",
+ "PPC": "ppc_32",
+ "PPC64": "ppc_64",
+ "S390": "s390_64",
+ "SH": "sh_32",
+ "SPARC": "sparc_32",
+ "SPARC32PLUS": "sparc_32",
+ "SPARCV9": "sparc_64",
+ "X86_64": "x86_64",
+ }
++>>>>>>> overlays-gentoo-org/master
+
class LinkageMapELF(object):
"""Models dynamic linker dependencies."""