From: "Fabian Groffen" <grobian@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage:prefix commit in: /
Date: Sat, 17 Jun 2023 08:41:04 +0000 (UTC) [thread overview]
Message-ID: <1686991227.46fc4d8a2205d98584c4198070e42933c1cd1e62.grobian@gentoo> (raw)
commit: 46fc4d8a2205d98584c4198070e42933c1cd1e62
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Sat Jun 17 08:40:27 2023 +0000
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Sat Jun 17 08:40:27 2023 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=46fc4d8a
Merge remote-tracking branch 'origin/master' into prefix
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>
.builds/ci.yml | 39 +
.builds/lint.yml | 47 +
.builds/setup-python.sh | 30 +
.editorconfig | 4 +
.git-blame-ignore-revs | 6 +
.github/workflows/black.yml | 18 -
.github/workflows/ci.yml | 64 +-
.github/workflows/lint.yml | 49 +
.github/workflows/pre-commit.yml | 14 +
.gitignore | 6 +
.pre-commit-config.yaml | 21 +
DEVELOPING | 47 +-
NEWS | 695 ++++-
README.md | 11 +
bin/archive-conf | 23 +-
bin/bashrc-functions.sh | 18 +-
bin/binhost-snapshot | 33 +-
bin/check-implicit-pointer-usage.py | 79 -
bin/chmod-lite.py | 1 -
bin/chpathtool.py | 20 +-
bin/clean_locks | 6 +-
bin/deprecated-path | 28 -
bin/dispatch-conf | 51 +-
bin/dohtml.py | 26 +-
bin/doins.py | 24 +-
bin/eapi.sh | 4 +-
bin/ebuild | 773 +++---
bin/ebuild-helpers/bsd/sed | 3 +-
bin/ebuild-helpers/dobin | 16 +-
bin/ebuild-helpers/doconfd | 6 +-
bin/ebuild-helpers/dodir | 4 +-
bin/ebuild-helpers/dodoc | 8 +-
bin/ebuild-helpers/doenvd | 6 +-
bin/ebuild-helpers/doexe | 23 +-
bin/ebuild-helpers/dohard | 4 +-
bin/ebuild-helpers/doheader | 6 +-
bin/ebuild-helpers/dohtml | 10 +-
bin/ebuild-helpers/doinfo | 6 +-
bin/ebuild-helpers/doinitd | 4 +-
bin/ebuild-helpers/doins | 20 +-
bin/ebuild-helpers/dolib | 22 +-
bin/ebuild-helpers/doman | 10 +-
bin/ebuild-helpers/domo | 20 +-
bin/ebuild-helpers/dosbin | 14 +-
bin/ebuild-helpers/dosed | 8 +-
bin/ebuild-helpers/dosym | 20 +-
bin/ebuild-helpers/fowners | 36 +-
bin/ebuild-helpers/fperms | 33 +-
bin/ebuild-helpers/newins | 14 +-
bin/ebuild-helpers/portageq | 27 +-
bin/ebuild-helpers/prepallstrip | 6 +-
bin/ebuild-helpers/prepinfo | 11 +-
bin/ebuild-helpers/prepman | 6 +-
bin/ebuild-helpers/prepstrip | 6 +-
bin/ebuild-helpers/unprivileged/chown | 3 +-
bin/ebuild-helpers/xattr/install | 2 +-
bin/ebuild-ipc.py | 526 ++--
bin/ebuild-pyhelper | 4 +-
bin/ebuild.sh | 192 +-
bin/ecompress | 25 +-
bin/ecompress-file | 15 +-
bin/egencache | 2433 +++++++++--------
bin/emaint | 87 +-
bin/emerge | 62 +-
bin/emerge-webrsync | 490 ++--
bin/env-update | 2 +-
bin/estrip | 108 +-
bin/etc-update | 32 +-
bin/filter-bash-environment.py | 2 +-
bin/fixpackages | 4 +-
bin/glsa-check | 37 +-
bin/gpkg-helper.py | 27 +-
bin/gpkg-sign | 77 +
bin/install-qa-check.d/05prefix | 8 +-
bin/install-qa-check.d/10executable-issues | 2 +-
bin/install-qa-check.d/10ignored-flags | 2 +-
bin/install-qa-check.d/20deprecated-directories | 6 +-
bin/install-qa-check.d/60pkgconfig | 61 +-
bin/install-qa-check.d/60udev | 5 +-
bin/install-qa-check.d/80libraries | 2 +-
bin/install-qa-check.d/90bad-bin-owner | 2 +-
bin/install-qa-check.d/90config-impl-decl | 141 +
bin/install-qa-check.d/90cython-dep | 45 +
bin/install-qa-check.d/90gcc-warnings | 132 +-
bin/install-qa-check.d/90world-writable | 10 +-
bin/install.py | 3 +-
bin/isolated-functions.sh | 80 +-
bin/lock-helper.py | 1 -
bin/misc-functions.sh | 133 +-
bin/phase-functions.sh | 278 +-
bin/phase-helpers.sh | 246 +-
bin/pid-ns-init | 6 +-
bin/portageq | 2854 ++++++++++----------
bin/portageq-wrapper | 19 +
bin/postinst-qa-check.d/50xdg-utils | 21 +-
bin/quickpkg | 102 +-
bin/regenworld | 14 +-
bin/save-ebuild-env.sh | 12 +-
bin/socks5-server.py | 2 +-
bin/xattr-helper.py | 7 +-
bin/xpak-helper.py | 14 +-
cnf/make.conf.example | 17 +
cnf/make.conf.example.loong.diff | 56 +
cnf/sets/portage.conf | 12 +-
doc/api/conf.py | 6 +-
lib/_emerge/AbstractEbuildProcess.py | 94 +-
lib/_emerge/AbstractPollTask.py | 5 +-
lib/_emerge/AsynchronousLock.py | 40 +-
lib/_emerge/AsynchronousTask.py | 3 +-
lib/_emerge/AtomArg.py | 1 -
lib/_emerge/Binpkg.py | 88 +-
lib/_emerge/BinpkgEnvExtractor.py | 6 +-
lib/_emerge/BinpkgExtractorAsync.py | 71 +-
lib/_emerge/BinpkgFetcher.py | 50 +-
lib/_emerge/BinpkgPrefetcher.py | 10 +-
lib/_emerge/BinpkgVerifier.py | 22 +-
lib/_emerge/Blocker.py | 1 -
lib/_emerge/BlockerCache.py | 5 +-
lib/_emerge/BlockerDB.py | 5 +-
lib/_emerge/CompositeTask.py | 3 +-
lib/_emerge/DepPriority.py | 1 -
lib/_emerge/DependencyArg.py | 3 +-
lib/_emerge/EbuildBinpkg.py | 36 +-
lib/_emerge/EbuildBuild.py | 34 +-
lib/_emerge/EbuildBuildDir.py | 3 +-
lib/_emerge/EbuildExecuter.py | 7 +-
lib/_emerge/EbuildFetcher.py | 17 +-
lib/_emerge/EbuildFetchonly.py | 5 +-
lib/_emerge/EbuildIpcDaemon.py | 3 +-
lib/_emerge/EbuildMerge.py | 11 +-
lib/_emerge/EbuildMetadataPhase.py | 5 +-
lib/_emerge/EbuildPhase.py | 33 +-
lib/_emerge/EbuildProcess.py | 2 -
lib/_emerge/EbuildSpawnProcess.py | 1 -
lib/_emerge/FakeVartree.py | 7 +-
lib/_emerge/FifoIpcDaemon.py | 1 -
lib/_emerge/JobStatusDisplay.py | 23 +-
lib/_emerge/MergeListItem.py | 13 +-
lib/_emerge/MetadataRegen.py | 21 +-
lib/_emerge/Package.py | 50 +-
lib/_emerge/PackageMerge.py | 65 +-
lib/_emerge/PackagePhase.py | 6 +-
lib/_emerge/PackageUninstall.py | 10 +-
lib/_emerge/PipeReader.py | 2 -
lib/_emerge/PollScheduler.py | 8 +-
lib/_emerge/Scheduler.py | 105 +-
lib/_emerge/SequentialTaskQueue.py | 2 -
lib/_emerge/SetArg.py | 1 -
lib/_emerge/SpawnProcess.py | 27 +-
lib/_emerge/SubProcess.py | 9 +-
lib/_emerge/Task.py | 7 +-
lib/_emerge/UseFlagDisplay.py | 7 +-
lib/_emerge/UserQuery.py | 7 +-
lib/_emerge/actions.py | 496 ++--
lib/_emerge/chk_updated_cfg_files.py | 8 +-
lib/_emerge/countdown.py | 6 +-
lib/_emerge/create_depgraph_params.py | 8 +-
lib/_emerge/create_world_atom.py | 4 +-
lib/_emerge/depgraph.py | 1060 ++++----
lib/_emerge/emergelog.py | 10 +-
lib/_emerge/getloadavg.py | 2 +-
lib/_emerge/is_valid_package_atom.py | 2 +-
lib/_emerge/main.py | 22 +-
lib/_emerge/post_emerge.py | 9 +-
lib/_emerge/resolver/backtracking.py | 8 +-
lib/_emerge/resolver/circular_dependency.py | 24 +-
lib/_emerge/resolver/output.py | 59 +-
lib/_emerge/resolver/output_helpers.py | 50 +-
lib/_emerge/resolver/package_tracker.py | 6 +-
lib/_emerge/resolver/slot_collision.py | 95 +-
lib/_emerge/search.py | 25 +-
lib/_emerge/show_invalid_depstring_notice.py | 11 +-
lib/_emerge/stdout_spinner.py | 1 +
lib/_emerge/unmerge.py | 49 +-
lib/portage/__init__.py | 31 +-
lib/portage/_compat_upgrade/binpkg_compression.py | 4 +-
.../_compat_upgrade/binpkg_multi_instance.py | 8 +-
lib/portage/_compat_upgrade/default_locations.py | 12 +-
lib/portage/_emirrordist/Config.py | 17 +-
lib/portage/_emirrordist/ContentDB.py | 16 +-
lib/portage/_emirrordist/DeletionIterator.py | 18 +-
lib/portage/_emirrordist/DeletionTask.py | 40 +-
lib/portage/_emirrordist/FetchIterator.py | 21 +-
lib/portage/_emirrordist/FetchTask.py | 118 +-
lib/portage/_emirrordist/MirrorDistTask.py | 55 +-
lib/portage/_emirrordist/main.py | 12 +-
lib/portage/_global_updates.py | 4 +-
lib/portage/_selinux.py | 4 +-
lib/portage/_sets/ProfilePackageSet.py | 6 +-
lib/portage/_sets/__init__.py | 42 +-
lib/portage/_sets/base.py | 16 +-
lib/portage/_sets/dbapi.py | 74 +-
lib/portage/_sets/files.py | 38 +-
lib/portage/_sets/libs.py | 6 +-
lib/portage/_sets/profiles.py | 12 +-
lib/portage/_sets/security.py | 4 +-
lib/portage/_sets/shell.py | 4 +-
lib/portage/binpkg.py | 32 +-
lib/portage/cache/anydbm.py | 5 +-
lib/portage/cache/cache_errors.py | 15 +-
lib/portage/cache/ebuild_xattr.py | 17 +-
lib/portage/cache/flat_hash.py | 22 +-
lib/portage/cache/fs_template.py | 7 +-
lib/portage/cache/index/IndexStreamIterator.py | 4 -
lib/portage/cache/index/pkg_desc_index.py | 3 +-
lib/portage/cache/mappings.py | 3 -
lib/portage/cache/metadata.py | 20 +-
lib/portage/cache/sql_template.py | 18 +-
lib/portage/cache/sqlite.py | 25 +-
lib/portage/cache/template.py | 35 +-
lib/portage/cache/volatile.py | 3 +-
lib/portage/checksum.py | 235 +-
lib/portage/const.py | 10 +-
lib/portage/cvstree.py | 12 +-
lib/portage/data.py | 7 +-
lib/portage/dbapi/IndexedPortdb.py | 8 +-
.../dbapi/_ContentsCaseSensitivityManager.py | 8 +-
lib/portage/dbapi/_MergeProcess.py | 15 +-
lib/portage/dbapi/_SyncfsProcess.py | 2 -
lib/portage/dbapi/_VdbMetadataDelta.py | 11 +-
lib/portage/dbapi/__init__.py | 19 +-
lib/portage/dbapi/_similar_name_search.py | 1 -
lib/portage/dbapi/bintree.py | 717 +++--
lib/portage/dbapi/porttree.py | 67 +-
lib/portage/dbapi/vartree.py | 378 ++-
lib/portage/dbapi/virtual.py | 21 +-
lib/portage/debug.py | 12 +-
lib/portage/dep/__init__.py | 51 +-
lib/portage/dep/_dnf.py | 10 +-
lib/portage/dep/_slot_operator.py | 9 +-
lib/portage/dep/dep_check.py | 36 +-
lib/portage/dep/soname/SonameAtom.py | 11 +-
lib/portage/dep/soname/multilib_category.py | 7 +-
lib/portage/dispatch_conf.py | 7 +-
lib/portage/elog/__init__.py | 9 +-
lib/portage/elog/messages.py | 4 +-
lib/portage/elog/mod_mail.py | 2 +-
lib/portage/elog/mod_mail_summary.py | 4 +-
lib/portage/elog/mod_save.py | 10 +-
lib/portage/elog/mod_save_summary.py | 9 +-
lib/portage/elog/mod_syslog.py | 2 +-
lib/portage/emaint/main.py | 40 +-
lib/portage/emaint/modules/binhost/binhost.py | 8 +-
lib/portage/emaint/modules/config/config.py | 5 +-
lib/portage/emaint/modules/logs/logs.py | 5 +-
lib/portage/emaint/modules/merges/merges.py | 26 +-
lib/portage/emaint/modules/move/move.py | 13 +-
lib/portage/emaint/modules/resume/resume.py | 9 +-
lib/portage/emaint/modules/sync/sync.py | 6 +-
lib/portage/emaint/modules/world/world.py | 9 +-
lib/portage/env/config.py | 16 +-
lib/portage/env/loaders.py | 8 +-
lib/portage/exception.py | 2 +-
lib/portage/getbinpkg.py | 15 +-
lib/portage/glsa.py | 33 +-
lib/portage/gpkg.py | 386 ++-
lib/portage/locks.py | 32 +-
lib/portage/mail.py | 5 +-
lib/portage/manifest.py | 36 +-
lib/portage/module.py | 16 +-
lib/portage/news.py | 137 +-
lib/portage/output.py | 29 +-
.../package/ebuild/_config/LicenseManager.py | 1 -
.../package/ebuild/_config/LocationsManager.py | 29 +-
.../package/ebuild/_config/special_env_vars.py | 545 ++--
lib/portage/package/ebuild/_ipc/ExitCommand.py | 2 -
lib/portage/package/ebuild/_ipc/IpcCommand.py | 1 -
lib/portage/package/ebuild/_ipc/QueryCommand.py | 29 +-
lib/portage/package/ebuild/_metadata_invalid.py | 3 +-
.../ebuild/_parallel_manifest/ManifestProcess.py | 7 +-
.../ebuild/_parallel_manifest/ManifestScheduler.py | 5 +-
.../ebuild/_parallel_manifest/ManifestTask.py | 3 +-
lib/portage/package/ebuild/config.py | 74 +-
.../package/ebuild/deprecated_profile_check.py | 4 +-
lib/portage/package/ebuild/digestcheck.py | 2 +-
lib/portage/package/ebuild/digestgen.py | 8 +-
lib/portage/package/ebuild/doebuild.py | 277 +-
lib/portage/package/ebuild/fetch.py | 70 +-
lib/portage/package/ebuild/getmaskingstatus.py | 13 +-
lib/portage/package/ebuild/prepare_build_dirs.py | 32 +-
lib/portage/process.py | 87 +-
lib/portage/proxy/lazyimport.py | 12 +-
lib/portage/repository/config.py | 80 +-
.../repository/storage/hardlink_quarantine.py | 6 +-
lib/portage/repository/storage/hardlink_rcu.py | 4 +-
lib/portage/sync/controller.py | 13 +-
lib/portage/sync/modules/git/git.py | 258 +-
lib/portage/sync/modules/mercurial/mercurial.py | 40 +-
lib/portage/sync/modules/rsync/rsync.py | 58 +-
lib/portage/sync/modules/svn/svn.py | 10 +-
lib/portage/sync/modules/webrsync/__init__.py | 4 +-
lib/portage/sync/modules/webrsync/webrsync.py | 56 +-
lib/portage/sync/old_tree_timestamp.py | 4 +-
lib/portage/sync/syncbase.py | 33 +-
lib/portage/tests/__init__.py | 23 +-
lib/portage/tests/bin/test_doins.py | 4 +-
lib/portage/tests/bin/test_eapi7_ver_funcs.py | 30 +-
lib/portage/tests/bin/test_filter_bash_env.py | 23 +-
lib/portage/tests/conftest.py | 89 +
lib/portage/tests/dbapi/test_auxdb.py | 5 +-
lib/portage/tests/dbapi/test_bintree.py | 155 ++
lib/portage/tests/dbapi/test_fakedbapi.py | 2 +-
lib/portage/tests/dbapi/test_portdb_cache.py | 32 +-
lib/portage/tests/dep/testAtom.py | 27 +-
lib/portage/tests/dep/testStandalone.py | 5 +-
lib/portage/tests/dep/test_dep_getcpv.py | 1 -
lib/portage/tests/dep/test_dep_getrepo.py | 1 -
lib/portage/tests/dep/test_dep_getslot.py | 1 -
lib/portage/tests/dep/test_dep_getusedeps.py | 3 +-
lib/portage/tests/dep/test_dnf_convert.py | 1 -
lib/portage/tests/dep/test_get_operator.py | 3 +-
.../tests/dep/test_get_required_use_flags.py | 2 +-
lib/portage/tests/dep/test_isjustname.py | 5 +-
lib/portage/tests/dep/test_isvalidatom.py | 3 +-
lib/portage/tests/dep/test_match_from_list.py | 2 +-
lib/portage/tests/dep/test_overlap_dnf.py | 1 -
lib/portage/tests/dep/test_paren_reduce.py | 1 -
lib/portage/tests/dep/test_soname_atom_pickle.py | 1 -
lib/portage/tests/dep/test_use_reduce.py | 3 +-
.../tests/ebuild/test_array_fromfile_eof.py | 2 +-
lib/portage/tests/ebuild/test_config.py | 10 +-
lib/portage/tests/ebuild/test_doebuild_fd_pipes.py | 2 -
lib/portage/tests/ebuild/test_doebuild_spawn.py | 2 -
lib/portage/tests/ebuild/test_fetch.py | 48 +-
lib/portage/tests/ebuild/test_ipc_daemon.py | 1 -
lib/portage/tests/ebuild/test_shell_quote.py | 2 +-
lib/portage/tests/ebuild/test_spawn.py | 8 +-
.../tests/ebuild/test_use_expand_incremental.py | 8 +-
lib/portage/tests/emerge/test_actions.py | 45 +
lib/portage/tests/emerge/test_config_protect.py | 12 +-
.../emerge/test_emerge_blocker_file_collision.py | 10 +-
lib/portage/tests/emerge/test_emerge_slot_abi.py | 10 +-
lib/portage/tests/emerge/test_simple.py | 19 +-
.../tests/env/config/test_PackageKeywordsFile.py | 3 +-
.../tests/env/config/test_PackageUseFile.py | 3 +-
.../tests/env/config/test_PortageModulesFile.py | 3 +-
lib/portage/tests/glsa/test_security_set.py | 139 +-
lib/portage/tests/gpkg/test_gpkg_checksum.py | 46 +-
lib/portage/tests/gpkg/test_gpkg_gpg.py | 48 +-
.../tests/gpkg/test_gpkg_metadata_update.py | 3 -
lib/portage/tests/gpkg/test_gpkg_metadata_url.py | 13 -
lib/portage/tests/gpkg/test_gpkg_path.py | 20 -
lib/portage/tests/gpkg/test_gpkg_size.py | 4 -
lib/portage/tests/gpkg/test_gpkg_stream.py | 19 -
.../test_lazy_import_portage_baseline.py | 1 -
lib/portage/tests/lint/test_compile_modules.py | 2 +-
lib/portage/tests/lint/test_import_modules.py | 2 +-
lib/portage/tests/locks/test_asynchronous_lock.py | 31 +-
lib/portage/tests/news/test_NewsItem.py | 442 ++-
lib/portage/tests/process/test_PipeLogger.py | 2 +-
lib/portage/tests/process/test_PopenProcess.py | 15 +-
.../tests/process/test_PopenProcessBlockingIO.py | 22 +-
lib/portage/tests/process/test_poll.py | 15 +-
lib/portage/tests/process/test_spawn_fail_e2big.py | 30 +
.../tests/process/test_spawn_warn_large_env.py | 46 +
lib/portage/tests/process/test_unshare_net.py | 38 +-
lib/portage/tests/resolver/ResolverPlayground.py | 78 +-
.../test_build_id_profile_format.py | 4 +-
.../binpkg_multi_instance/test_rebuilt_binaries.py | 4 +-
.../tests/resolver/soname/test_autounmask.py | 4 +-
lib/portage/tests/resolver/soname/test_depclean.py | 1 -
.../tests/resolver/soname/test_downgrade.py | 7 +-
.../tests/resolver/soname/test_or_choices.py | 4 +-
.../tests/resolver/soname/test_reinstall.py | 4 +-
.../tests/resolver/soname/test_skip_update.py | 4 +-
.../soname/test_slot_conflict_reinstall.py | 18 +-
.../resolver/soname/test_slot_conflict_update.py | 4 +-
.../tests/resolver/soname/test_soname_provided.py | 4 +-
.../tests/resolver/soname/test_unsatisfiable.py | 4 +-
.../tests/resolver/soname/test_unsatisfied.py | 4 +-
.../test_aggressive_backtrack_downgrade.py | 1 -
lib/portage/tests/resolver/test_autounmask.py | 26 +-
.../tests/resolver/test_autounmask_binpkg_use.py | 3 +-
.../tests/resolver/test_autounmask_multilib_use.py | 6 +-
.../tests/resolver/test_autounmask_parent.py | 1 -
.../tests/resolver/test_autounmask_use_breakage.py | 1 -
.../resolver/test_autounmask_use_slot_conflict.py | 5 +-
lib/portage/tests/resolver/test_bdeps.py | 4 +-
.../resolver/test_binary_pkg_ebuild_visibility.py | 4 +-
lib/portage/tests/resolver/test_changed_deps.py | 4 +-
.../tests/resolver/test_circular_choices.py | 5 -
.../tests/resolver/test_circular_choices_rust.py | 1 -
.../tests/resolver/test_circular_dependencies.py | 2 -
...test_complete_if_new_subslot_without_revbump.py | 4 +-
lib/portage/tests/resolver/test_depclean.py | 3 -
lib/portage/tests/resolver/test_depclean_order.py | 1 -
lib/portage/tests/resolver/test_depth.py | 1 -
.../resolver/test_disjunctive_depend_order.py | 3 +-
lib/portage/tests/resolver/test_eapi.py | 44 +-
.../resolver/test_imagemagick_graphicsmagick.py | 1 -
lib/portage/tests/resolver/test_multirepo.py | 5 +-
lib/portage/tests/resolver/test_onlydeps_ideps.py | 172 ++
.../tests/resolver/test_onlydeps_minimal.py | 25 +
lib/portage/tests/resolver/test_or_choices.py | 8 +-
lib/portage/tests/resolver/test_package_tracker.py | 3 +-
.../tests/resolver/test_perl_rebuild_bug.py | 121 +
.../tests/resolver/test_profile_default_eapi.py | 6 +-
.../tests/resolver/test_profile_package_set.py | 6 +-
.../test_regular_slot_change_without_revbump.py | 4 +-
lib/portage/tests/resolver/test_required_use.py | 1 -
lib/portage/tests/resolver/test_simple.py | 3 +-
lib/portage/tests/resolver/test_slot_abi.py | 9 +-
.../tests/resolver/test_slot_abi_downgrade.py | 7 +-
.../resolver/test_slot_change_without_revbump.py | 4 +-
lib/portage/tests/resolver/test_slot_collisions.py | 1 -
.../resolver/test_slot_conflict_blocked_prune.py | 78 +
.../resolver/test_slot_conflict_force_rebuild.py | 1 -
.../tests/resolver/test_slot_conflict_rebuild.py | 10 +-
.../test_slot_conflict_unsatisfied_deep_deps.py | 1 -
.../tests/resolver/test_slot_conflict_update.py | 1 -
.../resolver/test_slot_conflict_update_virt.py | 1 -
.../resolver/test_slot_operator_autounmask.py | 5 +-
.../tests/resolver/test_slot_operator_bdeps.py | 4 +-
.../resolver/test_slot_operator_complete_graph.py | 1 -
.../resolver/test_slot_operator_exclusive_slots.py | 1 -
.../resolver/test_slot_operator_missed_update.py | 1 -
.../tests/resolver/test_slot_operator_rebuild.py | 4 +-
.../resolver/test_slot_operator_required_use.py | 1 -
.../resolver/test_slot_operator_reverse_deps.py | 1 -
.../test_slot_operator_runtime_pkg_mask.py | 1 -
.../resolver/test_slot_operator_unsatisfied.py | 1 -
.../tests/resolver/test_slot_operator_unsolved.py | 5 +-
..._slot_operator_update_probe_parent_downgrade.py | 1 -
.../test_solve_non_slot_operator_slot_conflicts.py | 1 -
lib/portage/tests/resolver/test_update.py | 106 +
.../tests/resolver/test_use_dep_defaults.py | 1 -
lib/portage/tests/resolver/test_useflags.py | 3 +-
lib/portage/tests/resolver/test_virtual_slot.py | 4 -
lib/portage/tests/runTests.py | 14 +-
.../tests/sets/base/testInternalPackageSet.py | 4 +-
.../base/testVariableSet.py} | 24 +-
lib/portage/tests/sets/shell/testShell.py | 3 +-
lib/portage/tests/sync/test_sync_local.py | 21 +-
lib/portage/tests/unicode/test_string_format.py | 15 +-
lib/portage/tests/update/test_move_ent.py | 7 +-
lib/portage/tests/update/test_move_slot_ent.py | 4 +-
lib/portage/tests/update/test_update_dbentry.py | 4 +-
.../tests/util/eventloop/test_call_soon_fifo.py | 1 -
lib/portage/tests/util/file_copy/test_copyfile.py | 16 +-
.../util/futures/asyncio/test_child_watcher.py | 1 -
.../tests/util/futures/asyncio/test_pipe_closed.py | 4 +-
.../util/futures/asyncio/test_subprocess_exec.py | 2 -
.../util/futures/asyncio/test_wakeup_fd_sigchld.py | 2 +-
.../tests/util/futures/test_compat_coroutine.py | 1 -
.../tests/util/futures/test_done_callback.py | 1 -
.../tests/util/futures/test_iter_completed.py | 2 -
lib/portage/tests/util/futures/test_retry.py | 16 +-
lib/portage/tests/util/test_checksum.py | 49 +-
lib/portage/tests/util/test_digraph.py | 60 +-
lib/portage/tests/util/test_file_copier.py | 1 -
lib/portage/tests/util/test_getconfig.py | 4 +-
lib/portage/tests/util/test_install_mask.py | 6 +-
lib/portage/tests/util/test_manifest.py | 31 +
lib/portage/tests/util/test_normalizedPath.py | 1 -
lib/portage/tests/util/test_shelve.py | 4 +-
lib/portage/tests/util/test_socks5.py | 4 +-
lib/portage/tests/util/test_stackDicts.py | 2 -
lib/portage/tests/util/test_stackLists.py | 1 -
lib/portage/tests/util/test_varExpand.py | 17 +-
lib/portage/tests/util/test_whirlpool.py | 49 +-
lib/portage/tests/util/test_xattr.py | 2 +-
lib/portage/tests/versions/test_cpv_sort_key.py | 1 -
lib/portage/tests/versions/test_vercmp.py | 11 +-
lib/portage/tests/xpak/test_decodeint.py | 1 -
lib/portage/update.py | 23 +-
lib/portage/util/ExtractKernelVersion.py | 10 +-
lib/portage/util/__init__.py | 163 +-
lib/portage/util/_async/AsyncScheduler.py | 4 +-
lib/portage/util/_async/BuildLogger.py | 2 +-
lib/portage/util/_async/FileCopier.py | 2 +-
lib/portage/util/_async/FileDigester.py | 1 -
lib/portage/util/_async/ForkProcess.py | 9 +-
lib/portage/util/_async/PipeLogger.py | 1 -
lib/portage/util/_async/PipeReaderBlockingIO.py | 23 +-
lib/portage/util/_async/PopenProcess.py | 2 -
lib/portage/util/_async/SchedulerInterface.py | 4 +-
lib/portage/util/_dyn_libs/LinkageMapELF.py | 46 +-
.../util/_dyn_libs/PreservedLibsRegistry.py | 6 +-
.../util/_dyn_libs/display_preserved_libs.py | 13 +-
lib/portage/util/_dyn_libs/soname_deps.py | 4 +-
lib/portage/util/_dyn_libs/soname_deps_qa.py | 9 +-
lib/portage/util/_get_vm_info.py | 2 -
lib/portage/util/_info_files.py | 13 +-
lib/portage/util/_path.py | 4 +-
lib/portage/util/_pty.py | 4 +-
lib/portage/util/_xattr.py | 10 +-
lib/portage/util/backoff.py | 2 +-
lib/portage/util/bin_entry_point.py | 2 +-
lib/portage/util/changelog.py | 2 +-
lib/portage/util/compression_probe.py | 9 +-
lib/portage/util/configparser.py | 7 +-
lib/portage/util/cpuinfo.py | 22 +-
lib/portage/util/digraph.py | 12 +-
lib/portage/util/elf/constants.py | 1 +
lib/portage/util/elf/header.py | 1 -
lib/portage/util/env_update.py | 69 +-
lib/portage/util/file_copy/__init__.py | 2 -
lib/portage/util/futures/_asyncio/__init__.py | 6 +-
lib/portage/util/futures/_asyncio/streams.py | 2 +-
lib/portage/util/futures/_sync_decorator.py | 1 -
lib/portage/util/futures/compat_coroutine.py | 1 +
lib/portage/util/futures/executor/fork.py | 13 +-
lib/portage/util/futures/extendedfutures.py | 10 +-
lib/portage/util/futures/iter_completed.py | 3 +-
lib/portage/util/futures/unix_events.py | 4 +-
lib/portage/util/hooks.py | 2 +-
lib/portage/util/iterators/MultiIterGroupBy.py | 5 -
lib/portage/util/listdir.py | 6 +-
lib/portage/util/locale.py | 7 +-
lib/portage/util/movefile.py | 77 +-
lib/portage/util/mtimedb.py | 4 +-
lib/portage/util/netlink.py | 2 +-
lib/portage/util/shelve.py | 4 +-
lib/portage/util/socks5.py | 2 +-
lib/portage/util/whirlpool.py | 81 +-
lib/portage/util/writeable_check.py | 7 +-
lib/portage/versions.py | 21 +-
lib/portage/xml/metadata.py | 12 +-
lib/portage/xpak.py | 23 +-
man/ebuild.1 | 9 +-
man/ebuild.5 | 100 +-
man/emerge.1 | 53 +-
man/make.conf.5 | 70 +-
man/portage.5 | 51 +-
man/ru/ebuild.1 | 10 +-
man/xpak.5 | 9 +-
runtests | 17 +-
setup.py | 50 +-
src/portage_util__whirlpool.c | 1141 ++++++++
src/portage_util_file_copy_reflink_linux.c | 25 +-
src/portage_util_libc.c | 27 +-
tox.ini | 30 +-
532 files changed, 13827 insertions(+), 10224 deletions(-)
diff --cc bin/ebuild-helpers/dohtml
index e061bc173,55339238e..5384eeb8b
--- a/bin/ebuild-helpers/dohtml
+++ b/bin/ebuild-helpers/dohtml
@@@ -16,10 -16,8 +16,10 @@@ f
# Use safe cwd, avoiding unsafe import for bug #469338.
export __PORTAGE_HELPER_CWD=${PWD}
cd "${PORTAGE_PYM_PATH}" || die
+# BEGIN PREFIX LOCAL: use Prefix Python fallback
PYTHONPATH=${PORTAGE_PYTHONPATH:-${PORTAGE_PYM_PATH}} \
- "${PORTAGE_PYTHON:-@PREFIX_PORTAGE_PYTHON@}" "$PORTAGE_BIN_PATH/dohtml.py" "$@"
- "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}/dohtml.py" "$@"
++ "${PORTAGE_PYTHON:-@PREFIX_PORTAGE_PYTHON@}" "${PORTAGE_BIN_PATH}/dohtml.py" "$@"
+# END PREFIX LOCAL
ret=$?
# Restore cwd for display by __helpers_die
diff --cc bin/emerge-webrsync
index 85a4d15d7,3835977fc..db4bb6d1e
--- a/bin/emerge-webrsync
+++ b/bin/emerge-webrsync
@@@ -43,10 -79,9 +79,10 @@@ if [[ -x "${scriptpath%/*}/portageq" ]]
elif type -P portageq > /dev/null ; then
portageq=portageq
else
- eecho "could not find 'portageq'; aborting"
- exit 1
+ die "could not find 'portageq'; aborting"
fi
+
+# 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 \
@@@ -252,11 -411,9 +418,11 @@@ get_snapshot_timestamp()
sync_local() {
local file="$1"
- __vecho "Syncing local tree ..."
+ [[ ${PORTAGE_QUIET} -eq 1 ]] || einfo "Syncing local repository ..."
- local ownership="portage:portage"
+ # PREFIX LOCAL: use PORTAGE_USER and PORTAGE_GROUP
+ local ownership="${PORTAGE_USER:-portage}:${PORTAGE_GROUP:-portage}"
+ # END PREFIX LOCAL
if has usersync ${FEATURES} ; then
case "${USERLAND}" in
BSD)
diff --cc bin/install-qa-check.d/05prefix
index ac059723f,7488ad9e4..8a83893f1
--- a/bin/install-qa-check.d/05prefix
+++ b/bin/install-qa-check.d/05prefix
@@@ -80,14 -76,12 +80,14 @@@ install_qa_check_prefix()
fi
continue
fi
- # unprefixed shebang, is the script directly in ${PATH}?
- if [[ ":${PATH}:" == *":${fp}:"* ]] ; then
+ # BEGIN PREFIX LOCAL: also check init scripts
- # unprefixed shebang, is the script directly in $PATH or an init
++ # 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/isolated-functions.sh
index 20e9c735c,06be030fb..47e18cc6b
--- a/bin/isolated-functions.sh
+++ b/bin/isolated-functions.sh
@@@ -439,26 -444,22 +444,30 @@@ if [[ -z ${NO_COLOR} ]] ; the
no|false)
__set_colors
;;
- esac
+ esac
+ else
+ __unset_colors
+ fi
+
-if [[ -z ${USERLAND} ]] ; then
- case $(uname -s) in
- *BSD|DragonFly)
- export USERLAND="BSD"
- ;;
- *)
- export USERLAND="GNU"
- ;;
- esac
-fi
+# BEGIN PREFIX LOCAL
+# In Prefix every platform has USERLAND=GNU, even FreeBSD. Since I
+# don't know how to reliably "figure out" we are in a Prefix instance of
+# portage here, I for now disable this check, and hardcode it to GNU.
+# Somehow it appears stange to me that this code is in this file,
+# non-ebuilds/eclasses should never rely on USERLAND and XARGS, don't they?
+#if [[ -z ${USERLAND} ]] ; then
+# case $(uname -s) in
+# *BSD|DragonFly)
+# export USERLAND="BSD"
+# ;;
+# *)
+# export USERLAND="GNU"
+# ;;
+# esac
+#fi
+[[ -z ${USERLAND} ]] && USERLAND="GNU"
+# END PREFIX LOCAL
if [[ -z ${XARGS} ]] ; then
case ${USERLAND} in
@@@ -644,12 -653,12 +661,13 @@@ debug-print()
printf 'debug: %s\n' "${@}" >> "${ECLASS_DEBUG_OUTPUT}"
fi
- if [[ -w $T ]] ; then
- # default target
+ if [[ -w ${T} ]] ; then
+ # Default target
printf '%s\n' "${@}" >> "${T}/eclass-debug.log"
- # let the portage user own/write to this file
+
+ # Let the portage user own/write to this file
- chgrp "${PORTAGE_GRPNAME:-portage}" "${T}/eclass-debug.log"
+ # PREFIX LOCAL: fallback to configured group
+ chgrp "${PORTAGE_GRPNAME:-${PORTAGE_GROUP}}" "${T}/eclass-debug.log"
chmod g+w "${T}/eclass-debug.log"
fi
}
diff --cc bin/misc-functions.sh
index 91010ec65,d9319d5af..b32d06483
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@@ -275,163 -265,14 +292,160 @@@ install_qa_check_misc()
"${PORTAGE_BIN_PATH}"/estrip --ignore "${PORTAGE_DOSTRIP_SKIP[@]}"
"${PORTAGE_BIN_PATH}"/estrip --dequeue
else
- prepallstrip
+ "${PORTAGE_BIN_PATH}"/estrip --prepallstrip
fi
fi
-
- # Portage regenerates this on the installed system.
- rm -f "${ED%/}"/usr/share/info/dir{,.gz,.bz2} || die "rm failed!"
}
+install_qa_check_macho() {
+ if ! has binchecks ${RESTRICT} ; then
+ # on Darwin, dynamic libraries are called .dylibs instead of
+ # .sos. In addition the version component is before the
+ # extension, not after it. Check for this, and *only* warn
+ # about it. Some packages do ship .so files on Darwin and make
+ # it work (ugly!).
+ rm -f "${T}/mach-o.check"
+ find ${ED%/} -name "*.so" -or -name "*.so.*" | \
+ while read i ; do
+ [[ $(file $i) == *"Mach-O"* ]] && \
+ echo "${i#${D}}" >> "${T}/mach-o.check"
+ done
+ if [[ -f ${T}/mach-o.check ]] ; then
+ f=$(< "${T}/mach-o.check")
+ __vecho -ne '\a\n'
+ eqawarn "QA Notice: Found .so dynamic libraries on Darwin:"
+ eqawarn " ${f//$'\n'/\n }"
+ fi
+ rm -f "${T}/mach-o.check"
+
+ # The naming for dynamic libraries is different on Darwin; the
+ # version component is before the extention, instead of after
+ # it, as with .sos. Again, make this a warning only.
+ rm -f "${T}/mach-o.check"
+ find ${ED%/} -name "*.dylib.*" | \
+ while read i ; do
+ echo "${i#${D}}" >> "${T}/mach-o.check"
+ done
+ if [[ -f "${T}/mach-o.check" ]] ; then
+ f=$(< "${T}/mach-o.check")
+ __vecho -ne '\a\n'
+ eqawarn "QA Notice: Found wrongly named dynamic libraries on Darwin:"
+ eqawarn " ${f// /\n }"
+ fi
+ rm -f "${T}/mach-o.check"
+ fi
+
+ install_name_is_relative() {
+ case $1 in
+ "@executable_path/"*) return 0 ;;
+ "@loader_path"/*) return 0 ;;
+ "@rpath/"*) return 0 ;;
+ *) return 1 ;;
+ esac
+ }
+
+ # While we generate the NEEDED files, check that we don't get kernel
+ # traps at runtime because of broken install_names on Darwin.
+ rm -f "${T}"/.install_name_check_failed
+ scanmacho -qyRF '%a;%p;%S;%n' "${D}" | { while IFS= read l ; do
+ arch=${l%%;*}; l=${l#*;}
+ obj="/${l%%;*}"; l=${l#*;}
+ install_name=${l%%;*}; l=${l#*;}
+ needed=${l%%;*}; l=${l#*;}
+
+ ignore=
+ qa_var="QA_IGNORE_INSTALL_NAME_FILES_${ARCH/-/_}"
+ eval "[[ -n \${!qa_var} ]] &&
+ QA_IGNORE_INSTALL_NAME_FILES=(\"\${${qa_var}[@]}\")"
+
+ if [[ ${#QA_IGNORE_INSTALL_NAME_FILES[@]} -gt 1 ]] ; then
+ for x in "${QA_IGNORE_INSTALL_NAME_FILES[@]}" ; do
+ [[ ${obj##*/} == ${x} ]] && \
+ ignore=true
+ done
+ else
+ local shopts=$-
+ set -o noglob
+ for x in ${QA_IGNORE_INSTALL_NAME_FILES} ; do
+ [[ ${obj##*/} == ${x} ]] && \
+ ignore=true
+ done
+ set +o noglob
+ set -${shopts}
+ fi
+
+ # See if the self-reference install_name points to an existing
+ # and to be installed file. This usually is a symlink for the
+ # major version.
+ if install_name_is_relative ${install_name} ; then
+ # try to locate the library in the installed image
+ local inpath=${install_name#@*/}
+ local libl
+ for libl in $(find "${ED}" -name "${inpath##*/}") ; do
+ if [[ ${libl} == */${inpath} ]] ; then
+ install_name=/${libl#${D}}
+ break
+ fi
+ done
+ fi
+ if [[ ! -e ${D}${install_name} ]] ; then
+ eqawarn "QA Notice: invalid self-reference install_name ${install_name} in ${obj}"
+ # remember we are in an implicit subshell, that's
+ # why we touch a file here ... ideally we should be
+ # able to die correctly/nicely here
+ [[ -z ${ignore} ]] && touch "${T}"/.install_name_check_failed
+ fi
+
+ # this is ugly, paths with spaces won't work
+ for lib in ${needed//,/ } ; do
+ if [[ ${lib} == ${D}* ]] ; then
+ eqawarn "QA Notice: install_name references \${D}: ${lib} in ${obj}"
+ [[ -z ${ignore} ]] && touch "${T}"/.install_name_check_failed
+ elif [[ ${lib} == ${S}* ]] ; then
+ eqawarn "QA Notice: install_name references \${S}: ${lib} in ${obj}"
+ [[ -z ${ignore} ]] && touch "${T}"/.install_name_check_failed
+ elif ! install_name_is_relative ${lib} ; then
+ local isok=no
+ if [[ -e ${lib} || -e ${D}${lib} ]] ; then
+ isok=yes # yay, we're ok
+ elif [[ -e "${EROOT}"/MacOSX.sdk ]] ; then
+ # trigger SDK mode, at least since Big Sur (11.0)
+ # there are no libraries in /usr/lib any more, but
+ # there are references too it (some library cache is
+ # in place), yet we can validate it sort of is sane
+ # by looking at the SDK metacaches, TAPI-files, .tbd
+ # text versions of libraries, so just look there
+ local tbd=${lib%.*}.tbd
+ if [[ -e ${EROOT}/MacOSX.sdk/${lib%.*}.tbd ]] ; then
+ isok=yes # it's in the SDK, so ok
+ elif [[ -e ${EROOT}/MacOSX.sdk/${lib}.tbd ]] ; then
+ isok=yes # this happens in case of Framework refs
+ fi
+ fi
+ if [[ ${isok} == no ]] ; then
+ eqawarn "QA Notice: invalid reference to ${lib} in ${obj}"
+ [[ -z ${ignore} ]] && \
+ touch "${T}"/.install_name_check_failed
+ fi
+ fi
+ done
+
+ # backwards compatibility
+ echo "${obj} ${needed}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED
+ # what we use
+ echo "${arch};${obj};${install_name};${needed}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED.MACHO.3
+ done }
+ if [[ -f ${T}/.install_name_check_failed ]] ; then
+ # secret switch "allow_broken_install_names" to get
+ # around this and install broken crap (not a good idea)
+ has allow_broken_install_names ${FEATURES} || \
+ die "invalid install_name found, your application or library will crash at runtime"
+ fi
+}
+
__dyn_instprep() {
if [[ -e ${PORTAGE_BUILDDIR}/.instprepped ]] ; then
- __vecho ">>> It appears that '$PF' is already instprepped; skipping."
+ __vecho ">>> It appears that '${PF}' is already instprepped; skipping."
__vecho ">>> Remove '${PORTAGE_BUILDDIR}/.instprepped' to force instprep."
return 0
fi
@@@ -686,20 -526,25 +699,27 @@@ __dyn_package()
die "PORTAGE_BINPKG_TMPFILE is unset"
mkdir -p "${PORTAGE_BINPKG_TMPFILE%/*}" || die "mkdir failed"
+ if [[ ! -z "${BUILD_ID}" ]]; then
+ echo -n "${BUILD_ID}" > "${PORTAGE_BUILDDIR}"/build-info/BUILD_ID
+ fi
+
if [[ "${BINPKG_FORMAT}" == "xpak" ]]; then
local tar_options=""
- [[ $PORTAGE_VERBOSE = 1 ]] && tar_options+=" -v"
+
+ [[ ${PORTAGE_VERBOSE} = 1 ]] && tar_options+=" -v"
has xattr ${FEATURES} && [[ $(tar --help 2> /dev/null) == *--xattrs* ]] && tar_options+=" --xattrs"
- [[ -z "${PORTAGE_COMPRESSION_COMMAND}" ]] && \
- die "PORTAGE_COMPRESSION_COMMAND is unset"
- tar $tar_options -cf - $PORTAGE_BINPKG_TAR_OPTS -C "${D}" . | \
- $PORTAGE_COMPRESSION_COMMAND > "$PORTAGE_BINPKG_TMPFILE"
- assert "failed to pack binary package: '$PORTAGE_BINPKG_TMPFILE'"
+
+ [[ -z "${PORTAGE_COMPRESSION_COMMAND}" ]] && die "PORTAGE_COMPRESSION_COMMAND is unset"
+
+ tar ${tar_options} -cf - ${PORTAGE_BINPKG_TAR_OPTS} -C "${D}" . | \
+ ${PORTAGE_COMPRESSION_COMMAND} > "${PORTAGE_BINPKG_TMPFILE}"
+ assert "failed to pack binary package: '${PORTAGE_BINPKG_TMPFILE}'"
+
+ # BEGIN PREFIX LOCAL: use PREFIX_PORTAGE_PYTHON fallback
PYTHONPATH=${PORTAGE_PYTHONPATH:-${PORTAGE_PYM_PATH}} \
- "${PORTAGE_PYTHON:-@PREFIX_PORTAGE_PYTHON@}" "$PORTAGE_BIN_PATH"/xpak-helper.py recompose \
- "$PORTAGE_BINPKG_TMPFILE" "$PORTAGE_BUILDDIR/build-info"
- "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}"/xpak-helper.py recompose \
++ "${PORTAGE_PYTHON:-@PREFIX_PORTAGE_PYTHON@}" "${PORTAGE_BIN_PATH}"/xpak-helper.py recompose \
+ "${PORTAGE_BINPKG_TMPFILE}" "${PORTAGE_BUILDDIR}/build-info"
+ # END PREFIX LOCAL
if [[ $? -ne 0 ]]; then
rm -f "${PORTAGE_BINPKG_TMPFILE}"
die "Failed to append metadata to the tbz2 file"
@@@ -717,11 -563,9 +738,11 @@@
__vecho ">>> Done."
elif [[ "${BINPKG_FORMAT}" == "gpkg" ]]; then
+ # BEGIN PREFIX LOCAL: use PREFIX_PORTAGE_PYTHON fallback
PYTHONPATH=${PORTAGE_PYTHONPATH:-${PORTAGE_PYM_PATH}} \
- "${PORTAGE_PYTHON:-@PREFIX_PORTAGE_PYTHON@}" "$PORTAGE_BIN_PATH"/gpkg-helper.py compress \
- "${CATEGORY}/${PF}" "$PORTAGE_BINPKG_TMPFILE" "$PORTAGE_BUILDDIR/build-info" "${D}"
- "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}"/gpkg-helper.py compress \
++ "${PORTAGE_PYTHON:-@PREFIX_PORTAGE_PYTHON@}" "${PORTAGE_BIN_PATH}"/gpkg-helper.py compress \
+ "${PF}${BUILD_ID:+-${BUILD_ID}}" "${PORTAGE_BINPKG_TMPFILE}" "${PORTAGE_BUILDDIR}/build-info" "${D}"
+ # END PREFIX LOCAL
if [[ $? -ne 0 ]]; then
rm -f "${PORTAGE_BINPKG_TMPFILE}"
die "Failed to create binpkg file"
diff --cc bin/phase-functions.sh
index 8efd12f22,071941ff7..d0f3a0f85
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -1099,15 -1108,17 +1109,17 @@@ __ebuild_main()
# Use safe cwd, avoiding unsafe import for bug #469338.
cd "${PORTAGE_PYM_PATH}"
__save_ebuild_env | __filter_readonly_variables \
- --filter-features > "$T/environment"
+ --filter-features > "${T}/environment"
assert "__save_ebuild_env failed"
- # PREFIX LOCAL: use configure group
- chgrp "${PORTAGE_GRPNAME:-${PORTAGE_GROUP}}" "$T/environment"
- chmod g+w "$T/environment"
-
- chgrp "${PORTAGE_GRPNAME:-portage}" "${T}/environment"
++ # PREFIX LOCAL: use configured group
++ chgrp "${PORTAGE_GRPNAME:-${PORTAGE_GROUP}}" "${T}/environment"
+ chmod g+w "${T}/environment"
fi
- [[ -n $PORTAGE_EBUILD_EXIT_FILE ]] && > "$PORTAGE_EBUILD_EXIT_FILE"
- if [[ -n $PORTAGE_IPC_DAEMON ]] ; then
- [[ ! -s $SANDBOX_LOG ]]
- "$PORTAGE_BIN_PATH"/ebuild-ipc exit $?
+
+ [[ -n ${PORTAGE_EBUILD_EXIT_FILE} ]] && > "${PORTAGE_EBUILD_EXIT_FILE}"
+ if [[ -n ${PORTAGE_IPC_DAEMON} ]] ; then
+ [[ ! -s ${SANDBOX_LOG} ]]
+
+ "${PORTAGE_BIN_PATH}"/ebuild-ipc exit $?
fi
}
diff --cc bin/save-ebuild-env.sh
index 3520d0416,bba468da1..36eedc7fa
mode 100755,100644..100755
--- a/bin/save-ebuild-env.sh
+++ b/bin/save-ebuild-env.sh
diff --cc lib/_emerge/depgraph.py
index c5d0343b7,28acfed9d..c6b63738a
--- a/lib/_emerge/depgraph.py
+++ b/lib/_emerge/depgraph.py
@@@ -11869,20 -11801,8 +11801,20 @@@ def _get_masking_status(pkg, pkgsetting
if not pkg.installed:
if not pkgsettings._accept_chost(pkg.cpv, pkg._metadata):
- mreasons.append(_MaskReason("CHOST", "CHOST: %s" % pkg._metadata["CHOST"]))
+ mreasons.append(_MaskReason("CHOST", f"CHOST: {pkg._metadata['CHOST']}"))
+ # BEGIN PREFIX LOCAL: check EPREFIX
+ eprefix = pkgsettings["EPREFIX"]
+ if len(eprefix.rstrip('/')) > 0 and pkg.built and not pkg.installed:
+ if not "EPREFIX" in pkg._metadata:
+ mreasons.append(_MaskReason("EPREFIX",
+ "missing EPREFIX"))
+ elif len(pkg._metadata["EPREFIX"].strip()) < len(eprefix):
+ mreasons.append(_MaskReason("EPREFIX",
+ "EPREFIX: '%s' too small" % \
+ pkg._metadata["EPREFIX"]))
+ # END PREFIX LOCAL
+
if pkg.invalid:
for msgs in pkg.invalid.values():
for msg in msgs:
diff --cc lib/portage/__init__.py
index ab3017a5d,aa7e69920..ea1ebc2bb
--- a/lib/portage/__init__.py
+++ b/lib/portage/__init__.py
@@@ -53,18 -51,7 +53,17 @@@ except ImportError as e
sys.stderr.write(f" {e}\n\n")
raise
+# BEGIN PREFIX LOCAL
+# for bug #758230, on macOS the default was switched from fork to spawn,
+# the latter causing issues because all kinds of things can't be
+# pickled, so force fork mode for now
+try:
+ multiprocessing.set_start_method('fork')
+except RuntimeError:
+ pass
+# END PREFIX LOCAL
+
try:
-
import portage.proxy.lazyimport
import portage.proxy as proxy
diff --cc lib/portage/const.py
index 980b40b4b,10a208ceb..8aa7e557f
--- a/lib/portage/const.py
+++ b/lib/portage/const.py
@@@ -1,16 -1,8 +1,15 @@@
# portage: Constants
- # Copyright 1998-2021 Gentoo Authors
+ # 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
- import sys
# ===========================================================================
# START OF CONSTANTS -- START OF CONSTANTS -- START OF CONSTANTS -- START OF
diff --cc lib/portage/dbapi/bintree.py
index 986ffeb3d,5f58c548d..78f760444
--- a/lib/portage/dbapi/bintree.py
+++ b/lib/portage/dbapi/bintree.py
@@@ -104,36 -104,31 +104,33 @@@ class bindbapi(fakedbapi)
self.bintree = mybintree
self.move_ent = mybintree.move_ent
# Selectively cache metadata in order to optimize dep matching.
- self._aux_cache_keys = set(
- [
- "BDEPEND",
- "BINPKG_FORMAT",
- "BUILD_ID",
- "BUILD_TIME",
- "CHOST",
- "DEFINED_PHASES",
- "DEPEND",
- "EAPI",
- "IDEPEND",
- "IUSE",
- "KEYWORDS",
- "LICENSE",
- "MD5",
- "PDEPEND",
- "PROPERTIES",
- "PROVIDES",
- "RDEPEND",
- "repository",
- "REQUIRES",
- "RESTRICT",
- "SIZE",
- "SLOT",
- "USE",
- "_mtime_",
- # PREFIX LOCAL
- "EPREFIX",
- ]
- )
+ self._aux_cache_keys = {
+ "BDEPEND",
+ "BUILD_ID",
+ "BUILD_TIME",
+ "CHOST",
+ "DEFINED_PHASES",
+ "DEPEND",
+ "EAPI",
+ "IDEPEND",
+ "IUSE",
+ "KEYWORDS",
+ "LICENSE",
+ "MD5",
+ "PDEPEND",
+ "PROPERTIES",
+ "PROVIDES",
+ "RDEPEND",
+ "repository",
+ "REQUIRES",
+ "RESTRICT",
+ "SIZE",
+ "SLOT",
+ "USE",
+ "_mtime_",
++ # PREFIX LOCAL
++ "EPREFIX",
+ }
self._aux_cache_slot_dict = slot_dict_class(self._aux_cache_keys)
self._aux_cache = {}
@@@ -474,150 -468,134 +470,140 @@@ class binarytree
stacklevel=2,
)
- if True:
- self.pkgdir = normalize_path(pkgdir)
- # NOTE: Event if binpkg-multi-instance is disabled, it's
- # still possible to access a PKGDIR which uses the
- # binpkg-multi-instance layout (or mixed layout).
- self._multi_instance = "binpkg-multi-instance" in settings.features
- if self._multi_instance:
- self._allocate_filename = self._allocate_filename_multi
- self.dbapi = bindbapi(self, settings=settings)
- self.update_ents = self.dbapi.update_ents
- self.move_slot_ent = self.dbapi.move_slot_ent
- self.populated = 0
- self.tree = {}
- self._binrepos_conf = None
- self._remote_has_index = False
- self._remotepkgs = None # remote metadata indexed by cpv
- self._additional_pkgs = {}
- self.invalids = []
- self.settings = settings
- self._pkg_paths = {}
- self._populating = False
- self._all_directory = os.path.isdir(os.path.join(self.pkgdir, "All"))
- self._pkgindex_version = 0
- 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", "SIZE"])
- self._pkgindex_aux_keys = [
- "BASE_URI",
- "BDEPEND",
- "BINPKG_FORMAT",
- "BUILD_ID",
- "BUILD_TIME",
- "CHOST",
- "DEFINED_PHASES",
- "DEPEND",
- "DESCRIPTION",
- "EAPI",
- "FETCHCOMMAND",
- "IDEPEND",
- "IUSE",
- "KEYWORDS",
- "LICENSE",
- "PDEPEND",
- "PKGINDEX_URI",
- "PROPERTIES",
- "PROVIDES",
- "RDEPEND",
- "repository",
- "REQUIRES",
- "RESTRICT",
- "RESUMECOMMAND",
- "SIZE",
- "SLOT",
- "USE",
- # PREFIX LOCAL
- "EPREFIX",
- ]
- self._pkgindex_aux_keys = list(self._pkgindex_aux_keys)
- self._pkgindex_use_evaluated_keys = (
- "BDEPEND",
- "DEPEND",
- "IDEPEND",
- "LICENSE",
- "RDEPEND",
- "PDEPEND",
- "PROPERTIES",
- "RESTRICT",
- )
- self._pkgindex_header = None
- self._pkgindex_header_keys = set(
- [
- "ACCEPT_KEYWORDS",
- "ACCEPT_LICENSE",
- "ACCEPT_PROPERTIES",
- "ACCEPT_RESTRICT",
- "BINPKG_FORMAT",
- "CBUILD",
- "CONFIG_PROTECT",
- "CONFIG_PROTECT_MASK",
- "FEATURES",
- "GENTOO_MIRRORS",
- "INSTALL_MASK",
- "IUSE_IMPLICIT",
- "USE",
- "USE_EXPAND",
- "USE_EXPAND_HIDDEN",
- "USE_EXPAND_IMPLICIT",
- "USE_EXPAND_UNPREFIXED",
- # PREFIX LOCAL
- "EPREFIX",
- ]
- )
- self._pkgindex_default_pkg_data = {
- "BDEPEND": "",
- "BUILD_ID": "",
- "BUILD_TIME": "",
- "DEFINED_PHASES": "",
- "DEPEND": "",
- "EAPI": "0",
- "IDEPEND": "",
- "IUSE": "",
- "KEYWORDS": "",
- "LICENSE": "",
- "PATH": "",
- "PDEPEND": "",
- "PROPERTIES": "",
- "PROVIDES": "",
- "RDEPEND": "",
- "REQUIRES": "",
- "RESTRICT": "",
- "SLOT": "0",
- "USE": "",
- }
- self._pkgindex_inherited_keys = ["BINPKG_FORMAT", "CHOST",
- # PREFIX LOCAL
- "EPREFIX",
- "repository"]
-
- # Populate the header with appropriate defaults.
- self._pkgindex_default_header_data = {
- "BINPKG_FORMAT": self.settings.get(
- "BINPKG_FORMAT", SUPPORTED_GENTOO_BINPKG_FORMATS[0]
- ),
- "CHOST": self.settings.get("CHOST", ""),
- "repository": "",
- }
-
- self._pkgindex_translated_keys = (
- ("DESCRIPTION", "DESC"),
- ("_mtime_", "MTIME"),
- ("repository", "REPO"),
- )
+ self.pkgdir = normalize_path(pkgdir)
+ # NOTE: Event if binpkg-multi-instance is disabled, it's
+ # still possible to access a PKGDIR which uses the
+ # binpkg-multi-instance layout (or mixed layout).
+ self._multi_instance = "binpkg-multi-instance" in settings.features
+ if self._multi_instance:
+ self._allocate_filename = self._allocate_filename_multi
+ self.dbapi = bindbapi(self, settings=settings)
+ self.update_ents = self.dbapi.update_ents
+ self.move_slot_ent = self.dbapi.move_slot_ent
+ self.populated = 0
+ self.tree = {}
+ self._binrepos_conf = None
+ self._remote_has_index = False
+ self._remotepkgs = None # remote metadata indexed by cpv
+ self._additional_pkgs = {}
+ self.invalids = []
+ self.settings = settings
+ self._pkg_paths = {}
+ self._populating = False
+ self._all_directory = os.path.isdir(os.path.join(self.pkgdir, "All"))
+ self._pkgindex_version = 0
+ 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", "SIZE"])
+ self._pkgindex_aux_keys = [
+ "BASE_URI",
+ "BDEPEND",
+ "BUILD_ID",
+ "BUILD_TIME",
+ "CHOST",
+ "DEFINED_PHASES",
+ "DEPEND",
+ "DESCRIPTION",
+ "EAPI",
+ "FETCHCOMMAND",
+ "IDEPEND",
+ "IUSE",
+ "KEYWORDS",
+ "LICENSE",
+ "PDEPEND",
+ "PKGINDEX_URI",
+ "PROPERTIES",
+ "PROVIDES",
+ "RDEPEND",
+ "repository",
+ "REQUIRES",
+ "RESTRICT",
+ "RESUMECOMMAND",
+ "SIZE",
+ "SLOT",
+ "USE",
++ # PREFIX LOCAL
++ "EPREFIX",
+ ]
+ self._pkgindex_use_evaluated_keys = (
+ "BDEPEND",
+ "DEPEND",
+ "IDEPEND",
+ "LICENSE",
+ "RDEPEND",
+ "PDEPEND",
+ "PROPERTIES",
+ "RESTRICT",
+ )
+ self._pkgindex_header = None
+ self._pkgindex_header_keys = {
+ "ACCEPT_KEYWORDS",
+ "ACCEPT_LICENSE",
+ "ACCEPT_PROPERTIES",
+ "ACCEPT_RESTRICT",
+ "CBUILD",
+ "CONFIG_PROTECT",
+ "CONFIG_PROTECT_MASK",
+ "FEATURES",
+ "GENTOO_MIRRORS",
+ "INSTALL_MASK",
+ "IUSE_IMPLICIT",
+ "USE",
+ "USE_EXPAND",
+ "USE_EXPAND_HIDDEN",
+ "USE_EXPAND_IMPLICIT",
+ "USE_EXPAND_UNPREFIXED",
++ # PREFIX LOCAL
++ "EPREFIX",
+ }
+ self._pkgindex_default_pkg_data = {
+ "BDEPEND": "",
+ "BUILD_ID": "",
+ "BUILD_TIME": "",
+ "DEFINED_PHASES": "",
+ "DEPEND": "",
+ "EAPI": "0",
+ "IDEPEND": "",
+ "IUSE": "",
+ "KEYWORDS": "",
+ "LICENSE": "",
+ "PATH": "",
+ "PDEPEND": "",
+ "PROPERTIES": "",
+ "PROVIDES": "",
+ "RDEPEND": "",
+ "REQUIRES": "",
+ "RESTRICT": "",
+ "SLOT": "0",
+ "USE": "",
+ }
+ self._pkgindex_inherited_keys = ["CHOST", "repository"]
++ # PREFIX LOCAL
++ self._pkgindex_inherited_keys += ["EPREFIX"]
+
+ # Populate the header with appropriate defaults.
+ self._pkgindex_default_header_data = {
+ "CHOST": self.settings.get("CHOST", ""),
+ "repository": "",
+ }
+
+ self._pkgindex_translated_keys = (
+ ("DESCRIPTION", "DESC"),
+ ("_mtime_", "MTIME"),
+ ("repository", "REPO"),
+ )
- self._pkgindex_allowed_pkg_keys = set(
- chain(
- self._pkgindex_keys,
- self._pkgindex_aux_keys,
- self._pkgindex_hashes,
- self._pkgindex_default_pkg_data,
- self._pkgindex_inherited_keys,
- chain(*self._pkgindex_translated_keys),
- )
+ self._pkgindex_allowed_pkg_keys = set(
+ chain(
+ self._pkgindex_keys,
+ self._pkgindex_aux_keys,
+ self._pkgindex_hashes,
+ self._pkgindex_default_pkg_data,
+ self._pkgindex_inherited_keys,
+ chain(*self._pkgindex_translated_keys),
)
+ )
@property
def root(self):
diff --cc lib/portage/package/ebuild/_config/special_env_vars.py
index d974325e0,beb411188..b41c952e2
--- a/lib/portage/package/ebuild/_config/special_env_vars.py
+++ b/lib/portage/package/ebuild/_config/special_env_vars.py
@@@ -82,174 -80,167 +80,172 @@@ env_blacklist = frozenset
# important to set our special BASH_ENV variable in the ebuild
# environment in order to prevent sandbox from sourcing /etc/profile
# in it's bashrc (causing major leakage).
- environ_whitelist += [
- "ACCEPT_LICENSE",
- "BASH_ENV",
- "BASH_FUNC____in_portage_iuse%%",
- "BINPKG_FORMAT",
- "BROOT",
- "BUILD_PREFIX",
- "COLUMNS",
- "D",
- "DISTDIR",
- "DOC_SYMLINKS_DIR",
- "EAPI",
- "EBUILD",
- "EBUILD_FORCE_TEST",
- "EBUILD_PHASE",
- "EBUILD_PHASE_FUNC",
- "ECLASSDIR",
- "ECLASS_DEPTH",
- "ED",
- "EMERGE_FROM",
- "ENV_UNSET",
- "EPREFIX",
- "EROOT",
- "ESYSROOT",
- "FEATURES",
- "FILESDIR",
- "HOME",
- "MERGE_TYPE",
- "NOCOLOR",
- "PATH",
- "PKGDIR",
- "PKGUSE",
- "PKG_LOGDIR",
- "PKG_TMPDIR",
- "PORTAGE_ACTUAL_DISTDIR",
- "PORTAGE_ARCHLIST",
- "PORTAGE_BASHRC_FILES",
- "PORTAGE_BASHRC",
- "PM_EBUILD_HOOK_DIR",
- "PORTAGE_BINPKG_FILE",
- "PORTAGE_BINPKG_TAR_OPTS",
- "PORTAGE_BINPKG_TMPFILE",
- "PORTAGE_BIN_PATH",
- "PORTAGE_BUILDDIR",
- "PORTAGE_BUILD_GROUP",
- "PORTAGE_BUILD_USER",
- "PORTAGE_BUNZIP2_COMMAND",
- "PORTAGE_BZIP2_COMMAND",
- "PORTAGE_COLORMAP",
- "PORTAGE_COMPRESS",
- "PORTAGE_COMPRESSION_COMMAND",
- "PORTAGE_COMPRESS_EXCLUDE_SUFFIXES",
- "PORTAGE_CONFIGROOT",
- "PORTAGE_DEBUG",
- "PORTAGE_DEPCACHEDIR",
- "PORTAGE_DOHTML_UNWARNED_SKIPPED_EXTENSIONS",
- "PORTAGE_DOHTML_UNWARNED_SKIPPED_FILES",
- "PORTAGE_DOHTML_WARN_ON_SKIPPED_FILES",
- "PORTAGE_EBUILD_EXIT_FILE",
- "PORTAGE_FEATURES",
- "PORTAGE_GID",
- "PORTAGE_GRPNAME",
- "PORTAGE_INTERNAL_CALLER",
- "PORTAGE_INST_GID",
- "PORTAGE_INST_UID",
- "PORTAGE_IPC_DAEMON",
- "PORTAGE_IUSE",
- "PORTAGE_ECLASS_LOCATIONS",
- "PORTAGE_LOG_FILE",
- "PORTAGE_OVERRIDE_EPREFIX",
- "PORTAGE_PIPE_FD",
- "PORTAGE_PROPERTIES",
- "PORTAGE_PYM_PATH",
- "PORTAGE_PYTHON",
- "PORTAGE_PYTHONPATH",
- "PORTAGE_QUIET",
- "PORTAGE_REPO_NAME",
- "PORTAGE_REPOSITORIES",
- "PORTAGE_RESTRICT",
- "PORTAGE_SIGPIPE_STATUS",
- "PORTAGE_SOCKS5_PROXY",
- "PORTAGE_TMPDIR",
- "PORTAGE_UPDATE_ENV",
- "PORTAGE_USERNAME",
- "PORTAGE_VERBOSE",
- "PORTAGE_WORKDIR_MODE",
- "PORTAGE_XATTR_EXCLUDE",
- "PORTDIR",
- "PORTDIR_OVERLAY",
- "PREROOTPATH",
- "PYTHONDONTWRITEBYTECODE",
- "REPLACING_VERSIONS",
- "REPLACED_BY_VERSION",
- "ROOT",
- "ROOTPATH",
- "SANDBOX_LOG",
- "SYSROOT",
- "T",
- "TMP",
- "TMPDIR",
- "USE_EXPAND",
- "USE_ORDER",
- "WORKDIR",
- "XARGS",
- "__PORTAGE_TEST_HARDLINK_LOCKS",
- # BEGIN PREFIX LOCAL
- "EXTRA_PATH",
- "PORTAGE_GROUP",
- "PORTAGE_USER",
- # END PREFIX LOCAL
- ]
-
- # user config variables
- environ_whitelist += ["DOC_SYMLINKS_DIR", "INSTALL_MASK", "PKG_INSTALL_MASK"]
-
- environ_whitelist += ["A", "AA", "CATEGORY", "P", "PF", "PN", "PR", "PV", "PVR"]
-
- # misc variables inherited from the calling environment
- environ_whitelist += [
- "COLORTERM",
- "DISPLAY",
- "EDITOR",
- "LESS",
- "LESSOPEN",
- "LOGNAME",
- "LS_COLORS",
- "PAGER",
- "TERM",
- "TERMCAP",
- "USER",
- "ftp_proxy",
- "http_proxy",
- "no_proxy",
- ]
-
- # tempdir settings
- environ_whitelist += [
- "TMPDIR",
- "TEMP",
- "TMP",
- ]
-
- # localization settings
- environ_whitelist += [
- "LANG",
- "LC_COLLATE",
- "LC_CTYPE",
- "LC_MESSAGES",
- "LC_MONETARY",
- "LC_NUMERIC",
- "LC_TIME",
- "LC_PAPER",
- "LC_ALL",
- ]
-
- # other variables inherited from the calling environment
- environ_whitelist += [
- "CVS_RSH",
- "ECHANGELOG_USER",
- "GPG_AGENT_INFO",
- "SSH_AGENT_PID",
- "SSH_AUTH_SOCK",
- "STY",
- "WINDOW",
- "XAUTHORITY",
- ]
-
- environ_whitelist = frozenset(environ_whitelist)
+ environ_whitelist = frozenset(
+ (
+ "A",
+ "AA",
+ "ACCEPT_LICENSE",
+ "BASH_ENV",
+ "BASH_FUNC____in_portage_iuse%%",
+ "BINPKG_FORMAT",
+ "BROOT",
+ "BUILD_ID",
+ "BUILD_PREFIX",
+ "CATEGORY",
+ "COLUMNS",
+ "D",
+ "DISTDIR",
+ "DOC_SYMLINKS_DIR",
+ "EAPI",
+ "EBUILD",
+ "EBUILD_FORCE_TEST",
+ "EBUILD_PHASE",
+ "EBUILD_PHASE_FUNC",
+ "ECLASSDIR",
+ "ECLASS_DEPTH",
+ "ED",
+ "EMERGE_FROM",
+ "ENV_UNSET",
+ "EPREFIX",
+ "EROOT",
+ "ESYSROOT",
+ "FEATURES",
+ "FILESDIR",
+ "HOME",
+ "MERGE_TYPE",
+ "NOCOLOR",
+ "NO_COLOR",
+ "P",
+ "PATH",
+ "PF",
+ "PKGDIR",
+ "PKGUSE",
+ "PKG_LOGDIR",
+ "PKG_TMPDIR",
+ "PM_EBUILD_HOOK_DIR",
+ "PN",
+ "PORTAGE_ACTUAL_DISTDIR",
+ "PORTAGE_ARCHLIST",
+ "PORTAGE_BASHRC_FILES",
+ "PORTAGE_BASHRC",
+ "PORTAGE_BINPKG_FILE",
+ "PORTAGE_BINPKG_TAR_OPTS",
+ "PORTAGE_BINPKG_TMPFILE",
+ "PORTAGE_BIN_PATH",
+ "PORTAGE_BUILDDIR",
+ "PORTAGE_BUILD_GROUP",
+ "PORTAGE_BUILD_USER",
+ "PORTAGE_BUNZIP2_COMMAND",
+ "PORTAGE_BZIP2_COMMAND",
+ "PORTAGE_COLORMAP",
+ "PORTAGE_COMPRESS",
+ "PORTAGE_COMPRESSION_COMMAND",
+ "PORTAGE_COMPRESS_EXCLUDE_SUFFIXES",
+ "PORTAGE_CONFIGROOT",
+ "PORTAGE_DEBUG",
+ "PORTAGE_DEPCACHEDIR",
+ "PORTAGE_DOHTML_UNWARNED_SKIPPED_EXTENSIONS",
+ "PORTAGE_DOHTML_UNWARNED_SKIPPED_FILES",
+ "PORTAGE_DOHTML_WARN_ON_SKIPPED_FILES",
+ "PORTAGE_EBUILD_EXIT_FILE",
+ "PORTAGE_FEATURES",
+ "PORTAGE_GID",
+ "PORTAGE_GRPNAME",
+ "PORTAGE_INTERNAL_CALLER",
+ "PORTAGE_INST_GID",
+ "PORTAGE_INST_UID",
+ "PORTAGE_IPC_DAEMON",
+ "PORTAGE_IUSE",
+ "PORTAGE_ECLASS_LOCATIONS",
+ "PORTAGE_LOG_FILE",
+ "PORTAGE_OVERRIDE_EPREFIX",
+ "PORTAGE_PIPE_FD",
+ "PORTAGE_PROPERTIES",
+ "PORTAGE_PYM_PATH",
+ "PORTAGE_PYTHON",
+ "PORTAGE_PYTHONPATH",
+ "PORTAGE_QUIET",
+ "PORTAGE_REPO_NAME",
+ "PORTAGE_REPOSITORIES",
+ "PORTAGE_RESTRICT",
+ "PORTAGE_SIGPIPE_STATUS",
+ "PORTAGE_SOCKS5_PROXY",
+ "PORTAGE_TMPDIR",
+ "PORTAGE_UPDATE_ENV",
+ "PORTAGE_USERNAME",
+ "PORTAGE_VERBOSE",
+ "PORTAGE_WORKDIR_MODE",
+ "PORTAGE_XATTR_EXCLUDE",
+ "PORTDIR",
+ "PORTDIR_OVERLAY",
+ "PR",
+ "PREROOTPATH",
+ "PV",
+ "PVR",
+ "PYTHONDONTWRITEBYTECODE",
+ "REPLACING_VERSIONS",
+ "REPLACED_BY_VERSION",
+ "ROOT",
+ "ROOTPATH",
+ "SANDBOX_LOG",
+ "SYSROOT",
+ "T",
+ "TMP",
+ "TMPDIR",
+ "USE_EXPAND",
+ "USE_ORDER",
+ "WORKDIR",
+ "XARGS",
+ "__PORTAGE_TEST_HARDLINK_LOCKS",
+ # user config variables
+ "DOC_SYMLINKS_DIR",
+ "INSTALL_MASK",
+ "PKG_INSTALL_MASK",
+ # misc variables inherited from the calling environment
+ "COLORTERM",
+ "DISPLAY",
+ "EDITOR",
+ "LESS",
+ "LESSOPEN",
+ "LOGNAME",
+ "LS_COLORS",
+ "PAGER",
+ "TERM",
+ "TERMCAP",
+ "USER",
+ "ftp_proxy",
+ "http_proxy",
+ "no_proxy",
+ # tempdir settings
+ "TMPDIR",
+ "TEMP",
+ "TMP",
+ # localization settings
+ "LANG",
+ "LC_COLLATE",
+ "LC_CTYPE",
+ "LC_MESSAGES",
+ "LC_MONETARY",
+ "LC_NUMERIC",
+ "LC_TIME",
+ "LC_PAPER",
+ "LC_ALL",
+ # other variables inherited from the calling environment
+ "CVS_RSH",
+ "ECHANGELOG_USER",
+ "GPG_AGENT_INFO",
+ "SSH_AGENT_PID",
+ "SSH_AUTH_SOCK",
+ "STY",
+ "WINDOW",
+ "XAUTHORITY",
++ # BEGIN PREFIX LOCAL
++ "EXTRA_PATH",
++ "PORTAGE_GROUP",
++ "PORTAGE_USER",
++ # END PREFIX LOCAL
+ )
+ )
environ_whitelist_re = re.compile(r"^(CCACHE_|DISTCC_).*")
@@@ -258,116 -249,91 +254,104 @@@
# Exclude anything that could be extremely long here (like SRC_URI)
# since that could cause execve() calls to fail with E2BIG errors. For
# example, see bug #262647.
- environ_filter += [
- "DEPEND",
- "RDEPEND",
- "PDEPEND",
- "SRC_URI",
- "BDEPEND",
- "IDEPEND",
- ]
-
- # misc variables inherited from the calling environment
- environ_filter += [
- "INFOPATH",
- "MANPATH",
- "USER",
- # BEGIN PREFIX LOCAL
- "HOST",
- "GROUP",
- "LOGNAME",
- "MAIL",
- "REMOTEHOST",
- "SECURITYSESSIONID",
- "TERMINFO",
- "TERM_PROGRAM",
- "TERM_PROGRAM_VERSION",
- "VENDOR",
- "__CF_USER_TEXT_ENCODING",
- # END PREFIX LOCAL
- ]
-
- # variables that break bash
- environ_filter += [
- "HISTFILE",
- "POSIXLY_CORRECT",
- ]
-
- # portage config variables and variables set directly by portage
- environ_filter += [
- "ACCEPT_CHOSTS",
- "ACCEPT_KEYWORDS",
- "ACCEPT_PROPERTIES",
- "ACCEPT_RESTRICT",
- "AUTOCLEAN",
- "BINPKG_COMPRESS",
- "BINPKG_COMPRESS_FLAGS",
- "CLEAN_DELAY",
- "COLLISION_IGNORE",
- "CONFIG_PROTECT",
- "CONFIG_PROTECT_MASK",
- "EGENCACHE_DEFAULT_OPTS",
- "EMERGE_DEFAULT_OPTS",
- "EMERGE_LOG_DIR",
- "EMERGE_WARNING_DELAY",
- "FETCHCOMMAND",
- "FETCHCOMMAND_FTP",
- "FETCHCOMMAND_HTTP",
- "FETCHCOMMAND_HTTPS",
- "FETCHCOMMAND_RSYNC",
- "FETCHCOMMAND_SFTP",
- "GENTOO_MIRRORS",
- "NOCONFMEM",
- "O",
- "PORTAGE_BACKGROUND",
- "PORTAGE_BACKGROUND_UNMERGE",
- "PORTAGE_BINHOST",
- "PORTAGE_BINPKG_FORMAT",
- "PORTAGE_BUILDDIR_LOCKED",
- "PORTAGE_CHECKSUM_FILTER",
- "PORTAGE_ELOG_CLASSES",
- "PORTAGE_ELOG_MAILFROM",
- "PORTAGE_ELOG_MAILSUBJECT",
- "PORTAGE_ELOG_MAILURI",
- "PORTAGE_ELOG_SYSTEM",
- "PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS",
- "PORTAGE_FETCH_RESUME_MIN_SIZE",
- "PORTAGE_GPG_DIR",
- "PORTAGE_GPG_KEY",
- "PORTAGE_GPG_SIGNING_COMMAND",
- "PORTAGE_IONICE_COMMAND",
- "PORTAGE_PACKAGE_EMPTY_ABORT",
- "PORTAGE_REPO_DUPLICATE_WARN",
- "PORTAGE_RO_DISTDIRS",
- "PORTAGE_RSYNC_EXTRA_OPTS",
- "PORTAGE_RSYNC_OPTS",
- "PORTAGE_RSYNC_RETRIES",
- "PORTAGE_SSH_OPTS",
- "PORTAGE_SYNC_STALE",
- "PORTAGE_USE",
- "PORTAGE_LOG_FILTER_FILE_CMD",
- "PORTAGE_LOGDIR",
- "PORTAGE_LOGDIR_CLEAN",
- "QUICKPKG_DEFAULT_OPTS",
- "REPOMAN_DEFAULT_OPTS",
- "RESUMECOMMAND",
- "RESUMECOMMAND_FTP",
- "RESUMECOMMAND_HTTP",
- "RESUMECOMMAND_HTTPS",
- "RESUMECOMMAND_RSYNC",
- "RESUMECOMMAND_SFTP",
- "UNINSTALL_IGNORE",
- "USE_EXPAND_HIDDEN",
- "USE_ORDER",
- "__PORTAGE_HELPER",
- ]
-
- # No longer supported variables
- environ_filter += ["SYNC"]
-
- environ_filter = frozenset(environ_filter)
+ environ_filter = frozenset(
+ (
+ "DEPEND",
+ "RDEPEND",
+ "PDEPEND",
+ "SRC_URI",
+ "BDEPEND",
+ "IDEPEND",
+ # misc variables inherited from the calling environment
+ "INFOPATH",
+ "MANPATH",
+ "USER",
++ # BEGIN PREFIX LOCAL
++ "HOST",
++ "GROUP",
++ "LOGNAME",
++ "MAIL",
++ "REMOTEHOST",
++ "SECURITYSESSIONID",
++ "TERMINFO",
++ "TERM_PROGRAM",
++ "TERM_PROGRAM_VERSION",
++ "VENDOR",
++ "__CF_USER_TEXT_ENCODING",
++ # END PREFIX LOCAL
+ # variables that break bash
+ "HISTFILE",
+ "POSIXLY_CORRECT",
+ # portage config variables and variables set directly by portage
+ "ACCEPT_CHOSTS",
+ "ACCEPT_KEYWORDS",
+ "ACCEPT_PROPERTIES",
+ "ACCEPT_RESTRICT",
+ "AUTOCLEAN",
+ "BINPKG_COMPRESS",
+ "BINPKG_COMPRESS_FLAGS",
+ "CLEAN_DELAY",
+ "COLLISION_IGNORE",
+ "CONFIG_PROTECT",
+ "CONFIG_PROTECT_MASK",
+ "EGENCACHE_DEFAULT_OPTS",
+ "EMERGE_DEFAULT_OPTS",
+ "EMERGE_LOG_DIR",
+ "EMERGE_WARNING_DELAY",
+ "FETCHCOMMAND",
+ "FETCHCOMMAND_FTP",
+ "FETCHCOMMAND_HTTP",
+ "FETCHCOMMAND_HTTPS",
+ "FETCHCOMMAND_RSYNC",
+ "FETCHCOMMAND_SFTP",
+ "GENTOO_MIRRORS",
+ "NOCONFMEM",
+ "O",
+ "PORTAGE_BACKGROUND",
+ "PORTAGE_BACKGROUND_UNMERGE",
+ "PORTAGE_BINHOST",
+ "PORTAGE_BINPKG_FORMAT",
+ "PORTAGE_BUILDDIR_LOCKED",
+ "PORTAGE_CHECKSUM_FILTER",
+ "PORTAGE_ELOG_CLASSES",
+ "PORTAGE_ELOG_MAILFROM",
+ "PORTAGE_ELOG_MAILSUBJECT",
+ "PORTAGE_ELOG_MAILURI",
+ "PORTAGE_ELOG_SYSTEM",
+ "PORTAGE_FETCH_CHECKSUM_TRY_MIRRORS",
+ "PORTAGE_FETCH_RESUME_MIN_SIZE",
+ "PORTAGE_GPG_DIR",
+ "PORTAGE_GPG_KEY",
+ "PORTAGE_GPG_SIGNING_COMMAND",
+ "PORTAGE_IONICE_COMMAND",
+ "PORTAGE_PACKAGE_EMPTY_ABORT",
+ "PORTAGE_REPO_DUPLICATE_WARN",
+ "PORTAGE_RO_DISTDIRS",
+ "PORTAGE_RSYNC_EXTRA_OPTS",
+ "PORTAGE_RSYNC_OPTS",
+ "PORTAGE_RSYNC_RETRIES",
+ "PORTAGE_SSH_OPTS",
+ "PORTAGE_SYNC_STALE",
+ "PORTAGE_USE",
+ "PORTAGE_LOG_FILTER_FILE_CMD",
+ "PORTAGE_LOGDIR",
+ "PORTAGE_LOGDIR_CLEAN",
+ "QUICKPKG_DEFAULT_OPTS",
+ "REPOMAN_DEFAULT_OPTS",
+ "RESUMECOMMAND",
+ "RESUMECOMMAND_FTP",
+ "RESUMECOMMAND_HTTP",
+ "RESUMECOMMAND_HTTPS",
+ "RESUMECOMMAND_RSYNC",
+ "RESUMECOMMAND_SFTP",
+ "UNINSTALL_IGNORE",
+ "USE_EXPAND_HIDDEN",
+ "USE_ORDER",
+ "__PORTAGE_HELPER",
+ # No longer supported variables
+ "SYNC",
+ )
+ )
# Variables that are not allowed to have per-repo or per-package
# settings.
diff --cc lib/portage/package/ebuild/doebuild.py
index e9d7a858f,8b65a7862..48e9c9896
--- a/lib/portage/package/ebuild/doebuild.py
+++ b/lib/portage/package/ebuild/doebuild.py
@@@ -324,30 -305,20 +311,25 @@@ def _doebuild_path(settings, eapi=None)
for x in portage_bin_path:
path.append(os.path.join(x, "ebuild-helpers"))
- path.extend(prerootpath)
-
- for prefix in prefixes:
- prefix = prefix if prefix else "/"
- for x in (
- "usr/local/sbin",
- "usr/local/bin",
- "usr/sbin",
- "usr/bin",
- "sbin",
- "bin",
- ):
- # Respect order defined in ROOTPATH
- x_abs = os.path.join(prefix, x)
- if x_abs not in rootpath_set:
- path.append(x_abs)
- path.extend(rootpath)
+ # If PATH is set in env.d, ignore PATH from the calling environment.
+ # This allows packages to update our PATH as they get installed.
+ if "PATH" in settings.configdict["env.d"]:
+ settings.configdict["env"].pop("PATH", None)
+
+ if "PATH" in settings:
+ pathset = set(path)
+ for p in settings["PATH"].split(":"):
+ # Avoid duplicate entries.
+ if p not in pathset:
+ path.append(p)
+ pathset.add(p)
+ # BEGIN PREFIX LOCAL: append EXTRA_PATH from make.globals
+ extrapath = [x for x in settings.get("EXTRA_PATH", "").split(":") if x]
+ path.extend(extrapath)
+ # END PREFIX LOCAL
+
settings["PATH"] = ":".join(path)
diff --cc lib/portage/tests/runTests.py
index da6d83e85,bf4c2a7c5..17c244dbe
mode 100755,100644..100644
--- a/lib/portage/tests/runTests.py
+++ b/lib/portage/tests/runTests.py
diff --cc lib/portage/util/__init__.py
index 6855a87f1,1f8c9e94f..0be05ab03
--- a/lib/portage/util/__init__.py
+++ b/lib/portage/util/__init__.py
@@@ -51,8 -72,9 +72,11 @@@ import strin
import sys
import traceback
import glob
+ from typing import Optional, TextIO
import portage
++# PREFIX LOCAL
++from portage.const import EPREFIX
portage.proxy.lazyimport.lazyimport(
globals(),
@@@ -2015,16 -2007,19 +2009,25 @@@ def getlibpaths(root, env=None)
""" Return a list of paths that are used for library lookups """
if env is None:
env = os.environ
+ # BEGIN PREFIX LOCAL:
+ # For Darwin, match LD_LIBRARY_PATH with DYLD_LIBRARY_PATH.
+ # We don't need any host OS lib paths in Prefix, so just going with
+ # the prefixed one is fine.
# the following is based on the information from ld.so(8)
rval = env.get("LD_LIBRARY_PATH", "").split(":")
- rval.extend(read_ld_so_conf(os.path.join(root, "etc", "ld.so.conf")))
- rval.append("/usr/lib")
- rval.append("/lib")
+ rval.extend(env.get("DYLD_LIBRARY_PATH", "").split(":"))
+ rval.extend(read_ld_so_conf(os.path.join(root, EPREFIX, "etc", "ld.so.conf")))
+ rval.append(f"{EPREFIX}/usr/lib")
+ rval.append(f"{EPREFIX}/lib")
+ # END PREFIX LOCAL
return [normalize_path(x) for x in rval if x]
+
+
+ def no_color(settings: Optional[dict]) -> bool:
+ # In several years (2026+), we can cleanup NOCOLOR support, and just support NO_COLOR.
+ has_color: str = settings.get("NO_COLOR")
+ nocolor: str = settings.get("NOCOLOR", "false").lower()
+ if has_color is None:
+ return nocolor in ("yes", "true")
+ return bool(has_color)
diff --cc lib/portage/util/_info_files.py
index 5d4aff1d7,45d674b9b..a5b2b30b4
--- a/lib/portage/util/_info_files.py
+++ b/lib/portage/util/_info_files.py
@@@ -14,9 -12,7 +14,8 @@@ from portage.const import EPREFI
def chk_updated_info_files(root, infodirs, prev_mtimes):
-
- if os.path.exists("/usr/bin/install-info"):
+ # PREFIX LOCAL
+ if os.path.exists(EPREFIX + "/usr/bin/install-info"):
out = portage.output.EOutput()
regen_infodirs = []
for z in infodirs:
@@@ -80,9 -75,8 +79,9 @@@
try:
proc = subprocess.Popen(
[
- "/usr/bin/install-info",
+ # PREFIX LOCAL
- "%s/usr/bin/install-info", EPREFIX,
- "--dir-file=%s" % os.path.join(inforoot, "dir"),
++ f"{EPREFIX}/usr/bin/install-info",
+ f"--dir-file={os.path.join(inforoot, 'dir')}",
os.path.join(inforoot, x),
],
env=dict(os.environ, LANG="C", LANGUAGE="C"),
next reply other threads:[~2023-06-17 8:41 UTC|newest]
Thread overview: 195+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-17 8:41 Fabian Groffen [this message]
-- strict thread matches above, loose matches on Subject: below --
2024-02-25 9:40 [gentoo-commits] proj/portage:prefix commit in: / Fabian Groffen
2024-02-22 7:27 Fabian Groffen
2024-01-18 10:22 Fabian Groffen
2024-01-18 9:36 Fabian Groffen
2023-12-03 10:10 Fabian Groffen
2023-12-03 9:54 Fabian Groffen
2023-12-03 9:54 Fabian Groffen
2023-12-03 9:54 Fabian Groffen
2023-11-24 20:18 Fabian Groffen
2023-11-24 20:06 Fabian Groffen
2023-11-24 20:06 Fabian Groffen
2023-06-22 8:47 Fabian Groffen
2023-06-17 9:04 Fabian Groffen
2022-07-28 17:38 Fabian Groffen
2022-07-27 19:20 Fabian Groffen
2022-07-26 19:39 Fabian Groffen
2022-07-25 15:20 Fabian Groffen
2022-07-24 19:27 Fabian Groffen
2022-07-24 14:01 Fabian Groffen
2022-07-24 9:45 Fabian Groffen
2022-01-14 10:40 Fabian Groffen
2022-01-14 10:32 Fabian Groffen
2021-07-06 7:10 Fabian Groffen
2021-04-16 13:37 Fabian Groffen
2021-01-24 9:02 Fabian Groffen
2021-01-04 10:48 Fabian Groffen
2020-12-07 17:28 Fabian Groffen
2020-12-07 16:46 Fabian Groffen
2020-11-23 7:48 Fabian Groffen
2020-11-22 11:15 Fabian Groffen
2020-09-26 11:29 Fabian Groffen
2020-08-02 12:33 Fabian Groffen
2020-06-02 18:55 Fabian Groffen
2020-01-08 19:14 Fabian Groffen
2019-07-01 13:11 Fabian Groffen
2019-05-30 9:20 Fabian Groffen
2019-02-28 12:31 Fabian Groffen
2019-01-11 10:19 Fabian Groffen
2019-01-07 10:22 Fabian Groffen
2018-12-23 11:14 Fabian Groffen
2018-12-12 18:54 Fabian Groffen
2018-08-04 6:56 Fabian Groffen
2018-06-25 8:34 Fabian Groffen
2018-06-17 14:38 Fabian Groffen
2018-06-17 14:38 Fabian Groffen
2018-05-28 15:24 Fabian Groffen
2018-05-25 19:44 Fabian Groffen
2018-05-25 19:44 Fabian Groffen
2018-05-18 19:46 Fabian Groffen
2017-12-12 8:19 Fabian Groffen
2017-10-29 14:51 Fabian Groffen
2017-10-03 7:32 Fabian Groffen
2017-09-22 10:08 Fabian Groffen
2017-08-21 13:27 Fabian Groffen
2017-08-13 7:21 Fabian Groffen
2017-05-23 13:34 Fabian Groffen
2017-03-25 9:12 Fabian Groffen
2017-03-24 19:09 Fabian Groffen
2017-03-24 7:43 Fabian Groffen
2017-03-23 17:46 Fabian Groffen
2017-03-23 17:32 Fabian Groffen
2017-03-23 17:23 Fabian Groffen
2017-03-23 15:38 Fabian Groffen
2017-03-17 8:25 Fabian Groffen
2017-03-02 8:48 Fabian Groffen
2017-03-02 8:18 Fabian Groffen
2017-02-23 14:05 Fabian Groffen
2017-01-27 15:08 Fabian Groffen
2017-01-27 15:08 Fabian Groffen
2016-03-20 19:31 Fabian Groffen
2016-02-21 16:17 Fabian Groffen
2016-02-21 16:17 Fabian Groffen
2016-02-18 19:35 Fabian Groffen
2016-02-18 19:35 Fabian Groffen
2015-06-20 7:12 Fabian Groffen
2015-06-09 18:30 Fabian Groffen
2015-06-09 18:01 Fabian Groffen
2015-06-04 19:47 Fabian Groffen
2015-04-05 9:15 Fabian Groffen
2014-11-12 17:31 Fabian Groffen
2014-10-02 18:48 Fabian Groffen
2014-09-28 17:52 Fabian Groffen
2014-05-06 19:32 Fabian Groffen
2014-05-06 19:18 Fabian Groffen
2014-04-22 19:52 Fabian Groffen
2014-02-06 21:09 Fabian Groffen
2014-01-06 9:47 Fabian Groffen
2013-09-24 17:29 Fabian Groffen
2013-09-20 17:59 Fabian Groffen
2013-09-18 18:34 Fabian Groffen
2013-09-13 18:02 Fabian Groffen
2013-08-10 20:54 Fabian Groffen
2013-07-10 5:31 Fabian Groffen
2013-07-08 19:32 Fabian Groffen
2013-06-29 5:41 Fabian Groffen
2013-06-27 17:20 Fabian Groffen
2013-06-12 9:02 Fabian Groffen
2013-06-09 15:53 Fabian Groffen
2013-05-04 18:55 Fabian Groffen
2013-04-02 16:57 Fabian Groffen
2013-03-31 19:03 Fabian Groffen
2013-03-31 19:00 Fabian Groffen
2013-03-24 8:36 Fabian Groffen
2013-03-23 19:54 Fabian Groffen
2013-02-28 19:29 Fabian Groffen
2013-02-07 20:01 Fabian Groffen
2013-01-27 21:41 Fabian Groffen
2013-01-27 21:41 Fabian Groffen
2013-01-13 10:26 Fabian Groffen
2013-01-10 21:02 Fabian Groffen
2013-01-05 18:14 Fabian Groffen
2012-12-26 14:48 Fabian Groffen
2012-12-02 15:47 Fabian Groffen
2012-12-02 15:36 Fabian Groffen
2012-12-02 15:33 Fabian Groffen
2012-12-02 15:33 Fabian Groffen
2012-12-02 15:33 Fabian Groffen
2012-12-02 13:12 Fabian Groffen
2012-12-02 12:59 Fabian Groffen
2012-11-04 10:48 Fabian Groffen
2012-10-22 17:25 Fabian Groffen
2012-10-02 12:02 Fabian Groffen
2012-09-30 11:22 Fabian Groffen
2012-09-26 18:26 Fabian Groffen
2012-09-12 18:18 Fabian Groffen
2012-09-09 7:40 Fabian Groffen
2012-09-06 18:14 Fabian Groffen
2012-08-27 6:44 Fabian Groffen
2012-08-12 7:50 Fabian Groffen
2012-07-19 16:25 Fabian Groffen
2012-07-06 7:05 Fabian Groffen
2012-04-23 19:23 Fabian Groffen
2012-04-03 18:04 Fabian Groffen
2012-03-31 19:31 Fabian Groffen
2012-03-01 20:32 Fabian Groffen
2012-02-19 9:58 Fabian Groffen
2012-02-09 8:01 Fabian Groffen
2012-01-10 17:45 Fabian Groffen
2011-12-31 16:45 Fabian Groffen
2011-12-26 9:12 Fabian Groffen
2011-12-23 9:51 Fabian Groffen
2011-12-22 9:51 Fabian Groffen
2011-12-19 18:30 Fabian Groffen
2011-12-14 15:25 Fabian Groffen
2011-12-10 11:28 Fabian Groffen
2011-12-09 20:33 Fabian Groffen
2011-12-02 20:31 Fabian Groffen
2011-12-02 19:20 Fabian Groffen
2011-12-02 19:19 Fabian Groffen
2011-12-02 19:18 Fabian Groffen
2011-12-02 18:03 Fabian Groffen
2011-10-21 17:34 Fabian Groffen
2011-10-21 17:34 Fabian Groffen
2011-10-20 20:28 Fabian Groffen
2011-10-20 17:08 Fabian Groffen
2011-10-20 16:38 Fabian Groffen
2011-10-17 18:36 Fabian Groffen
2011-10-16 13:59 Fabian Groffen
2011-10-15 18:27 Fabian Groffen
2011-10-13 6:52 Fabian Groffen
2011-09-23 18:38 Fabian Groffen
2011-09-23 18:23 Fabian Groffen
2011-09-20 18:25 Fabian Groffen
2011-09-14 18:43 Fabian Groffen
2011-09-14 18:38 Fabian Groffen
2011-09-13 17:41 Fabian Groffen
2011-08-31 18:39 Fabian Groffen
2011-08-30 18:45 Fabian Groffen
2011-08-29 19:03 Fabian Groffen
2011-08-25 20:25 Fabian Groffen
2011-08-20 17:50 Fabian Groffen
2011-07-26 17:35 Fabian Groffen
2011-07-17 9:48 Fabian Groffen
2011-07-17 8:12 Fabian Groffen
2011-07-01 17:44 Fabian Groffen
2011-06-14 15:39 Fabian Groffen
2011-06-06 17:12 Fabian Groffen
2011-05-28 8:29 Fabian Groffen
2011-05-27 17:41 Fabian Groffen
2011-05-14 13:59 Fabian Groffen
2011-05-02 17:41 Fabian Groffen
2011-04-24 12:08 Fabian Groffen
2011-04-15 18:27 Fabian Groffen
2011-04-15 18:27 Fabian Groffen
2011-03-28 16:52 Fabian Groffen
2011-03-23 19:26 Fabian Groffen
2011-03-17 19:08 Fabian Groffen
2011-03-13 14:45 Fabian Groffen
2011-03-09 19:44 Fabian Groffen
2011-02-26 21:15 Fabian Groffen
2011-02-10 18:46 Fabian Groffen
2011-02-10 18:44 Fabian Groffen
2011-02-10 18:20 Fabian Groffen
2011-02-05 12:25 Fabian Groffen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1686991227.46fc4d8a2205d98584c4198070e42933c1cd1e62.grobian@gentoo \
--to=grobian@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox