From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <gentoo-commits+bounces-1573266-garchives=archives.gentoo.org@lists.gentoo.org> Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 3C252158099 for <garchives@archives.gentoo.org>; Fri, 24 Nov 2023 20:06:24 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 395CF2BC061; Fri, 24 Nov 2023 20:06:23 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 073C92BC061 for <gentoo-commits@lists.gentoo.org>; Fri, 24 Nov 2023 20:06:23 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id CC2B433FE7D for <gentoo-commits@lists.gentoo.org>; Fri, 24 Nov 2023 20:06:21 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 122F013A3 for <gentoo-commits@lists.gentoo.org>; Fri, 24 Nov 2023 20:06:20 +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: <1700855669.df8959465f680edf4c37f0c41b9301b6cdc7eb54.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: df8959465f680edf4c37f0c41b9301b6cdc7eb54 X-VCS-Branch: prefix Date: Fri, 24 Nov 2023 20:06:20 +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-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 98ea6b79-dbab-4478-8317-4aa80c49cbbe X-Archives-Hash: fb468c0679290de5e14897e72b8daa86 commit: df8959465f680edf4c37f0c41b9301b6cdc7eb54 Author: Fabian Groffen <grobian <AT> gentoo <DOT> org> AuthorDate: Fri Nov 24 19:54:29 2023 +0000 Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org> CommitDate: Fri Nov 24 19:54:29 2023 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=df895946 Merge branch 'master' into prefix Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org> .builds/ci.yml | 38 +- .builds/lint.yml | 12 +- .builds/setup-python.sh | 2 + .github/workflows/ci.yml | 38 +- .github/workflows/lint.yml | 15 +- .pre-commit-config.yaml | 10 +- DEVELOPING | 16 +- MANIFEST.in | 30 - NEWS | 228 +++++ README.md | 2 +- TEST-NOTES | 2 +- bin/cgroup-release-agent | 2 - bin/dispatch-conf | 27 + bin/ebuild | 102 +-- bin/ebuild-helpers/portageq | 8 - bin/ebuild-helpers/prepall | 2 +- bin/ebuild-helpers/prepalldocs | 9 +- bin/ebuild-helpers/prepallinfo | 9 +- bin/ebuild-helpers/prepallman | 9 +- bin/ebuild-helpers/prepallstrip | 18 +- bin/ebuild-helpers/prepinfo | 41 +- bin/ebuild-helpers/prepman | 13 +- bin/ebuild-helpers/prepstrip | 14 +- bin/emaint | 27 +- bin/emerge | 151 ++-- bin/emerge-webrsync | 40 +- bin/env-update | 19 +- bin/estrip | 4 +- bin/etc-update | 13 +- bin/install-qa-check.d/05double-D | 2 +- bin/install-qa-check.d/05prefix | 4 +- bin/install-qa-check.d/60openrc | 2 +- bin/meson.build | 73 ++ bin/misc-functions.sh | 13 - bin/phase-functions.sh | 5 +- bin/phase-helpers.sh | 8 +- bin/portageq-wrapper | 1 - bin/save-ebuild-env.sh | 2 +- cnf/make.globals | 5 +- cnf/meson.build | 144 ++++ cnf/repos.conf | 2 +- doc/api/meson.build | 43 + doc/config/sets.docbook | 6 +- doc/fragment/meson.build | 5 + doc/fragment/version.in | 1 + doc/meson.build | 57 ++ doc/package/ebuild/eapi/4.docbook | 2 +- doc/portage.docbook | 2 - doc/qa.docbook | 4 +- lib/_emerge/AbstractEbuildProcess.py | 95 +-- lib/_emerge/BinpkgVerifier.py | 4 +- lib/_emerge/EbuildFetcher.py | 31 +- lib/_emerge/Package.py | 4 +- lib/_emerge/Scheduler.py | 24 +- lib/_emerge/SpawnProcess.py | 177 ++-- lib/_emerge/UseFlagDisplay.py | 2 +- lib/_emerge/actions.py | 85 +- lib/_emerge/create_depgraph_params.py | 10 +- lib/_emerge/depgraph.py | 322 +++++-- lib/_emerge/main.py | 18 +- lib/_emerge/meson.build | 101 +++ lib/_emerge/resolver/meson.build | 14 + lib/_emerge/search.py | 14 +- lib/meson.build | 2 + lib/portage/__init__.py | 55 +- lib/portage/_compat_upgrade/meson.build | 10 + lib/portage/_emirrordist/ContentDB.py | 4 +- lib/portage/_emirrordist/DeletionTask.py | 14 +- lib/portage/_emirrordist/FetchIterator.py | 2 +- lib/portage/_emirrordist/FetchTask.py | 3 +- lib/portage/_emirrordist/MirrorDistTask.py | 24 +- lib/portage/_emirrordist/main.py | 14 +- lib/portage/_emirrordist/meson.build | 15 + lib/portage/_sets/__init__.py | 10 +- lib/portage/_sets/files.py | 13 +- lib/portage/_sets/meson.build | 15 + lib/portage/_sets/shell.py | 2 +- lib/portage/binrepo/config.py | 2 +- lib/portage/binrepo/meson.build | 8 + lib/portage/cache/index/meson.build | 9 + lib/portage/cache/mappings.py | 322 +++---- lib/portage/cache/meson.build | 20 + lib/portage/cache/sql_template.py | 4 +- lib/portage/cache/sqlite.py | 19 +- lib/portage/cache/template.py | 10 +- lib/portage/const.py | 70 +- lib/portage/dbapi/_MergeProcess.py | 105 ++- lib/portage/dbapi/_SyncfsProcess.py | 15 +- lib/portage/dbapi/__init__.py | 45 +- lib/portage/dbapi/bintree.py | 145 +++- lib/portage/dbapi/meson.build | 22 + lib/portage/dbapi/porttree.py | 41 +- lib/portage/dbapi/vartree.py | 108 +-- lib/portage/dep/__init__.py | 17 +- lib/portage/dep/_slot_operator.py | 8 +- lib/portage/dep/dep_check.py | 6 +- lib/portage/dep/meson.build | 12 + lib/portage/dep/soname/SonameAtom.py | 6 +- lib/portage/dep/soname/meson.build | 10 + lib/portage/elog/meson.build | 16 + lib/portage/elog/mod_echo.py | 16 +- lib/portage/emaint/main.py | 2 +- lib/portage/emaint/meson.build | 11 + lib/portage/emaint/modules/binhost/meson.build | 8 + lib/portage/emaint/modules/config/meson.build | 8 + lib/portage/emaint/modules/logs/meson.build | 8 + lib/portage/emaint/modules/merges/merges.py | 2 +- lib/portage/emaint/modules/merges/meson.build | 8 + lib/portage/emaint/modules/meson.build | 16 + lib/portage/emaint/modules/move/meson.build | 8 + lib/portage/emaint/modules/resume/meson.build | 8 + lib/portage/emaint/modules/sync/meson.build | 8 + lib/portage/emaint/modules/sync/sync.py | 2 +- lib/portage/emaint/modules/world/meson.build | 8 + lib/portage/env/config.py | 2 +- lib/portage/env/meson.build | 10 + lib/portage/gpg.py | 4 +- lib/portage/gpkg.py | 172 +--- lib/portage/installation.py | 21 + lib/portage/locks.py | 52 +- lib/portage/meson.build | 74 ++ lib/portage/news.py | 10 +- lib/portage/output.py | 4 +- .../package/ebuild/_config/VirtualsManager.py | 4 +- .../package/ebuild/_config/env_var_validation.py | 2 +- lib/portage/package/ebuild/_config/helper.py | 2 +- lib/portage/package/ebuild/_config/meson.build | 17 + .../package/ebuild/_config/special_env_vars.py | 2 + lib/portage/package/ebuild/_ipc/meson.build | 10 + lib/portage/package/ebuild/_metadata_invalid.py | 2 +- .../ebuild/_parallel_manifest/ManifestProcess.py | 30 +- .../ebuild/_parallel_manifest/ManifestScheduler.py | 2 +- .../package/ebuild/_parallel_manifest/meson.build | 10 + lib/portage/package/ebuild/config.py | 12 +- lib/portage/package/ebuild/digestgen.py | 2 +- lib/portage/package/ebuild/doebuild.py | 50 +- lib/portage/package/ebuild/fetch.py | 4 +- lib/portage/package/ebuild/meson.build | 23 + lib/portage/package/meson.build | 9 + lib/portage/process.py | 27 +- lib/portage/proxy/meson.build | 9 + lib/portage/repository/config.py | 4 +- lib/portage/repository/meson.build | 10 + .../repository/storage/hardlink_quarantine.py | 2 +- lib/portage/repository/storage/hardlink_rcu.py | 6 +- lib/portage/repository/storage/meson.build | 11 + lib/portage/sync/controller.py | 11 +- lib/portage/sync/meson.build | 14 + lib/portage/sync/modules/cvs/cvs.py | 4 +- lib/portage/sync/modules/cvs/meson.build | 8 + lib/portage/sync/modules/git/__init__.py | 1 + lib/portage/sync/modules/git/git.py | 143 +++- lib/portage/sync/modules/git/meson.build | 8 + lib/portage/sync/modules/mercurial/meson.build | 8 + lib/portage/sync/modules/meson.build | 14 + lib/portage/sync/modules/rsync/meson.build | 8 + lib/portage/sync/modules/rsync/rsync.py | 13 +- lib/portage/sync/modules/svn/meson.build | 8 + lib/portage/sync/modules/webrsync/meson.build | 8 + lib/portage/sync/syncbase.py | 16 +- lib/portage/tests/__init__.py | 269 +----- lib/portage/tests/bin/meson.build | 14 + lib/portage/tests/bin/test_doins.py | 8 +- lib/portage/tests/conftest.py | 26 +- lib/portage/tests/dbapi/meson.build | 12 + lib/portage/tests/dbapi/test_auxdb.py | 103 ++- lib/portage/tests/dbapi/test_bintree.py | 86 +- lib/portage/tests/dbapi/test_portdb_cache.py | 2 +- lib/portage/tests/dep/meson.build | 28 + .../tests/dep/{testAtom.py => test_atom.py} | 0 ...ckRequiredUse.py => test_check_required_use.py} | 0 ...endedAtomDict.py => test_extended_atom_dict.py} | 0 ...fectingUSE.py => test_extract_affecting_use.py} | 0 .../dep/{testStandalone.py => test_standalone.py} | 0 lib/portage/tests/ebuild/meson.build | 17 + lib/portage/tests/ebuild/test_doebuild_fd_pipes.py | 42 +- lib/portage/tests/ebuild/test_fetch.py | 26 +- lib/portage/tests/ebuild/test_ipc_daemon.py | 25 +- lib/portage/tests/ebuild/test_spawn.py | 2 +- lib/portage/tests/emerge/conftest.py | 845 +++++++++++++++++++ lib/portage/tests/emerge/meson.build | 14 + lib/portage/tests/emerge/test_actions.py | 4 +- lib/portage/tests/emerge/test_baseline.py | 221 +++++ lib/portage/tests/emerge/test_config_protect.py | 14 +- .../emerge/test_emerge_blocker_file_collision.py | 7 +- lib/portage/tests/emerge/test_emerge_slot_abi.py | 14 +- lib/portage/tests/emerge/test_simple.py | 724 ---------------- lib/portage/tests/env/config/meson.build | 12 + lib/portage/tests/env/meson.build | 10 + lib/portage/tests/glsa/meson.build | 9 + lib/portage/tests/glsa/test_security_set.py | 16 +- lib/portage/tests/gpkg/meson.build | 15 + lib/portage/tests/gpkg/test_gpkg_checksum.py | 2 +- lib/portage/tests/gpkg/test_gpkg_gpg.py | 2 +- .../tests/gpkg/test_gpkg_metadata_update.py | 2 +- lib/portage/tests/gpkg/test_gpkg_metadata_url.py | 2 +- lib/portage/tests/gpkg/test_gpkg_path.py | 2 +- lib/portage/tests/gpkg/test_gpkg_size.py | 2 +- lib/portage/tests/gpkg/test_gpkg_stream.py | 2 +- lib/portage/tests/lafilefixer/meson.build | 9 + lib/portage/tests/lafilefixer/test_lafilefixer.py | 4 +- lib/portage/tests/lazyimport/meson.build | 10 + .../test_lazy_import_portage_baseline.py | 1 + lib/portage/tests/lint/meson.build | 12 + lib/portage/tests/locks/meson.build | 10 + lib/portage/tests/meson.build | 31 + lib/portage/tests/news/meson.build | 9 + lib/portage/tests/news/test_NewsItem.py | 8 +- lib/portage/tests/process/meson.build | 18 + lib/portage/tests/process/test_AsyncFunction.py | 92 +- lib/portage/tests/process/test_ForkProcess.py | 46 + lib/portage/tests/process/test_pickle.py | 43 + lib/portage/tests/process/test_poll.py | 1 - lib/portage/tests/process/test_unshare_net.py | 13 - lib/portage/tests/resolver/ResolverPlayground.py | 10 +- .../resolver/binpkg_multi_instance/meson.build | 10 + lib/portage/tests/resolver/meson.build | 98 +++ lib/portage/tests/resolver/soname/meson.build | 19 + .../tests/resolver/soname/test_skip_update.py | 19 +- .../tests/resolver/test_alternatives_gzip.py | 245 ++++++ .../tests/resolver/test_autounmask_binpkg_use.py | 2 +- .../tests/resolver/test_autounmask_multilib_use.py | 2 - .../resolver/test_autounmask_use_slot_conflict.py | 2 - .../tests/resolver/test_circular_choices_rust.py | 2 +- .../resolver/test_depclean_slot_unavailable.py | 2 +- lib/portage/tests/resolver/test_merge_order.py | 24 +- lib/portage/tests/resolver/test_or_choices.py | 2 - .../tests/resolver/test_rebuild_ghostscript.py | 160 ++++ lib/portage/tests/resolver/test_useflags.py | 176 ++++ lib/portage/tests/runTests.py | 84 -- lib/portage/tests/sets/base/meson.build | 10 + ...lPackageSet.py => test_internal_package_set.py} | 0 .../{testVariableSet.py => test_variable_set.py} | 0 lib/portage/tests/sets/files/meson.build | 10 + ...estConfigFileSet.py => test_config_file_set.py} | 0 ...estStaticFileSet.py => test_static_file_set.py} | 0 lib/portage/tests/sets/meson.build | 12 + lib/portage/tests/sets/shell/meson.build | 9 + .../sets/shell/{testShell.py => test_shell.py} | 0 lib/portage/tests/sync/meson.build | 9 + lib/portage/tests/sync/test_sync_local.py | 15 +- lib/portage/tests/unicode/meson.build | 9 + lib/portage/tests/unicode/test_string_format.py | 2 +- lib/portage/tests/update/meson.build | 11 + lib/portage/tests/util/dyn_libs/meson.build | 9 + lib/portage/tests/util/eventloop/meson.build | 9 + lib/portage/tests/util/file_copy/meson.build | 9 + lib/portage/tests/util/file_copy/test_copyfile.py | 11 +- lib/portage/tests/util/futures/asyncio/meson.build | 15 + .../tests/util/futures/asyncio/test_pipe_closed.py | 4 +- .../util/futures/asyncio/test_subprocess_exec.py | 4 +- lib/portage/tests/util/futures/meson.build | 15 + .../tests/util/futures/test_iter_completed.py | 17 +- lib/portage/tests/util/meson.build | 31 + lib/portage/tests/util/test_getconfig.py | 2 +- lib/portage/tests/util/test_uniqueArray.py | 3 +- lib/portage/tests/versions/meson.build | 10 + lib/portage/tests/xpak/meson.build | 9 + lib/portage/util/ExtractKernelVersion.py | 4 - lib/portage/util/_async/AsyncFunction.py | 32 +- lib/portage/util/_async/FileCopier.py | 18 +- lib/portage/util/_async/FileDigester.py | 71 +- lib/portage/util/_async/ForkProcess.py | 187 ++++- lib/portage/util/_async/PipeLogger.py | 2 +- lib/portage/util/_async/meson.build | 20 + lib/portage/util/_dyn_libs/meson.build | 14 + lib/portage/util/_eventloop/asyncio_event_loop.py | 40 +- lib/portage/util/_eventloop/meson.build | 9 + lib/portage/util/bin_entry_point.py | 18 +- lib/portage/util/elf/meson.build | 9 + lib/portage/util/endian/meson.build | 8 + lib/portage/util/env_update.py | 67 +- lib/portage/util/file_copy/meson.build | 7 + lib/portage/util/futures/_asyncio/meson.build | 8 + lib/portage/util/futures/executor/meson.build | 8 + lib/portage/util/futures/extendedfutures.py | 2 +- lib/portage/util/futures/meson.build | 17 + lib/portage/util/futures/retry.py | 2 +- lib/portage/util/iterators/meson.build | 8 + lib/portage/util/lafilefixer.py | 2 +- lib/portage/util/meson.build | 49 ++ lib/portage/util/movefile.py | 5 +- lib/portage/util/mtimedb.py | 2 +- lib/portage/util/socks5.py | 2 +- lib/portage/util/writeable_check.py | 2 +- lib/portage/versions.py | 91 +- lib/portage/xml/meson.build | 8 + lib/portage/xpak.py | 7 +- man/color.map.5 | 8 +- man/dispatch-conf.1 | 2 +- man/ebuild.1 | 2 +- man/ebuild.5 | 34 +- man/egencache.1 | 2 +- man/emaint.1 | 2 +- man/emerge.1 | 20 +- man/emirrordist.1 | 4 +- man/env-update.1 | 2 +- man/etc-update.1 | 2 +- man/fixpackages.1 | 2 +- man/glsa-check.1 | 2 +- man/make.conf.5 | 53 +- man/meson.build | 31 + man/portage.5 | 40 +- man/quickpkg.1 | 2 +- man/ru/color.map.5 | 2 +- man/ru/dispatch-conf.1 | 2 +- man/ru/ebuild.1 | 2 +- man/ru/env-update.1 | 2 +- man/ru/etc-update.1 | 2 +- man/ru/fixpackages.1 | 2 +- man/ru/meson.build | 19 + meson.build | 126 +++ meson_options.txt | 59 ++ misc/emerge-delta-webrsync | 303 +++++-- pyproject.toml | 44 +- runtests | 184 ---- setup.py | 925 --------------------- src/meson.build | 50 ++ src/portage_util_file_copy_reflink_linux.c | 1 + tox.ini | 7 +- 320 files changed, 6795 insertions(+), 4202 deletions(-) diff --cc bin/emerge-webrsync index db4bb6d1e8,99da05543a..9959b6a5a7 --- a/bin/emerge-webrsync +++ b/bin/emerge-webrsync @@@ -71,32 -71,21 +71,29 @@@ die() argv0=$0 - # Use portageq from the same directory/prefix as the current script, so - # that we don't have to rely on PATH including the current EPREFIX. - scriptpath=${BASH_SOURCE[0]} - if [[ -x "${scriptpath%/*}/portageq" ]]; then - portageq=${scriptpath%/*}/portageq - elif type -P portageq > /dev/null ; then - portageq=portageq - else - die "could not find 'portageq'; aborting" - fi + # Use emerge and portageq from the same directory/prefix as the current script, + # so that we don't have to rely on PATH including the current EPREFIX. + emerge=$(PATH="${BASH_SOURCE[0]%/*}:${PATH}" type -P emerge) + [[ -n ${emerge} ]] || die "could not find 'emerge'; aborting" + portageq=$(PATH="${BASH_SOURCE[0]%/*}:${PATH}" type -P portageq) + [[ -n ${portageq} ]] || die "could not find 'portageq'; aborting" +# PREFIX LOCAL: retrieve PORTAGE_USER/PORTAGE_GROUP eval "$("${portageq}" envvar -v DISTDIR EPREFIX FEATURES \ FETCHCOMMAND GENTOO_MIRRORS \ PORTAGE_BIN_PATH PORTAGE_CONFIGROOT PORTAGE_GPG_DIR \ PORTAGE_NICENESS PORTAGE_REPOSITORIES PORTAGE_RSYNC_EXTRA_OPTS \ PORTAGE_RSYNC_OPTS PORTAGE_TEMP_GPG_DIR PORTAGE_TMPDIR \ - USERLAND http_proxy https_proxy ftp_proxy)" + USERLAND http_proxy ftp_proxy \ ++ USERLAND http_proxy https_proxy ftp_proxy + PORTAGE_USER PORTAGE_GROUP)" - export http_proxy ftp_proxy + export http_proxy https_proxy ftp_proxy +# PREFIX LOCAL: use Prefix servers, just because we want this and infra +# can't support us yet +GENTOO_MIRRORS="http://rsync.prefix.bitzolder.nl" +# END PREFIX LOCAL + source "${PORTAGE_BIN_PATH}"/isolated-functions.sh || exit 1 repo_name=gentoo diff --cc bin/install-qa-check.d/05prefix index 8a83893f14,28f2c06afe..8cf3728627 --- a/bin/install-qa-check.d/05prefix +++ b/bin/install-qa-check.d/05prefix @@@ -80,14 -76,12 +80,12 @@@ install_qa_check_prefix() fi continue fi - # BEGIN PREFIX LOCAL: also check init scripts - # unprefixed shebang, is the script directly in ${PATH} or an init - # script? + # unprefixed shebang, is the script directly in ${PATH} or an init script? if [[ ":${PATH}:${EPREFIX}/etc/init.d:" == *":${fp}:"* ]] ; then if [[ -e ${EROOT}${line[0]} || -e ${ED}${line[0]} ]] ; then - # is it unprefixed, but we can just fix it because a - # prefixed variant exists - eqawarn "prefixing shebang of ${fn#${D}}" + # is it unprefixed, but we can just fix it because an + # eprefixed variant exists + eqawarn "eprefixing shebang of ${fn#${D%/}/}" # statement is made idempotent on purpose, because # symlinks may point to the same target, and hence the # same real file may be sedded multiple times since we diff --cc bin/save-ebuild-env.sh index 294cab2555,3a2560aabf..c3c83c91d2 mode 100755,100644..100755 --- a/bin/save-ebuild-env.sh +++ b/bin/save-ebuild-env.sh diff --cc lib/portage/const.py index 8aa7e557ff,bf310bb6e0..8769ab2707 --- a/lib/portage/const.py +++ b/lib/portage/const.py @@@ -2,15 -2,10 +2,17 @@@ # Copyright 1998-2023 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 +# BEGIN PREFIX LOCAL +# =========================================================================== +# autotool supplied constants. +# =========================================================================== +from portage.const_autotool import * +# END PREFIX LOCAL + import os + from portage import installation + # =========================================================================== # START OF CONSTANTS -- START OF CONSTANTS -- START OF CONSTANTS -- START OF # =========================================================================== @@@ -79,27 -98,12 +105,26 @@@ PORTAGE_PYM_PATH = os.path.realpath(os. LOCALE_DATA_PATH = f"{PORTAGE_BASE_PATH}/locale" # FIXME: not used EBUILD_SH_BINARY = f"{PORTAGE_BIN_PATH}/ebuild.sh" MISC_SH_BINARY = f"{PORTAGE_BIN_PATH}/misc-functions.sh" - # BEGIN PREFIX LOCAL: use EPREFIX for binaries - SANDBOX_BINARY = f"{EPREFIX}/usr/bin/sandbox" - FAKEROOT_BINARY = f"{EPREFIX}/usr/bin/fakeroot" - # END PREFIX LOCAL - BASH_BINARY = "/bin/bash" - MOVE_BINARY = "/bin/mv" - PRELINK_BINARY = "/usr/sbin/prelink" + SANDBOX_BINARY = f"{BINARY_PREFIX}/usr/bin/sandbox" + FAKEROOT_BINARY = f"{BINARY_PREFIX}/usr/bin/fakeroot" + BASH_BINARY = f"{BINARY_PREFIX}/bin/bash" + MOVE_BINARY = f"{BINARY_PREFIX}/bin/mv" + PRELINK_BINARY = f"{BINARY_PREFIX}/usr/sbin/prelink" + +# BEGIN PREFIX LOCAL: macOS sandbox +MACOSSANDBOX_BINARY = "/usr/bin/sandbox-exec" +MACOSSANDBOX_PROFILE = '''(version 1) +(allow default) +(deny file-write*) +(allow file-write* file-write-setugid +@@MACOSSANDBOX_PATHS@@) +(allow file-write-data +@@MACOSSANDBOX_PATHS_CONTENT_ONLY@@)''' + +PORTAGE_GROUPNAME = portagegroup +PORTAGE_USERNAME = portageuser +# END PREFIX LOCAL + INVALID_ENV_FILE = "/etc/spork/is/not/valid/profile.env" MERGING_IDENTIFIER = "-MERGING-" REPO_NAME_FILE = "repo_name" diff --cc lib/portage/dbapi/bintree.py index 78f7604441,6446fde95a..9d09db3fe2 --- a/lib/portage/dbapi/bintree.py +++ b/lib/portage/dbapi/bintree.py @@@ -128,11 -128,30 +128,32 @@@ class bindbapi(fakedbapi) "SLOT", "USE", "_mtime_", + # PREFIX LOCAL + "EPREFIX", } - self._aux_cache_slot_dict = slot_dict_class(self._aux_cache_keys) self._aux_cache = {} + self._aux_cache_slot_dict_cache = None + + @property + def _aux_cache_slot_dict(self): + if self._aux_cache_slot_dict_cache is None: + self._aux_cache_slot_dict_cache = slot_dict_class(self._aux_cache_keys) + return self._aux_cache_slot_dict_cache + + def __getstate__(self): + state = self.__dict__.copy() + # These attributes are not picklable, so they are automatically + # regenerated after unpickling. + state["_aux_cache_slot_dict_cache"] = None + state["_instance_key"] = None + return state + + def __setstate__(self, state): + self.__dict__.update(state) + if self._multi_instance: + self._instance_key = self._instance_key_multi_instance + else: + self._instance_key = self._instance_key_cpv @property def writable(self): diff --cc lib/portage/package/ebuild/fetch.py index 49cce7f063,5f970fe62d..d67d3115fe --- a/lib/portage/package/ebuild/fetch.py +++ b/lib/portage/package/ebuild/fetch.py @@@ -234,10 -232,9 +234,10 @@@ def _ensure_distdir(settings, distdir) if "FAKED_MODE" in settings: # When inside fakeroot, directories with portage's gid appear # to have root's gid. Therefore, use root's gid instead of - # portage's gid to avoid spurrious permissions adjustments + # portage's gid to avoid spurious permissions adjustments # when inside fakeroot. - dir_gid = 0 + # PREFIX LOCAL: do not assume root to be 0 + dir_gid = rootgid userfetch = portage.data.secpass >= 2 and "userfetch" in settings.features userpriv = portage.data.secpass >= 2 and "userpriv" in settings.features